@@ -240,23 +240,23 @@ export function AddConnectorModal({
240240 : `Configure the ${ connectorConfig ?. name } connector settings` }
241241 </ ModalDescription >
242242
243- < ModalBody >
243+ < ModalBody className = 'pb-3' >
244244 { step === 'select-type' ? (
245- < div className = 'flex flex-col gap-2' >
246- < div className = 'flex items-center gap-2 rounded-lg border border-[var(--border)] bg-transparent px-2 py-[5px] transition-colors duration-100 dark:bg-[var(--surface-4)] dark: hover-hover:border-[var(--border-1)] dark: hover-hover:bg-[var(--surface-5 )]' >
245+ < div className = 'flex min-h-0 flex-col gap-2' >
246+ < div className = 'flex items-center gap-2 rounded-lg border border-[var(--border)] bg-[var(--surface-2)] px-2 py-[5px] transition-colors duration-100 hover-hover:border-[var(--border-1)] hover-hover:bg-[var(--surface-3 )]' >
247247 < Search
248- className = 'size-[14px] flex-shrink-0 text-[var(--text-tertiary )]'
248+ className = 'size-[14px] flex-shrink-0 text-[var(--text-icon )]'
249249 strokeWidth = { 2 }
250250 />
251251 < Input
252252 placeholder = 'Search sources...'
253253 value = { searchTerm }
254254 onChange = { ( e ) => setSearchTerm ( e . target . value ) }
255- className = 'h-auto flex-1 border-0 bg-transparent p-0 font-base leading-none placeholder:text-[var(--text-tertiary)] focus-visible:ring-0 focus-visible:ring-offset-0'
255+ className = 'h-auto flex-1 border-0 bg-transparent p-0 leading-none placeholder:text-[var(--text-tertiary)] focus-visible:ring-0 focus-visible:ring-offset-0'
256256 />
257257 </ div >
258- < div className = 'min-h-[400px] overflow-y-auto' >
259- < div className = 'flex flex-col gap-0.5' >
258+ < div className = 'min-h-[400px] overflow-y-auto [scrollbar-gutter:stable] ' >
259+ < div className = 'flex flex-col gap-0.5 pr-1 ' >
260260 { filteredEntries . map ( ( [ type , config ] ) => (
261261 < ConnectorTypeCard
262262 key = { type }
@@ -265,7 +265,7 @@ export function AddConnectorModal({
265265 />
266266 ) ) }
267267 { filteredEntries . length === 0 && (
268- < div className = 'py-4 text-center text-[var(--text-muted)] text-sm ' >
268+ < div className = 'rounded-lg bg-[var(--surface-3)] px-3 py-8 text-center text-[var(--text-muted)] text-small ' >
269269 { CONNECTOR_ENTRIES . length === 0
270270 ? 'No connectors available.'
271271 : `No sources found matching "${ searchTerm } "` }
@@ -276,7 +276,6 @@ export function AddConnectorModal({
276276 </ div >
277277 ) : connectorConfig ? (
278278 < div className = 'flex flex-col gap-3' >
279- { /* Auth: API key input or OAuth credential selection */ }
280279 { isApiKeyMode ? (
281280 < div className = 'flex flex-col gap-2' >
282281 < Label >
@@ -336,7 +335,6 @@ export function AddConnectorModal({
336335 </ div >
337336 ) }
338337
339- { /* Config fields */ }
340338 { connectorConfig . configFields . map ( ( field ) => {
341339 if ( ! isFieldVisible ( field ) ) return null
342340
@@ -357,13 +355,14 @@ export function AddConnectorModal({
357355 { field . description && (
358356 < Tooltip . Root >
359357 < Tooltip . Trigger asChild >
360- < button
358+ < Button
361359 type = 'button'
362- className = 'flex size-[14px] cursor-help items-center justify-center text-[var(--text-muted)] transition-colors hover-hover:text-[var(--text-secondary)]'
360+ variant = 'ghost'
361+ className = 'flex size-[14px] cursor-help items-center justify-center p-0 text-[var(--text-muted)] transition-colors hover-hover:text-[var(--text-secondary)]'
363362 aria-label = { `About ${ field . title } ` }
364363 >
365364 < Info className = 'size-[12px]' />
366- </ button >
365+ </ Button >
367366 </ Tooltip . Trigger >
368367 < Tooltip . Content side = 'top' > { field . description } </ Tooltip . Content >
369368 </ Tooltip . Root >
@@ -372,13 +371,14 @@ export function AddConnectorModal({
372371 { hasCanonicalPair && canonicalId && (
373372 < Tooltip . Root >
374373 < Tooltip . Trigger asChild >
375- < button
374+ < Button
376375 type = 'button'
377- className = 'flex size-[18px] items-center justify-center rounded-[3px] text-[var(--text-muted)] transition-colors hover-hover:bg-[var(--surface-3)] hover-hover:text-[var(--text-secondary)]'
376+ variant = 'ghost'
377+ className = 'flex size-[18px] items-center justify-center rounded-[3px] p-0 text-[var(--text-muted)] transition-colors hover-hover:bg-[var(--surface-3)] hover-hover:text-[var(--text-secondary)]'
378378 onClick = { ( ) => toggleCanonicalMode ( canonicalId ) }
379379 >
380380 < ArrowLeftRight className = 'size-[12px]' />
381- </ button >
381+ </ Button >
382382 </ Tooltip . Trigger >
383383 < Tooltip . Content side = 'top' >
384384 { field . mode === 'basic'
@@ -429,48 +429,50 @@ export function AddConnectorModal({
429429 )
430430 } ) }
431431
432- { /* Tag definitions (opt-out) */ }
433432 { connectorConfig . tagDefinitions && connectorConfig . tagDefinitions . length > 0 && (
434433 < div className = 'flex flex-col gap-2' >
435434 < Label > Metadata Tags</ Label >
436- { connectorConfig . tagDefinitions . map ( ( tagDef ) => (
437- < div
438- key = { tagDef . id }
439- role = 'checkbox'
440- aria-checked = { ! disabledTagIds . has ( tagDef . id ) }
441- tabIndex = { 0 }
442- className = 'flex cursor-pointer items-center gap-2 rounded-sm p-0.5 text-small'
443- onClick = { ( ) => toggleTagDefinition ( tagDef . id ) }
444- onKeyDown = { ( event ) => {
445- if ( event . target !== event . currentTarget ) return
446- handleKeyboardActivation ( event , ( ) => toggleTagDefinition ( tagDef . id ) )
447- } }
448- >
449- < Checkbox
450- checked = { ! disabledTagIds . has ( tagDef . id ) }
451- onClick = { ( e ) => e . stopPropagation ( ) }
452- onCheckedChange = { ( checked ) => {
453- setDisabledTagIds ( ( prev ) => {
454- const next = new Set ( prev )
455- if ( checked ) {
456- next . delete ( tagDef . id )
457- } else {
458- next . add ( tagDef . id )
459- }
460- return next
461- } )
435+ < div className = 'flex flex-col gap-0.5 rounded-lg border border-[var(--border-muted)] bg-[var(--surface-2)] p-1' >
436+ { connectorConfig . tagDefinitions . map ( ( tagDef ) => (
437+ < div
438+ key = { tagDef . id }
439+ role = 'checkbox'
440+ aria-checked = { ! disabledTagIds . has ( tagDef . id ) }
441+ tabIndex = { 0 }
442+ className = 'flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 text-small transition-colors hover-hover:bg-[var(--surface-active)]'
443+ onClick = { ( ) => toggleTagDefinition ( tagDef . id ) }
444+ onKeyDown = { ( event ) => {
445+ if ( event . target !== event . currentTarget ) return
446+ handleKeyboardActivation ( event , ( ) => toggleTagDefinition ( tagDef . id ) )
462447 } }
463- />
464- < span className = 'text-[var(--text-primary)]' > { tagDef . displayName } </ span >
465- < span className = 'text-[var(--text-muted)] text-xs' >
466- ({ tagDef . fieldType } )
467- </ span >
468- </ div >
469- ) ) }
448+ >
449+ < Checkbox
450+ checked = { ! disabledTagIds . has ( tagDef . id ) }
451+ onClick = { ( e ) => e . stopPropagation ( ) }
452+ onCheckedChange = { ( checked ) => {
453+ setDisabledTagIds ( ( prev ) => {
454+ const next = new Set ( prev )
455+ if ( checked ) {
456+ next . delete ( tagDef . id )
457+ } else {
458+ next . add ( tagDef . id )
459+ }
460+ return next
461+ } )
462+ } }
463+ />
464+ < span className = 'min-w-0 flex-1 truncate text-[var(--text-primary)]' >
465+ { tagDef . displayName }
466+ </ span >
467+ < span className = 'flex-shrink-0 text-[var(--text-muted)] text-xs' >
468+ { tagDef . fieldType }
469+ </ span >
470+ </ div >
471+ ) ) }
472+ </ div >
470473 </ div >
471474 ) }
472475
473- { /* Sync interval */ }
474476 < div className = 'flex flex-col gap-2' >
475477 < Label > Sync Frequency</ Label >
476478 < ButtonGroup
@@ -550,14 +552,14 @@ function ConnectorTypeCard({ config, onClick }: ConnectorTypeCardProps) {
550552 return (
551553 < button
552554 type = 'button'
553- className = 'flex items-center gap-2.5 rounded-md px-2.5 py-2 text-left transition-colors hover-hover:bg-[var(--surface-3 )]'
555+ className = 'group flex items-center gap-2.5 rounded-lg p-2 text-left transition-colors hover-hover:bg-[var(--surface-active )]'
554556 onClick = { onClick }
555557 >
556- < Icon className = 'size-[18px] flex-shrink-0' / >
557- < div className = 'flex min-w-0 flex-col gap-[1px]' >
558- < span className = 'truncate font-medium text-[var(--text-primary)] text-small' >
559- { config . name }
560- </ span >
558+ < div className = 'flex size-9 flex-shrink-0 items-center justify-center rounded-lg bg-[var(--surface-4)] transition-colors group-hover:bg-[var(--surface-5)]' >
559+ < Icon className = 'size-[18px] text-[var(--text-secondary)]' / >
560+ </ div >
561+ < div className = 'flex min-w-0 flex-1 flex-col gap-[1px]' >
562+ < span className = 'truncate text-[14px] text-[var(--text-body)]' > { config . name } < /span >
561563 < span className = 'truncate text-[var(--text-muted)] text-xs' > { config . description } </ span >
562564 </ div >
563565 </ button >
0 commit comments