diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/knowledge-base-selector/knowledge-base-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/knowledge-base-selector/knowledge-base-selector.tsx index a9a25f64059..e7d794bf22b 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/knowledge-base-selector/knowledge-base-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/knowledge-base-selector/knowledge-base-selector.tsx @@ -1,7 +1,7 @@ 'use client' import { useCallback, useMemo } from 'react' -import { ChipCombobox, ChipTag, type ComboboxOption } from '@sim/emcn' +import { ChipTag, Combobox, type ComboboxOption } from '@sim/emcn' import { X } from '@sim/emcn/icons' import { useQueries } from '@tanstack/react-query' import { useParams } from 'next/navigation' @@ -211,7 +211,7 @@ export function KnowledgeBaseSelector({ )} - ({ })) vi.mock('@sim/emcn', () => ({ + Button: ({ children, ...props }: React.ButtonHTMLAttributes) => ( + + ), Chip: ({ children, disabled, @@ -43,7 +46,7 @@ vi.mock('@sim/emcn', () => ({ {children} ), - ChipCombobox: ({ + Combobox: ({ options, value, placeholder, @@ -60,21 +63,6 @@ vi.mock('@sim/emcn', () => ({ ))} ), - ChipDropdown: ({ - options, - value, - placeholder, - }: { - options: Array<{ value: string; label: string }> - value?: string - placeholder?: string - }) => ( -
- {options.map((option) => ( - {option.label} - ))} -
- ), Label: ({ children }: { children?: React.ReactNode }) => {children}, Tooltip: { Root: ({ children }: { children?: React.ReactNode }) => <>{children}, diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/model-fallback-list/model-fallback-list.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/model-fallback-list/model-fallback-list.tsx index 15b7bcefdd1..6ddf80cb533 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/model-fallback-list/model-fallback-list.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/model-fallback-list/model-fallback-list.tsx @@ -1,7 +1,7 @@ 'use client' import { memo, useCallback, useEffect, useMemo, useRef } from 'react' -import { Chip, ChipCombobox, ChipDropdown, type ComboboxOption, Label, Tooltip } from '@sim/emcn' +import { Button, Chip, Combobox, type ComboboxOption, Label, Tooltip } from '@sim/emcn' import { ChevronDown, ChevronUp, Plus, Trash } from '@sim/emcn/icons' import { generateShortId } from '@sim/utils/id' import { useParams } from 'next/navigation' @@ -123,34 +123,39 @@ const FallbackRow = memo(function FallbackRow({ const apiKeyValue = isWholeEnvVarReference(row.apiKey) ? row.apiKey : '' return ( -
-
- {ordinalChoiceLabel(index)} -
+
+
+ {ordinalChoiceLabel(index)} +
{canMove && ( <> - onMove(row.id, -1)} disabled={readOnly || index === 0} aria-label='Move up' - /> + > + + Move up - onMove(row.id, 1)} disabled={readOnly || isLast} aria-label='Move down' - /> + > + + Move down @@ -158,20 +163,24 @@ const FallbackRow = memo(function FallbackRow({ )} - onRemove(row.id)} disabled={readOnly} aria-label='Remove fallback model' - /> + > + + Remove
-
- + onChangeModel(row.id, model)} @@ -184,9 +193,9 @@ const FallbackRow = memo(function FallbackRow({ emptyMessage='No models available' /> {needsApiKey && ( -
- - + + onChangeApiKey(row.id, apiKey)} @@ -201,9 +210,9 @@ const FallbackRow = memo(function FallbackRow({
)} {tuningFields.map(({ knob, options }) => ( -
- - + + onChangeTuning(row.id, knob, value)} @@ -387,7 +396,7 @@ export function ModelFallbackList({ ) return ( -
+
{rows.map((row, index) => ( = MAX_FALLBACK_MODELS} > diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/workspace-folder-selector/workspace-folder-selector.test.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/workspace-folder-selector/workspace-folder-selector.test.tsx index a4ce92a823d..54d0fc6d600 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/workspace-folder-selector/workspace-folder-selector.test.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/workspace-folder-selector/workspace-folder-selector.test.tsx @@ -20,7 +20,7 @@ vi.mock('next/navigation', () => ({ })) vi.mock('@sim/emcn', () => ({ - ChipCombobox: ({ + Combobox: ({ options, disabled, isLoading, diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/workspace-folder-selector/workspace-folder-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/workspace-folder-selector/workspace-folder-selector.tsx index 45e74f7074e..bf16b037dca 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/workspace-folder-selector/workspace-folder-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/workspace-folder-selector/workspace-folder-selector.tsx @@ -1,7 +1,7 @@ 'use client' import { useMemo } from 'react' -import { ChipCombobox } from '@sim/emcn' +import { Combobox } from '@sim/emcn' import { useParams } from 'next/navigation' import type { FolderResourceType } from '@/lib/api/contracts/folders' import { parseFolderPath } from '@/lib/folders/paths' @@ -58,7 +58,7 @@ export function WorkspaceFolderSelector({ }, [folders, isPlaceholderData, required, subBlock.multiSelect, subBlock.placeholder]) return ( - { diff --git a/apps/sim/components/mcp/mcp-selectors.test.tsx b/apps/sim/components/mcp/mcp-selectors.test.tsx index 62536e82b35..9918083fcbb 100644 --- a/apps/sim/components/mcp/mcp-selectors.test.tsx +++ b/apps/sim/components/mcp/mcp-selectors.test.tsx @@ -1,11 +1,11 @@ /** @vitest-environment node */ import type { ComponentProps } from 'react' -import type { ChipCombobox } from '@sim/emcn' +import type { Combobox } from '@sim/emcn' import { renderToStaticMarkup } from 'react-dom/server' import { beforeEach, describe, expect, it, vi } from 'vitest' const mocks = vi.hoisted(() => ({ - combobox: vi.fn<(props: ComponentProps) => null>(() => null), + combobox: vi.fn<(props: ComponentProps) => null>(() => null), setValue: vi.fn(), longInput: vi.fn(() => null), shortInput: vi.fn(() => null), @@ -38,7 +38,7 @@ vi.mock('@/stores/workflow-diff/store', () => ({ }, }), })) -vi.mock('@sim/emcn', () => ({ ChipCombobox: mocks.combobox, Label: () => null })) +vi.mock('@sim/emcn', () => ({ Combobox: mocks.combobox, Label: () => null })) vi.mock( '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/long-input/long-input', () => ({ LongInput: mocks.longInput }) diff --git a/packages/emcn/src/components/combobox/combobox.dom.test.tsx b/packages/emcn/src/components/combobox/combobox.dom.test.tsx index f410e4a96ca..a722d3229f5 100644 --- a/packages/emcn/src/components/combobox/combobox.dom.test.tsx +++ b/packages/emcn/src/components/combobox/combobox.dom.test.tsx @@ -76,6 +76,22 @@ afterEach(() => { }) describe('Combobox onOpenChange', () => { + it('preserves trigger styling when an editable input adds padding for a clear button', () => { + render( + + ) + + const control = trigger() + expect(control.classList.contains('min-w-0')).toBe(true) + expect(control.classList.contains('pr-[60px]')).toBe(true) + expect(control.classList.contains('pr-10')).toBe(false) + }) + it.each([false, true])( 'puts the field name and validation ARIA on the interactive control (editable=%s)', (editable) => { diff --git a/packages/emcn/src/components/combobox/combobox.tsx b/packages/emcn/src/components/combobox/combobox.tsx index 39858f47f67..e77eeda0007 100644 --- a/packages/emcn/src/components/combobox/combobox.tsx +++ b/packages/emcn/src/components/combobox/combobox.tsx @@ -790,13 +790,6 @@ const Combobox = memo(