@neuronection/assistant-ui 0.49.0 → 0.50.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/README.md +1 -0
- package/dist/admin-user-table.js +1 -1
- package/dist/ai-magic-fill.js +1 -1
- package/dist/{chunk-RXFQZMSF.js → chunk-3YIVKKT6.js} +3 -3
- package/dist/{chunk-RXFQZMSF.js.map → chunk-3YIVKKT6.js.map} +1 -1
- package/dist/{chunk-OIET4P2M.js → chunk-47CRUWHB.js} +4 -4
- package/dist/{chunk-OIET4P2M.js.map → chunk-47CRUWHB.js.map} +1 -1
- package/dist/{chunk-67FLOT4X.js → chunk-5U45TQJE.js} +3 -3
- package/dist/{chunk-67FLOT4X.js.map → chunk-5U45TQJE.js.map} +1 -1
- package/dist/{chunk-WY5TO6R4.js → chunk-6ANLDUGL.js} +3 -3
- package/dist/{chunk-WY5TO6R4.js.map → chunk-6ANLDUGL.js.map} +1 -1
- package/dist/{chunk-PTTJJEYJ.js → chunk-CCFVDJHU.js} +3 -3
- package/dist/{chunk-PTTJJEYJ.js.map → chunk-CCFVDJHU.js.map} +1 -1
- package/dist/{chunk-QUVVOG7K.js → chunk-MFM4W6ZO.js} +3 -3
- package/dist/{chunk-QUVVOG7K.js.map → chunk-MFM4W6ZO.js.map} +1 -1
- package/dist/chunk-SNHU4PV3.js +169 -0
- package/dist/chunk-SNHU4PV3.js.map +1 -0
- package/dist/{chunk-URLF67WR.js → chunk-SVRCZUNQ.js} +6 -2
- package/dist/chunk-SVRCZUNQ.js.map +1 -0
- package/dist/{chunk-BCKOBT7T.js → chunk-UMI4M4MF.js} +3 -3
- package/dist/{chunk-BCKOBT7T.js.map → chunk-UMI4M4MF.js.map} +1 -1
- package/dist/{chunk-YM4YN3YC.js → chunk-X6L5Z5LV.js} +3 -3
- package/dist/{chunk-YM4YN3YC.js.map → chunk-X6L5Z5LV.js.map} +1 -1
- package/dist/combobox.js +1 -1
- package/dist/index.d.ts +59 -1
- package/dist/index.js +25 -24
- package/dist/instance-mode-control.d.ts +62 -0
- package/dist/instance-mode-control.js +3 -0
- package/dist/instance-mode-control.js.map +1 -0
- package/dist/markdown-diff-view.js +1 -1
- package/dist/model-picker.js +1 -1
- package/dist/model-registry.js +1 -1
- package/dist/profile-switcher.js +1 -1
- package/dist/provider-form.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/task-assignment-picker.js +1 -1
- package/package.json +6 -2
- package/dist/chunk-URLF67WR.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/model-registry/ModelRegistry.tsx"],"names":["ModelRegistry"],"mappings":"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","file":"chunk-67FLOT4X.js","sourcesContent":["import * as React from 'react'\nimport { Check, ChevronDown, ChevronRight, ChevronUp, Pencil, Plus, X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../button'\nimport { CapabilityChips, type CapabilityDescriptor } from '../capability-chips'\nimport { Modal, ModalContent, ModalHeader, ModalTitle, ModalFooter } from '../modal/Modal'\nimport { ModelPicker, type ModelPickerProvider } from '../model-picker/ModelPicker'\nimport { Spinner } from '../spinner'\nimport { beautifyId } from '../../lib/fuzzy'\n\nexport interface ModelRegistryProvider {\n id: string\n name: string\n type?: string\n baseUrl?: string\n /** Read-only provider: hides Add/Edit/Remove (e.g. org-managed providers). */\n readOnly?: boolean\n}\n\nexport interface ModelRegistryModel {\n id: string\n providerId: string\n externalId: string\n label?: string\n caps: string[]\n enabled: boolean\n reasoningEffort?: string\n temperature?: number | null\n maxTokens?: number | null\n /** App-defined extra fields (see `extraFields`), carried verbatim. */\n extra?: Record<string, string>\n missing?: boolean\n}\n\nexport interface ModelRegistryRemoteModel {\n id: string\n caps: string[]\n}\n\nexport interface ModelRegistryDraft {\n externalId: string\n label?: string\n caps: string[]\n reasoningEffort?: string\n temperature?: number | null\n maxTokens?: number | null\n extra?: Record<string, string>\n}\n\nexport interface ModelRegistryPatch {\n label?: string\n caps?: string[]\n reasoningEffort?: string\n temperature?: number | null\n maxTokens?: number | null\n extra?: Record<string, string>\n}\n\nexport interface ModelRegistryExtraField {\n key: string\n label: string\n placeholder?: string\n /** Render a multi-line textarea instead of a single-line input. */\n multiline?: boolean\n}\n\nexport type ModelRegistryRemoteState = 'loading' | 'error' | 'ready'\n\nexport interface ModelRegistryProps {\n providers: ModelRegistryProvider[]\n models: ModelRegistryModel[]\n caps: CapabilityDescriptor[]\n expandedProviderId?: string | null\n onExpandedProviderChange: (providerId: string | null) => void\n remoteModels?: ModelRegistryRemoteModel[]\n remoteState?: ModelRegistryRemoteState\n remoteError?: string | null\n onRetryRemote?: () => void\n onAddModel: (providerId: string, draft: ModelRegistryDraft) => void\n onAddAll?: (providerId: string, drafts: ModelRegistryDraft[]) => void\n onUpdateModel: (model: ModelRegistryModel, patch: ModelRegistryPatch) => void\n onDeleteModel: (model: ModelRegistryModel) => void\n /** Toggle a model's enabled flag; renders the row checkbox when set. */\n onToggleEnabled?: (model: ModelRegistryModel, enabled: boolean) => void\n enableLabel?: string\n /** App-declared extra fields rendered in the add/edit modal (e.g. a\n * description line); values ride `extra` on Draft/Patch/Model. */\n extraFields?: ModelRegistryExtraField[]\n reasoningEffortOptions?: string[]\n addLabel?: string\n addAllLabel?: string\n addTitle?: string\n editTitle?: string\n selectModelLabel?: string\n manualIdToggleLabel?: string\n editLabel?: string\n removeLabel?: string\n missingLabel?: string\n capsLabel?: string\n /** Muted explainer under the capability chips (what they gate). */\n capsHint?: string\n searchPlaceholder?: string\n searchLabel?: string\n emptyProviderLabel?: string\n externalIdRequiredLabel?: string\n remoteEmptyLabel?: string\n remoteLoadingLabel?: string\n retryLabel?: string\n customOptionLabel?: string\n temperatureLabel?: string\n maxTokensLabel?: string\n labelLabel?: string\n reasoningEffortLabel?: string\n saveLabel?: string\n cancelLabel?: string\n addDraftLabel?: string\n providersEmptyLabel?: string\n emptyAction?: React.ReactNode\n className?: string\n}\n\nconst CUSTOM = '__custom__'\ninterface NumberFieldProps {\n label: string\n value: string\n onChange: (value: string) => void\n onClear: () => void\n step?: string\n min?: string\n max?: string\n}\n\nfunction NumberField({\n label,\n value,\n onChange,\n onClear,\n step = '1',\n min,\n max,\n}: NumberFieldProps) {\n const bump = (delta: number) => {\n const current = value.trim() === '' ? 0 : Number(value)\n if (!Number.isFinite(current)) return\n const next = current + delta\n onChange(String(min != null && next < Number(min) ? Number(min) : next))\n }\n return (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{label}</span>\n <span className=\"relative block\">\n <input\n type=\"number\"\n step={step}\n min={min}\n max={max}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 pr-16 text-sm text-[var(--as-fg)] [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n />\n <span className=\"absolute inset-y-0 right-1.5 flex items-center gap-1\">\n {value !== '' ? (\n <button\n type=\"button\"\n aria-label={`${label} clear`}\n onClick={onClear}\n className=\"cursor-pointer text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n <span className=\"flex flex-col\">\n <button\n type=\"button\"\n aria-label={`${label} increment`}\n onClick={() => bump(Number(step))}\n className=\"cursor-pointer leading-none text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n >\n <ChevronUp className=\"size-3.5\" aria-hidden />\n </button>\n <button\n type=\"button\"\n aria-label={`${label} decrement`}\n onClick={() => bump(-Number(step))}\n className=\"cursor-pointer leading-none text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n >\n <ChevronDown className=\"size-3.5\" aria-hidden />\n </button>\n </span>\n </span>\n </span>\n </label>\n )\n}\n\ninterface ModalState {\n mode: 'add' | 'edit'\n providerId: string\n externalId: string\n label: string\n caps: string[]\n reasoningEffort: string\n reasoningCustom: boolean\n temperature: string\n maxTokens: string\n extra: Record<string, string>\n extraTouched: boolean\n labelTouched: boolean\n model?: ModelRegistryModel\n manual: boolean\n}\n\nexport const ModelRegistry = React.forwardRef<HTMLDivElement, ModelRegistryProps>(\n function ModelRegistry(\n {\n providers,\n models,\n caps,\n expandedProviderId,\n onExpandedProviderChange,\n remoteModels,\n remoteState = 'ready',\n remoteError,\n onRetryRemote,\n onAddModel,\n onAddAll,\n onUpdateModel,\n onDeleteModel,\n onToggleEnabled,\n enableLabel = 'Enabled',\n extraFields,\n reasoningEffortOptions,\n addLabel = 'Add model',\n addAllLabel = 'Add all',\n addTitle = 'Add model',\n editTitle = 'Edit model',\n selectModelLabel = 'Model',\n manualIdToggleLabel = 'Enter the model id manually',\n editLabel = 'Edit',\n removeLabel = 'Remove',\n missingLabel = 'Missing',\n capsLabel = 'Capabilities',\n capsHint,\n searchPlaceholder = 'Search models…',\n searchLabel = 'Search models',\n emptyProviderLabel = 'No models yet — use Add model to pick from the live catalog.',\n externalIdRequiredLabel = 'The model id is required.',\n remoteEmptyLabel = 'The provider listed no models.',\n remoteLoadingLabel = 'Loading models…',\n retryLabel = 'Retry',\n customOptionLabel = 'Custom…',\n temperatureLabel = 'Temperature',\n maxTokensLabel = 'Max tokens',\n labelLabel = 'Display label',\n reasoningEffortLabel = 'Reasoning effort',\n saveLabel = 'Save',\n cancelLabel = 'Cancel',\n addDraftLabel = 'Add model',\n providersEmptyLabel = 'No providers yet.',\n emptyAction,\n className,\n },\n ref,\n ) {\n const [modal, setModal] = React.useState<ModalState | null>(null)\n const [draftError, setDraftError] = React.useState<string | null>(null)\n\n const descriptorFor = React.useCallback(\n (value: string): CapabilityDescriptor =>\n caps.find((cap) => cap.value === value) ?? { value, label: value },\n [caps],\n )\n\n const resetModal = React.useCallback(() => {\n setModal(null)\n setDraftError(null)\n }, [])\n\n const toggleProvider = (providerId: string) => {\n onExpandedProviderChange(expandedProviderId === providerId ? null : providerId)\n }\n\n const openAddModal = (providerId: string) => {\n setModal({\n mode: 'add',\n providerId,\n externalId: '',\n label: '',\n caps: caps[0] ? [caps[0].value] : [],\n reasoningEffort: '',\n reasoningCustom: false,\n temperature: '',\n maxTokens: '',\n extra: {},\n extraTouched: false,\n labelTouched: false,\n manual: false,\n })\n setDraftError(null)\n }\n\n const openEditModal = (model: ModelRegistryModel) => {\n setModal({\n mode: 'edit',\n providerId: model.providerId,\n externalId: model.externalId,\n label: model.label ?? '',\n caps: [...model.caps],\n labelTouched: true,\n reasoningEffort: model.reasoningEffort ?? '',\n reasoningCustom:\n model.reasoningEffort != null &&\n model.reasoningEffort !== '' &&\n !(reasoningEffortOptions ?? []).includes(model.reasoningEffort),\n temperature: model.temperature != null ? String(model.temperature) : '',\n maxTokens: model.maxTokens != null ? String(model.maxTokens) : '',\n extra: { ...(model.extra ?? {}) },\n extraTouched: false,\n model,\n manual: false,\n })\n setDraftError(null)\n }\n\n const patchExtraField = (key: string, value: string) => {\n setModal((current) =>\n current\n ? { ...current, extra: { ...current.extra, [key]: value }, extraTouched: true }\n : current,\n )\n }\n\n const selectRemote = (remoteId: string) => {\n const remote = (remoteModels ?? []).find((entry) => entry.id === remoteId)\n setModal((current) =>\n current\n ? {\n ...current,\n externalId: remoteId,\n caps: remote ? [...remote.caps] : current.caps,\n label: current.labelTouched ? current.label : beautifyId(remoteId),\n }\n : current,\n )\n }\n\n const toggleDraftCap = (value: string) => {\n setModal((current) =>\n current\n ? {\n ...current,\n caps: current.caps.includes(value)\n ? current.caps.filter((entry) => entry !== value)\n : [...current.caps, value],\n }\n : current,\n )\n }\n\n const patchField = (field: keyof ModalState, value: string) => {\n setModal((current) => (current ? { ...current, [field]: value } : current))\n }\n\n const numberOr = (raw: string): number | null => {\n const trimmed = raw.trim()\n if (!trimmed) return null\n const parsed = Number(trimmed)\n return Number.isFinite(parsed) ? parsed : null\n }\n\n const submitModal = () => {\n if (!modal) return\n const externalId = modal.externalId.trim()\n if (!externalId) {\n setDraftError(externalIdRequiredLabel)\n return\n }\n const extra: Record<string, string> | undefined =\n modal.extraTouched || Object.values(modal.extra).some((value) => value.trim() !== '')\n ? { ...modal.extra }\n : undefined\n const payload: ModelRegistryDraft = {\n externalId,\n label: modal.label.trim() || undefined,\n caps: modal.caps,\n reasoningEffort: modal.reasoningEffort.trim(),\n temperature: numberOr(modal.temperature),\n maxTokens: numberOr(modal.maxTokens),\n ...(extra !== undefined ? { extra } : {}),\n }\n if (modal.mode === 'add') {\n onAddModel(modal.providerId, payload)\n } else if (modal.model) {\n onUpdateModel(modal.model, payload)\n }\n resetModal()\n }\n\n const remoteForProvider = (provider: ModelRegistryProvider): ModelPickerProvider[] => {\n const items = remoteModels ?? []\n if (items.length === 0) return []\n return [\n {\n id: provider.id,\n name: provider.name,\n models: items.map((entry) => ({\n id: entry.id,\n name: entry.id,\n capabilities: entry.caps,\n })),\n },\n ]\n }\n\n const renderModal = () => {\n if (!modal) return null\n const provider = providers.find((entry) => entry.id === modal.providerId)\n const catalog = provider ? remoteForProvider(provider) : []\n const pendingCount = (remoteModels ?? []).filter(\n (remote) =>\n !models.some(\n (model) => model.providerId === modal.providerId && model.externalId === remote.id,\n ),\n ).length\n return (\n <Modal open onOpenChange={(open: boolean) => (!open ? resetModal() : undefined)}>\n <ModalContent className=\"max-h-[85vh] w-full max-w-lg overflow-y-auto\">\n <ModalHeader>\n <ModalTitle className=\"text-base\">\n {modal.mode === 'add' ? addTitle : `${editTitle} — ${modal.externalId}`}\n </ModalTitle>\n </ModalHeader>\n <div className=\"flex flex-col gap-4 p-4\">\n {modal.mode === 'add' ? (\n remoteState === 'loading' ? (\n <p className=\"flex items-center justify-center gap-2 py-4 text-xs text-[var(--as-muted-fg)]\">\n <Spinner size=\"sm\" />\n {remoteLoadingLabel}\n </p>\n ) : remoteState === 'error' ? (\n <>\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"truncate text-xs text-[var(--as-danger)]\">{remoteError}</p>\n {onRetryRemote ? (\n <Button variant=\"outline\" size=\"sm\" onClick={onRetryRemote}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n {modal.manual ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">\n {selectModelLabel}\n </span>\n <input\n type=\"text\"\n value={modal.externalId}\n onChange={(event) => patchField('externalId', event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 font-mono text-sm text-[var(--as-fg)]\"\n />\n </label>\n ) : (\n <button\n type=\"button\"\n className=\"cursor-pointer self-start text-xs text-[var(--as-muted-fg)] underline-offset-2 hover:text-[var(--as-fg)] hover:underline\"\n onClick={() => setModal((c) => (c ? { ...c, manual: true } : c))}\n >\n {manualIdToggleLabel}\n </button>\n )}\n </>\n ) : (\n <>\n {modal.manual ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">\n {selectModelLabel}\n </span>\n <input\n type=\"text\"\n value={modal.externalId}\n onChange={(event) => patchField('externalId', event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 font-mono text-sm text-[var(--as-fg)]\"\n />\n </label>\n ) : (\n <ModelPicker\n providers={catalog}\n value={modal.externalId}\n onChange={(modelId) => (modelId ? selectRemote(modelId) : undefined)}\n label={selectModelLabel}\n searchPlaceholder={searchPlaceholder}\n searchLabel={searchLabel}\n emptyLabel={remoteEmptyLabel}\n />\n )}\n <button\n type=\"button\"\n className=\"cursor-pointer self-start text-xs text-[var(--as-muted-fg)] underline-offset-2 hover:text-[var(--as-fg)] hover:underline\"\n onClick={() => setModal((c) => (c ? { ...c, manual: !c.manual } : c))}\n >\n {manualIdToggleLabel}\n </button>\n </>\n )\n ) : (\n <p className=\"font-mono text-sm text-[var(--as-fg)]\">{modal.externalId}</p>\n )}\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{labelLabel}</span>\n <input\n type=\"text\"\n value={modal.label}\n onChange={(event) =>\n setModal((current) =>\n current\n ? { ...current, label: event.target.value, labelTouched: true }\n : current,\n )\n }\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-sm text-[var(--as-fg)]\"\n />\n </label>\n <div className=\"space-y-1\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{capsLabel}</span>\n <CapabilityChips\n caps={caps}\n selected={modal.caps}\n onToggle={toggleDraftCap}\n ariaLabel={capsLabel}\n />\n {capsHint ? (\n <p className=\"text-xs text-[var(--as-muted-fg)]\">{capsHint}</p>\n ) : null}\n </div>\n {reasoningEffortOptions ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">\n {reasoningEffortLabel}\n </span>\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n {modal.reasoningCustom ? (\n <input\n type=\"text\"\n value={modal.reasoningEffort}\n placeholder={customOptionLabel}\n onChange={(event) => patchField('reasoningEffort', event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 font-mono text-sm text-[var(--as-fg)] sm:flex-1\"\n />\n ) : (\n <select\n value={modal.reasoningCustom ? CUSTOM : modal.reasoningEffort}\n onChange={(event) =>\n setModal((current) =>\n current\n ? {\n ...current,\n reasoningCustom: event.target.value === CUSTOM,\n reasoningEffort:\n event.target.value === CUSTOM\n ? current.reasoningEffort\n : event.target.value,\n }\n : current,\n )\n }\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-sm text-[var(--as-fg)] sm:w-40\"\n >\n <option value=\"\">—</option>\n {reasoningEffortOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n <option value={CUSTOM}>{customOptionLabel}</option>\n </select>\n )}\n </div>\n </label>\n ) : null}\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n <NumberField\n label={temperatureLabel}\n value={modal.temperature}\n onChange={(value) => patchField('temperature', value)}\n onClear={() => patchField('temperature', '')}\n step=\"0.1\"\n min=\"0\"\n max=\"2\"\n />\n <NumberField\n label={maxTokensLabel}\n value={modal.maxTokens}\n onChange={(value) => patchField('maxTokens', value)}\n onClear={() => patchField('maxTokens', '')}\n step=\"256\"\n min=\"1\"\n />\n </div>\n {(extraFields ?? []).map((field) => {\n const value = modal.extra[field.key] ?? ''\n const common =\n 'w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-sm text-[var(--as-fg)]'\n return (\n <label key={field.key} className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{field.label}</span>\n {field.multiline ? (\n <textarea\n rows={2}\n value={value}\n placeholder={field.placeholder}\n onChange={(event) => patchExtraField(field.key, event.target.value)}\n className={common}\n />\n ) : (\n <input\n type=\"text\"\n value={value}\n placeholder={field.placeholder}\n onChange={(event) => patchExtraField(field.key, event.target.value)}\n className={common}\n />\n )}\n </label>\n )\n })}\n {draftError ? (\n <p role=\"alert\" className=\"text-xs text-[var(--as-danger)]\">\n {draftError}\n </p>\n ) : null}\n </div>\n <ModalFooter>\n {modal.mode === 'add' && onAddAll ? (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={remoteState !== 'ready' || pendingCount === 0}\n onClick={() => {\n onAddAll(\n modal.providerId,\n (remoteModels ?? [])\n .filter(\n (remote) =>\n !models.some(\n (model) =>\n model.providerId === modal.providerId &&\n model.externalId === remote.id,\n ),\n )\n .map((remote) => ({\n externalId: remote.id,\n caps: remote.caps,\n reasoningEffort: '',\n temperature: null,\n maxTokens: null,\n })),\n )\n resetModal()\n }}\n >\n <Plus aria-hidden />\n {addAllLabel} ({pendingCount})\n </Button>\n ) : null}\n <Button variant=\"ghost\" size=\"sm\" onClick={resetModal}>\n {cancelLabel}\n </Button>\n <Button size=\"sm\" onClick={submitModal}>\n <Check aria-hidden />\n {modal.mode === 'add' ? addDraftLabel : saveLabel}\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n }\n\n return (\n <div\n ref={ref}\n data-as=\"model-registry\"\n className={cn('flex w-full flex-col gap-4', className)}\n >\n {providers.map((provider) => {\n const expanded = expandedProviderId === provider.id\n const providerModels = models.filter((model) => model.providerId === provider.id)\n return (\n <div\n key={provider.id}\n data-as=\"model-registry-provider\"\n className={cn(\n 'rounded-[var(--as-radius-lg)] border bg-[var(--as-surface)] transition-all',\n expanded\n ? 'border-[var(--as-primary)] shadow-[var(--as-shadow-1)]'\n : 'border-[var(--as-border)]',\n )}\n >\n <button\n type=\"button\"\n aria-expanded={expanded}\n onClick={() => toggleProvider(provider.id)}\n className=\"group flex w-full cursor-pointer items-center gap-4 p-4 text-left focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <span\n className={cn(\n 'flex size-9 shrink-0 items-center justify-center rounded-[var(--as-radius)] transition-colors',\n expanded\n ? 'bg-[var(--as-primary)] text-[var(--as-primary-fg)]'\n : 'bg-[var(--as-muted)] text-[var(--as-muted-fg)] group-hover:bg-[var(--as-primary)]/10 group-hover:text-[var(--as-primary)]',\n )}\n >\n {expanded ? (\n <ChevronDown className=\"size-5\" aria-hidden />\n ) : (\n <ChevronRight className=\"size-5\" aria-hidden />\n )}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex flex-wrap items-center gap-2 text-sm font-semibold text-[var(--as-fg)]\">\n {provider.name}\n {provider.type ? (\n <span className=\"rounded-full border border-[var(--as-border)] px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-[var(--as-muted-fg)]\">\n {provider.type}\n </span>\n ) : null}\n {providerModels.length ? (\n <span className=\"rounded-full bg-[var(--as-muted)] px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-widest text-[var(--as-muted-fg)]\">\n {providerModels.filter((model) => model.enabled).length}/\n {providerModels.length}\n </span>\n ) : null}\n </span>\n {provider.baseUrl ? (\n <span className=\"block truncate font-mono text-xs text-[var(--as-muted-fg)]\">\n {provider.baseUrl}\n </span>\n ) : null}\n </span>\n </button>\n {expanded ? (\n <div className=\"as-anim-fade flex flex-col gap-2 border-t border-[var(--as-border)] p-4\">\n {!provider.readOnly && providerModels.length === 0 ? (\n <p className=\"text-xs text-[var(--as-muted-fg)]\">\n {emptyProviderLabel}\n </p>\n ) : null}\n {providerModels.map((model) => {\n return (\n <div\n key={model.id}\n className={cn(\n 'flex min-w-0 items-center gap-2 rounded-[var(--as-radius-sm)] border border-[var(--as-border)] px-3 py-2 text-sm',\n model.missing && 'opacity-50',\n )}\n >\n {onToggleEnabled && !provider.readOnly ? (\n <input\n type=\"checkbox\"\n aria-label={`${enableLabel} — ${model.externalId}`}\n checked={model.enabled}\n onChange={(event) => onToggleEnabled(model, event.target.checked)}\n className=\"size-4 shrink-0 cursor-pointer accent-[var(--as-primary)]\"\n />\n ) : null}\n <span className=\"min-w-0 flex-1 truncate font-mono text-xs text-[var(--as-fg)]\">\n {model.externalId}\n </span>\n {model.missing ? (\n <span className=\"text-xs text-[var(--as-warning)]\">\n {missingLabel}\n </span>\n ) : null}\n <CapabilityChips\n variant=\"badge\"\n caps={model.caps.map(descriptorFor)}\n selected={model.caps}\n />\n {!provider.readOnly ? (\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-label={`${editLabel} ${model.externalId}`}\n onClick={() => openEditModal(model)}\n >\n <Pencil aria-hidden />\n {editLabel}\n </Button>\n ) : null}\n {!provider.readOnly ? (\n <button\n type=\"button\"\n aria-label={`${removeLabel} ${model.externalId}`}\n onClick={() => onDeleteModel(model)}\n className=\"cursor-pointer rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n </div>\n )\n })}\n {!provider.readOnly ? (\n <div className=\"pt-1\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-expanded={modal?.mode === 'add' && modal.providerId === provider.id}\n onClick={() => openAddModal(provider.id)}\n >\n <Plus aria-hidden />\n {addLabel}\n </Button>\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n )\n })}\n {providers.length === 0 ? (\n <div className=\"flex flex-col items-center gap-2 py-8 text-center\">\n <p className=\"text-sm text-[var(--as-muted-fg)]\">{providersEmptyLabel}</p>\n {emptyAction}\n </div>\n ) : null}\n {renderModal()}\n </div>\n )\n },\n)\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/model-registry/ModelRegistry.tsx"],"names":["ModelRegistry"],"mappings":"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","file":"chunk-5U45TQJE.js","sourcesContent":["import * as React from 'react'\nimport { Check, ChevronDown, ChevronRight, ChevronUp, Pencil, Plus, X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../button'\nimport { CapabilityChips, type CapabilityDescriptor } from '../capability-chips'\nimport { Modal, ModalContent, ModalHeader, ModalTitle, ModalFooter } from '../modal/Modal'\nimport { ModelPicker, type ModelPickerProvider } from '../model-picker/ModelPicker'\nimport { Spinner } from '../spinner'\nimport { beautifyId } from '../../lib/fuzzy'\n\nexport interface ModelRegistryProvider {\n id: string\n name: string\n type?: string\n baseUrl?: string\n /** Read-only provider: hides Add/Edit/Remove (e.g. org-managed providers). */\n readOnly?: boolean\n}\n\nexport interface ModelRegistryModel {\n id: string\n providerId: string\n externalId: string\n label?: string\n caps: string[]\n enabled: boolean\n reasoningEffort?: string\n temperature?: number | null\n maxTokens?: number | null\n /** App-defined extra fields (see `extraFields`), carried verbatim. */\n extra?: Record<string, string>\n missing?: boolean\n}\n\nexport interface ModelRegistryRemoteModel {\n id: string\n caps: string[]\n}\n\nexport interface ModelRegistryDraft {\n externalId: string\n label?: string\n caps: string[]\n reasoningEffort?: string\n temperature?: number | null\n maxTokens?: number | null\n extra?: Record<string, string>\n}\n\nexport interface ModelRegistryPatch {\n label?: string\n caps?: string[]\n reasoningEffort?: string\n temperature?: number | null\n maxTokens?: number | null\n extra?: Record<string, string>\n}\n\nexport interface ModelRegistryExtraField {\n key: string\n label: string\n placeholder?: string\n /** Render a multi-line textarea instead of a single-line input. */\n multiline?: boolean\n}\n\nexport type ModelRegistryRemoteState = 'loading' | 'error' | 'ready'\n\nexport interface ModelRegistryProps {\n providers: ModelRegistryProvider[]\n models: ModelRegistryModel[]\n caps: CapabilityDescriptor[]\n expandedProviderId?: string | null\n onExpandedProviderChange: (providerId: string | null) => void\n remoteModels?: ModelRegistryRemoteModel[]\n remoteState?: ModelRegistryRemoteState\n remoteError?: string | null\n onRetryRemote?: () => void\n onAddModel: (providerId: string, draft: ModelRegistryDraft) => void\n onAddAll?: (providerId: string, drafts: ModelRegistryDraft[]) => void\n onUpdateModel: (model: ModelRegistryModel, patch: ModelRegistryPatch) => void\n onDeleteModel: (model: ModelRegistryModel) => void\n /** Toggle a model's enabled flag; renders the row checkbox when set. */\n onToggleEnabled?: (model: ModelRegistryModel, enabled: boolean) => void\n enableLabel?: string\n /** App-declared extra fields rendered in the add/edit modal (e.g. a\n * description line); values ride `extra` on Draft/Patch/Model. */\n extraFields?: ModelRegistryExtraField[]\n reasoningEffortOptions?: string[]\n addLabel?: string\n addAllLabel?: string\n addTitle?: string\n editTitle?: string\n selectModelLabel?: string\n manualIdToggleLabel?: string\n editLabel?: string\n removeLabel?: string\n missingLabel?: string\n capsLabel?: string\n /** Muted explainer under the capability chips (what they gate). */\n capsHint?: string\n searchPlaceholder?: string\n searchLabel?: string\n emptyProviderLabel?: string\n externalIdRequiredLabel?: string\n remoteEmptyLabel?: string\n remoteLoadingLabel?: string\n retryLabel?: string\n customOptionLabel?: string\n temperatureLabel?: string\n maxTokensLabel?: string\n labelLabel?: string\n reasoningEffortLabel?: string\n saveLabel?: string\n cancelLabel?: string\n addDraftLabel?: string\n providersEmptyLabel?: string\n emptyAction?: React.ReactNode\n className?: string\n}\n\nconst CUSTOM = '__custom__'\ninterface NumberFieldProps {\n label: string\n value: string\n onChange: (value: string) => void\n onClear: () => void\n step?: string\n min?: string\n max?: string\n}\n\nfunction NumberField({\n label,\n value,\n onChange,\n onClear,\n step = '1',\n min,\n max,\n}: NumberFieldProps) {\n const bump = (delta: number) => {\n const current = value.trim() === '' ? 0 : Number(value)\n if (!Number.isFinite(current)) return\n const next = current + delta\n onChange(String(min != null && next < Number(min) ? Number(min) : next))\n }\n return (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{label}</span>\n <span className=\"relative block\">\n <input\n type=\"number\"\n step={step}\n min={min}\n max={max}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 pr-16 text-sm text-[var(--as-fg)] [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\"\n />\n <span className=\"absolute inset-y-0 right-1.5 flex items-center gap-1\">\n {value !== '' ? (\n <button\n type=\"button\"\n aria-label={`${label} clear`}\n onClick={onClear}\n className=\"cursor-pointer text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n <span className=\"flex flex-col\">\n <button\n type=\"button\"\n aria-label={`${label} increment`}\n onClick={() => bump(Number(step))}\n className=\"cursor-pointer leading-none text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n >\n <ChevronUp className=\"size-3.5\" aria-hidden />\n </button>\n <button\n type=\"button\"\n aria-label={`${label} decrement`}\n onClick={() => bump(-Number(step))}\n className=\"cursor-pointer leading-none text-[var(--as-muted-fg)] hover:text-[var(--as-fg)]\"\n >\n <ChevronDown className=\"size-3.5\" aria-hidden />\n </button>\n </span>\n </span>\n </span>\n </label>\n )\n}\n\ninterface ModalState {\n mode: 'add' | 'edit'\n providerId: string\n externalId: string\n label: string\n caps: string[]\n reasoningEffort: string\n reasoningCustom: boolean\n temperature: string\n maxTokens: string\n extra: Record<string, string>\n extraTouched: boolean\n labelTouched: boolean\n model?: ModelRegistryModel\n manual: boolean\n}\n\nexport const ModelRegistry = React.forwardRef<HTMLDivElement, ModelRegistryProps>(\n function ModelRegistry(\n {\n providers,\n models,\n caps,\n expandedProviderId,\n onExpandedProviderChange,\n remoteModels,\n remoteState = 'ready',\n remoteError,\n onRetryRemote,\n onAddModel,\n onAddAll,\n onUpdateModel,\n onDeleteModel,\n onToggleEnabled,\n enableLabel = 'Enabled',\n extraFields,\n reasoningEffortOptions,\n addLabel = 'Add model',\n addAllLabel = 'Add all',\n addTitle = 'Add model',\n editTitle = 'Edit model',\n selectModelLabel = 'Model',\n manualIdToggleLabel = 'Enter the model id manually',\n editLabel = 'Edit',\n removeLabel = 'Remove',\n missingLabel = 'Missing',\n capsLabel = 'Capabilities',\n capsHint,\n searchPlaceholder = 'Search models…',\n searchLabel = 'Search models',\n emptyProviderLabel = 'No models yet — use Add model to pick from the live catalog.',\n externalIdRequiredLabel = 'The model id is required.',\n remoteEmptyLabel = 'The provider listed no models.',\n remoteLoadingLabel = 'Loading models…',\n retryLabel = 'Retry',\n customOptionLabel = 'Custom…',\n temperatureLabel = 'Temperature',\n maxTokensLabel = 'Max tokens',\n labelLabel = 'Display label',\n reasoningEffortLabel = 'Reasoning effort',\n saveLabel = 'Save',\n cancelLabel = 'Cancel',\n addDraftLabel = 'Add model',\n providersEmptyLabel = 'No providers yet.',\n emptyAction,\n className,\n },\n ref,\n ) {\n const [modal, setModal] = React.useState<ModalState | null>(null)\n const [draftError, setDraftError] = React.useState<string | null>(null)\n\n const descriptorFor = React.useCallback(\n (value: string): CapabilityDescriptor =>\n caps.find((cap) => cap.value === value) ?? { value, label: value },\n [caps],\n )\n\n const resetModal = React.useCallback(() => {\n setModal(null)\n setDraftError(null)\n }, [])\n\n const toggleProvider = (providerId: string) => {\n onExpandedProviderChange(expandedProviderId === providerId ? null : providerId)\n }\n\n const openAddModal = (providerId: string) => {\n setModal({\n mode: 'add',\n providerId,\n externalId: '',\n label: '',\n caps: caps[0] ? [caps[0].value] : [],\n reasoningEffort: '',\n reasoningCustom: false,\n temperature: '',\n maxTokens: '',\n extra: {},\n extraTouched: false,\n labelTouched: false,\n manual: false,\n })\n setDraftError(null)\n }\n\n const openEditModal = (model: ModelRegistryModel) => {\n setModal({\n mode: 'edit',\n providerId: model.providerId,\n externalId: model.externalId,\n label: model.label ?? '',\n caps: [...model.caps],\n labelTouched: true,\n reasoningEffort: model.reasoningEffort ?? '',\n reasoningCustom:\n model.reasoningEffort != null &&\n model.reasoningEffort !== '' &&\n !(reasoningEffortOptions ?? []).includes(model.reasoningEffort),\n temperature: model.temperature != null ? String(model.temperature) : '',\n maxTokens: model.maxTokens != null ? String(model.maxTokens) : '',\n extra: { ...(model.extra ?? {}) },\n extraTouched: false,\n model,\n manual: false,\n })\n setDraftError(null)\n }\n\n const patchExtraField = (key: string, value: string) => {\n setModal((current) =>\n current\n ? { ...current, extra: { ...current.extra, [key]: value }, extraTouched: true }\n : current,\n )\n }\n\n const selectRemote = (remoteId: string) => {\n const remote = (remoteModels ?? []).find((entry) => entry.id === remoteId)\n setModal((current) =>\n current\n ? {\n ...current,\n externalId: remoteId,\n caps: remote ? [...remote.caps] : current.caps,\n label: current.labelTouched ? current.label : beautifyId(remoteId),\n }\n : current,\n )\n }\n\n const toggleDraftCap = (value: string) => {\n setModal((current) =>\n current\n ? {\n ...current,\n caps: current.caps.includes(value)\n ? current.caps.filter((entry) => entry !== value)\n : [...current.caps, value],\n }\n : current,\n )\n }\n\n const patchField = (field: keyof ModalState, value: string) => {\n setModal((current) => (current ? { ...current, [field]: value } : current))\n }\n\n const numberOr = (raw: string): number | null => {\n const trimmed = raw.trim()\n if (!trimmed) return null\n const parsed = Number(trimmed)\n return Number.isFinite(parsed) ? parsed : null\n }\n\n const submitModal = () => {\n if (!modal) return\n const externalId = modal.externalId.trim()\n if (!externalId) {\n setDraftError(externalIdRequiredLabel)\n return\n }\n const extra: Record<string, string> | undefined =\n modal.extraTouched || Object.values(modal.extra).some((value) => value.trim() !== '')\n ? { ...modal.extra }\n : undefined\n const payload: ModelRegistryDraft = {\n externalId,\n label: modal.label.trim() || undefined,\n caps: modal.caps,\n reasoningEffort: modal.reasoningEffort.trim(),\n temperature: numberOr(modal.temperature),\n maxTokens: numberOr(modal.maxTokens),\n ...(extra !== undefined ? { extra } : {}),\n }\n if (modal.mode === 'add') {\n onAddModel(modal.providerId, payload)\n } else if (modal.model) {\n onUpdateModel(modal.model, payload)\n }\n resetModal()\n }\n\n const remoteForProvider = (provider: ModelRegistryProvider): ModelPickerProvider[] => {\n const items = remoteModels ?? []\n if (items.length === 0) return []\n return [\n {\n id: provider.id,\n name: provider.name,\n models: items.map((entry) => ({\n id: entry.id,\n name: entry.id,\n capabilities: entry.caps,\n })),\n },\n ]\n }\n\n const renderModal = () => {\n if (!modal) return null\n const provider = providers.find((entry) => entry.id === modal.providerId)\n const catalog = provider ? remoteForProvider(provider) : []\n const pendingCount = (remoteModels ?? []).filter(\n (remote) =>\n !models.some(\n (model) => model.providerId === modal.providerId && model.externalId === remote.id,\n ),\n ).length\n return (\n <Modal open onOpenChange={(open: boolean) => (!open ? resetModal() : undefined)}>\n <ModalContent className=\"max-h-[85vh] w-full max-w-lg overflow-y-auto\">\n <ModalHeader>\n <ModalTitle className=\"text-base\">\n {modal.mode === 'add' ? addTitle : `${editTitle} — ${modal.externalId}`}\n </ModalTitle>\n </ModalHeader>\n <div className=\"flex flex-col gap-4 p-4\">\n {modal.mode === 'add' ? (\n remoteState === 'loading' ? (\n <p className=\"flex items-center justify-center gap-2 py-4 text-xs text-[var(--as-muted-fg)]\">\n <Spinner size=\"sm\" />\n {remoteLoadingLabel}\n </p>\n ) : remoteState === 'error' ? (\n <>\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"truncate text-xs text-[var(--as-danger)]\">{remoteError}</p>\n {onRetryRemote ? (\n <Button variant=\"outline\" size=\"sm\" onClick={onRetryRemote}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n {modal.manual ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">\n {selectModelLabel}\n </span>\n <input\n type=\"text\"\n value={modal.externalId}\n onChange={(event) => patchField('externalId', event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 font-mono text-sm text-[var(--as-fg)]\"\n />\n </label>\n ) : (\n <button\n type=\"button\"\n className=\"cursor-pointer self-start text-xs text-[var(--as-muted-fg)] underline-offset-2 hover:text-[var(--as-fg)] hover:underline\"\n onClick={() => setModal((c) => (c ? { ...c, manual: true } : c))}\n >\n {manualIdToggleLabel}\n </button>\n )}\n </>\n ) : (\n <>\n {modal.manual ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">\n {selectModelLabel}\n </span>\n <input\n type=\"text\"\n value={modal.externalId}\n onChange={(event) => patchField('externalId', event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 font-mono text-sm text-[var(--as-fg)]\"\n />\n </label>\n ) : (\n <ModelPicker\n providers={catalog}\n value={modal.externalId}\n onChange={(modelId) => (modelId ? selectRemote(modelId) : undefined)}\n label={selectModelLabel}\n searchPlaceholder={searchPlaceholder}\n searchLabel={searchLabel}\n emptyLabel={remoteEmptyLabel}\n />\n )}\n <button\n type=\"button\"\n className=\"cursor-pointer self-start text-xs text-[var(--as-muted-fg)] underline-offset-2 hover:text-[var(--as-fg)] hover:underline\"\n onClick={() => setModal((c) => (c ? { ...c, manual: !c.manual } : c))}\n >\n {manualIdToggleLabel}\n </button>\n </>\n )\n ) : (\n <p className=\"font-mono text-sm text-[var(--as-fg)]\">{modal.externalId}</p>\n )}\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{labelLabel}</span>\n <input\n type=\"text\"\n value={modal.label}\n onChange={(event) =>\n setModal((current) =>\n current\n ? { ...current, label: event.target.value, labelTouched: true }\n : current,\n )\n }\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-sm text-[var(--as-fg)]\"\n />\n </label>\n <div className=\"space-y-1\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{capsLabel}</span>\n <CapabilityChips\n caps={caps}\n selected={modal.caps}\n onToggle={toggleDraftCap}\n ariaLabel={capsLabel}\n />\n {capsHint ? (\n <p className=\"text-xs text-[var(--as-muted-fg)]\">{capsHint}</p>\n ) : null}\n </div>\n {reasoningEffortOptions ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">\n {reasoningEffortLabel}\n </span>\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n {modal.reasoningCustom ? (\n <input\n type=\"text\"\n value={modal.reasoningEffort}\n placeholder={customOptionLabel}\n onChange={(event) => patchField('reasoningEffort', event.target.value)}\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 font-mono text-sm text-[var(--as-fg)] sm:flex-1\"\n />\n ) : (\n <select\n value={modal.reasoningCustom ? CUSTOM : modal.reasoningEffort}\n onChange={(event) =>\n setModal((current) =>\n current\n ? {\n ...current,\n reasoningCustom: event.target.value === CUSTOM,\n reasoningEffort:\n event.target.value === CUSTOM\n ? current.reasoningEffort\n : event.target.value,\n }\n : current,\n )\n }\n className=\"w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-sm text-[var(--as-fg)] sm:w-40\"\n >\n <option value=\"\">—</option>\n {reasoningEffortOptions.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n <option value={CUSTOM}>{customOptionLabel}</option>\n </select>\n )}\n </div>\n </label>\n ) : null}\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n <NumberField\n label={temperatureLabel}\n value={modal.temperature}\n onChange={(value) => patchField('temperature', value)}\n onClear={() => patchField('temperature', '')}\n step=\"0.1\"\n min=\"0\"\n max=\"2\"\n />\n <NumberField\n label={maxTokensLabel}\n value={modal.maxTokens}\n onChange={(value) => patchField('maxTokens', value)}\n onClear={() => patchField('maxTokens', '')}\n step=\"256\"\n min=\"1\"\n />\n </div>\n {(extraFields ?? []).map((field) => {\n const value = modal.extra[field.key] ?? ''\n const common =\n 'w-full rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface)] px-3 py-2 text-sm text-[var(--as-fg)]'\n return (\n <label key={field.key} className=\"block space-y-1 text-sm\">\n <span className=\"text-sm font-medium text-[var(--as-fg)]\">{field.label}</span>\n {field.multiline ? (\n <textarea\n rows={2}\n value={value}\n placeholder={field.placeholder}\n onChange={(event) => patchExtraField(field.key, event.target.value)}\n className={common}\n />\n ) : (\n <input\n type=\"text\"\n value={value}\n placeholder={field.placeholder}\n onChange={(event) => patchExtraField(field.key, event.target.value)}\n className={common}\n />\n )}\n </label>\n )\n })}\n {draftError ? (\n <p role=\"alert\" className=\"text-xs text-[var(--as-danger)]\">\n {draftError}\n </p>\n ) : null}\n </div>\n <ModalFooter>\n {modal.mode === 'add' && onAddAll ? (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={remoteState !== 'ready' || pendingCount === 0}\n onClick={() => {\n onAddAll(\n modal.providerId,\n (remoteModels ?? [])\n .filter(\n (remote) =>\n !models.some(\n (model) =>\n model.providerId === modal.providerId &&\n model.externalId === remote.id,\n ),\n )\n .map((remote) => ({\n externalId: remote.id,\n caps: remote.caps,\n reasoningEffort: '',\n temperature: null,\n maxTokens: null,\n })),\n )\n resetModal()\n }}\n >\n <Plus aria-hidden />\n {addAllLabel} ({pendingCount})\n </Button>\n ) : null}\n <Button variant=\"ghost\" size=\"sm\" onClick={resetModal}>\n {cancelLabel}\n </Button>\n <Button size=\"sm\" onClick={submitModal}>\n <Check aria-hidden />\n {modal.mode === 'add' ? addDraftLabel : saveLabel}\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n }\n\n return (\n <div\n ref={ref}\n data-as=\"model-registry\"\n className={cn('flex w-full flex-col gap-4', className)}\n >\n {providers.map((provider) => {\n const expanded = expandedProviderId === provider.id\n const providerModels = models.filter((model) => model.providerId === provider.id)\n return (\n <div\n key={provider.id}\n data-as=\"model-registry-provider\"\n className={cn(\n 'rounded-[var(--as-radius-lg)] border bg-[var(--as-surface)] transition-all',\n expanded\n ? 'border-[var(--as-primary)] shadow-[var(--as-shadow-1)]'\n : 'border-[var(--as-border)]',\n )}\n >\n <button\n type=\"button\"\n aria-expanded={expanded}\n onClick={() => toggleProvider(provider.id)}\n className=\"group flex w-full cursor-pointer items-center gap-4 p-4 text-left focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <span\n className={cn(\n 'flex size-9 shrink-0 items-center justify-center rounded-[var(--as-radius)] transition-colors',\n expanded\n ? 'bg-[var(--as-primary)] text-[var(--as-primary-fg)]'\n : 'bg-[var(--as-muted)] text-[var(--as-muted-fg)] group-hover:bg-[var(--as-primary)]/10 group-hover:text-[var(--as-primary)]',\n )}\n >\n {expanded ? (\n <ChevronDown className=\"size-5\" aria-hidden />\n ) : (\n <ChevronRight className=\"size-5\" aria-hidden />\n )}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex flex-wrap items-center gap-2 text-sm font-semibold text-[var(--as-fg)]\">\n {provider.name}\n {provider.type ? (\n <span className=\"rounded-full border border-[var(--as-border)] px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-[var(--as-muted-fg)]\">\n {provider.type}\n </span>\n ) : null}\n {providerModels.length ? (\n <span className=\"rounded-full bg-[var(--as-muted)] px-2.5 py-0.5 text-[10px] font-semibold uppercase tracking-widest text-[var(--as-muted-fg)]\">\n {providerModels.filter((model) => model.enabled).length}/\n {providerModels.length}\n </span>\n ) : null}\n </span>\n {provider.baseUrl ? (\n <span className=\"block truncate font-mono text-xs text-[var(--as-muted-fg)]\">\n {provider.baseUrl}\n </span>\n ) : null}\n </span>\n </button>\n {expanded ? (\n <div className=\"as-anim-fade flex flex-col gap-2 border-t border-[var(--as-border)] p-4\">\n {!provider.readOnly && providerModels.length === 0 ? (\n <p className=\"text-xs text-[var(--as-muted-fg)]\">\n {emptyProviderLabel}\n </p>\n ) : null}\n {providerModels.map((model) => {\n return (\n <div\n key={model.id}\n className={cn(\n 'flex min-w-0 items-center gap-2 rounded-[var(--as-radius-sm)] border border-[var(--as-border)] px-3 py-2 text-sm',\n model.missing && 'opacity-50',\n )}\n >\n {onToggleEnabled && !provider.readOnly ? (\n <input\n type=\"checkbox\"\n aria-label={`${enableLabel} — ${model.externalId}`}\n checked={model.enabled}\n onChange={(event) => onToggleEnabled(model, event.target.checked)}\n className=\"size-4 shrink-0 cursor-pointer accent-[var(--as-primary)]\"\n />\n ) : null}\n <span className=\"min-w-0 flex-1 truncate font-mono text-xs text-[var(--as-fg)]\">\n {model.externalId}\n </span>\n {model.missing ? (\n <span className=\"text-xs text-[var(--as-warning)]\">\n {missingLabel}\n </span>\n ) : null}\n <CapabilityChips\n variant=\"badge\"\n caps={model.caps.map(descriptorFor)}\n selected={model.caps}\n />\n {!provider.readOnly ? (\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-label={`${editLabel} ${model.externalId}`}\n onClick={() => openEditModal(model)}\n >\n <Pencil aria-hidden />\n {editLabel}\n </Button>\n ) : null}\n {!provider.readOnly ? (\n <button\n type=\"button\"\n aria-label={`${removeLabel} ${model.externalId}`}\n onClick={() => onDeleteModel(model)}\n className=\"cursor-pointer rounded-[var(--as-radius-sm)] p-1.5 text-[var(--as-muted-fg)] transition-colors hover:bg-[var(--as-muted)] hover:text-[var(--as-fg)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n </div>\n )\n })}\n {!provider.readOnly ? (\n <div className=\"pt-1\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-expanded={modal?.mode === 'add' && modal.providerId === provider.id}\n onClick={() => openAddModal(provider.id)}\n >\n <Plus aria-hidden />\n {addLabel}\n </Button>\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n )\n })}\n {providers.length === 0 ? (\n <div className=\"flex flex-col items-center gap-2 py-8 text-center\">\n <p className=\"text-sm text-[var(--as-muted-fg)]\">{providersEmptyLabel}</p>\n {emptyAction}\n </div>\n ) : null}\n {renderModal()}\n </div>\n )\n },\n)\n\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Input } from './chunk-GQDW6BBO.js';
|
|
2
|
-
import { Popover, PopoverTrigger, PopoverContent } from './chunk-VX3EQRSM.js';
|
|
3
2
|
import { Button } from './chunk-4WBBF5LH.js';
|
|
3
|
+
import { Popover, PopoverTrigger, PopoverContent } from './chunk-VX3EQRSM.js';
|
|
4
4
|
import { cn } from './chunk-RVVXVTH3.js';
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
import { UserRound, ChevronDown, Pencil, Star, Trash2, Plus, Check } from 'lucide-react';
|
|
@@ -411,5 +411,5 @@ var ProfileSwitcher = React.forwardRef(
|
|
|
411
411
|
);
|
|
412
412
|
|
|
413
413
|
export { ProfileSwitcher };
|
|
414
|
-
//# sourceMappingURL=chunk-
|
|
415
|
-
//# sourceMappingURL=chunk-
|
|
414
|
+
//# sourceMappingURL=chunk-6ANLDUGL.js.map
|
|
415
|
+
//# sourceMappingURL=chunk-6ANLDUGL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/profile-switcher/ProfileSwitcher.tsx"],"names":["ProfileSwitcher"],"mappings":"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","file":"chunk-WY5TO6R4.js","sourcesContent":["import * as React from 'react'\nimport {\n Check,\n ChevronDown,\n Pencil,\n Plus,\n Star,\n Trash2,\n UserRound,\n type LucideIcon,\n} from 'lucide-react'\n\nimport { cn } from '../../lib/utils'\nimport { Button } from '../button/Button'\nimport { Input } from '../input/Input'\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover/Popover'\n\nexport interface ProfileItem {\n id: string\n name: string\n is_default?: boolean\n color?: string | null\n}\n\nexport interface ProfileSwitcherLabels {\n trigger: string\n panelTitle: string\n currentBadge: string\n defaultBadge: string\n newProfile: string\n newProfilePlaceholder: string\n create: string\n rename: (name: string) => string\n renamePlaceholder: string\n renameSubmit: string\n setDefault: (name: string) => string\n delete: (name: string) => string\n cancel: string\n loading: string\n empty: string\n}\n\nexport interface ProfileSwitcherIcons {\n trigger?: LucideIcon\n create?: LucideIcon\n rename?: LucideIcon\n setDefault?: LucideIcon\n delete?: LucideIcon\n empty?: LucideIcon\n}\n\nexport interface ProfileSwitcherProps {\n profiles: ProfileItem[]\n currentId: string | null\n onSelect: (profile: ProfileItem) => void\n onCreate: (name: string) => void | Promise<unknown>\n onRename: (profile: ProfileItem, name: string) => void | Promise<unknown>\n onDelete: (profile: ProfileItem) => void | Promise<unknown>\n /** When given, rows expose a \"make Default\" action (identity-auth §12). */\n onSetDefault?: (profile: ProfileItem) => void | Promise<unknown>\n loading?: boolean\n error?: string | null\n align?: 'start' | 'end'\n labels?: Partial<ProfileSwitcherLabels>\n icons?: ProfileSwitcherIcons\n className?: string\n}\n\nconst defaultLabels: ProfileSwitcherLabels = {\n trigger: 'Switch profile',\n panelTitle: 'Profiles',\n currentBadge: 'Current',\n defaultBadge: 'Default',\n newProfile: 'New profile',\n newProfilePlaceholder: 'Profile name',\n create: 'Create',\n rename: (name) => `Rename ${name}`,\n renamePlaceholder: 'Profile name',\n renameSubmit: 'Save',\n setDefault: (name) => `Make ${name} the default profile`,\n delete: (name) => `Delete ${name}`,\n cancel: 'Cancel',\n loading: 'Loading profiles…',\n empty: 'No profiles yet',\n}\n\nfunction ProfileAvatar({\n profile,\n size = 'sm',\n}: {\n profile: ProfileItem\n size?: 'sm' | 'md'\n}) {\n const letter = (profile.name.trim()[0] ?? '?').toUpperCase()\n return (\n <span\n aria-hidden\n className={cn(\n 'flex shrink-0 items-center justify-center rounded-full font-semibold ring-1 ring-[var(--as-border)]',\n size === 'md' ? 'size-8 text-xs' : 'size-6 text-[10px]',\n )}\n style={\n profile.color\n ? { backgroundColor: `${profile.color}22`, color: profile.color }\n : {\n backgroundColor: 'var(--as-secondary)',\n color: 'var(--as-muted-fg)',\n }\n }\n >\n {profile.color ? (\n letter\n ) : (\n <UserRound className={size === 'md' ? 'size-4' : 'size-3.5'} />\n )}\n </span>\n )\n}\n\n/** Status pills on a row: accent \"Current\" when active, muted \"Default\". */\nfunction ProfileRowBadges({\n isCurrent,\n isDefault,\n currentBadge,\n defaultBadge,\n}: {\n isCurrent: boolean\n isDefault: boolean\n currentBadge: string\n defaultBadge: string\n}) {\n if (!isCurrent && !isDefault) return null\n return (\n <span className=\"flex shrink-0 items-center gap-1\">\n {isCurrent ? (\n <span\n className=\"inline-flex items-center gap-1 rounded-full px-1.5 py-0.5 text-[10px] font-medium\"\n style={{\n backgroundColor: 'color-mix(in srgb, var(--as-accent) 12%, transparent)',\n color: 'var(--as-accent)',\n }}\n >\n <Check aria-hidden className=\"size-3\" />\n {currentBadge}\n </span>\n ) : null}\n {isDefault ? (\n <span className=\"inline-flex items-center rounded-full bg-[var(--as-secondary)] px-1.5 py-0.5 text-[10px] font-medium text-[var(--as-muted-fg)]\">\n {defaultBadge}\n </span>\n ) : null}\n </span>\n )\n}\n\nexport const ProfileSwitcher = React.forwardRef<HTMLDivElement, ProfileSwitcherProps>(\n function ProfileSwitcher(\n {\n profiles,\n currentId,\n onSelect,\n onCreate,\n onRename,\n onDelete,\n onSetDefault,\n loading = false,\n error = null,\n align = 'start',\n labels,\n icons,\n className,\n },\n ref,\n ) {\n const merged = { ...defaultLabels, ...labels }\n const TriggerIcon = icons?.trigger ?? UserRound\n const CreateIcon = icons?.create ?? Plus\n const RenameIcon = icons?.rename ?? Pencil\n const SetDefaultIcon = icons?.setDefault ?? Star\n const DeleteIcon = icons?.delete ?? Trash2\n const EmptyIcon = icons?.empty ?? UserRound\n\n const [open, setOpen] = React.useState(false)\n const [draftName, setDraftName] = React.useState('')\n const [renamingId, setRenamingId] = React.useState<string | null>(null)\n const [renameDraft, setRenameDraft] = React.useState('')\n const renameInputRef = React.useRef<HTMLInputElement>(null)\n\n const current = profiles.find((profile) => profile.id === currentId) ?? profiles[0] ?? null\n\n const close = React.useCallback(() => {\n setOpen(false)\n setRenamingId(null)\n setDraftName('')\n }, [])\n\n React.useEffect(() => {\n if (renamingId !== null) {\n renameInputRef.current?.focus()\n renameInputRef.current?.select()\n }\n }, [renamingId])\n\n const startRename = (profile: ProfileItem) => {\n setRenamingId(profile.id)\n setRenameDraft(profile.name)\n }\n\n const submitRename = async (profile: ProfileItem) => {\n const name = renameDraft.trim()\n if (!name || name === profile.name) {\n setRenamingId(null)\n return\n }\n await onRename(profile, name)\n setRenamingId(null)\n }\n\n const submitCreate = async (event: React.FormEvent) => {\n event.preventDefault()\n const name = draftName.trim()\n if (!name) return\n await onCreate(name)\n setDraftName('')\n }\n\n // Roving arrows: ↓/↑ (and Home/End) walk the profile rows without\n // leaving the panel; Tab keeps the DOM order (select → actions).\n const onListKeyDown = (event: React.KeyboardEvent<HTMLUListElement>) => {\n const rows = Array.from(\n event.currentTarget.querySelectorAll<HTMLButtonElement>('[data-profile-row]'),\n )\n if (rows.length === 0) return\n const index = rows.indexOf(document.activeElement as HTMLButtonElement)\n let next = -1\n if (event.key === 'ArrowDown') next = index < 0 ? 0 : Math.min(index + 1, rows.length - 1)\n else if (event.key === 'ArrowUp')\n next = index < 0 ? rows.length - 1 : Math.max(index - 1, 0)\n else if (event.key === 'Home') next = 0\n else if (event.key === 'End') next = rows.length - 1\n if (next >= 0) {\n event.preventDefault()\n rows[next]?.focus()\n }\n }\n\n return (\n <div ref={ref} data-as=\"profile-switcher\" className={cn('inline-block', className)}>\n <Popover\n open={open}\n onOpenChange={(next) => {\n setOpen(next)\n if (!next) {\n setRenamingId(null)\n setDraftName('')\n }\n }}\n >\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-label={merged.trigger}\n data-testid=\"profile-trigger\"\n className=\"flex cursor-pointer items-center gap-2 rounded-full p-0.5 pr-2 transition-colors hover:bg-[var(--as-secondary)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n {current ? (\n <ProfileAvatar profile={current} size=\"md\" />\n ) : (\n <span\n aria-hidden\n className=\"flex size-8 shrink-0 items-center justify-center rounded-full ring-1 ring-[var(--as-border)]\"\n >\n <TriggerIcon className=\"size-4 text-[var(--as-muted-fg)]\" />\n </span>\n )}\n <span className=\"max-w-32 truncate text-sm font-medium\">\n {current ? current.name : merged.empty}\n </span>\n <ChevronDown\n aria-hidden\n className=\"size-3.5 text-[var(--as-muted-fg)] transition-transform duration-150 [[data-state=open]>&]:rotate-180\"\n />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align={align}\n role=\"dialog\"\n aria-label={merged.panelTitle}\n className=\"w-80 p-1.5 shadow-[var(--as-shadow-pop)] backdrop-blur-xl\"\n onEscapeKeyDown={(event) => {\n // Escape cancels an inline rename first, closes the panel\n // only on the second press.\n if (renamingId !== null) event.preventDefault()\n }}\n >\n <div className=\"flex items-center justify-between px-2 pb-1 pt-1\">\n <span className=\"text-[11px] font-semibold uppercase tracking-wide text-[var(--as-muted-fg)]\">\n {merged.panelTitle}\n </span>\n {profiles.length > 0 ? (\n <span className=\"text-[11px] tabular-nums text-[var(--as-muted-fg)]\">\n {profiles.length}\n </span>\n ) : null}\n </div>\n {loading ? (\n <p\n className=\"as-anim-fade px-2 py-3 text-sm text-[var(--as-muted-fg)]\"\n role=\"status\"\n >\n {merged.loading}\n </p>\n ) : profiles.length === 0 ? (\n <p className=\"flex items-center gap-2 px-2 py-3 text-sm text-[var(--as-muted-fg)]\">\n <EmptyIcon aria-hidden className=\"size-4\" />\n {merged.empty}\n </p>\n ) : (\n <ul\n className=\"max-h-72 space-y-0.5 overflow-y-auto\"\n onKeyDown={onListKeyDown}\n >\n {profiles.map((profile) => {\n const isCurrent = current !== null && profile.id === current.id\n return (\n <li\n key={profile.id}\n className=\"flex items-center gap-1 rounded-[var(--as-radius-sm)] px-0.5 py-0.5 hover:bg-[var(--as-secondary)]\"\n >\n {renamingId === profile.id ? (\n <form\n className=\"flex w-full items-center gap-1 py-0.5\"\n onSubmit={(event) => {\n event.preventDefault()\n void submitRename(profile)\n }}\n >\n <Input\n ref={renameInputRef}\n aria-label={merged.rename(profile.name)}\n placeholder={merged.renamePlaceholder}\n value={renameDraft}\n onChange={(event) => setRenameDraft(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n setRenamingId(null)\n }\n }}\n className=\"h-8 flex-1\"\n />\n <Button\n type=\"submit\"\n size=\"sm\"\n className=\"h-8\"\n disabled={!renameDraft.trim()}\n aria-label={merged.renameSubmit}\n >\n {merged.renameSubmit}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-8\"\n aria-label={merged.cancel}\n onClick={() => setRenamingId(null)}\n >\n {merged.cancel}\n </Button>\n </form>\n ) : (\n <>\n <button\n type=\"button\"\n aria-current={isCurrent || undefined}\n data-profile-row\n data-testid={`profile-option-${profile.id}`}\n className=\"flex min-w-0 flex-1 cursor-pointer items-center gap-2.5 rounded-[var(--as-radius-sm)] px-1.5 py-1.5 text-left text-sm outline-none transition-colors hover:bg-[var(--as-secondary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] aria-current:bg-[color-mix(in_srgb,var(--as-accent)_8%,transparent)]\"\n onClick={() => {\n onSelect(profile)\n close()\n }}\n >\n <ProfileAvatar profile={profile} size=\"md\" />\n <span className=\"min-w-0 flex-1 truncate font-medium\">\n {profile.name}\n </span>\n <ProfileRowBadges\n isCurrent={isCurrent}\n isDefault={Boolean(profile.is_default)}\n currentBadge={merged.currentBadge}\n defaultBadge={merged.defaultBadge}\n />\n </button>\n <span className=\"flex shrink-0 items-center gap-0.5 pr-0.5\">\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-7 rounded-[var(--as-radius-sm)]\"\n aria-label={merged.rename(profile.name)}\n title={merged.rename(profile.name)}\n onClick={() => startRename(profile)}\n >\n <RenameIcon aria-hidden />\n </Button>\n {onSetDefault && !profile.is_default ? (\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-7 rounded-[var(--as-radius-sm)]\"\n aria-label={merged.setDefault(profile.name)}\n title={merged.setDefault(profile.name)}\n onClick={() => void onSetDefault(profile)}\n >\n <SetDefaultIcon aria-hidden />\n </Button>\n ) : null}\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-7 rounded-[var(--as-radius-sm)] hover:text-[var(--as-danger)]\"\n aria-label={merged.delete(profile.name)}\n title={merged.delete(profile.name)}\n onClick={() => void onDelete(profile)}\n >\n <DeleteIcon aria-hidden />\n </Button>\n </span>\n </>\n )}\n </li>\n )\n })}\n </ul>\n )}\n {error ? (\n <p\n role=\"alert\"\n className=\"mx-1 mt-1 rounded-[var(--as-radius-sm)] bg-[color-mix(in_srgb,var(--as-danger)_10%,transparent)] px-2 py-1 text-xs text-[var(--as-danger)]\"\n >\n {error}\n </p>\n ) : null}\n <form\n className=\"mt-1 flex items-center gap-1.5 border-t border-[var(--as-border)] p-1.5 pt-2\"\n onSubmit={(event) => {\n void submitCreate(event)\n }}\n >\n <div className=\"relative min-w-0 flex-1\">\n <CreateIcon\n aria-hidden\n className=\"pointer-events-none absolute left-2.5 top-1/2 size-3.5 -translate-y-1/2 text-[var(--as-muted-fg)]\"\n />\n <Input\n aria-label={merged.newProfile}\n placeholder={merged.newProfilePlaceholder}\n value={draftName}\n onChange={(event) => setDraftName(event.target.value)}\n className=\"h-8 pl-8\"\n />\n </div>\n <Button\n type=\"submit\"\n size=\"sm\"\n className=\"h-8 gap-1 px-2.5\"\n disabled={!draftName.trim()}\n aria-label={merged.create}\n >\n <CreateIcon aria-hidden />\n {merged.create}\n </Button>\n </form>\n </PopoverContent>\n </Popover>\n </div>\n )\n },\n)\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/profile-switcher/ProfileSwitcher.tsx"],"names":["ProfileSwitcher"],"mappings":"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","file":"chunk-6ANLDUGL.js","sourcesContent":["import * as React from 'react'\nimport {\n Check,\n ChevronDown,\n Pencil,\n Plus,\n Star,\n Trash2,\n UserRound,\n type LucideIcon,\n} from 'lucide-react'\n\nimport { cn } from '../../lib/utils'\nimport { Button } from '../button/Button'\nimport { Input } from '../input/Input'\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover/Popover'\n\nexport interface ProfileItem {\n id: string\n name: string\n is_default?: boolean\n color?: string | null\n}\n\nexport interface ProfileSwitcherLabels {\n trigger: string\n panelTitle: string\n currentBadge: string\n defaultBadge: string\n newProfile: string\n newProfilePlaceholder: string\n create: string\n rename: (name: string) => string\n renamePlaceholder: string\n renameSubmit: string\n setDefault: (name: string) => string\n delete: (name: string) => string\n cancel: string\n loading: string\n empty: string\n}\n\nexport interface ProfileSwitcherIcons {\n trigger?: LucideIcon\n create?: LucideIcon\n rename?: LucideIcon\n setDefault?: LucideIcon\n delete?: LucideIcon\n empty?: LucideIcon\n}\n\nexport interface ProfileSwitcherProps {\n profiles: ProfileItem[]\n currentId: string | null\n onSelect: (profile: ProfileItem) => void\n onCreate: (name: string) => void | Promise<unknown>\n onRename: (profile: ProfileItem, name: string) => void | Promise<unknown>\n onDelete: (profile: ProfileItem) => void | Promise<unknown>\n /** When given, rows expose a \"make Default\" action (identity-auth §12). */\n onSetDefault?: (profile: ProfileItem) => void | Promise<unknown>\n loading?: boolean\n error?: string | null\n align?: 'start' | 'end'\n labels?: Partial<ProfileSwitcherLabels>\n icons?: ProfileSwitcherIcons\n className?: string\n}\n\nconst defaultLabels: ProfileSwitcherLabels = {\n trigger: 'Switch profile',\n panelTitle: 'Profiles',\n currentBadge: 'Current',\n defaultBadge: 'Default',\n newProfile: 'New profile',\n newProfilePlaceholder: 'Profile name',\n create: 'Create',\n rename: (name) => `Rename ${name}`,\n renamePlaceholder: 'Profile name',\n renameSubmit: 'Save',\n setDefault: (name) => `Make ${name} the default profile`,\n delete: (name) => `Delete ${name}`,\n cancel: 'Cancel',\n loading: 'Loading profiles…',\n empty: 'No profiles yet',\n}\n\nfunction ProfileAvatar({\n profile,\n size = 'sm',\n}: {\n profile: ProfileItem\n size?: 'sm' | 'md'\n}) {\n const letter = (profile.name.trim()[0] ?? '?').toUpperCase()\n return (\n <span\n aria-hidden\n className={cn(\n 'flex shrink-0 items-center justify-center rounded-full font-semibold ring-1 ring-[var(--as-border)]',\n size === 'md' ? 'size-8 text-xs' : 'size-6 text-[10px]',\n )}\n style={\n profile.color\n ? { backgroundColor: `${profile.color}22`, color: profile.color }\n : {\n backgroundColor: 'var(--as-secondary)',\n color: 'var(--as-muted-fg)',\n }\n }\n >\n {profile.color ? (\n letter\n ) : (\n <UserRound className={size === 'md' ? 'size-4' : 'size-3.5'} />\n )}\n </span>\n )\n}\n\n/** Status pills on a row: accent \"Current\" when active, muted \"Default\". */\nfunction ProfileRowBadges({\n isCurrent,\n isDefault,\n currentBadge,\n defaultBadge,\n}: {\n isCurrent: boolean\n isDefault: boolean\n currentBadge: string\n defaultBadge: string\n}) {\n if (!isCurrent && !isDefault) return null\n return (\n <span className=\"flex shrink-0 items-center gap-1\">\n {isCurrent ? (\n <span\n className=\"inline-flex items-center gap-1 rounded-full px-1.5 py-0.5 text-[10px] font-medium\"\n style={{\n backgroundColor: 'color-mix(in srgb, var(--as-accent) 12%, transparent)',\n color: 'var(--as-accent)',\n }}\n >\n <Check aria-hidden className=\"size-3\" />\n {currentBadge}\n </span>\n ) : null}\n {isDefault ? (\n <span className=\"inline-flex items-center rounded-full bg-[var(--as-secondary)] px-1.5 py-0.5 text-[10px] font-medium text-[var(--as-muted-fg)]\">\n {defaultBadge}\n </span>\n ) : null}\n </span>\n )\n}\n\nexport const ProfileSwitcher = React.forwardRef<HTMLDivElement, ProfileSwitcherProps>(\n function ProfileSwitcher(\n {\n profiles,\n currentId,\n onSelect,\n onCreate,\n onRename,\n onDelete,\n onSetDefault,\n loading = false,\n error = null,\n align = 'start',\n labels,\n icons,\n className,\n },\n ref,\n ) {\n const merged = { ...defaultLabels, ...labels }\n const TriggerIcon = icons?.trigger ?? UserRound\n const CreateIcon = icons?.create ?? Plus\n const RenameIcon = icons?.rename ?? Pencil\n const SetDefaultIcon = icons?.setDefault ?? Star\n const DeleteIcon = icons?.delete ?? Trash2\n const EmptyIcon = icons?.empty ?? UserRound\n\n const [open, setOpen] = React.useState(false)\n const [draftName, setDraftName] = React.useState('')\n const [renamingId, setRenamingId] = React.useState<string | null>(null)\n const [renameDraft, setRenameDraft] = React.useState('')\n const renameInputRef = React.useRef<HTMLInputElement>(null)\n\n const current = profiles.find((profile) => profile.id === currentId) ?? profiles[0] ?? null\n\n const close = React.useCallback(() => {\n setOpen(false)\n setRenamingId(null)\n setDraftName('')\n }, [])\n\n React.useEffect(() => {\n if (renamingId !== null) {\n renameInputRef.current?.focus()\n renameInputRef.current?.select()\n }\n }, [renamingId])\n\n const startRename = (profile: ProfileItem) => {\n setRenamingId(profile.id)\n setRenameDraft(profile.name)\n }\n\n const submitRename = async (profile: ProfileItem) => {\n const name = renameDraft.trim()\n if (!name || name === profile.name) {\n setRenamingId(null)\n return\n }\n await onRename(profile, name)\n setRenamingId(null)\n }\n\n const submitCreate = async (event: React.FormEvent) => {\n event.preventDefault()\n const name = draftName.trim()\n if (!name) return\n await onCreate(name)\n setDraftName('')\n }\n\n // Roving arrows: ↓/↑ (and Home/End) walk the profile rows without\n // leaving the panel; Tab keeps the DOM order (select → actions).\n const onListKeyDown = (event: React.KeyboardEvent<HTMLUListElement>) => {\n const rows = Array.from(\n event.currentTarget.querySelectorAll<HTMLButtonElement>('[data-profile-row]'),\n )\n if (rows.length === 0) return\n const index = rows.indexOf(document.activeElement as HTMLButtonElement)\n let next = -1\n if (event.key === 'ArrowDown') next = index < 0 ? 0 : Math.min(index + 1, rows.length - 1)\n else if (event.key === 'ArrowUp')\n next = index < 0 ? rows.length - 1 : Math.max(index - 1, 0)\n else if (event.key === 'Home') next = 0\n else if (event.key === 'End') next = rows.length - 1\n if (next >= 0) {\n event.preventDefault()\n rows[next]?.focus()\n }\n }\n\n return (\n <div ref={ref} data-as=\"profile-switcher\" className={cn('inline-block', className)}>\n <Popover\n open={open}\n onOpenChange={(next) => {\n setOpen(next)\n if (!next) {\n setRenamingId(null)\n setDraftName('')\n }\n }}\n >\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-label={merged.trigger}\n data-testid=\"profile-trigger\"\n className=\"flex cursor-pointer items-center gap-2 rounded-full p-0.5 pr-2 transition-colors hover:bg-[var(--as-secondary)] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n {current ? (\n <ProfileAvatar profile={current} size=\"md\" />\n ) : (\n <span\n aria-hidden\n className=\"flex size-8 shrink-0 items-center justify-center rounded-full ring-1 ring-[var(--as-border)]\"\n >\n <TriggerIcon className=\"size-4 text-[var(--as-muted-fg)]\" />\n </span>\n )}\n <span className=\"max-w-32 truncate text-sm font-medium\">\n {current ? current.name : merged.empty}\n </span>\n <ChevronDown\n aria-hidden\n className=\"size-3.5 text-[var(--as-muted-fg)] transition-transform duration-150 [[data-state=open]>&]:rotate-180\"\n />\n </button>\n </PopoverTrigger>\n <PopoverContent\n align={align}\n role=\"dialog\"\n aria-label={merged.panelTitle}\n className=\"w-80 p-1.5 shadow-[var(--as-shadow-pop)] backdrop-blur-xl\"\n onEscapeKeyDown={(event) => {\n // Escape cancels an inline rename first, closes the panel\n // only on the second press.\n if (renamingId !== null) event.preventDefault()\n }}\n >\n <div className=\"flex items-center justify-between px-2 pb-1 pt-1\">\n <span className=\"text-[11px] font-semibold uppercase tracking-wide text-[var(--as-muted-fg)]\">\n {merged.panelTitle}\n </span>\n {profiles.length > 0 ? (\n <span className=\"text-[11px] tabular-nums text-[var(--as-muted-fg)]\">\n {profiles.length}\n </span>\n ) : null}\n </div>\n {loading ? (\n <p\n className=\"as-anim-fade px-2 py-3 text-sm text-[var(--as-muted-fg)]\"\n role=\"status\"\n >\n {merged.loading}\n </p>\n ) : profiles.length === 0 ? (\n <p className=\"flex items-center gap-2 px-2 py-3 text-sm text-[var(--as-muted-fg)]\">\n <EmptyIcon aria-hidden className=\"size-4\" />\n {merged.empty}\n </p>\n ) : (\n <ul\n className=\"max-h-72 space-y-0.5 overflow-y-auto\"\n onKeyDown={onListKeyDown}\n >\n {profiles.map((profile) => {\n const isCurrent = current !== null && profile.id === current.id\n return (\n <li\n key={profile.id}\n className=\"flex items-center gap-1 rounded-[var(--as-radius-sm)] px-0.5 py-0.5 hover:bg-[var(--as-secondary)]\"\n >\n {renamingId === profile.id ? (\n <form\n className=\"flex w-full items-center gap-1 py-0.5\"\n onSubmit={(event) => {\n event.preventDefault()\n void submitRename(profile)\n }}\n >\n <Input\n ref={renameInputRef}\n aria-label={merged.rename(profile.name)}\n placeholder={merged.renamePlaceholder}\n value={renameDraft}\n onChange={(event) => setRenameDraft(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n setRenamingId(null)\n }\n }}\n className=\"h-8 flex-1\"\n />\n <Button\n type=\"submit\"\n size=\"sm\"\n className=\"h-8\"\n disabled={!renameDraft.trim()}\n aria-label={merged.renameSubmit}\n >\n {merged.renameSubmit}\n </Button>\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-8\"\n aria-label={merged.cancel}\n onClick={() => setRenamingId(null)}\n >\n {merged.cancel}\n </Button>\n </form>\n ) : (\n <>\n <button\n type=\"button\"\n aria-current={isCurrent || undefined}\n data-profile-row\n data-testid={`profile-option-${profile.id}`}\n className=\"flex min-w-0 flex-1 cursor-pointer items-center gap-2.5 rounded-[var(--as-radius-sm)] px-1.5 py-1.5 text-left text-sm outline-none transition-colors hover:bg-[var(--as-secondary)] focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)] aria-current:bg-[color-mix(in_srgb,var(--as-accent)_8%,transparent)]\"\n onClick={() => {\n onSelect(profile)\n close()\n }}\n >\n <ProfileAvatar profile={profile} size=\"md\" />\n <span className=\"min-w-0 flex-1 truncate font-medium\">\n {profile.name}\n </span>\n <ProfileRowBadges\n isCurrent={isCurrent}\n isDefault={Boolean(profile.is_default)}\n currentBadge={merged.currentBadge}\n defaultBadge={merged.defaultBadge}\n />\n </button>\n <span className=\"flex shrink-0 items-center gap-0.5 pr-0.5\">\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-7 rounded-[var(--as-radius-sm)]\"\n aria-label={merged.rename(profile.name)}\n title={merged.rename(profile.name)}\n onClick={() => startRename(profile)}\n >\n <RenameIcon aria-hidden />\n </Button>\n {onSetDefault && !profile.is_default ? (\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-7 rounded-[var(--as-radius-sm)]\"\n aria-label={merged.setDefault(profile.name)}\n title={merged.setDefault(profile.name)}\n onClick={() => void onSetDefault(profile)}\n >\n <SetDefaultIcon aria-hidden />\n </Button>\n ) : null}\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-7 rounded-[var(--as-radius-sm)] hover:text-[var(--as-danger)]\"\n aria-label={merged.delete(profile.name)}\n title={merged.delete(profile.name)}\n onClick={() => void onDelete(profile)}\n >\n <DeleteIcon aria-hidden />\n </Button>\n </span>\n </>\n )}\n </li>\n )\n })}\n </ul>\n )}\n {error ? (\n <p\n role=\"alert\"\n className=\"mx-1 mt-1 rounded-[var(--as-radius-sm)] bg-[color-mix(in_srgb,var(--as-danger)_10%,transparent)] px-2 py-1 text-xs text-[var(--as-danger)]\"\n >\n {error}\n </p>\n ) : null}\n <form\n className=\"mt-1 flex items-center gap-1.5 border-t border-[var(--as-border)] p-1.5 pt-2\"\n onSubmit={(event) => {\n void submitCreate(event)\n }}\n >\n <div className=\"relative min-w-0 flex-1\">\n <CreateIcon\n aria-hidden\n className=\"pointer-events-none absolute left-2.5 top-1/2 size-3.5 -translate-y-1/2 text-[var(--as-muted-fg)]\"\n />\n <Input\n aria-label={merged.newProfile}\n placeholder={merged.newProfilePlaceholder}\n value={draftName}\n onChange={(event) => setDraftName(event.target.value)}\n className=\"h-8 pl-8\"\n />\n </div>\n <Button\n type=\"submit\"\n size=\"sm\"\n className=\"h-8 gap-1 px-2.5\"\n disabled={!draftName.trim()}\n aria-label={merged.create}\n >\n <CreateIcon aria-hidden />\n {merged.create}\n </Button>\n </form>\n </PopoverContent>\n </Popover>\n </div>\n )\n },\n)\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Combobox } from './chunk-
|
|
1
|
+
import { Combobox } from './chunk-SVRCZUNQ.js';
|
|
2
2
|
import { cn } from './chunk-RVVXVTH3.js';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
@@ -61,5 +61,5 @@ var ModelPicker = React.forwardRef(
|
|
|
61
61
|
);
|
|
62
62
|
|
|
63
63
|
export { ModelPicker };
|
|
64
|
-
//# sourceMappingURL=chunk-
|
|
65
|
-
//# sourceMappingURL=chunk-
|
|
64
|
+
//# sourceMappingURL=chunk-CCFVDJHU.js.map
|
|
65
|
+
//# sourceMappingURL=chunk-CCFVDJHU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/model-picker/ModelPicker.tsx"],"names":["ModelPicker"],"mappings":";;;;;AA+CO,IAAM,WAAA,GAAoB,KAAA,CAAA,UAAA;AAAA,EAC/B,SAASA,YAAAA,CACP;AAAA,IACE,SAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA,GAAc,sBAAA;AAAA,IACd,iBAAA,GAAoB,qBAAA;AAAA,IACpB,WAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA,GAAU,KAAA;AAAA,IACV,QAAA,GAAW,KAAA;AAAA,IACX,SAAA,GAAY,KAAA;AAAA,IACZ,UAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,GAAY,KAAA;AAAA,IACZ,KAAA;AAAA,IACA,EAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,KAEF,GAAA,EACA;AACA,IAAA,MAAM,OAAA,GAAkC,KAAA,CAAA,OAAA;AAAA,MACtC,MACE,SAAA,CAAU,OAAA;AAAA,QAAQ,CAAC,QAAA,KACjB,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,UAC9B,OAAO,KAAA,CAAM,EAAA;AAAA,UACb,OAAO,KAAA,CAAM,IAAA;AAAA,UACb,OAAO,QAAA,CAAS,IAAA;AAAA,UAChB,OAAO,KAAA,CAAM;AAAA,SACf,CAAE;AAAA,OACJ;AAAA,MACF,CAAC,SAAS;AAAA,KACZ;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,OAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA;AAAA,QACA,iBAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QACA,OAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA,EAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,SAAS,CAAA;AAAA,QACjC;AAAA;AAAA,KACF;AAAA,EAEJ;AACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/model-picker/ModelPicker.tsx"],"names":["ModelPicker"],"mappings":";;;;;AA+CO,IAAM,WAAA,GAAoB,KAAA,CAAA,UAAA;AAAA,EAC/B,SAASA,YAAAA,CACP;AAAA,IACE,SAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA,GAAc,sBAAA;AAAA,IACd,iBAAA,GAAoB,qBAAA;AAAA,IACpB,WAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA,GAAU,KAAA;AAAA,IACV,QAAA,GAAW,KAAA;AAAA,IACX,SAAA,GAAY,KAAA;AAAA,IACZ,UAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,GAAY,KAAA;AAAA,IACZ,KAAA;AAAA,IACA,EAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,KAEF,GAAA,EACA;AACA,IAAA,MAAM,OAAA,GAAkC,KAAA,CAAA,OAAA;AAAA,MACtC,MACE,SAAA,CAAU,OAAA;AAAA,QAAQ,CAAC,QAAA,KACjB,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,UAC9B,OAAO,KAAA,CAAM,EAAA;AAAA,UACb,OAAO,KAAA,CAAM,IAAA;AAAA,UACb,OAAO,QAAA,CAAS,IAAA;AAAA,UAChB,OAAO,KAAA,CAAM;AAAA,SACf,CAAE;AAAA,OACJ;AAAA,MACF,CAAC,SAAS;AAAA,KACZ;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,OAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA;AAAA,QACA,iBAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QACA,OAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA;AAAA,QACA,EAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,QAAA,EAAU,SAAS,CAAA;AAAA,QACjC;AAAA;AAAA,KACF;AAAA,EAEJ;AACF","file":"chunk-CCFVDJHU.js","sourcesContent":["import * as React from 'react'\nimport { cn } from '../../lib/utils'\nimport {\n Combobox,\n type ComboboxOption,\n} from '../combobox'\n\nexport interface ModelPickerModel {\n id: string\n name: string\n /** Short capability chip, e.g. `vision` or `tools`. */\n capability?: string\n /** Full capability set, matched by TaskAssignmentPicker `requires`. */\n capabilities?: string[]\n}\n\nexport interface ModelPickerProvider {\n id: string\n name: string\n models: ModelPickerModel[]\n}\n\nexport interface ModelPickerProps {\n providers: ModelPickerProvider[]\n value?: string\n onChange: (modelId: string) => void\n placeholder?: string\n searchPlaceholder?: string\n searchLabel?: string\n emptyLabel?: string\n loading?: boolean\n disabled?: boolean\n clearable?: boolean\n clearLabel?: string\n label?: string\n /** Keep the accessible name from `label` but do not render it visibly. */\n hideLabel?: boolean\n error?: string\n id?: string\n className?: string\n panelClassName?: string\n}\n\n/**\n * Grouped, searchable provider → model picker. Presentational: the model\n * list comes in via props, selection goes out via `onChange`.\n */\nexport const ModelPicker = React.forwardRef<HTMLButtonElement, ModelPickerProps>(\n function ModelPicker(\n {\n providers,\n value,\n onChange,\n placeholder = 'Select a model…',\n searchPlaceholder = 'Search models…',\n searchLabel,\n emptyLabel,\n loading = false,\n disabled = false,\n clearable = false,\n clearLabel,\n label,\n hideLabel = false,\n error,\n id,\n className,\n panelClassName,\n },\n ref,\n ) {\n const options: ComboboxOption[] = React.useMemo(\n () =>\n providers.flatMap((provider) =>\n provider.models.map((model) => ({\n value: model.id,\n label: model.name,\n group: provider.name,\n badge: model.capability,\n })),\n ),\n [providers],\n )\n\n return (\n <Combobox\n ref={ref}\n options={options}\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n searchPlaceholder={searchPlaceholder}\n searchLabel={searchLabel}\n emptyLabel={emptyLabel}\n loading={loading}\n disabled={disabled}\n clearable={clearable}\n clearLabel={clearLabel}\n label={label}\n hideLabel={hideLabel}\n error={error}\n id={id}\n className={cn('w-full', className)}\n panelClassName={panelClassName}\n />\n )\n },\n)\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { MarkdownSurface } from './chunk-HQ3X5SVR.js';
|
|
2
1
|
import { computeUnitDiff } from './chunk-QLP7K3PY.js';
|
|
2
|
+
import { MarkdownSurface } from './chunk-HQ3X5SVR.js';
|
|
3
3
|
import { cn } from './chunk-RVVXVTH3.js';
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import { useState, useRef, useMemo, useEffect } from 'react';
|
|
@@ -353,5 +353,5 @@ var MarkdownDiffView = React.forwardRef(function MarkdownDiffView2({
|
|
|
353
353
|
});
|
|
354
354
|
|
|
355
355
|
export { MarkdownDiffView, splitMarkdownBlocks };
|
|
356
|
-
//# sourceMappingURL=chunk-
|
|
357
|
-
//# sourceMappingURL=chunk-
|
|
356
|
+
//# sourceMappingURL=chunk-MFM4W6ZO.js.map
|
|
357
|
+
//# sourceMappingURL=chunk-MFM4W6ZO.js.map
|