@neuronection/assistant-ui 0.10.0 → 0.12.0

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.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/model-registry/ModelRegistry.tsx"],"names":["ModelRegistry"],"mappings":"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","file":"chunk-HGJ5HINX.js","sourcesContent":["import * as React from 'react'\nimport { Check, ChevronDown, ChevronRight, Pencil, Plus, Trash2 } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../button'\nimport { CapabilityChips, type CapabilityDescriptor } from '../capability-chips'\nimport { SearchInput } from '../search-input'\nimport { Spinner } from '../spinner'\n\nexport interface ModelRegistryProvider {\n id: string\n name: string\n type?: string\n baseUrl?: string\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 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}\n\nexport interface ModelRegistryPatch {\n label?: string\n caps?: string[]\n enabled?: boolean\n reasoningEffort?: string\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 rank?: (items: ModelRegistryRemoteModel[], query: string) => ModelRegistryRemoteModel[]\n reasoningEffortOptions?: string[]\n addLabel?: string\n addedLabel?: string\n addAllLabel?: string\n configureLabel?: string\n editLabel?: string\n removeLabel?: string\n enabledLabel?: string\n missingLabel?: string\n capsLabel?: string\n searchPlaceholder?: string\n searchLabel?: string\n capFilterLabel?: string\n unclassifiedLabel?: string\n emptyProviderLabel?: string\n remoteEmptyLabel?: string\n remoteLoadingLabel?: string\n retryLabel?: string\n manualAddLabel?: string\n externalIdLabel?: string\n labelLabel?: string\n reasoningEffortLabel?: string\n reasoningEffortPlaceholder?: string\n saveLabel?: string\n cancelLabel?: string\n addDraftLabel?: string\n providersEmptyLabel?: string\n emptyAction?: React.ReactNode\n className?: string\n}\n\nconst UNCLASSIFIED = '__unclassified__'\n\ninterface DraftState {\n key: string\n mode: 'add' | 'edit'\n providerId: string\n externalId: string\n label: string\n caps: string[]\n reasoningEffort: string\n model?: ModelRegistryModel\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 rank,\n reasoningEffortOptions,\n addLabel = 'Add',\n addedLabel = 'Added',\n addAllLabel = 'Add all',\n configureLabel = 'Configure',\n editLabel = 'Edit',\n removeLabel = 'Remove',\n enabledLabel = 'Enabled',\n missingLabel = 'Missing',\n capsLabel = 'Capabilities',\n searchPlaceholder = 'Search models…',\n searchLabel = 'Search models',\n capFilterLabel = 'Filter by capability',\n unclassifiedLabel = 'Unclassified',\n emptyProviderLabel = 'No models yet — add from the catalog below.',\n remoteEmptyLabel = 'No models match.',\n remoteLoadingLabel = 'Loading models…',\n retryLabel = 'Retry',\n manualAddLabel = 'Add manually',\n externalIdLabel = 'Model ID',\n labelLabel = 'Display label',\n reasoningEffortLabel = 'Reasoning effort',\n reasoningEffortPlaceholder,\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 [query, setQuery] = React.useState('')\n const [capFilter, setCapFilter] = React.useState<string | null>(null)\n const [draft, setDraft] = React.useState<DraftState | 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 filteredRemote = React.useMemo(() => {\n const items = remoteModels ?? []\n const needle = query.trim().toLowerCase()\n const ranked =\n needle && rank ? rank(items, query) : items\n const searched =\n needle && !rank\n ? ranked.filter((item) => item.id.toLowerCase().includes(needle))\n : ranked\n if (capFilter === UNCLASSIFIED) return searched.filter((item) => item.caps.length === 0)\n if (capFilter) return searched.filter((item) => item.caps.includes(capFilter))\n return searched\n }, [remoteModels, query, capFilter, rank])\n\n const filterDescriptors: CapabilityDescriptor[] = React.useMemo(\n () => [...caps, { value: UNCLASSIFIED, label: unclassifiedLabel }],\n [caps, unclassifiedLabel],\n )\n\n const pendingRemote = React.useMemo(() => {\n const expanded = providers.find((provider) => provider.id === expandedProviderId)\n if (!expanded) return []\n const existingIds = new Set(\n models\n .filter((model) => model.providerId === expanded.id)\n .map((model) => model.externalId),\n )\n return filteredRemote.filter((remote) => !existingIds.has(remote.id))\n }, [filteredRemote, providers, expandedProviderId, models])\n\n const resetDraft = React.useCallback(() => {\n setDraft(null)\n setDraftError(null)\n }, [])\n\n const toggleProvider = (providerId: string) => {\n const next = expandedProviderId === providerId ? null : providerId\n onExpandedProviderChange(next)\n setQuery('')\n setCapFilter(null)\n resetDraft()\n }\n\n const openAddDraft = (providerId: string, remote: ModelRegistryRemoteModel) => {\n setDraft({\n key: `remote:${remote.id}`,\n mode: 'add',\n providerId,\n externalId: remote.id,\n label: '',\n caps: [...remote.caps],\n reasoningEffort: '',\n })\n setDraftError(null)\n }\n\n const openManualDraft = (providerId: string) => {\n setDraft({\n key: `manual:${providerId}`,\n mode: 'add',\n providerId,\n externalId: '',\n label: '',\n caps: caps[0] ? [caps[0].value] : [],\n reasoningEffort: '',\n })\n setDraftError(null)\n }\n\n const openEditDraft = (model: ModelRegistryModel) => {\n setDraft({\n key: `model:${model.id}`,\n mode: 'edit',\n providerId: model.providerId,\n externalId: model.externalId,\n label: model.label ?? '',\n caps: [...model.caps],\n reasoningEffort: model.reasoningEffort ?? '',\n model,\n })\n setDraftError(null)\n }\n\n const toggleDraftCap = (value: string) => {\n setDraft((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 submitDraft = () => {\n if (!draft) return\n const externalId = draft.externalId.trim()\n if (!externalId) {\n setDraftError(externalIdLabel)\n return\n }\n const payload: ModelRegistryDraft = {\n externalId,\n label: draft.label.trim() || undefined,\n caps: draft.caps,\n reasoningEffort: draft.reasoningEffort.trim() || undefined,\n }\n if (draft.mode === 'add') {\n onAddModel(draft.providerId, payload)\n } else if (draft.model) {\n onUpdateModel(draft.model, payload)\n }\n resetDraft()\n }\n\n const renderDraftPanel = () => {\n if (!draft) return null\n const confirmDisabled = draft.mode === 'add' && !draft.externalId.trim()\n return (\n <div\n data-as=\"model-registry-draft\"\n className=\"flex flex-col gap-3 rounded-[var(--as-radius)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-3\"\n >\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n <label className=\"min-w-0 flex-1 space-y-1 text-xs\">\n <span className=\"text-[var(--as-muted-fg)]\">{externalIdLabel}</span>\n <input\n type=\"text\"\n value={draft.externalId}\n disabled={draft.mode === 'edit'}\n onChange={(event) =>\n setDraft((current) =>\n current ? { ...current, externalId: event.target.value } : current,\n )\n }\n className=\"w-full rounded-[var(--as-radius-sm)] border border-[var(--as-border)] bg-[var(--as-surface)] px-2 py-1.5 font-mono text-xs text-[var(--as-fg)] disabled:opacity-60\"\n />\n </label>\n <label className=\"min-w-0 flex-1 space-y-1 text-xs\">\n <span className=\"text-[var(--as-muted-fg)]\">{labelLabel}</span>\n <input\n type=\"text\"\n value={draft.label}\n onChange={(event) =>\n setDraft((current) =>\n current ? { ...current, label: event.target.value } : current,\n )\n }\n className=\"w-full rounded-[var(--as-radius-sm)] border border-[var(--as-border)] bg-[var(--as-surface)] px-2 py-1.5 text-xs text-[var(--as-fg)]\"\n />\n </label>\n </div>\n <div className=\"space-y-1\">\n <span className=\"text-[var(--as-muted-fg)]\">{capsLabel}</span>\n <CapabilityChips\n caps={caps}\n selected={draft.caps}\n onToggle={toggleDraftCap}\n ariaLabel={capsLabel}\n />\n </div>\n {reasoningEffortOptions ? (\n <label className=\"space-y-1 text-xs\">\n <span className=\"text-[var(--as-muted-fg)]\">{reasoningEffortLabel}</span>\n <input\n type=\"text\"\n value={draft.reasoningEffort}\n placeholder={reasoningEffortPlaceholder}\n list=\"as-reasoning-effort-options\"\n onChange={(event) =>\n setDraft((current) =>\n current ? { ...current, reasoningEffort: event.target.value } : current,\n )\n }\n className=\"w-full rounded-[var(--as-radius-sm)] border border-[var(--as-border)] bg-[var(--as-surface)] px-2 py-1.5 text-xs text-[var(--as-fg)]\"\n />\n <datalist id=\"as-reasoning-effort-options\">\n {reasoningEffortOptions.map((option) => (\n <option key={option} value={option} />\n ))}\n </datalist>\n </label>\n ) : null}\n {draftError ? (\n <p className=\"text-xs text-[var(--as-danger)]\">{draftError}</p>\n ) : null}\n <div className=\"flex items-center justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={resetDraft}>\n {cancelLabel}\n </Button>\n <Button\n size=\"sm\"\n disabled={confirmDisabled}\n onClick={submitDraft}\n >\n <Plus aria-hidden />\n {draft.mode === 'add' ? addDraftLabel : saveLabel}\n </Button>\n </div>\n </div>\n )\n }\n\n const renderRemoteRows = (providerId: string) => {\n const providerModels = models.filter((model) => model.providerId === providerId)\n const existingFor = (externalId: string) =>\n providerModels.find((model) => model.externalId === externalId)\n if (remoteState === 'loading') {\n return (\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 )\n }\n if (remoteState === 'error') {\n return (\n <div className=\"flex items-center justify-between gap-2 py-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 )\n }\n if (filteredRemote.length === 0) {\n return (\n <p className=\"py-3 text-center text-xs text-[var(--as-muted-fg)]\">\n {remoteEmptyLabel}\n </p>\n )\n }\n return (\n <div data-as=\"model-registry-catalog\" className=\"flex flex-col gap-1\">\n {filteredRemote.map((remote) => {\n const existing = existingFor(remote.id)\n const expandedRow = draft?.key === `remote:${remote.id}`\n return (\n <div key={remote.id} className=\"flex flex-col gap-2\">\n <div className=\"flex min-w-0 items-center gap-2 rounded-[var(--as-radius-sm)] border border-[var(--as-border)] px-3 py-2\">\n <span className=\"min-w-0 flex-1 truncate font-mono text-xs text-[var(--as-fg)]\">\n {remote.id}\n </span>\n <CapabilityChips\n variant=\"badge\"\n caps={remote.caps.map(descriptorFor)}\n selected={remote.caps}\n />\n <button\n type=\"button\"\n aria-expanded={expandedRow}\n aria-label={`${existing ? editLabel : configureLabel} ${remote.id}`}\n onClick={() => {\n if (expandedRow) {\n resetDraft()\n } else if (existing) {\n openEditDraft(existing)\n } else {\n openAddDraft(providerId, remote)\n }\n }}\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 {expandedRow ? (\n <ChevronDown className=\"size-4\" aria-hidden />\n ) : (\n <ChevronRight className=\"size-4\" aria-hidden />\n )}\n </button>\n {existing?.enabled ? (\n <span className=\"flex shrink-0 items-center gap-1 text-[11px] text-[var(--as-muted-fg)]\">\n <Check className=\"size-3\" aria-hidden />\n {addedLabel}\n </span>\n ) : (\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-label={`${addLabel} ${remote.id}`}\n onClick={() =>\n onAddModel(providerId, { externalId: remote.id, caps: remote.caps })\n }\n >\n <Plus aria-hidden />\n {addLabel}\n </Button>\n )}\n </div>\n {expandedRow ? renderDraftPanel() : null}\n </div>\n )\n })}\n </div>\n )\n }\n\n const renderModelRow = (model: ModelRegistryModel) => {\n const expandedRow = draft?.key === `model:${model.id}`\n return (\n <div key={model.id} className=\"flex flex-col gap-2\">\n <div\n className={cn(\n 'flex min-w-0 items-center gap-2 rounded-[var(--as-radius-sm)] px-2 py-1.5 text-sm',\n model.missing && 'opacity-50',\n )}\n >\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)]\">{missingLabel}</span>\n ) : null}\n <CapabilityChips\n variant=\"badge\"\n caps={model.caps.map(descriptorFor)}\n selected={model.caps}\n />\n <label className=\"flex shrink-0 cursor-pointer items-center gap-1.5 text-xs text-[var(--as-muted-fg)]\">\n <input\n type=\"checkbox\"\n checked={model.enabled}\n onChange={(event) =>\n onUpdateModel(model, { enabled: event.target.checked })\n }\n aria-label={`${enabledLabel} — ${model.externalId}`}\n />\n </label>\n <button\n type=\"button\"\n aria-expanded={expandedRow}\n aria-label={`${editLabel} ${model.externalId}`}\n onClick={() => (expandedRow ? resetDraft() : openEditDraft(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 <Pencil className=\"size-3.5\" aria-hidden />\n </button>\n <button\n type=\"button\"\n aria-label={`${removeLabel} ${model.externalId}`}\n onClick={() => {\n if (expandedRow) resetDraft()\n onDeleteModel(model)\n }}\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 <Trash2 className=\"size-3.5\" aria-hidden />\n </button>\n </div>\n {expandedRow ? renderDraftPanel() : null}\n </div>\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-colors',\n expanded ? 'border-[var(--as-primary)]' : 'border-[var(--as-border)]',\n )}\n >\n <button\n type=\"button\"\n aria-expanded={expanded}\n onClick={() => toggleProvider(provider.id)}\n className=\"flex w-full cursor-pointer items-center gap-3 p-4 text-left focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]\"\n >\n {expanded ? (\n <ChevronDown className=\"size-5 shrink-0 text-[var(--as-muted-fg)]\" aria-hidden />\n ) : (\n <ChevronRight className=\"size-5 shrink-0 text-[var(--as-muted-fg)]\" aria-hidden />\n )}\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex 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-[11px] font-normal text-[var(--as-muted-fg)]\">\n {provider.type}\n </span>\n ) : null}\n <span className=\"text-xs font-normal text-[var(--as-muted-fg)]\">\n {providerModels.filter((model) => model.enabled).length}/\n {providerModels.length}\n </span>\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=\"flex flex-col gap-3 border-t border-[var(--as-border)] p-4\">\n {providerModels.length === 0 ? (\n <p className=\"text-xs text-[var(--as-muted-fg)]\">{emptyProviderLabel}</p>\n ) : (\n <div className=\"flex flex-col gap-1\">\n {providerModels.map(renderModelRow)}\n </div>\n )}\n <div className=\"flex flex-col gap-2 border-t border-[var(--as-border)] pt-3\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <SearchInput\n value={query}\n onChange={(next) => {\n setQuery(next)\n resetDraft()\n }}\n placeholder={searchPlaceholder}\n ariaLabel={searchLabel}\n className=\"max-w-xs flex-1\"\n />\n <CapabilityChips\n caps={filterDescriptors}\n selected={capFilter ? [capFilter] : []}\n onToggle={(value) =>\n setCapFilter((current) => (current === value ? null : value))\n }\n ariaLabel={capFilterLabel}\n />\n <Button variant=\"ghost\" size=\"sm\" onClick={() => openManualDraft(provider.id)}>\n <Plus aria-hidden />\n {manualAddLabel}\n </Button>\n {onAddAll ? (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={remoteState !== 'ready' || pendingRemote.length === 0}\n onClick={() =>\n onAddAll(\n provider.id,\n pendingRemote.map((remote) => ({\n externalId: remote.id,\n caps: remote.caps,\n })),\n )\n }\n >\n <Plus aria-hidden />\n {addAllLabel} ({pendingRemote.length})\n </Button>\n ) : null}\n </div>\n {draft?.key.startsWith('manual:') ? renderDraftPanel() : null}\n {renderRemoteRows(provider.id)}\n </div>\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 </div>\n )\n },\n)\n"]}
@@ -1,68 +0,0 @@
1
- import { cn } from './chunk-BLJWR4ZV.js';
2
- import * as React from 'react';
3
- import { jsx } from 'react/jsx-runtime';
4
-
5
- var CapabilityChips = React.forwardRef(
6
- function CapabilityChips2({
7
- caps,
8
- selected,
9
- onToggle,
10
- variant = "toggle",
11
- minSelected = 0,
12
- disabled = false,
13
- ariaLabel,
14
- className
15
- }, ref) {
16
- const interactive = variant === "toggle" && Boolean(onToggle);
17
- const locked = (value) => interactive && !disabled && selected.includes(value) && selected.length <= minSelected;
18
- return /* @__PURE__ */ jsx(
19
- "div",
20
- {
21
- ref,
22
- "data-as": "capability-chips",
23
- "data-variant": variant,
24
- role: interactive ? "group" : void 0,
25
- "aria-label": interactive ? ariaLabel : void 0,
26
- className: cn("flex flex-wrap items-center gap-1.5", className),
27
- children: caps.map((cap) => {
28
- const on = selected.includes(cap.value);
29
- if (!interactive) {
30
- return /* @__PURE__ */ jsx(
31
- "span",
32
- {
33
- "data-active": on || void 0,
34
- className: cn(
35
- "inline-flex items-center rounded-full border px-2.5 py-0.5 text-[11px]",
36
- on ? "border-[var(--as-primary)] bg-[var(--as-primary)]/10 text-[var(--as-primary)]" : "border-[var(--as-border)] text-[var(--as-muted-fg)]"
37
- ),
38
- children: cap.label
39
- },
40
- cap.value
41
- );
42
- }
43
- return /* @__PURE__ */ jsx(
44
- "button",
45
- {
46
- type: "button",
47
- "aria-pressed": on,
48
- disabled: disabled || locked(cap.value),
49
- onClick: () => onToggle?.(cap.value),
50
- className: cn(
51
- "cursor-pointer rounded-full border px-2.5 py-0.5 text-[11px] transition-colors",
52
- "focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]",
53
- "disabled:pointer-events-none disabled:opacity-50",
54
- on ? "border-[var(--as-primary)] bg-[var(--as-primary)]/10 text-[var(--as-primary)]" : "border-[var(--as-border)] text-[var(--as-muted-fg)] hover:bg-[var(--as-secondary)]"
55
- ),
56
- children: cap.label
57
- },
58
- cap.value
59
- );
60
- })
61
- }
62
- );
63
- }
64
- );
65
-
66
- export { CapabilityChips };
67
- //# sourceMappingURL=chunk-MLQAA2QV.js.map
68
- //# sourceMappingURL=chunk-MLQAA2QV.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/capability-chips/CapabilityChips.tsx"],"names":["CapabilityChips"],"mappings":";;;;AAmBO,IAAM,eAAA,GAAwB,KAAA,CAAA,UAAA;AAAA,EACnC,SAASA,gBAAAA,CACP;AAAA,IACE,IAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA,GAAU,QAAA;AAAA,IACV,WAAA,GAAc,CAAA;AAAA,IACd,QAAA,GAAW,KAAA;AAAA,IACX,SAAA;AAAA,IACA;AAAA,KAEF,GAAA,EACA;AACA,IAAA,MAAM,WAAA,GAAc,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,QAAQ,CAAA;AAC5D,IAAA,MAAM,MAAA,GAAS,CAAC,KAAA,KACd,WAAA,IAAe,CAAC,QAAA,IAAY,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,IAAK,QAAA,CAAS,MAAA,IAAU,WAAA;AAE7E,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAQ,kBAAA;AAAA,QACR,cAAA,EAAc,OAAA;AAAA,QACd,IAAA,EAAM,cAAc,OAAA,GAAU,MAAA;AAAA,QAC9B,YAAA,EAAY,cAAc,SAAA,GAAY,MAAA;AAAA,QACtC,SAAA,EAAW,EAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA;AAAA,QAE7D,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AACjB,UAAA,MAAM,EAAA,GAAK,QAAA,CAAS,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AACtC,UAAA,IAAI,CAAC,WAAA,EAAa;AAChB,YAAA,uBACE,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,eAAa,EAAA,IAAM,MAAA;AAAA,gBACnB,SAAA,EAAW,EAAA;AAAA,kBACT,wEAAA;AAAA,kBACA,KACI,+EAAA,GACA;AAAA,iBACN;AAAA,gBAEC,QAAA,EAAA,GAAA,CAAI;AAAA,eAAA;AAAA,cATA,GAAA,CAAI;AAAA,aAUX;AAAA,UAEJ;AACA,UAAA,uBACE,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,QAAA;AAAA,cACL,cAAA,EAAc,EAAA;AAAA,cACd,QAAA,EAAU,QAAA,IAAY,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAAA,cACtC,OAAA,EAAS,MAAM,QAAA,GAAW,GAAA,CAAI,KAAK,CAAA;AAAA,cACnC,SAAA,EAAW,EAAA;AAAA,gBACT,gFAAA;AAAA,gBACA,qGAAA;AAAA,gBACA,kDAAA;AAAA,gBACA,KACI,+EAAA,GACA;AAAA,eACN;AAAA,cAEC,QAAA,EAAA,GAAA,CAAI;AAAA,aAAA;AAAA,YAdA,GAAA,CAAI;AAAA,WAeX;AAAA,QAEJ,CAAC;AAAA;AAAA,KACH;AAAA,EAEJ;AACF","file":"chunk-MLQAA2QV.js","sourcesContent":["import * as React from 'react'\nimport { cn } from '../../lib/utils'\n\nexport interface CapabilityDescriptor {\n value: string\n label: string\n}\n\nexport interface CapabilityChipsProps {\n caps: CapabilityDescriptor[]\n selected: string[]\n onToggle?: (value: string) => void\n variant?: 'toggle' | 'badge'\n minSelected?: number\n disabled?: boolean\n ariaLabel?: string\n className?: string\n}\n\nexport const CapabilityChips = React.forwardRef<HTMLDivElement, CapabilityChipsProps>(\n function CapabilityChips(\n {\n caps,\n selected,\n onToggle,\n variant = 'toggle',\n minSelected = 0,\n disabled = false,\n ariaLabel,\n className,\n },\n ref,\n ) {\n const interactive = variant === 'toggle' && Boolean(onToggle)\n const locked = (value: string) =>\n interactive && !disabled && selected.includes(value) && selected.length <= minSelected\n\n return (\n <div\n ref={ref}\n data-as=\"capability-chips\"\n data-variant={variant}\n role={interactive ? 'group' : undefined}\n aria-label={interactive ? ariaLabel : undefined}\n className={cn('flex flex-wrap items-center gap-1.5', className)}\n >\n {caps.map((cap) => {\n const on = selected.includes(cap.value)\n if (!interactive) {\n return (\n <span\n key={cap.value}\n data-active={on || undefined}\n className={cn(\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-[11px]',\n on\n ? 'border-[var(--as-primary)] bg-[var(--as-primary)]/10 text-[var(--as-primary)]'\n : 'border-[var(--as-border)] text-[var(--as-muted-fg)]',\n )}\n >\n {cap.label}\n </span>\n )\n }\n return (\n <button\n key={cap.value}\n type=\"button\"\n aria-pressed={on}\n disabled={disabled || locked(cap.value)}\n onClick={() => onToggle?.(cap.value)}\n className={cn(\n 'cursor-pointer rounded-full border px-2.5 py-0.5 text-[11px] transition-colors',\n 'focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n 'disabled:pointer-events-none disabled:opacity-50',\n on\n ? 'border-[var(--as-primary)] bg-[var(--as-primary)]/10 text-[var(--as-primary)]'\n : 'border-[var(--as-border)] text-[var(--as-muted-fg)] hover:bg-[var(--as-secondary)]',\n )}\n >\n {cap.label}\n </button>\n )\n })}\n </div>\n )\n },\n)\n"]}
@@ -1,89 +0,0 @@
1
- import { Input } from './chunk-M4V7XHL7.js';
2
- import { cn } from './chunk-BLJWR4ZV.js';
3
- import * as React from 'react';
4
- import { KeyRound } from 'lucide-react';
5
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
-
7
- var ProviderForm = React.forwardRef(
8
- function ProviderForm2({
9
- name,
10
- onNameChange,
11
- baseUrl,
12
- onBaseUrlChange,
13
- apiKey,
14
- onApiKeyChange,
15
- namePlaceholder = "Provider name",
16
- baseUrlPlaceholder = "https://api.example.com/v1",
17
- nameLabel = "Name",
18
- baseUrlLabel = "API base URL",
19
- apiKeyLabel = "API key",
20
- apiKeyHelp,
21
- hasStoredKey = false,
22
- storedKeyLabel = "Stored \u2014 leave empty to keep",
23
- keyPlaceholder = "sk-\u2026",
24
- error,
25
- children,
26
- className,
27
- ...props
28
- }, ref) {
29
- return /* @__PURE__ */ jsxs(
30
- "div",
31
- {
32
- ref,
33
- "data-as": "provider-form",
34
- className: cn("flex w-full flex-col gap-4", className),
35
- ...props,
36
- children: [
37
- /* @__PURE__ */ jsx(
38
- Input,
39
- {
40
- label: nameLabel,
41
- value: name,
42
- onChange: (event) => onNameChange(event.target.value),
43
- placeholder: namePlaceholder
44
- }
45
- ),
46
- /* @__PURE__ */ jsx(
47
- Input,
48
- {
49
- label: baseUrlLabel,
50
- value: baseUrl,
51
- onChange: (event) => onBaseUrlChange(event.target.value),
52
- placeholder: baseUrlPlaceholder,
53
- className: "font-mono"
54
- }
55
- ),
56
- /* @__PURE__ */ jsx(
57
- Input,
58
- {
59
- label: hasStoredKey ? /* @__PURE__ */ jsxs(Fragment, { children: [
60
- apiKeyLabel,
61
- " ",
62
- /* @__PURE__ */ jsxs("span", { className: "font-normal text-[var(--as-muted-fg)]", children: [
63
- "(",
64
- storedKeyLabel,
65
- ")"
66
- ] })
67
- ] }) : apiKeyLabel,
68
- type: "password",
69
- value: apiKey,
70
- onChange: (event) => onApiKeyChange(event.target.value),
71
- placeholder: hasStoredKey ? "\u2022\u2022\u2022" : keyPlaceholder,
72
- autoComplete: "new-password",
73
- hint: apiKeyHelp ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
74
- /* @__PURE__ */ jsx(KeyRound, { className: "size-3", "aria-hidden": true }),
75
- apiKeyHelp
76
- ] }) : void 0
77
- }
78
- ),
79
- children,
80
- error ? /* @__PURE__ */ jsx("p", { role: "alert", className: "text-sm font-medium text-[var(--as-danger)]", children: error }) : null
81
- ]
82
- }
83
- );
84
- }
85
- );
86
-
87
- export { ProviderForm };
88
- //# sourceMappingURL=chunk-RJSN4TVT.js.map
89
- //# sourceMappingURL=chunk-RJSN4TVT.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/provider-form/ProviderForm.tsx"],"names":["ProviderForm"],"mappings":";;;;;;AAgCO,IAAM,YAAA,GAAqB,KAAA,CAAA,UAAA;AAAA,EAChC,SAASA,aAAAA,CACP;AAAA,IACE,IAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA,GAAkB,eAAA;AAAA,IAClB,kBAAA,GAAqB,4BAAA;AAAA,IACrB,SAAA,GAAY,MAAA;AAAA,IACZ,YAAA,GAAe,cAAA;AAAA,IACf,WAAA,GAAc,SAAA;AAAA,IACd,UAAA;AAAA,IACA,YAAA,GAAe,KAAA;AAAA,IACf,cAAA,GAAiB,mCAAA;AAAA,IACjB,cAAA,GAAiB,WAAA;AAAA,IACjB,KAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,EACA;AACA,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAQ,eAAA;AAAA,QACR,SAAA,EAAW,EAAA,CAAG,4BAAA,EAA8B,SAAS,CAAA;AAAA,QACpD,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,SAAA;AAAA,cACP,KAAA,EAAO,IAAA;AAAA,cACP,UAAU,CAAC,KAAA,KAAU,YAAA,CAAa,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,cACpD,WAAA,EAAa;AAAA;AAAA,WACf;AAAA,0BACA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,YAAA;AAAA,cACP,KAAA,EAAO,OAAA;AAAA,cACP,UAAU,CAAC,KAAA,KAAU,eAAA,CAAgB,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,cACvD,WAAA,EAAa,kBAAA;AAAA,cACb,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,0BACA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EACE,+BACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,gBAAA,WAAA;AAAA,gBAAa,GAAA;AAAA,gCACd,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EAAwC,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,kBACpD,cAAA;AAAA,kBAAe;AAAA,iBAAA,EACnB;AAAA,eAAA,EACF,CAAA,GAEA,WAAA;AAAA,cAGJ,IAAA,EAAK,UAAA;AAAA,cACL,KAAA,EAAO,MAAA;AAAA,cACP,UAAU,CAAC,KAAA,KAAU,cAAA,CAAe,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,cACtD,WAAA,EAAa,eAAe,oBAAA,GAAQ,cAAA;AAAA,cACpC,YAAA,EAAa,cAAA;AAAA,cACb,IAAA,EACE,UAAA,mBACE,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gCAAA,EACd,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,gBACxC;AAAA,eAAA,EACH,CAAA,GACE;AAAA;AAAA,WAER;AAAA,UACC,QAAA;AAAA,UACA,KAAA,uBACE,GAAA,EAAA,EAAE,IAAA,EAAK,SAAQ,SAAA,EAAU,6CAAA,EACvB,iBACH,CAAA,GACE;AAAA;AAAA;AAAA,KACN;AAAA,EAEJ;AACF","file":"chunk-RJSN4TVT.js","sourcesContent":["import * as React from 'react'\nimport { KeyRound } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport { Input } from '../input/Input'\n\nexport interface ProviderFormProps extends React.ComponentProps<'div'> {\n name: string\n onNameChange: (value: string) => void\n baseUrl: string\n onBaseUrlChange: (value: string) => void\n apiKey: string\n onApiKeyChange: (value: string) => void\n namePlaceholder?: string\n baseUrlPlaceholder?: string\n nameLabel?: string\n baseUrlLabel?: string\n apiKeyLabel?: string\n /** Hint under the key field; apps mention keyring storage here. */\n apiKeyHelp?: string\n /** The provider already stores a key (write-only field shows no value). */\n hasStoredKey?: boolean\n storedKeyLabel?: string\n keyPlaceholder?: string\n error?: string\n children?: React.ReactNode\n}\n\n/**\n * Standard provider credential fields: name, base URL and a **write-only**\n * masked API key (`onChange` only — the library never renders a stored key;\n * keyring/storage is the app's business, ADR-006).\n */\nexport const ProviderForm = React.forwardRef<HTMLDivElement, ProviderFormProps>(\n function ProviderForm(\n {\n name,\n onNameChange,\n baseUrl,\n onBaseUrlChange,\n apiKey,\n onApiKeyChange,\n namePlaceholder = 'Provider name',\n baseUrlPlaceholder = 'https://api.example.com/v1',\n nameLabel = 'Name',\n baseUrlLabel = 'API base URL',\n apiKeyLabel = 'API key',\n apiKeyHelp,\n hasStoredKey = false,\n storedKeyLabel = 'Stored — leave empty to keep',\n keyPlaceholder = 'sk-…',\n error,\n children,\n className,\n ...props\n },\n ref,\n ) {\n return (\n <div\n ref={ref}\n data-as=\"provider-form\"\n className={cn('flex w-full flex-col gap-4', className)}\n {...props}\n >\n <Input\n label={nameLabel}\n value={name}\n onChange={(event) => onNameChange(event.target.value)}\n placeholder={namePlaceholder}\n />\n <Input\n label={baseUrlLabel}\n value={baseUrl}\n onChange={(event) => onBaseUrlChange(event.target.value)}\n placeholder={baseUrlPlaceholder}\n className=\"font-mono\"\n />\n <Input\n label={\n hasStoredKey ? (\n <>\n {apiKeyLabel}{' '}\n <span className=\"font-normal text-[var(--as-muted-fg)]\">\n ({storedKeyLabel})\n </span>\n </>\n ) : (\n apiKeyLabel\n )\n }\n type=\"password\"\n value={apiKey}\n onChange={(event) => onApiKeyChange(event.target.value)}\n placeholder={hasStoredKey ? '•••' : keyPlaceholder}\n autoComplete=\"new-password\"\n hint={\n apiKeyHelp ? (\n <span className=\"inline-flex items-center gap-1\">\n <KeyRound className=\"size-3\" aria-hidden />\n {apiKeyHelp}\n </span>\n ) : undefined\n }\n />\n {children}\n {error ? (\n <p role=\"alert\" className=\"text-sm font-medium text-[var(--as-danger)]\">\n {error}\n </p>\n ) : null}\n </div>\n )\n },\n)\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/task-assignment-picker/TaskAssignmentPicker.tsx"],"names":["TaskAssignmentPicker"],"mappings":"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","file":"chunk-XB7QWPHP.js","sourcesContent":["import * as React from 'react'\nimport { X } from 'lucide-react'\nimport { cn } from '../../lib/utils'\nimport {\n ModelPicker,\n type ModelPickerModel,\n type ModelPickerProvider,\n} from '../model-picker/ModelPicker'\n\nexport interface TaskAssignmentTask {\n id: string\n label: string\n description?: string\n /** When set, the row's picker offers only models matching this capability. */\n requires?: string\n /** Render the fallback-model picker for this row (needs `onAssignSecondary`). */\n secondary?: boolean\n}\n\nexport interface TaskAssignmentSection {\n id: string\n label: string\n /** Show the fallback picker on every task in the section (task-level wins). */\n secondary?: boolean\n tasks: TaskAssignmentTask[]\n}\n\nexport interface TaskAssignmentPickerProps {\n tasks: TaskAssignmentTask[]\n /** Grouped rendering; when set, `tasks` is ignored. */\n sections?: TaskAssignmentSection[]\n providers: ModelPickerProvider[]\n /** Current mapping: taskId → modelId (null/undefined = unassigned). */\n value: Record<string, string | null>\n onAssign: (taskId: string, modelId: string | null) => void\n /** Enables fallback-model rows for tasks flagged (directly or via section). */\n secondaryValue?: Record<string, string | null>\n onAssignSecondary?: (taskId: string, modelId: string | null) => void\n secondaryLabel?: string\n /** App-rendered per-row context (inherit notes, spend, badges). */\n renderMeta?: (task: TaskAssignmentTask) => React.ReactNode\n unassignedLabel?: string\n clearLabel?: string\n modelLabel?: string\n disabled?: boolean\n className?: string\n}\n\nfunction filterProviders(\n providers: ModelPickerProvider[],\n requires: string | undefined,\n): ModelPickerProvider[] {\n if (!requires) return providers\n const matches = (model: ModelPickerModel) =>\n model.capability === requires || (model.capabilities?.includes(requires) ?? false)\n return providers\n .map((provider) => ({\n ...provider,\n models: provider.models.filter(matches),\n }))\n .filter((provider) => provider.models.length > 0)\n}\n\nexport const TaskAssignmentPicker = React.forwardRef<\n HTMLDivElement,\n TaskAssignmentPickerProps\n>(function TaskAssignmentPicker(\n {\n tasks,\n sections,\n providers,\n value,\n onAssign,\n secondaryValue,\n onAssignSecondary,\n secondaryLabel = 'Fallback model',\n renderMeta,\n unassignedLabel = 'Not assigned',\n clearLabel = 'Clear assignment',\n modelLabel = 'Model',\n disabled = false,\n className,\n },\n ref,\n) {\n const modelName = React.useCallback(\n (modelId: string | null | undefined) => {\n if (!modelId) return null\n for (const provider of providers) {\n const model = provider.models.find((m) => m.id === modelId)\n if (model) return { name: model.name, provider: provider.name }\n }\n return null\n },\n [providers],\n )\n\n const renderRow = (task: TaskAssignmentTask, showSecondary: boolean) => {\n const assigned = modelName(value[task.id])\n const catalog = filterProviders(providers, task.requires)\n return (\n <div\n key={task.id}\n className=\"flex flex-col gap-2 rounded-[var(--as-radius-lg)] border border-[var(--as-border)] bg-[var(--as-surface-raised)] p-3 sm:flex-row sm:items-center sm:justify-between\"\n >\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold text-[var(--as-fg)]\">\n {task.label}\n </p>\n {task.description ? (\n <p className=\"truncate text-xs text-[var(--as-muted-fg)]\">\n {task.description}\n </p>\n ) : null}\n {renderMeta ? renderMeta(task) : null}\n <p className=\"mt-0.5 text-xs text-[var(--as-muted-fg)]\">\n {assigned ? (\n <>\n {modelLabel}:{' '}\n <span className=\"font-medium text-[var(--as-fg)]\">\n {assigned.provider} / {assigned.name}\n </span>\n </>\n ) : (\n unassignedLabel\n )}\n </p>\n </div>\n <div className=\"flex shrink-0 items-center gap-1.5\">\n {showSecondary && onAssignSecondary ? (\n <ModelPicker\n providers={catalog}\n value={secondaryValue?.[task.id] ?? ''}\n onChange={(modelId) => onAssignSecondary(task.id, modelId)}\n disabled={disabled}\n clearable={Boolean(secondaryValue?.[task.id])}\n clearLabel={clearLabel}\n label={`${secondaryLabel} — ${task.label}`}\n className=\"w-48\"\n />\n ) : null}\n <ModelPicker\n providers={catalog}\n value={value[task.id] ?? ''}\n onChange={(modelId) => onAssign(task.id, modelId)}\n disabled={disabled}\n clearable={Boolean(value[task.id])}\n clearLabel={clearLabel}\n label={`${modelLabel} — ${task.label}`}\n className=\"w-56\"\n />\n {value[task.id] ? (\n <button\n type=\"button\"\n aria-label={`${clearLabel} — ${task.label}`}\n disabled={disabled}\n onClick={() => onAssign(task.id, null)}\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)] disabled:pointer-events-none disabled:opacity-50\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n ) : null}\n </div>\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n data-as=\"task-assignment-picker\"\n className={cn('flex w-full flex-col gap-3', className)}\n >\n {sections\n ? sections.map((section) => (\n <div key={section.id} className=\"flex flex-col gap-2\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-[var(--as-muted-fg)]\">\n {section.label}\n </p>\n {section.tasks.map((task) =>\n renderRow(task, section.secondary || Boolean(task.secondary)),\n )}\n </div>\n ))\n : tasks.map((task) => renderRow(task, Boolean(task.secondary)))}\n </div>\n )\n})\n"]}