@neuronection/assistant-ui 0.10.0 → 0.11.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.
- package/CHANGELOG.md +14 -0
- package/dist/capability-chips.d.ts +2 -0
- package/dist/capability-chips.js +1 -1
- package/dist/{chunk-RJSN4TVT.js → chunk-A3A4J5M5.js} +4 -3
- package/dist/chunk-A3A4J5M5.js.map +1 -0
- package/dist/chunk-G3DWN2DJ.js +80 -0
- package/dist/chunk-G3DWN2DJ.js.map +1 -0
- package/dist/{chunk-XB7QWPHP.js → chunk-M67KF4W2.js} +20 -17
- package/dist/chunk-M67KF4W2.js.map +1 -0
- package/dist/{chunk-HGJ5HINX.js → chunk-N5V5LVZX.js} +92 -75
- package/dist/chunk-N5V5LVZX.js.map +1 -0
- package/dist/index.js +4 -4
- package/dist/model-registry.d.ts +3 -1
- package/dist/model-registry.js +1 -1
- package/dist/provider-form.d.ts +2 -0
- package/dist/provider-form.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/task-assignment-picker.d.ts +5 -1
- package/dist/task-assignment-picker.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-HGJ5HINX.js.map +0 -1
- package/dist/chunk-MLQAA2QV.js +0 -68
- package/dist/chunk-MLQAA2QV.js.map +0 -1
- package/dist/chunk-RJSN4TVT.js.map +0 -1
- package/dist/chunk-XB7QWPHP.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @neuronection/assistant-ui
|
|
2
2
|
|
|
3
|
+
## 0.11.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`b69b713`](https://github.com/neuronection/assistant-ui/commit/b69b713f4a61887bf1ae1aee3c65f150f6e459e9) Thanks [@constLiakos](https://github.com/constLiakos)! - Model-registry family adopts the health-assistant settings design language, all on tokens: provider cards gain the chevron icon tile (primary-filled when expanded), tinted border + shadow on the open card, an entry fade, and an enabled/total count pill; `CapabilityDescriptor` gains `icon` and every chip/badge carries `data-as-cap` so apps can re-tint per capability; `TaskAssignmentTask` gains `icon` (leading tile). Behavior changes: the remote-catalog zone (search, capability filters, manual add, add-all, catalog rows) is collapsed behind a `browseLabel` trigger button (`aria-expanded`) instead of always visible, and the per-row enable checkbox is removed — apps filter the `models` prop themselves (disabled models re-enter via the catalog's normal add path). `enabledLabel` is gone; `tasks` is optional on `TaskAssignmentPicker`.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- [`4f9e9bb`](https://github.com/neuronection/assistant-ui/commit/4f9e9bb923ea09fb5f186312627b124779a0035f) Thanks [@constLiakos](https://github.com/constLiakos)! - `ModelRegistry` draft payloads always carry `reasoningEffort` (empty string when cleared) so apps can distinguish "unset" from "cleared" — previously clearing the field sent `undefined` and the stored value could never be removed.
|
|
12
|
+
|
|
13
|
+
- [`a93f657`](https://github.com/neuronection/assistant-ui/commit/a93f657ed7577bb347909e211c62a40a36fda87a) Thanks [@constLiakos](https://github.com/constLiakos)! - `ProviderForm` gains `hideBaseUrl` for provider types with a fixed endpoint (Google, Anthropic) — the base URL field is omitted instead of rendering an inert input.
|
|
14
|
+
|
|
15
|
+
- [`6d8c694`](https://github.com/neuronection/assistant-ui/commit/6d8c694ffdc5b1358d49cc2e596639fbab3818a2) Thanks [@constLiakos](https://github.com/constLiakos)! - `TaskAssignmentPicker` makes `tasks` optional — sections-only usage no longer needs an empty `tasks` array.
|
|
16
|
+
|
|
3
17
|
## 0.10.0
|
|
4
18
|
|
|
5
19
|
### Minor Changes
|
package/dist/capability-chips.js
CHANGED
|
@@ -16,6 +16,7 @@ var ProviderForm = React.forwardRef(
|
|
|
16
16
|
baseUrlPlaceholder = "https://api.example.com/v1",
|
|
17
17
|
nameLabel = "Name",
|
|
18
18
|
baseUrlLabel = "API base URL",
|
|
19
|
+
hideBaseUrl = false,
|
|
19
20
|
apiKeyLabel = "API key",
|
|
20
21
|
apiKeyHelp,
|
|
21
22
|
hasStoredKey = false,
|
|
@@ -43,7 +44,7 @@ var ProviderForm = React.forwardRef(
|
|
|
43
44
|
placeholder: namePlaceholder
|
|
44
45
|
}
|
|
45
46
|
),
|
|
46
|
-
/* @__PURE__ */ jsx(
|
|
47
|
+
hideBaseUrl ? null : /* @__PURE__ */ jsx(
|
|
47
48
|
Input,
|
|
48
49
|
{
|
|
49
50
|
label: baseUrlLabel,
|
|
@@ -85,5 +86,5 @@ var ProviderForm = React.forwardRef(
|
|
|
85
86
|
);
|
|
86
87
|
|
|
87
88
|
export { ProviderForm };
|
|
88
|
-
//# sourceMappingURL=chunk-
|
|
89
|
-
//# sourceMappingURL=chunk-
|
|
89
|
+
//# sourceMappingURL=chunk-A3A4J5M5.js.map
|
|
90
|
+
//# sourceMappingURL=chunk-A3A4J5M5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/provider-form/ProviderForm.tsx"],"names":["ProviderForm"],"mappings":";;;;;;AAkCO,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,KAAA;AAAA,IACd,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,UACC,cAAc,IAAA,mBACb,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,0BAEF,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-A3A4J5M5.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 /** Hide the base URL field for provider types that have a fixed endpoint. */\n hideBaseUrl?: boolean\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 hideBaseUrl = false,\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 {hideBaseUrl ? null : (\n <Input\n label={baseUrlLabel}\n value={baseUrl}\n onChange={(event) => onBaseUrlChange(event.target.value)}\n placeholder={baseUrlPlaceholder}\n className=\"font-mono\"\n />\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"]}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { cn } from './chunk-BLJWR4ZV.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Check } from 'lucide-react';
|
|
4
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var CapabilityChips = React.forwardRef(
|
|
7
|
+
function CapabilityChips2({
|
|
8
|
+
caps,
|
|
9
|
+
selected,
|
|
10
|
+
onToggle,
|
|
11
|
+
variant = "toggle",
|
|
12
|
+
minSelected = 0,
|
|
13
|
+
disabled = false,
|
|
14
|
+
ariaLabel,
|
|
15
|
+
className
|
|
16
|
+
}, ref) {
|
|
17
|
+
const interactive = variant === "toggle" && Boolean(onToggle);
|
|
18
|
+
const locked = (value) => interactive && !disabled && selected.includes(value) && selected.length <= minSelected;
|
|
19
|
+
return /* @__PURE__ */ jsx(
|
|
20
|
+
"div",
|
|
21
|
+
{
|
|
22
|
+
ref,
|
|
23
|
+
"data-as": "capability-chips",
|
|
24
|
+
"data-variant": variant,
|
|
25
|
+
role: interactive ? "group" : void 0,
|
|
26
|
+
"aria-label": interactive ? ariaLabel : void 0,
|
|
27
|
+
className: cn("flex flex-wrap items-center gap-1.5", className),
|
|
28
|
+
children: caps.map((cap) => {
|
|
29
|
+
const on = selected.includes(cap.value);
|
|
30
|
+
const Icon = cap.icon;
|
|
31
|
+
if (!interactive) {
|
|
32
|
+
return /* @__PURE__ */ jsxs(
|
|
33
|
+
"span",
|
|
34
|
+
{
|
|
35
|
+
"data-as-cap": cap.value,
|
|
36
|
+
"data-active": on || void 0,
|
|
37
|
+
title: `${cap.label} capability`,
|
|
38
|
+
className: cn(
|
|
39
|
+
"inline-flex items-center gap-1 rounded-[var(--as-radius-sm)] px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide",
|
|
40
|
+
on ? "bg-[var(--as-primary)]/10 text-[var(--as-primary)]" : "bg-[var(--as-muted)] text-[var(--as-muted-fg)]"
|
|
41
|
+
),
|
|
42
|
+
children: [
|
|
43
|
+
Icon ? /* @__PURE__ */ jsx(Icon, { className: "size-2.5", "aria-hidden": true }) : null,
|
|
44
|
+
cap.label
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
cap.value
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
return /* @__PURE__ */ jsxs(
|
|
51
|
+
"button",
|
|
52
|
+
{
|
|
53
|
+
type: "button",
|
|
54
|
+
"data-as-cap": cap.value,
|
|
55
|
+
"aria-pressed": on,
|
|
56
|
+
disabled: disabled || locked(cap.value),
|
|
57
|
+
onClick: () => onToggle?.(cap.value),
|
|
58
|
+
className: cn(
|
|
59
|
+
"flex cursor-pointer items-center gap-1.5 rounded-[var(--as-radius)] border px-3 py-2 text-xs font-semibold uppercase tracking-wider transition-all",
|
|
60
|
+
"focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]",
|
|
61
|
+
"disabled:pointer-events-none disabled:opacity-60",
|
|
62
|
+
on ? "border-[var(--as-primary)]/30 bg-[var(--as-primary)]/10 text-[var(--as-primary)] shadow-[var(--as-shadow-1)]" : "border-[var(--as-border)] bg-[var(--as-surface)] text-[var(--as-muted-fg)] hover:border-[var(--as-muted-fg)]/40"
|
|
63
|
+
),
|
|
64
|
+
children: [
|
|
65
|
+
Icon ? /* @__PURE__ */ jsx(Icon, { className: "size-3.5", "aria-hidden": true }) : null,
|
|
66
|
+
cap.label,
|
|
67
|
+
on ? /* @__PURE__ */ jsx(Check, { className: "size-3", "aria-hidden": true }) : null
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
cap.value
|
|
71
|
+
);
|
|
72
|
+
})
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
export { CapabilityChips };
|
|
79
|
+
//# sourceMappingURL=chunk-G3DWN2DJ.js.map
|
|
80
|
+
//# sourceMappingURL=chunk-G3DWN2DJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/capability-chips/CapabilityChips.tsx"],"names":["CapabilityChips"],"mappings":";;;;;AAsBO,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,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,UAAA,IAAI,CAAC,WAAA,EAAa;AAChB,YAAA,uBACE,IAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,eAAa,GAAA,CAAI,KAAA;AAAA,gBACjB,eAAa,EAAA,IAAM,MAAA;AAAA,gBACnB,KAAA,EAAO,CAAA,EAAG,GAAA,CAAI,KAAK,CAAA,WAAA,CAAA;AAAA,gBACnB,SAAA,EAAW,EAAA;AAAA,kBACT,8HAAA;AAAA,kBACA,KACI,oDAAA,GACA;AAAA,iBACN;AAAA,gBAEC,QAAA,EAAA;AAAA,kBAAA,IAAA,uBAAQ,IAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAW,aAAA,EAAW,MAAC,CAAA,GAAK,IAAA;AAAA,kBACnD,GAAA,CAAI;AAAA;AAAA,eAAA;AAAA,cAZA,GAAA,CAAI;AAAA,aAaX;AAAA,UAEJ;AACA,UAAA,uBACE,IAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,QAAA;AAAA,cACL,eAAa,GAAA,CAAI,KAAA;AAAA,cACjB,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,oJAAA;AAAA,gBACA,qGAAA;AAAA,gBACA,kDAAA;AAAA,gBACA,KACI,8GAAA,GACA;AAAA,eACN;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,IAAA,uBAAQ,IAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAW,aAAA,EAAW,MAAC,CAAA,GAAK,IAAA;AAAA,gBACnD,GAAA,CAAI,KAAA;AAAA,gBACJ,qBAAK,GAAA,CAAC,KAAA,EAAA,EAAM,WAAU,QAAA,EAAS,aAAA,EAAW,MAAC,CAAA,GAAK;AAAA;AAAA,aAAA;AAAA,YAjB5C,GAAA,CAAI;AAAA,WAkBX;AAAA,QAEJ,CAAC;AAAA;AAAA,KACH;AAAA,EAEJ;AACF","file":"chunk-G3DWN2DJ.js","sourcesContent":["import * as React from 'react'\nimport { Check } from 'lucide-react'\nimport type { LucideIcon } from 'lucide-react'\nimport { cn } from '../../lib/utils'\n\nexport interface CapabilityDescriptor {\n value: string\n label: string\n icon?: LucideIcon\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 const Icon = cap.icon\n if (!interactive) {\n return (\n <span\n key={cap.value}\n data-as-cap={cap.value}\n data-active={on || undefined}\n title={`${cap.label} capability`}\n className={cn(\n 'inline-flex items-center gap-1 rounded-[var(--as-radius-sm)] px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide',\n on\n ? 'bg-[var(--as-primary)]/10 text-[var(--as-primary)]'\n : 'bg-[var(--as-muted)] text-[var(--as-muted-fg)]',\n )}\n >\n {Icon ? <Icon className=\"size-2.5\" aria-hidden /> : null}\n {cap.label}\n </span>\n )\n }\n return (\n <button\n key={cap.value}\n type=\"button\"\n data-as-cap={cap.value}\n aria-pressed={on}\n disabled={disabled || locked(cap.value)}\n onClick={() => onToggle?.(cap.value)}\n className={cn(\n 'flex cursor-pointer items-center gap-1.5 rounded-[var(--as-radius)] border px-3 py-2 text-xs font-semibold uppercase tracking-wider transition-all',\n 'focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--as-focus-ring)]',\n 'disabled:pointer-events-none disabled:opacity-60',\n on\n ? 'border-[var(--as-primary)]/30 bg-[var(--as-primary)]/10 text-[var(--as-primary)] shadow-[var(--as-shadow-1)]'\n : 'border-[var(--as-border)] bg-[var(--as-surface)] text-[var(--as-muted-fg)] hover:border-[var(--as-muted-fg)]/40',\n )}\n >\n {Icon ? <Icon className=\"size-3.5\" aria-hidden /> : null}\n {cap.label}\n {on ? <Check className=\"size-3\" aria-hidden /> : null}\n </button>\n )\n })}\n </div>\n )\n },\n)\n"]}
|
|
@@ -13,7 +13,7 @@ function filterProviders(providers, requires) {
|
|
|
13
13
|
})).filter((provider) => provider.models.length > 0);
|
|
14
14
|
}
|
|
15
15
|
var TaskAssignmentPicker = React.forwardRef(function TaskAssignmentPicker2({
|
|
16
|
-
tasks,
|
|
16
|
+
tasks = [],
|
|
17
17
|
sections,
|
|
18
18
|
providers,
|
|
19
19
|
value,
|
|
@@ -47,20 +47,23 @@ var TaskAssignmentPicker = React.forwardRef(function TaskAssignmentPicker2({
|
|
|
47
47
|
{
|
|
48
48
|
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",
|
|
49
49
|
children: [
|
|
50
|
-
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
51
|
-
/* @__PURE__ */ jsx("
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
":",
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
50
|
+
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-3", children: [
|
|
51
|
+
task.icon ? /* @__PURE__ */ jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-[var(--as-radius)] bg-[var(--as-muted)] text-[var(--as-muted-fg)]", children: /* @__PURE__ */ jsx(task.icon, { className: "size-4", "aria-hidden": true }) }) : null,
|
|
52
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
53
|
+
/* @__PURE__ */ jsx("p", { className: "truncate text-sm font-semibold text-[var(--as-fg)]", children: task.label }),
|
|
54
|
+
task.description ? /* @__PURE__ */ jsx("p", { className: "truncate text-xs text-[var(--as-muted-fg)]", children: task.description }) : null,
|
|
55
|
+
renderMeta ? renderMeta(task) : null,
|
|
56
|
+
/* @__PURE__ */ jsx("p", { className: "mt-0.5 text-xs text-[var(--as-muted-fg)]", children: assigned ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
57
|
+
modelLabel,
|
|
58
|
+
":",
|
|
59
|
+
" ",
|
|
60
|
+
/* @__PURE__ */ jsxs("span", { className: "font-medium text-[var(--as-fg)]", children: [
|
|
61
|
+
assigned.provider,
|
|
62
|
+
" / ",
|
|
63
|
+
assigned.name
|
|
64
|
+
] })
|
|
65
|
+
] }) : unassignedLabel })
|
|
66
|
+
] })
|
|
64
67
|
] }),
|
|
65
68
|
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1.5", children: [
|
|
66
69
|
showSecondary && onAssignSecondary ? /* @__PURE__ */ jsx(
|
|
@@ -123,5 +126,5 @@ var TaskAssignmentPicker = React.forwardRef(function TaskAssignmentPicker2({
|
|
|
123
126
|
});
|
|
124
127
|
|
|
125
128
|
export { TaskAssignmentPicker };
|
|
126
|
-
//# sourceMappingURL=chunk-
|
|
127
|
-
//# sourceMappingURL=chunk-
|
|
129
|
+
//# sourceMappingURL=chunk-M67KF4W2.js.map
|
|
130
|
+
//# sourceMappingURL=chunk-M67KF4W2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/task-assignment-picker/TaskAssignmentPicker.tsx"],"names":["TaskAssignmentPicker"],"mappings":"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","file":"chunk-M67KF4W2.js","sourcesContent":["import * as React from 'react'\nimport { X } from 'lucide-react'\nimport type { LucideIcon } 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 /** Rendered in an icon tile at the row's leading edge. */\n icon?: LucideIcon\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 /** Flat rendering; ignored when `sections` is set. */\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=\"flex min-w-0 items-center gap-3\">\n {task.icon ? (\n <span className=\"flex size-9 shrink-0 items-center justify-center rounded-[var(--as-radius)] bg-[var(--as-muted)] text-[var(--as-muted-fg)]\">\n <task.icon className=\"size-4\" aria-hidden />\n </span>\n ) : null}\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>\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"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { SearchInput } from './chunk-H5U4KNXF.js';
|
|
2
|
-
import { CapabilityChips } from './chunk-
|
|
2
|
+
import { CapabilityChips } from './chunk-G3DWN2DJ.js';
|
|
3
3
|
import { Button } from './chunk-GTXGTQ6F.js';
|
|
4
4
|
import { Spinner } from './chunk-INTST5VG.js';
|
|
5
5
|
import { cn } from './chunk-BLJWR4ZV.js';
|
|
6
6
|
import * as React from 'react';
|
|
7
7
|
import { ChevronDown, ChevronRight, Plus, Pencil, Trash2, Check } from 'lucide-react';
|
|
8
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
8
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
9
9
|
|
|
10
10
|
var UNCLASSIFIED = "__unclassified__";
|
|
11
11
|
var ModelRegistry = React.forwardRef(
|
|
@@ -31,7 +31,6 @@ var ModelRegistry = React.forwardRef(
|
|
|
31
31
|
configureLabel = "Configure",
|
|
32
32
|
editLabel = "Edit",
|
|
33
33
|
removeLabel = "Remove",
|
|
34
|
-
enabledLabel = "Enabled",
|
|
35
34
|
missingLabel = "Missing",
|
|
36
35
|
capsLabel = "Capabilities",
|
|
37
36
|
searchPlaceholder = "Search models\u2026",
|
|
@@ -42,6 +41,7 @@ var ModelRegistry = React.forwardRef(
|
|
|
42
41
|
remoteEmptyLabel = "No models match.",
|
|
43
42
|
remoteLoadingLabel = "Loading models\u2026",
|
|
44
43
|
retryLabel = "Retry",
|
|
44
|
+
browseLabel = "Browse catalog",
|
|
45
45
|
manualAddLabel = "Add manually",
|
|
46
46
|
externalIdLabel = "Model ID",
|
|
47
47
|
labelLabel = "Display label",
|
|
@@ -58,6 +58,7 @@ var ModelRegistry = React.forwardRef(
|
|
|
58
58
|
const [capFilter, setCapFilter] = React.useState(null);
|
|
59
59
|
const [draft, setDraft] = React.useState(null);
|
|
60
60
|
const [draftError, setDraftError] = React.useState(null);
|
|
61
|
+
const [catalogOpen, setCatalogOpen] = React.useState(false);
|
|
61
62
|
const descriptorFor = React.useCallback(
|
|
62
63
|
(value) => caps.find((cap) => cap.value === value) ?? { value, label: value },
|
|
63
64
|
[caps]
|
|
@@ -92,6 +93,7 @@ var ModelRegistry = React.forwardRef(
|
|
|
92
93
|
onExpandedProviderChange(next);
|
|
93
94
|
setQuery("");
|
|
94
95
|
setCapFilter(null);
|
|
96
|
+
setCatalogOpen(false);
|
|
95
97
|
resetDraft();
|
|
96
98
|
};
|
|
97
99
|
const openAddDraft = (providerId, remote) => {
|
|
@@ -150,7 +152,7 @@ var ModelRegistry = React.forwardRef(
|
|
|
150
152
|
externalId,
|
|
151
153
|
label: draft.label.trim() || void 0,
|
|
152
154
|
caps: draft.caps,
|
|
153
|
-
reasoningEffort: draft.reasoningEffort.trim()
|
|
155
|
+
reasoningEffort: draft.reasoningEffort.trim()
|
|
154
156
|
};
|
|
155
157
|
if (draft.mode === "add") {
|
|
156
158
|
onAddModel(draft.providerId, payload);
|
|
@@ -341,15 +343,6 @@ var ModelRegistry = React.forwardRef(
|
|
|
341
343
|
selected: model.caps
|
|
342
344
|
}
|
|
343
345
|
),
|
|
344
|
-
/* @__PURE__ */ jsx("label", { className: "flex shrink-0 cursor-pointer items-center gap-1.5 text-xs text-[var(--as-muted-fg)]", children: /* @__PURE__ */ jsx(
|
|
345
|
-
"input",
|
|
346
|
-
{
|
|
347
|
-
type: "checkbox",
|
|
348
|
-
checked: model.enabled,
|
|
349
|
-
onChange: (event) => onUpdateModel(model, { enabled: event.target.checked }),
|
|
350
|
-
"aria-label": `${enabledLabel} \u2014 ${model.externalId}`
|
|
351
|
-
}
|
|
352
|
-
) }),
|
|
353
346
|
/* @__PURE__ */ jsx(
|
|
354
347
|
"button",
|
|
355
348
|
{
|
|
@@ -395,8 +388,8 @@ var ModelRegistry = React.forwardRef(
|
|
|
395
388
|
{
|
|
396
389
|
"data-as": "model-registry-provider",
|
|
397
390
|
className: cn(
|
|
398
|
-
"rounded-[var(--as-radius-lg)] border bg-[var(--as-surface)] transition-
|
|
399
|
-
expanded ? "border-[var(--as-primary)]" : "border-[var(--as-border)]"
|
|
391
|
+
"rounded-[var(--as-radius-lg)] border bg-[var(--as-surface)] transition-all",
|
|
392
|
+
expanded ? "border-[var(--as-primary)] shadow-[var(--as-shadow-1)]" : "border-[var(--as-border)]"
|
|
400
393
|
),
|
|
401
394
|
children: [
|
|
402
395
|
/* @__PURE__ */ jsxs(
|
|
@@ -405,79 +398,103 @@ var ModelRegistry = React.forwardRef(
|
|
|
405
398
|
type: "button",
|
|
406
399
|
"aria-expanded": expanded,
|
|
407
400
|
onClick: () => toggleProvider(provider.id),
|
|
408
|
-
className: "flex w-full cursor-pointer items-center gap-
|
|
401
|
+
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)]",
|
|
409
402
|
children: [
|
|
410
|
-
|
|
403
|
+
/* @__PURE__ */ jsx(
|
|
404
|
+
"span",
|
|
405
|
+
{
|
|
406
|
+
className: cn(
|
|
407
|
+
"flex size-9 shrink-0 items-center justify-center rounded-[var(--as-radius)] transition-colors",
|
|
408
|
+
expanded ? "bg-[var(--as-primary)] text-[var(--as-primary-fg)]" : "bg-[var(--as-muted)] text-[var(--as-muted-fg)] group-hover:bg-[var(--as-primary)]/10 group-hover:text-[var(--as-primary)]"
|
|
409
|
+
),
|
|
410
|
+
children: expanded ? /* @__PURE__ */ jsx(ChevronDown, { className: "size-5", "aria-hidden": true }) : /* @__PURE__ */ jsx(ChevronRight, { className: "size-5", "aria-hidden": true })
|
|
411
|
+
}
|
|
412
|
+
),
|
|
411
413
|
/* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
|
|
412
|
-
/* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2 text-sm font-semibold text-[var(--as-fg)]", children: [
|
|
414
|
+
/* @__PURE__ */ jsxs("span", { className: "flex flex-wrap items-center gap-2 text-sm font-semibold text-[var(--as-fg)]", children: [
|
|
413
415
|
provider.name,
|
|
414
|
-
provider.type ? /* @__PURE__ */ jsx("span", { className: "rounded-full border border-[var(--as-border)] px-2 py-0.5 text-[
|
|
415
|
-
/* @__PURE__ */ jsxs("span", { className: "text-
|
|
416
|
+
provider.type ? /* @__PURE__ */ jsx("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)]", children: provider.type }) : null,
|
|
417
|
+
providerModels.length ? /* @__PURE__ */ jsxs("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)]", children: [
|
|
416
418
|
providerModels.filter((model) => model.enabled).length,
|
|
417
419
|
"/",
|
|
418
420
|
providerModels.length
|
|
419
|
-
] })
|
|
421
|
+
] }) : null
|
|
420
422
|
] }),
|
|
421
423
|
provider.baseUrl ? /* @__PURE__ */ jsx("span", { className: "block truncate font-mono text-xs text-[var(--as-muted-fg)]", children: provider.baseUrl }) : null
|
|
422
424
|
] })
|
|
423
425
|
]
|
|
424
426
|
}
|
|
425
427
|
),
|
|
426
|
-
expanded ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 border-t border-[var(--as-border)] p-4", children: [
|
|
428
|
+
expanded ? /* @__PURE__ */ jsxs("div", { className: "as-anim-fade flex flex-col gap-3 border-t border-[var(--as-border)] p-4", children: [
|
|
427
429
|
providerModels.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-xs text-[var(--as-muted-fg)]", children: emptyProviderLabel }) : /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-1", children: providerModels.map(renderModelRow) }),
|
|
428
430
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 border-t border-[var(--as-border)] pt-3", children: [
|
|
429
|
-
/* @__PURE__ */
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
},
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
/* @__PURE__ */
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
431
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(
|
|
432
|
+
Button,
|
|
433
|
+
{
|
|
434
|
+
variant: "outline",
|
|
435
|
+
size: "sm",
|
|
436
|
+
"aria-expanded": catalogOpen,
|
|
437
|
+
onClick: () => setCatalogOpen((open) => !open),
|
|
438
|
+
children: [
|
|
439
|
+
/* @__PURE__ */ jsx(Plus, { "aria-hidden": true }),
|
|
440
|
+
browseLabel
|
|
441
|
+
]
|
|
442
|
+
}
|
|
443
|
+
) }),
|
|
444
|
+
catalogOpen ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
445
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
446
|
+
/* @__PURE__ */ jsx(
|
|
447
|
+
SearchInput,
|
|
448
|
+
{
|
|
449
|
+
value: query,
|
|
450
|
+
onChange: (next) => {
|
|
451
|
+
setQuery(next);
|
|
452
|
+
resetDraft();
|
|
453
|
+
},
|
|
454
|
+
placeholder: searchPlaceholder,
|
|
455
|
+
ariaLabel: searchLabel,
|
|
456
|
+
className: "max-w-xs flex-1"
|
|
457
|
+
}
|
|
458
|
+
),
|
|
459
|
+
/* @__PURE__ */ jsx(
|
|
460
|
+
CapabilityChips,
|
|
461
|
+
{
|
|
462
|
+
caps: filterDescriptors,
|
|
463
|
+
selected: capFilter ? [capFilter] : [],
|
|
464
|
+
onToggle: (value) => setCapFilter((current) => current === value ? null : value),
|
|
465
|
+
ariaLabel: capFilterLabel
|
|
466
|
+
}
|
|
467
|
+
),
|
|
468
|
+
/* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", onClick: () => openManualDraft(provider.id), children: [
|
|
469
|
+
/* @__PURE__ */ jsx(Plus, { "aria-hidden": true }),
|
|
470
|
+
manualAddLabel
|
|
471
|
+
] }),
|
|
472
|
+
onAddAll ? /* @__PURE__ */ jsxs(
|
|
473
|
+
Button,
|
|
474
|
+
{
|
|
475
|
+
variant: "outline",
|
|
476
|
+
size: "sm",
|
|
477
|
+
disabled: remoteState !== "ready" || pendingRemote.length === 0,
|
|
478
|
+
onClick: () => onAddAll(
|
|
479
|
+
provider.id,
|
|
480
|
+
pendingRemote.map((remote) => ({
|
|
481
|
+
externalId: remote.id,
|
|
482
|
+
caps: remote.caps
|
|
483
|
+
}))
|
|
484
|
+
),
|
|
485
|
+
children: [
|
|
486
|
+
/* @__PURE__ */ jsx(Plus, { "aria-hidden": true }),
|
|
487
|
+
addAllLabel,
|
|
488
|
+
" (",
|
|
489
|
+
pendingRemote.length,
|
|
490
|
+
")"
|
|
491
|
+
]
|
|
492
|
+
}
|
|
493
|
+
) : null
|
|
455
494
|
] }),
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
variant: "outline",
|
|
460
|
-
size: "sm",
|
|
461
|
-
disabled: remoteState !== "ready" || pendingRemote.length === 0,
|
|
462
|
-
onClick: () => onAddAll(
|
|
463
|
-
provider.id,
|
|
464
|
-
pendingRemote.map((remote) => ({
|
|
465
|
-
externalId: remote.id,
|
|
466
|
-
caps: remote.caps
|
|
467
|
-
}))
|
|
468
|
-
),
|
|
469
|
-
children: [
|
|
470
|
-
/* @__PURE__ */ jsx(Plus, { "aria-hidden": true }),
|
|
471
|
-
addAllLabel,
|
|
472
|
-
" (",
|
|
473
|
-
pendingRemote.length,
|
|
474
|
-
")"
|
|
475
|
-
]
|
|
476
|
-
}
|
|
477
|
-
) : null
|
|
478
|
-
] }),
|
|
479
|
-
draft?.key.startsWith("manual:") ? renderDraftPanel() : null,
|
|
480
|
-
renderRemoteRows(provider.id)
|
|
495
|
+
draft?.key.startsWith("manual:") ? renderDraftPanel() : null,
|
|
496
|
+
renderRemoteRows(provider.id)
|
|
497
|
+
] }) : null
|
|
481
498
|
] })
|
|
482
499
|
] }) : null
|
|
483
500
|
]
|
|
@@ -496,5 +513,5 @@ var ModelRegistry = React.forwardRef(
|
|
|
496
513
|
);
|
|
497
514
|
|
|
498
515
|
export { ModelRegistry };
|
|
499
|
-
//# sourceMappingURL=chunk-
|
|
500
|
-
//# sourceMappingURL=chunk-
|
|
516
|
+
//# sourceMappingURL=chunk-N5V5LVZX.js.map
|
|
517
|
+
//# sourceMappingURL=chunk-N5V5LVZX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/model-registry/ModelRegistry.tsx"],"names":["ModelRegistry"],"mappings":"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","file":"chunk-N5V5LVZX.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 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 /** Catalog disclosure trigger; the search/filter zone renders only when opened. */\n browseLabel?: 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 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 browseLabel = 'Browse catalog',\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 const [catalogOpen, setCatalogOpen] = React.useState(false)\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 setCatalogOpen(false)\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(),\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 <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-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-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>\n <Button\n variant=\"outline\"\n size=\"sm\"\n aria-expanded={catalogOpen}\n onClick={() => setCatalogOpen((open) => !open)}\n >\n <Plus aria-hidden />\n {browseLabel}\n </Button>\n </div>\n {catalogOpen ? (\n <>\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 </>\n ) : null}\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"]}
|
package/dist/index.js
CHANGED
|
@@ -5,17 +5,17 @@ export { InfoTooltip, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }
|
|
|
5
5
|
export { UndoNotice } from './chunk-OUHUVACM.js';
|
|
6
6
|
export { ViewToggle } from './chunk-MXOBOS4Y.js';
|
|
7
7
|
export { Stepper, Wizard } from './chunk-YMCMUAIF.js';
|
|
8
|
-
export { ModelRegistry } from './chunk-
|
|
8
|
+
export { ModelRegistry } from './chunk-N5V5LVZX.js';
|
|
9
9
|
export { SearchInput } from './chunk-H5U4KNXF.js';
|
|
10
|
-
export { CapabilityChips } from './chunk-
|
|
10
|
+
export { CapabilityChips } from './chunk-G3DWN2DJ.js';
|
|
11
11
|
export { SelectionBar } from './chunk-HSUCCANX.js';
|
|
12
12
|
export { Table } from './chunk-5LRRVD27.js';
|
|
13
|
-
export { TaskAssignmentPicker } from './chunk-
|
|
13
|
+
export { TaskAssignmentPicker } from './chunk-M67KF4W2.js';
|
|
14
14
|
export { SettingsShell } from './chunk-AHLNXCP2.js';
|
|
15
15
|
export { ModelPicker } from './chunk-RI6CEWWF.js';
|
|
16
16
|
export { PanelModal } from './chunk-G6557MEN.js';
|
|
17
17
|
export { Portal } from './chunk-7YLR4AGA.js';
|
|
18
|
-
export { ProviderForm } from './chunk-
|
|
18
|
+
export { ProviderForm } from './chunk-A3A4J5M5.js';
|
|
19
19
|
export { RangeBar } from './chunk-PFAH25VU.js';
|
|
20
20
|
export { ScaleSlider, scaleColorForValue } from './chunk-UIUALJNR.js';
|
|
21
21
|
export { FieldLabel } from './chunk-I5J6SDLK.js';
|
package/dist/model-registry.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { CapabilityDescriptor } from './capability-chips.js';
|
|
3
|
+
import 'lucide-react';
|
|
3
4
|
|
|
4
5
|
interface ModelRegistryProvider {
|
|
5
6
|
id: string;
|
|
@@ -56,7 +57,6 @@ interface ModelRegistryProps {
|
|
|
56
57
|
configureLabel?: string;
|
|
57
58
|
editLabel?: string;
|
|
58
59
|
removeLabel?: string;
|
|
59
|
-
enabledLabel?: string;
|
|
60
60
|
missingLabel?: string;
|
|
61
61
|
capsLabel?: string;
|
|
62
62
|
searchPlaceholder?: string;
|
|
@@ -67,6 +67,8 @@ interface ModelRegistryProps {
|
|
|
67
67
|
remoteEmptyLabel?: string;
|
|
68
68
|
remoteLoadingLabel?: string;
|
|
69
69
|
retryLabel?: string;
|
|
70
|
+
/** Catalog disclosure trigger; the search/filter zone renders only when opened. */
|
|
71
|
+
browseLabel?: string;
|
|
70
72
|
manualAddLabel?: string;
|
|
71
73
|
externalIdLabel?: string;
|
|
72
74
|
labelLabel?: string;
|
package/dist/model-registry.js
CHANGED
package/dist/provider-form.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ interface ProviderFormProps extends React.ComponentProps<'div'> {
|
|
|
11
11
|
baseUrlPlaceholder?: string;
|
|
12
12
|
nameLabel?: string;
|
|
13
13
|
baseUrlLabel?: string;
|
|
14
|
+
/** Hide the base URL field for provider types that have a fixed endpoint. */
|
|
15
|
+
hideBaseUrl?: boolean;
|
|
14
16
|
apiKeyLabel?: string;
|
|
15
17
|
/** Hint under the key field; apps mention keyring storage here. */
|
|
16
18
|
apiKeyHelp?: string;
|
package/dist/provider-form.js
CHANGED
package/dist/styles.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}:root,:host{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-500:oklch(63.7% .237 25.331);--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-4xl:56rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--blur-2xl:40px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}:root{--as-tone-0:oklch(100% 0 0);--as-tone-50:oklch(98.5% .003 90);--as-tone-100:oklch(94.8% .005 90);--as-tone-200:oklch(90.2% .005 90);--as-tone-300:oklch(83% .008 90);--as-tone-500:oklch(50% .012 90);--as-tone-700:oklch(37% .014 90);--as-tone-900:oklch(23.5% .012 90);--as-accent:oklch(55% .16 258);--as-accent-strong:oklch(48% .18 258);--as-success:oklch(62% .15 152);--as-warning:oklch(72% .15 78);--as-danger:oklch(58% .19 27);--as-ai:oklch(54.1% .247 293.009);--as-primary:var(--as-accent);--as-primary-fg:var(--as-tone-50);--as-secondary:var(--as-tone-100);--as-secondary-fg:var(--as-tone-900);--as-surface:var(--as-tone-50);--as-surface-raised:var(--as-tone-0);--as-border:var(--as-tone-200);--as-fg:var(--as-tone-900);--as-muted:var(--as-tone-100);--as-muted-fg:var(--as-tone-500);--as-success-fg:var(--as-tone-0);--as-warning-fg:var(--as-tone-900);--as-danger-fg:var(--as-tone-0);--as-ai-fg:var(--as-tone-0);--as-focus-ring:var(--as-accent);--as-overlay:oklch(0% 0 0/.6);--as-z-modal:50;--as-z-popover:50;--as-radius-sm:calc(var(--as-radius) - .25rem);--as-radius:.625rem;--as-radius-lg:calc(var(--as-radius) + .25rem);--as-font-sans:"Inter Variable", ui-sans-serif, system-ui, sans-serif;--as-font-mono:"JetBrains Mono", ui-monospace, "Cascadia Mono", monospace;--as-shadow-1:0 1px 2px 0 oklch(0% 0 0/.05);--as-shadow-2:0 4px 6px -1px oklch(0% 0 0/.07), 0 2px 4px -2px oklch(0% 0 0/.05);--as-shadow-3:0 10px 15px -3px oklch(0% 0 0/.08), 0 4px 6px -4px oklch(0% 0 0/.05)}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.-top-12{top:calc(var(--spacing) * -12)}.top-1{top:var(--spacing)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.-right-12{right:calc(var(--spacing) * -12)}.right-0{right:0}.right-1{right:var(--spacing)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.right-7{right:calc(var(--spacing) * 7)}.left-1{left:var(--spacing)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[var\(--as-z-modal\)\]{z-index:var(--as-z-modal)}.z-\[var\(--as-z-popover\)\]{z-index:var(--as-z-popover)}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-auto{margin:auto}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-auto{margin-block:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mr-1{margin-right:var(--spacing)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-3{margin-right:calc(var(--spacing) * 3)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-1{margin-left:var(--spacing)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-36{width:calc(var(--spacing) * 36);height:calc(var(--spacing) * 36)}.size-\[18px\]{width:18px;height:18px}.size-full{width:100%;height:100%}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-14{height:calc(var(--spacing) * 14)}.h-20{height:calc(var(--spacing) * 20)}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-\[85vh\]{max-height:85vh}.max-h-\[92vh\]{max-height:92vh}.min-h-0{min-height:0}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-16{min-height:calc(var(--spacing) * 16)}.w-4\/5{width:80%}.w-9{width:calc(var(--spacing) * 9)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-40{width:calc(var(--spacing) * 40)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-\[280px\]{width:280px}.w-\[300px\]{width:300px}.w-\[calc\(100\%-2rem\)\]{width:calc(100% - 2rem)}.w-\[var\(--radix-popover-trigger-width\)\]{width:var(--radix-popover-trigger-width)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-24{min-width:calc(var(--spacing) * 24)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-full{min-width:100%}.flex-1{flex:1}.shrink-0{flex-shrink:0}.\[translate\:-50\%_-50\%\]{translate:-50% -50%}.\[translate\:0_-50\%\]{translate:0 -50%}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-progress{cursor:progress}.cursor-text{cursor:text}.resize-none{resize:none}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-1\.5{column-gap:calc(var(--spacing) * 1.5)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1{row-gap:var(--spacing)}.gap-y-4{row-gap:calc(var(--spacing) * 4)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-\[color-mix\(in_srgb\,var\(--as-border\)_55\%\,transparent\)\]>:not(:last-child)){border-color:var(--as-border)}@supports (color:color-mix(in lab, red, red)){:where(.divide-\[color-mix\(in_srgb\,var\(--as-border\)_55\%\,transparent\)\]>:not(:last-child)){border-color:color-mix(in srgb,var(--as-border) 55%,transparent)}}:where(.divide-\[var\(--as-border\)\]>:not(:last-child)){border-color:var(--as-border)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[calc\(var\(--as-radius\)-2px\)\]{border-radius:calc(var(--as-radius) - 2px)}.rounded-\[calc\(var\(--as-radius-sm\)-2px\)\]{border-radius:calc(var(--as-radius-sm) - 2px)}.rounded-\[var\(--as-radius\)\]{border-radius:var(--as-radius)}.rounded-\[var\(--as-radius-lg\)\]{border-radius:var(--as-radius-lg)}.rounded-\[var\(--as-radius-sm\)\]{border-radius:var(--as-radius-sm)}.rounded-full{border-radius:3.40282e38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[color-mix\(in_srgb\,var\(--as-ai\)_25\%\,transparent\)\]{border-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-ai\)_25\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-ai) 25%,transparent)}}.border-\[color-mix\(in_srgb\,var\(--as-primary\)_25\%\,transparent\)\]{border-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-primary\)_25\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-primary) 25%,transparent)}}.border-\[color-mix\(in_srgb\,var\(--as-warning\)_35\%\,transparent\)\]{border-color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-warning\)_35\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-warning) 35%,transparent)}}.border-\[var\(--as-border\)\]{border-color:var(--as-border)}.border-\[var\(--as-danger\)\],.border-\[var\(--as-danger\)\]\/40{border-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--as-danger\)\]\/40{border-color:color-mix(in oklab, var(--as-danger) 40%, transparent)}}.border-\[var\(--as-primary\)\],.border-\[var\(--as-primary\)\]\/30{border-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--as-primary\)\]\/30{border-color:color-mix(in oklab, var(--as-primary) 30%, transparent)}}.border-\[var\(--as-surface-raised\)\]{border-color:var(--as-surface-raised)}.border-transparent{border-color:#0000}.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_8\%\,transparent\)\]{background-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_8\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-ai) 8%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_12\%\,transparent\)\]{background-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-ai) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-danger\)_12\%\,transparent\)\]{background-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-danger\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-danger) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_7\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_7\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 7%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_8\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_8\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 8%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_12\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_30\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_30\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 30%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_18\%\,transparent\)\]{background-color:var(--as-primary-fg)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_18\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary-fg) 18%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_20\%\,transparent\)\]{background-color:var(--as-primary-fg)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_20\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary-fg) 20%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-success\)_14\%\,transparent\)\]{background-color:var(--as-success)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-success\)_14\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-success) 14%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_12\%\,transparent\)\]{background-color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-warning) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_18\%\,transparent\)\]{background-color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_18\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-warning) 18%,transparent)}}.bg-\[var\(--as-ai\)\]{background-color:var(--as-ai)}.bg-\[var\(--as-border\)\]{background-color:var(--as-border)}.bg-\[var\(--as-danger\)\],.bg-\[var\(--as-danger\)\]\/10{background-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--as-danger\)\]\/10{background-color:color-mix(in oklab, var(--as-danger) 10%, transparent)}}.bg-\[var\(--as-fg\)\]{background-color:var(--as-fg)}.bg-\[var\(--as-muted\)\]{background-color:var(--as-muted)}.bg-\[var\(--as-overlay\)\]{background-color:var(--as-overlay)}.bg-\[var\(--as-primary\)\],.bg-\[var\(--as-primary\)\]\/10{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--as-primary\)\]\/10{background-color:color-mix(in oklab, var(--as-primary) 10%, transparent)}}.bg-\[var\(--as-primary\)\]\/50{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--as-primary\)\]\/50{background-color:color-mix(in oklab, var(--as-primary) 50%, transparent)}}.bg-\[var\(--as-secondary\)\]{background-color:var(--as-secondary)}.bg-\[var\(--as-success\)\]{background-color:var(--as-success)}.bg-\[var\(--as-surface\)\]{background-color:var(--as-surface)}.bg-\[var\(--as-surface-raised\)\]{background-color:var(--as-surface-raised)}.bg-\[var\(--as-warning\)\]{background-color:var(--as-warning)}.bg-red-500{background-color:var(--color-red-500)}.bg-transparent{background-color:#0000}.fill-\[var\(--as-danger\)\]{fill:var(--as-danger)}.fill-\[var\(--as-fg\)\]{fill:var(--as-fg)}.fill-\[var\(--as-muted\)\]{fill:var(--as-muted)}.fill-\[var\(--as-primary\)\]{fill:var(--as-primary)}.fill-\[var\(--as-primary-fg\)\]{fill:var(--as-primary-fg)}.fill-\[var\(--as-surface-raised\)\]{fill:var(--as-surface-raised)}.stroke-\[var\(--as-border\)\]{stroke:var(--as-border)}.stroke-\[var\(--as-primary\)\]{stroke:var(--as-primary)}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0{padding-inline:0}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-0{padding-top:0}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-7{padding-right:calc(var(--spacing) * 7)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-14{padding-right:calc(var(--spacing) * 14)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.whitespace-nowrap{white-space:nowrap}.text-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_78\%\,transparent\)\]{color:var(--as-primary-fg)}@supports (color:color-mix(in lab, red, red)){.text-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_78\%\,transparent\)\]{color:color-mix(in srgb,var(--as-primary-fg) 78%,transparent)}}.text-\[color-mix\(in_srgb\,var\(--as-warning\)_72\%\,var\(--as-fg\)\)\]{color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.text-\[color-mix\(in_srgb\,var\(--as-warning\)_72\%\,var\(--as-fg\)\)\]{color:color-mix(in srgb,var(--as-warning) 72%,var(--as-fg))}}.text-\[var\(--as-ai\)\]{color:var(--as-ai)}.text-\[var\(--as-ai-fg\)\]{color:var(--as-ai-fg)}.text-\[var\(--as-danger\)\]{color:var(--as-danger)}.text-\[var\(--as-danger-fg\)\]{color:var(--as-danger-fg)}.text-\[var\(--as-fg\)\]{color:var(--as-fg)}.text-\[var\(--as-muted-fg\)\]{color:var(--as-muted-fg)}.text-\[var\(--as-primary\)\]{color:var(--as-primary)}.text-\[var\(--as-primary-fg\)\]{color:var(--as-primary-fg)}.text-\[var\(--as-secondary-fg\)\]{color:var(--as-secondary-fg)}.text-\[var\(--as-success\)\]{color:var(--as-success)}.text-\[var\(--as-success-fg\)\]{color:var(--as-success-fg)}.text-\[var\(--as-surface\)\]{color:var(--as-surface)}.text-\[var\(--as-warning\)\]{color:var(--as-warning)}.text-\[var\(--as-warning-fg\)\]{color:var(--as-warning-fg)}.text-inherit{color:inherit}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-transparent{text-decoration-color:#0000}.underline-offset-4{text-underline-offset:4px}.accent-\[var\(--as-primary\)\]{accent-color:var(--as-primary)}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--as-shadow-1\)\]{--tw-shadow:var(--as-shadow-1);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--as-shadow-2\)\]{--tw-shadow:var(--as-shadow-2);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--as-shadow-3\)\]{--tw-shadow:var(--as-shadow-3);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-\[var\(--as-focus-ring\)\]{--tw-ring-color:var(--as-focus-ring)}.ring-\[var\(--as-primary\)\]{--tw-ring-color:var(--as-primary)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-2xl{--tw-blur:blur(var(--blur-2xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-\[border-color\,box-shadow\,translate\]{transition-property:border-color,box-shadow,translate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\,border-color\]{transition-property:color,box-shadow,border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[filter\]{transition-property:filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_32\%\,transparent\)\]:is(:where(.group):hover *){background-color:var(--as-primary-fg)}@supports (color:color-mix(in lab, red, red)){.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_32\%\,transparent\)\]:is(:where(.group):hover *){background-color:color-mix(in srgb,var(--as-primary-fg) 32%,transparent)}}.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-secondary-fg\)_14\%\,transparent\)\]:is(:where(.group):hover *){background-color:var(--as-secondary-fg)}@supports (color:color-mix(in lab, red, red)){.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-secondary-fg\)_14\%\,transparent\)\]:is(:where(.group):hover *){background-color:color-mix(in srgb,var(--as-secondary-fg) 14%,transparent)}}.group-hover\:text-\[var\(--as-primary\)\]:is(:where(.group):hover *){color:var(--as-primary)}.group-hover\:decoration-current:is(:where(.group):hover *){text-decoration-color:currentColor}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-\[var\(--as-muted-fg\)\]::placeholder{color:var(--as-muted-fg)}.focus-within\:border-\[var\(--as-focus-ring\)\]:focus-within{border-color:var(--as-focus-ring)}.focus-within\:opacity-100:focus-within{opacity:1}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-within\:ring-\[var\(--as-focus-ring\)\]:focus-within{--tw-ring-color:var(--as-focus-ring)}@media (hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-\[var\(--as-fg\)\]\/30:hover{border-color:var(--as-fg)}@supports (color:color-mix(in lab, red, red)){.hover\:border-\[var\(--as-fg\)\]\/30:hover{border-color:color-mix(in oklab, var(--as-fg) 30%, transparent)}}.hover\:border-\[var\(--as-fg\)\]\/40:hover{border-color:var(--as-fg)}@supports (color:color-mix(in lab, red, red)){.hover\:border-\[var\(--as-fg\)\]\/40:hover{border-color:color-mix(in oklab, var(--as-fg) 40%, transparent)}}.hover\:border-\[var\(--as-primary\)\]:hover{border-color:var(--as-primary)}.hover\:bg-\[color-mix\(in_srgb\,var\(--as-ai\)_14\%\,var\(--as-secondary\)\)\]:hover{background-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--as-ai\)_14\%\,var\(--as-secondary\)\)\]:hover{background-color:color-mix(in srgb,var(--as-ai) 14%,var(--as-secondary))}}.hover\:bg-\[color-mix\(in_srgb\,var\(--as-muted\)_60\%\,transparent\)\]:hover{background-color:var(--as-muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--as-muted\)_60\%\,transparent\)\]:hover{background-color:color-mix(in srgb,var(--as-muted) 60%,transparent)}}.hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary\)_6\%\,transparent\)\]:hover{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary\)_6\%\,transparent\)\]:hover{background-color:color-mix(in srgb,var(--as-primary) 6%,transparent)}}.hover\:bg-\[var\(--as-accent-strong\)\]:hover{background-color:var(--as-accent-strong)}.hover\:bg-\[var\(--as-danger\)\]:hover{background-color:var(--as-danger)}.hover\:bg-\[var\(--as-muted\)\]:hover{background-color:var(--as-muted)}.hover\:bg-\[var\(--as-secondary\)\]:hover{background-color:var(--as-secondary)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-\[var\(--as-danger\)\]:hover{color:var(--as-danger)}.hover\:text-\[var\(--as-danger-fg\)\]:hover{color:var(--as-danger-fg)}.hover\:text-\[var\(--as-fg\)\]:hover{color:var(--as-fg)}.hover\:text-\[var\(--as-primary\)\]:hover{color:var(--as-primary)}.hover\:text-\[var\(--as-success\)\]:hover{color:var(--as-success)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-85:hover{opacity:.85}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[var\(--as-shadow-2\)\]:hover{--tw-shadow:var(--as-shadow-2);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-\[var\(--as-shadow-3\)\]:hover{--tw-shadow:var(--as-shadow-3);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:brightness-95:hover{--tw-brightness:brightness(95%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:bg-\[var\(--as-danger\)\]\/10:focus{background-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.focus\:bg-\[var\(--as-danger\)\]\/10:focus{background-color:color-mix(in oklab, var(--as-danger) 10%, transparent)}}.focus\:bg-\[var\(--as-secondary\)\]:focus{background-color:var(--as-secondary)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:border-\[var\(--as-danger\)\]:focus-visible{border-color:var(--as-danger)}.focus-visible\:border-\[var\(--as-focus-ring\)\]:focus-visible{border-color:var(--as-focus-ring)}.focus-visible\:border-\[var\(--as-primary\)\]:focus-visible{border-color:var(--as-primary)}.focus-visible\:opacity-100:focus-visible{opacity:1}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-\[var\(--as-danger\)\]:focus-visible{--tw-ring-color:var(--as-danger)}.focus-visible\:ring-\[var\(--as-focus-ring\)\]:focus-visible{--tw-ring-color:var(--as-focus-ring)}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-1:focus-visible{outline-offset:1px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-offset-\[-2px\]:focus-visible{outline-offset:-2px}.focus-visible\:outline-\[var\(--as-focus-ring\)\]:focus-visible{outline-color:var(--as-focus-ring)}.focus-visible\:outline-\[var\(--as-primary\)\]:focus-visible{outline-color:var(--as-primary)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}@media (min-width:40rem){.sm\:inset-0{inset:0}.sm\:mx-auto{margin-inline:auto}.sm\:my-auto{margin-block:auto}.sm\:mr-auto{margin-right:auto}.sm\:h-fit{height:fit-content}.sm\:max-h-\[90vh\]{max-height:90vh}.sm\:w-fit{width:fit-content}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-4xl{max-width:var(--container-4xl)}.sm\:max-w-6xl{max-width:var(--container-6xl)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:rounded-\[var\(--as-radius-lg\)\]{border-radius:var(--as-radius-lg)}.sm\:border{border-style:var(--tw-border-style);border-width:1px}.sm\:border-\[var\(--as-border\)\]{border-color:var(--as-border)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}}@media (min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:64rem){.lg\:relative{position:relative}.lg\:sticky{position:sticky}.lg\:top-24{top:calc(var(--spacing) * 24)}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3 svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:size-5 svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.\[\&_svg\]\:size-\[18px\] svg{width:18px;height:18px}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}@keyframes as-fade-in{0%{opacity:0}to{opacity:1}}@keyframes as-zoom-in{0%{opacity:0;scale:.97}to{opacity:1;scale:1}}@keyframes as-pop-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes as-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}.as-anim-fade{animation:.15s ease-out as-fade-in}.as-anim-modal{animation:.15s ease-out as-zoom-in}.as-anim-pop{animation:.12s ease-out as-pop-in}.as-anim-drawer{animation:.2s ease-out as-drawer-in}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}
|
|
2
|
+
@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}:root,:host{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-500:oklch(63.7% .237 25.331);--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-4xl:56rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--blur-2xl:40px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}:root{--as-tone-0:oklch(100% 0 0);--as-tone-50:oklch(98.5% .003 90);--as-tone-100:oklch(94.8% .005 90);--as-tone-200:oklch(90.2% .005 90);--as-tone-300:oklch(83% .008 90);--as-tone-500:oklch(50% .012 90);--as-tone-700:oklch(37% .014 90);--as-tone-900:oklch(23.5% .012 90);--as-accent:oklch(55% .16 258);--as-accent-strong:oklch(48% .18 258);--as-success:oklch(62% .15 152);--as-warning:oklch(72% .15 78);--as-danger:oklch(58% .19 27);--as-ai:oklch(54.1% .247 293.009);--as-primary:var(--as-accent);--as-primary-fg:var(--as-tone-50);--as-secondary:var(--as-tone-100);--as-secondary-fg:var(--as-tone-900);--as-surface:var(--as-tone-50);--as-surface-raised:var(--as-tone-0);--as-border:var(--as-tone-200);--as-fg:var(--as-tone-900);--as-muted:var(--as-tone-100);--as-muted-fg:var(--as-tone-500);--as-success-fg:var(--as-tone-0);--as-warning-fg:var(--as-tone-900);--as-danger-fg:var(--as-tone-0);--as-ai-fg:var(--as-tone-0);--as-focus-ring:var(--as-accent);--as-overlay:oklch(0% 0 0/.6);--as-z-modal:50;--as-z-popover:50;--as-radius-sm:calc(var(--as-radius) - .25rem);--as-radius:.625rem;--as-radius-lg:calc(var(--as-radius) + .25rem);--as-font-sans:"Inter Variable", ui-sans-serif, system-ui, sans-serif;--as-font-mono:"JetBrains Mono", ui-monospace, "Cascadia Mono", monospace;--as-shadow-1:0 1px 2px 0 oklch(0% 0 0/.05);--as-shadow-2:0 4px 6px -1px oklch(0% 0 0/.07), 0 2px 4px -2px oklch(0% 0 0/.05);--as-shadow-3:0 10px 15px -3px oklch(0% 0 0/.08), 0 4px 6px -4px oklch(0% 0 0/.05)}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{inset-block:0}.-top-12{top:calc(var(--spacing) * -12)}.top-1{top:var(--spacing)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.-right-12{right:calc(var(--spacing) * -12)}.right-0{right:0}.right-1{right:var(--spacing)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.right-7{right:calc(var(--spacing) * 7)}.left-1{left:var(--spacing)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[var\(--as-z-modal\)\]{z-index:var(--as-z-modal)}.z-\[var\(--as-z-popover\)\]{z-index:var(--as-z-popover)}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-auto{margin:auto}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-auto{margin-block:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mr-1{margin-right:var(--spacing)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-3{margin-right:calc(var(--spacing) * 3)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-1{margin-left:var(--spacing)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-36{width:calc(var(--spacing) * 36);height:calc(var(--spacing) * 36)}.size-\[18px\]{width:18px;height:18px}.size-full{width:100%;height:100%}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-14{height:calc(var(--spacing) * 14)}.h-20{height:calc(var(--spacing) * 20)}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-\[85vh\]{max-height:85vh}.max-h-\[92vh\]{max-height:92vh}.min-h-0{min-height:0}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-16{min-height:calc(var(--spacing) * 16)}.w-4\/5{width:80%}.w-9{width:calc(var(--spacing) * 9)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-40{width:calc(var(--spacing) * 40)}.w-48{width:calc(var(--spacing) * 48)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-\[280px\]{width:280px}.w-\[300px\]{width:300px}.w-\[calc\(100\%-2rem\)\]{width:calc(100% - 2rem)}.w-\[var\(--radix-popover-trigger-width\)\]{width:var(--radix-popover-trigger-width)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-24{min-width:calc(var(--spacing) * 24)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-full{min-width:100%}.flex-1{flex:1}.shrink-0{flex-shrink:0}.\[translate\:-50\%_-50\%\]{translate:-50% -50%}.\[translate\:0_-50\%\]{translate:0 -50%}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-progress{cursor:progress}.cursor-text{cursor:text}.resize-none{resize:none}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-1\.5{column-gap:calc(var(--spacing) * 1.5)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1{row-gap:var(--spacing)}.gap-y-4{row-gap:calc(var(--spacing) * 4)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-\[color-mix\(in_srgb\,var\(--as-border\)_55\%\,transparent\)\]>:not(:last-child)){border-color:var(--as-border)}@supports (color:color-mix(in lab, red, red)){:where(.divide-\[color-mix\(in_srgb\,var\(--as-border\)_55\%\,transparent\)\]>:not(:last-child)){border-color:color-mix(in srgb,var(--as-border) 55%,transparent)}}:where(.divide-\[var\(--as-border\)\]>:not(:last-child)){border-color:var(--as-border)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[calc\(var\(--as-radius\)-2px\)\]{border-radius:calc(var(--as-radius) - 2px)}.rounded-\[calc\(var\(--as-radius-sm\)-2px\)\]{border-radius:calc(var(--as-radius-sm) - 2px)}.rounded-\[var\(--as-radius\)\]{border-radius:var(--as-radius)}.rounded-\[var\(--as-radius-lg\)\]{border-radius:var(--as-radius-lg)}.rounded-\[var\(--as-radius-sm\)\]{border-radius:var(--as-radius-sm)}.rounded-full{border-radius:3.40282e38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[color-mix\(in_srgb\,var\(--as-ai\)_25\%\,transparent\)\]{border-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-ai\)_25\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-ai) 25%,transparent)}}.border-\[color-mix\(in_srgb\,var\(--as-primary\)_25\%\,transparent\)\]{border-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-primary\)_25\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-primary) 25%,transparent)}}.border-\[color-mix\(in_srgb\,var\(--as-warning\)_35\%\,transparent\)\]{border-color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--as-warning\)_35\%\,transparent\)\]{border-color:color-mix(in srgb,var(--as-warning) 35%,transparent)}}.border-\[var\(--as-border\)\]{border-color:var(--as-border)}.border-\[var\(--as-danger\)\],.border-\[var\(--as-danger\)\]\/40{border-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--as-danger\)\]\/40{border-color:color-mix(in oklab, var(--as-danger) 40%, transparent)}}.border-\[var\(--as-primary\)\],.border-\[var\(--as-primary\)\]\/30{border-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--as-primary\)\]\/30{border-color:color-mix(in oklab, var(--as-primary) 30%, transparent)}}.border-\[var\(--as-surface-raised\)\]{border-color:var(--as-surface-raised)}.border-transparent{border-color:#0000}.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_8\%\,transparent\)\]{background-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_8\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-ai) 8%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_12\%\,transparent\)\]{background-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-ai\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-ai) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-danger\)_12\%\,transparent\)\]{background-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-danger\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-danger) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_7\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_7\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 7%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_8\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_8\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 8%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_12\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_30\%\,transparent\)\]{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary\)_30\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary) 30%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_18\%\,transparent\)\]{background-color:var(--as-primary-fg)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_18\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary-fg) 18%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_20\%\,transparent\)\]{background-color:var(--as-primary-fg)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_20\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-primary-fg) 20%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-success\)_14\%\,transparent\)\]{background-color:var(--as-success)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-success\)_14\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-success) 14%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_12\%\,transparent\)\]{background-color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_12\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-warning) 12%,transparent)}}.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_18\%\,transparent\)\]{background-color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--as-warning\)_18\%\,transparent\)\]{background-color:color-mix(in srgb,var(--as-warning) 18%,transparent)}}.bg-\[var\(--as-ai\)\]{background-color:var(--as-ai)}.bg-\[var\(--as-border\)\]{background-color:var(--as-border)}.bg-\[var\(--as-danger\)\],.bg-\[var\(--as-danger\)\]\/10{background-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--as-danger\)\]\/10{background-color:color-mix(in oklab, var(--as-danger) 10%, transparent)}}.bg-\[var\(--as-fg\)\]{background-color:var(--as-fg)}.bg-\[var\(--as-muted\)\]{background-color:var(--as-muted)}.bg-\[var\(--as-overlay\)\]{background-color:var(--as-overlay)}.bg-\[var\(--as-primary\)\],.bg-\[var\(--as-primary\)\]\/10{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--as-primary\)\]\/10{background-color:color-mix(in oklab, var(--as-primary) 10%, transparent)}}.bg-\[var\(--as-primary\)\]\/50{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--as-primary\)\]\/50{background-color:color-mix(in oklab, var(--as-primary) 50%, transparent)}}.bg-\[var\(--as-secondary\)\]{background-color:var(--as-secondary)}.bg-\[var\(--as-success\)\]{background-color:var(--as-success)}.bg-\[var\(--as-surface\)\]{background-color:var(--as-surface)}.bg-\[var\(--as-surface-raised\)\]{background-color:var(--as-surface-raised)}.bg-\[var\(--as-warning\)\]{background-color:var(--as-warning)}.bg-red-500{background-color:var(--color-red-500)}.bg-transparent{background-color:#0000}.fill-\[var\(--as-danger\)\]{fill:var(--as-danger)}.fill-\[var\(--as-fg\)\]{fill:var(--as-fg)}.fill-\[var\(--as-muted\)\]{fill:var(--as-muted)}.fill-\[var\(--as-primary\)\]{fill:var(--as-primary)}.fill-\[var\(--as-primary-fg\)\]{fill:var(--as-primary-fg)}.fill-\[var\(--as-surface-raised\)\]{fill:var(--as-surface-raised)}.stroke-\[var\(--as-border\)\]{stroke:var(--as-border)}.stroke-\[var\(--as-primary\)\]{stroke:var(--as-primary)}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0{padding-inline:0}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-0{padding-top:0}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-7{padding-right:calc(var(--spacing) * 7)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-14{padding-right:calc(var(--spacing) * 14)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.whitespace-nowrap{white-space:nowrap}.text-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_78\%\,transparent\)\]{color:var(--as-primary-fg)}@supports (color:color-mix(in lab, red, red)){.text-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_78\%\,transparent\)\]{color:color-mix(in srgb,var(--as-primary-fg) 78%,transparent)}}.text-\[color-mix\(in_srgb\,var\(--as-warning\)_72\%\,var\(--as-fg\)\)\]{color:var(--as-warning)}@supports (color:color-mix(in lab, red, red)){.text-\[color-mix\(in_srgb\,var\(--as-warning\)_72\%\,var\(--as-fg\)\)\]{color:color-mix(in srgb,var(--as-warning) 72%,var(--as-fg))}}.text-\[var\(--as-ai\)\]{color:var(--as-ai)}.text-\[var\(--as-ai-fg\)\]{color:var(--as-ai-fg)}.text-\[var\(--as-danger\)\]{color:var(--as-danger)}.text-\[var\(--as-danger-fg\)\]{color:var(--as-danger-fg)}.text-\[var\(--as-fg\)\]{color:var(--as-fg)}.text-\[var\(--as-muted-fg\)\]{color:var(--as-muted-fg)}.text-\[var\(--as-primary\)\]{color:var(--as-primary)}.text-\[var\(--as-primary-fg\)\]{color:var(--as-primary-fg)}.text-\[var\(--as-secondary-fg\)\]{color:var(--as-secondary-fg)}.text-\[var\(--as-success\)\]{color:var(--as-success)}.text-\[var\(--as-success-fg\)\]{color:var(--as-success-fg)}.text-\[var\(--as-surface\)\]{color:var(--as-surface)}.text-\[var\(--as-warning\)\]{color:var(--as-warning)}.text-\[var\(--as-warning-fg\)\]{color:var(--as-warning-fg)}.text-inherit{color:inherit}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-transparent{text-decoration-color:#0000}.underline-offset-4{text-underline-offset:4px}.accent-\[var\(--as-primary\)\]{accent-color:var(--as-primary)}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--as-shadow-1\)\]{--tw-shadow:var(--as-shadow-1);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--as-shadow-2\)\]{--tw-shadow:var(--as-shadow-2);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--as-shadow-3\)\]{--tw-shadow:var(--as-shadow-3);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-\[var\(--as-focus-ring\)\]{--tw-ring-color:var(--as-focus-ring)}.ring-\[var\(--as-primary\)\]{--tw-ring-color:var(--as-primary)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.blur-2xl{--tw-blur:blur(var(--blur-2xl));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-\[border-color\,box-shadow\,translate\]{transition-property:border-color,box-shadow,translate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\,border-color\]{transition-property:color,box-shadow,border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[filter\]{transition-property:filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_32\%\,transparent\)\]:is(:where(.group):hover *){background-color:var(--as-primary-fg)}@supports (color:color-mix(in lab, red, red)){.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary-fg\)_32\%\,transparent\)\]:is(:where(.group):hover *){background-color:color-mix(in srgb,var(--as-primary-fg) 32%,transparent)}}.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-secondary-fg\)_14\%\,transparent\)\]:is(:where(.group):hover *){background-color:var(--as-secondary-fg)}@supports (color:color-mix(in lab, red, red)){.group-hover\:bg-\[color-mix\(in_srgb\,var\(--as-secondary-fg\)_14\%\,transparent\)\]:is(:where(.group):hover *){background-color:color-mix(in srgb,var(--as-secondary-fg) 14%,transparent)}}.group-hover\:bg-\[var\(--as-primary\)\]\/10:is(:where(.group):hover *){background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.group-hover\:bg-\[var\(--as-primary\)\]\/10:is(:where(.group):hover *){background-color:color-mix(in oklab, var(--as-primary) 10%, transparent)}}.group-hover\:text-\[var\(--as-primary\)\]:is(:where(.group):hover *){color:var(--as-primary)}.group-hover\:decoration-current:is(:where(.group):hover *){text-decoration-color:currentColor}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-\[var\(--as-muted-fg\)\]::placeholder{color:var(--as-muted-fg)}.focus-within\:border-\[var\(--as-focus-ring\)\]:focus-within{border-color:var(--as-focus-ring)}.focus-within\:opacity-100:focus-within{opacity:1}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-within\:ring-\[var\(--as-focus-ring\)\]:focus-within{--tw-ring-color:var(--as-focus-ring)}@media (hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:border-\[var\(--as-fg\)\]\/30:hover{border-color:var(--as-fg)}@supports (color:color-mix(in lab, red, red)){.hover\:border-\[var\(--as-fg\)\]\/30:hover{border-color:color-mix(in oklab, var(--as-fg) 30%, transparent)}}.hover\:border-\[var\(--as-fg\)\]\/40:hover{border-color:var(--as-fg)}@supports (color:color-mix(in lab, red, red)){.hover\:border-\[var\(--as-fg\)\]\/40:hover{border-color:color-mix(in oklab, var(--as-fg) 40%, transparent)}}.hover\:border-\[var\(--as-muted-fg\)\]\/40:hover{border-color:var(--as-muted-fg)}@supports (color:color-mix(in lab, red, red)){.hover\:border-\[var\(--as-muted-fg\)\]\/40:hover{border-color:color-mix(in oklab, var(--as-muted-fg) 40%, transparent)}}.hover\:border-\[var\(--as-primary\)\]:hover{border-color:var(--as-primary)}.hover\:bg-\[color-mix\(in_srgb\,var\(--as-ai\)_14\%\,var\(--as-secondary\)\)\]:hover{background-color:var(--as-ai)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--as-ai\)_14\%\,var\(--as-secondary\)\)\]:hover{background-color:color-mix(in srgb,var(--as-ai) 14%,var(--as-secondary))}}.hover\:bg-\[color-mix\(in_srgb\,var\(--as-muted\)_60\%\,transparent\)\]:hover{background-color:var(--as-muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--as-muted\)_60\%\,transparent\)\]:hover{background-color:color-mix(in srgb,var(--as-muted) 60%,transparent)}}.hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary\)_6\%\,transparent\)\]:hover{background-color:var(--as-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color-mix\(in_srgb\,var\(--as-primary\)_6\%\,transparent\)\]:hover{background-color:color-mix(in srgb,var(--as-primary) 6%,transparent)}}.hover\:bg-\[var\(--as-accent-strong\)\]:hover{background-color:var(--as-accent-strong)}.hover\:bg-\[var\(--as-danger\)\]:hover{background-color:var(--as-danger)}.hover\:bg-\[var\(--as-muted\)\]:hover{background-color:var(--as-muted)}.hover\:bg-\[var\(--as-secondary\)\]:hover{background-color:var(--as-secondary)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-\[var\(--as-danger\)\]:hover{color:var(--as-danger)}.hover\:text-\[var\(--as-danger-fg\)\]:hover{color:var(--as-danger-fg)}.hover\:text-\[var\(--as-fg\)\]:hover{color:var(--as-fg)}.hover\:text-\[var\(--as-primary\)\]:hover{color:var(--as-primary)}.hover\:text-\[var\(--as-success\)\]:hover{color:var(--as-success)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-85:hover{opacity:.85}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[var\(--as-shadow-2\)\]:hover{--tw-shadow:var(--as-shadow-2);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-\[var\(--as-shadow-3\)\]:hover{--tw-shadow:var(--as-shadow-3);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:brightness-95:hover{--tw-brightness:brightness(95%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:bg-\[var\(--as-danger\)\]\/10:focus{background-color:var(--as-danger)}@supports (color:color-mix(in lab, red, red)){.focus\:bg-\[var\(--as-danger\)\]\/10:focus{background-color:color-mix(in oklab, var(--as-danger) 10%, transparent)}}.focus\:bg-\[var\(--as-secondary\)\]:focus{background-color:var(--as-secondary)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:border-\[var\(--as-danger\)\]:focus-visible{border-color:var(--as-danger)}.focus-visible\:border-\[var\(--as-focus-ring\)\]:focus-visible{border-color:var(--as-focus-ring)}.focus-visible\:border-\[var\(--as-primary\)\]:focus-visible{border-color:var(--as-primary)}.focus-visible\:opacity-100:focus-visible{opacity:1}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-\[var\(--as-danger\)\]:focus-visible{--tw-ring-color:var(--as-danger)}.focus-visible\:ring-\[var\(--as-focus-ring\)\]:focus-visible{--tw-ring-color:var(--as-focus-ring)}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-1:focus-visible{outline-offset:1px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-offset-\[-2px\]:focus-visible{outline-offset:-2px}.focus-visible\:outline-\[var\(--as-focus-ring\)\]:focus-visible{outline-color:var(--as-focus-ring)}.focus-visible\:outline-\[var\(--as-primary\)\]:focus-visible{outline-color:var(--as-primary)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}@media (min-width:40rem){.sm\:inset-0{inset:0}.sm\:mx-auto{margin-inline:auto}.sm\:my-auto{margin-block:auto}.sm\:mr-auto{margin-right:auto}.sm\:h-fit{height:fit-content}.sm\:max-h-\[90vh\]{max-height:90vh}.sm\:w-fit{width:fit-content}.sm\:max-w-2xl{max-width:var(--container-2xl)}.sm\:max-w-4xl{max-width:var(--container-4xl)}.sm\:max-w-6xl{max-width:var(--container-6xl)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:rounded-\[var\(--as-radius-lg\)\]{border-radius:var(--as-radius-lg)}.sm\:border{border-style:var(--tw-border-style);border-width:1px}.sm\:border-\[var\(--as-border\)\]{border-color:var(--as-border)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}}@media (min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:64rem){.lg\:relative{position:relative}.lg\:sticky{position:sticky}.lg\:top-24{top:calc(var(--spacing) * 24)}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-3{grid-column:span 3/span 3}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3 svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:size-5 svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.\[\&_svg\]\:size-\[18px\] svg{width:18px;height:18px}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}@keyframes as-fade-in{0%{opacity:0}to{opacity:1}}@keyframes as-zoom-in{0%{opacity:0;scale:.97}to{opacity:1;scale:1}}@keyframes as-pop-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes as-drawer-in{0%{transform:translate(100%)}to{transform:translate(0)}}.as-anim-fade{animation:.15s ease-out as-fade-in}.as-anim-modal{animation:.15s ease-out as-zoom-in}.as-anim-pop{animation:.12s ease-out as-pop-in}.as-anim-drawer{animation:.2s ease-out as-drawer-in}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { LucideIcon } from 'lucide-react';
|
|
2
3
|
import { ModelPickerProvider } from './model-picker.js';
|
|
3
4
|
|
|
4
5
|
interface TaskAssignmentTask {
|
|
5
6
|
id: string;
|
|
6
7
|
label: string;
|
|
7
8
|
description?: string;
|
|
9
|
+
/** Rendered in an icon tile at the row's leading edge. */
|
|
10
|
+
icon?: LucideIcon;
|
|
8
11
|
/** When set, the row's picker offers only models matching this capability. */
|
|
9
12
|
requires?: string;
|
|
10
13
|
/** Render the fallback-model picker for this row (needs `onAssignSecondary`). */
|
|
@@ -18,7 +21,8 @@ interface TaskAssignmentSection {
|
|
|
18
21
|
tasks: TaskAssignmentTask[];
|
|
19
22
|
}
|
|
20
23
|
interface TaskAssignmentPickerProps {
|
|
21
|
-
|
|
24
|
+
/** Flat rendering; ignored when `sections` is set. */
|
|
25
|
+
tasks?: TaskAssignmentTask[];
|
|
22
26
|
/** Grouped rendering; when set, `tasks` is ignored. */
|
|
23
27
|
sections?: TaskAssignmentSection[];
|
|
24
28
|
providers: ModelPickerProvider[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neuronection/assistant-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Shared React component library for the Assistant family (career-, study-, health-assistant). Family look by default, app-flavored via CSS-variable tokens.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -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"]}
|
package/dist/chunk-MLQAA2QV.js
DELETED
|
@@ -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 +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"]}
|