@elabs-ai/components-ai 5.3.0 → 5.4.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/dist/a2ui/a2ui-surface.js +3 -3
- package/dist/a2ui/core/catalog.generated.js +1 -1
- package/dist/a2ui/core/index.js +1 -1
- package/dist/a2ui/index.js +3 -3
- package/dist/a2ui/ui-catalog.js +2 -2
- package/dist/{chunk-PTWCTSZL.js → chunk-AOOIAFDT.js} +3 -3
- package/dist/chunk-AOOIAFDT.js.map +1 -0
- package/dist/{chunk-L4SU3QJV.js → chunk-IH4Y3O24.js} +2 -2
- package/dist/{chunk-QOBSEGCG.js → chunk-PCEEZGTQ.js} +13 -7
- package/dist/chunk-PCEEZGTQ.js.map +1 -0
- package/dist/{chunk-FERYDFZA.js → chunk-UHLVPAHG.js} +2 -2
- package/dist/{chunk-WU5BLGTF.js → chunk-VJZJWNEC.js} +2 -2
- package/dist/{chunk-GA7M34KU.js → chunk-VQNTO2H4.js} +2 -2
- package/dist/grouped-parts.js +2 -2
- package/dist/index.js +6 -6
- package/dist/sandbox.js +2 -2
- package/dist/tool.js +1 -1
- package/package.json +8 -8
- package/schemas/a2ui-surface.v1.schema.json +11 -2
- package/src/a2ui/catalog.source.json +3 -2
- package/src/a2ui/core/catalog.generated.ts +9 -0
- package/src/agentic-workspace.stories.tsx +1 -1
- package/src/tool.test.tsx +26 -0
- package/src/tool.tsx +2 -2
- package/dist/chunk-PTWCTSZL.js.map +0 -1
- package/dist/chunk-QOBSEGCG.js.map +0 -1
- /package/dist/{chunk-L4SU3QJV.js.map → chunk-IH4Y3O24.js.map} +0 -0
- /package/dist/{chunk-FERYDFZA.js.map → chunk-UHLVPAHG.js.map} +0 -0
- /package/dist/{chunk-WU5BLGTF.js.map → chunk-VJZJWNEC.js.map} +0 -0
- /package/dist/{chunk-GA7M34KU.js.map → chunk-VQNTO2H4.js.map} +0 -0
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
import {
|
|
4
4
|
A2uiSurface
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-VQNTO2H4.js";
|
|
6
6
|
import {
|
|
7
7
|
completeJson
|
|
8
8
|
} from "../chunk-SKVG672B.js";
|
|
9
9
|
import "../chunk-7FD5CZEU.js";
|
|
10
10
|
import "../chunk-4XRNIZMG.js";
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
11
|
+
import "../chunk-IH4Y3O24.js";
|
|
12
|
+
import "../chunk-PCEEZGTQ.js";
|
|
13
13
|
export {
|
|
14
14
|
A2uiSurface,
|
|
15
15
|
completeJson
|
package/dist/a2ui/core/index.js
CHANGED
package/dist/a2ui/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "../chunk-BM2LWERA.js";
|
|
8
8
|
import {
|
|
9
9
|
A2uiSurface
|
|
10
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-VQNTO2H4.js";
|
|
11
11
|
import {
|
|
12
12
|
completeJson,
|
|
13
13
|
parseSurfaceJson
|
|
@@ -27,11 +27,11 @@ import {
|
|
|
27
27
|
createA2uiCatalog,
|
|
28
28
|
defineA2uiType,
|
|
29
29
|
uiCatalog
|
|
30
|
-
} from "../chunk-
|
|
30
|
+
} from "../chunk-IH4Y3O24.js";
|
|
31
31
|
import {
|
|
32
32
|
A2UI_CATALOG_SCHEMA,
|
|
33
33
|
A2UI_CATALOG_VERSION
|
|
34
|
-
} from "../chunk-
|
|
34
|
+
} from "../chunk-PCEEZGTQ.js";
|
|
35
35
|
export {
|
|
36
36
|
A2UI_CATALOG_SCHEMA,
|
|
37
37
|
A2UI_CATALOG_VERSION,
|
package/dist/a2ui/ui-catalog.js
CHANGED
|
@@ -61,8 +61,8 @@ var ToolHeader = ({
|
|
|
61
61
|
children: [
|
|
62
62
|
/* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
63
63
|
/* @__PURE__ */ jsx(WrenchIcon, { className: "size-4 shrink-0 text-muted-foreground" }),
|
|
64
|
-
/* @__PURE__ */ jsx("span", { className: "
|
|
65
|
-
|
|
64
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 truncate text-body font-medium", children: title ?? derivedName }),
|
|
65
|
+
/* @__PURE__ */ jsx(StatusBadge, { status: statusFromToolState(state), className: "shrink-0" }),
|
|
66
66
|
summary ? /* @__PURE__ */ jsx("span", { className: "truncate text-meta text-muted-foreground", children: summary }) : null
|
|
67
67
|
] }),
|
|
68
68
|
/* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4 shrink-0 text-muted-foreground transition-transform group-data-[state=open]:rotate-180" })
|
|
@@ -170,4 +170,4 @@ export {
|
|
|
170
170
|
ToolInput,
|
|
171
171
|
ToolOutput
|
|
172
172
|
};
|
|
173
|
-
//# sourceMappingURL=chunk-
|
|
173
|
+
//# sourceMappingURL=chunk-AOOIAFDT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tool.tsx"],"sourcesContent":["\"use client\";\n\nimport { Skeleton, StatusBadge, useLocale, type Status } from \"@elabs-ai/components-ui\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"@elabs-ai/components-ui\";\nimport { cn } from \"@elabs-ai/components-ui/lib/cn\";\nimport type { DynamicToolUIPart, ToolUIPart } from \"ai\";\nimport { ChevronDownIcon, WrenchIcon } from \"lucide-react\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { isValidElement } from \"react\";\nimport type { BundledLanguage } from \"shiki\";\n\nimport { CodeBlock } from \"./code-block\";\n\nexport type ToolProps = ComponentProps<typeof Collapsible>;\n\nexport const Tool = ({ className, ...props }: ToolProps) => (\n <Collapsible\n className={cn(\"group not-prose mb-4 w-full rounded-md border\", className)}\n {...props}\n />\n);\n\nexport type ToolPart = ToolUIPart | DynamicToolUIPart;\n\n/**\n * `JSON.stringify` throws on a circular reference or a `BigInt` — both\n * realistic shapes for tool input/output payloads a model produced. Falls\n * back to a readable placeholder instead of crashing the message render.\n */\nfunction safeJsonStringify(value: unknown): string {\n try {\n return JSON.stringify(value, (_key, v) => (typeof v === \"bigint\" ? `${v.toString()}n` : v), 2);\n } catch {\n return String(value);\n }\n}\n\nexport type ToolHeaderProps = {\n title?: string;\n /**\n * The business summary line (\"3 documents found\", \"8 rows reconciled\"),\n * shown beside the name + StatusBadge (#192, research 10 §B.5). Falls back\n * to nothing — the derived tool name still labels the row.\n */\n summary?: ReactNode;\n className?: string;\n} & (\n | { type: ToolUIPart[\"type\"]; state: ToolUIPart[\"state\"]; toolName?: never }\n | {\n type: DynamicToolUIPart[\"type\"];\n state: DynamicToolUIPart[\"state\"];\n toolName: string;\n }\n);\n\n/**\n * Map the AI-SDK `ToolUIPart` 7-state machine onto the canonical `Status`\n * enum (#189, research 10 §B.1 mapping a). Lives here — not in `@elabs-ai/components-ui` —\n * because it is typed against the SDK union; the `ai` import stays TYPES-ONLY\n * (D6, gate-enforced by `pnpm ai:types-only`).\n */\nexport const statusFromToolState = (state: ToolPart[\"state\"]): Status => {\n switch (state) {\n case \"input-streaming\":\n return \"pending\";\n case \"input-available\":\n return \"running\";\n case \"approval-requested\":\n return \"awaiting-approval\";\n case \"approval-responded\":\n return \"running\";\n case \"output-available\":\n return \"complete\";\n case \"output-denied\":\n return \"denied\";\n case \"output-error\":\n return \"failed\";\n }\n};\n\n/** Same signature as before #189; renders the canonical StatusBadge. */\nexport const getStatusBadge = (status: ToolPart[\"state\"]) => (\n <StatusBadge status={statusFromToolState(status)} />\n);\n\nexport const ToolHeader = ({\n className,\n title,\n summary,\n type,\n state,\n toolName,\n ...props\n}: ToolHeaderProps) => {\n const derivedName = type === \"dynamic-tool\" ? toolName : type.split(\"-\").slice(1).join(\"-\");\n\n return (\n <CollapsibleTrigger\n className={cn(\"flex w-full items-center justify-between gap-4 p-3\", className)}\n {...props}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <WrenchIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0 truncate text-body font-medium\">{title ?? derivedName}</span>\n <StatusBadge status={statusFromToolState(state)} className=\"shrink-0\" />\n {summary ? (\n <span className=\"truncate text-meta text-muted-foreground\">{summary}</span>\n ) : null}\n </div>\n <ChevronDownIcon className=\"size-4 shrink-0 text-muted-foreground transition-transform group-data-[state=open]:rotate-180\" />\n </CollapsibleTrigger>\n );\n};\n\nexport type ToolContentProps = ComponentProps<typeof CollapsibleContent>;\n\nexport const ToolContent = ({ className, ...props }: ToolContentProps) => (\n <CollapsibleContent\n className={cn(\n \"data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 space-y-4 p-4 text-popover-foreground outline-none data-[state=closed]:animate-out data-[state=open]:animate-in data-[state=open]:[--tw-ease:var(--ease-entrance)] data-[state=closed]:[--tw-ease:var(--ease-exit)]\",\n className,\n )}\n {...props}\n />\n);\n\nexport type ToolDetailsProps = ComponentProps<typeof Collapsible> & {\n /** The disclosure label. */\n label?: ReactNode;\n};\n\n/**\n * The technical view, behind disclosure — the PACKAGE DEFAULT for tool JSON\n * (#192, research 10 §B.5): a nested collapsible, COLLAPSED by default,\n * holding `ToolInput`/`ToolOutput`. The header carries the business `summary`;\n * the raw payload is one expand away, never the headline.\n */\nexport const ToolDetails = ({\n className,\n label,\n defaultOpen = false,\n children,\n ...props\n}: ToolDetailsProps) => {\n const { t } = useLocale();\n return (\n <Collapsible\n className={cn(\"group/tool-details not-prose\", className)}\n defaultOpen={defaultOpen}\n {...props}\n >\n <CollapsibleTrigger className=\"flex items-center gap-1 rounded-sm text-meta text-muted-foreground transition-colors hover:text-foreground focus-ring\">\n <ChevronDownIcon className=\"size-3.5 transition-transform group-data-[state=open]/tool-details:rotate-180\" />\n {label ?? t(\"ai.tool.showTechnicalDetails\")}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"mt-3 space-y-4\">{children}</CollapsibleContent>\n </Collapsible>\n );\n};\n\nexport type ToolInputProps = ComponentProps<\"div\"> & {\n input: ToolPart[\"input\"];\n};\n\nexport const ToolInput = ({ className, input, ...props }: ToolInputProps) => {\n const { t } = useLocale();\n return (\n <div className={cn(\"space-y-2 overflow-hidden\", className)} {...props}>\n <h4 className=\"text-eyebrow uppercase text-muted-foreground\">\n {t(\"ai.schemaDisplay.parameters\")}\n </h4>\n <div className=\"rounded-md bg-muted/50\">\n <CodeBlock code={safeJsonStringify(input)} language=\"json\" />\n </div>\n </div>\n );\n};\n\nexport type ToolOutputProps = ComponentProps<\"div\"> & {\n /**\n * The tool result. Objects/strings render as JSON inside the technical view.\n *\n * @deprecated Passing a pre-rendered **React element** here (the \"rich\n * output under a muted Result heading\" path) is deprecated since #192\n * (research 10 §B.5): a produced artifact is the HEADLINE, not a technical\n * detail — host it in a `<ToolResultCard>` and keep `ToolOutput` for the\n * JSON payload behind `<ToolDetails>`. The element path still renders for\n * existing consumers (e.g. the copy-owned `ai-chart` registry block) but\n * will be removed in a future release.\n */\n output: ToolPart[\"output\"];\n errorText: ToolPart[\"errorText\"];\n /**\n * The call has not produced output yet (loading-states.md `isStreaming`) —\n * derive it from the existing `statusFromToolState(state)` mapping\n * (`\"input-streaming\"`/`\"input-available\"` → not yet `\"complete\"`/`\"failed\"`)\n * rather than a second source of truth. While true and no `output`/\n * `errorText` has arrived, renders a layout-shaped skeleton in the Result\n * slot instead of `null`, so the technical view reserves its space. A\n * still-running call is never a terminal failure — the error branch is\n * suppressed while `isStreaming` per the loading-states.md error rule, even\n * if a stale `errorText` is still set from a previous render.\n * @default false\n */\n isStreaming?: boolean;\n};\n\nexport const ToolOutput = ({\n className,\n output,\n errorText,\n isStreaming = false,\n ...props\n}: ToolOutputProps) => {\n const { t } = useLocale();\n\n // `output` is a defined-but-falsy result (`0`, `false`, `\"\"`) for plenty of\n // real tools (a count, a boolean check, an empty-string field) — only\n // `undefined` means \"no output (yet)\".\n const hasOutput = output !== undefined;\n\n if (!(hasOutput || errorText || isStreaming)) {\n return null;\n }\n\n const showError = !isStreaming && Boolean(errorText);\n const pending = isStreaming && !hasOutput && !errorText;\n\n let Output: ReactNode = null;\n\n if (hasOutput) {\n if (isValidElement(output)) {\n Output = output;\n } else if (typeof output === \"string\") {\n // A tool result is arbitrary text, not guaranteed JSON — forcing the\n // JSON highlighter on it mis-colours ordinary strings. Shiki's own\n // `BundledLanguage` union (grammar-backed languages) omits its\n // hard-coded plain-text pseudo-languages (`isPlainLang`:\n // \"plaintext\" | \"txt\" | \"text\" | \"plain\") — `createHighlighter`/\n // `codeToTokens` accept and special-case them with no grammar load\n // (verified: `getLoadedLanguages()` stays empty, no throw), so this\n // is a type-only gap, not a runtime one.\n Output = <CodeBlock code={output} language={\"text\" as BundledLanguage} />;\n } else {\n // Objects, arrays, numbers, booleans, null, bigint — all safe to\n // stringify for display.\n Output = <CodeBlock code={safeJsonStringify(output)} language=\"json\" />;\n }\n }\n\n return (\n <div className={cn(\"space-y-2\", className)} {...props}>\n <h4 className=\"text-eyebrow uppercase text-muted-foreground\">\n {showError ? t(\"ai.tool.error\") : t(\"ai.tool.result\")}\n </h4>\n {pending ? (\n <div className=\"space-y-2 rounded-md bg-muted/50 p-3\" role=\"status\" aria-live=\"polite\">\n <span className=\"sr-only\">{t(\"loading\")}</span>\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-1/2\" />\n </div>\n ) : (\n <div\n className={cn(\n \"overflow-x-auto rounded-md text-caption [&_table]:w-full\",\n // #124: this colours the ambient text of the error/result body —\n // running text, so the error branch takes the ink rung.\n showError ? \"bg-destructive/10 text-destructive-text\" : \"bg-muted/50 text-foreground\",\n )}\n >\n {showError && <div>{errorText}</div>}\n {Output}\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
A2UI_CATALOG_SCHEMA
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-PCEEZGTQ.js";
|
|
5
5
|
|
|
6
6
|
// src/a2ui/ui-catalog.tsx
|
|
7
7
|
import {
|
|
@@ -171,4 +171,4 @@ export {
|
|
|
171
171
|
catalogSchema,
|
|
172
172
|
uiCatalog
|
|
173
173
|
};
|
|
174
|
-
//# sourceMappingURL=chunk-
|
|
174
|
+
//# sourceMappingURL=chunk-IH4Y3O24.js.map
|
|
@@ -21,7 +21,8 @@ var A2UI_CATALOG_SCHEMA = {
|
|
|
21
21
|
events: {
|
|
22
22
|
change: "onValueChange"
|
|
23
23
|
},
|
|
24
|
-
source: "@elabs-ai/components-ui"
|
|
24
|
+
source: "@elabs-ai/components-ui",
|
|
25
|
+
summary: "Vertically stacked sections that expand one at a time (or several) to reveal their content."
|
|
25
26
|
},
|
|
26
27
|
AccordionContent: {
|
|
27
28
|
children: true,
|
|
@@ -178,7 +179,8 @@ var A2UI_CATALOG_SCHEMA = {
|
|
|
178
179
|
}
|
|
179
180
|
},
|
|
180
181
|
events: {},
|
|
181
|
-
source: "@elabs-ai/components-ui"
|
|
182
|
+
source: "@elabs-ai/components-ui",
|
|
183
|
+
summary: "Buttons joined into one connected control \u2014 a segmented choice or a set of related actions."
|
|
182
184
|
},
|
|
183
185
|
Card: {
|
|
184
186
|
children: true,
|
|
@@ -284,7 +286,8 @@ var A2UI_CATALOG_SCHEMA = {
|
|
|
284
286
|
events: {
|
|
285
287
|
change: "onOpenChange"
|
|
286
288
|
},
|
|
287
|
-
source: "@elabs-ai/components-ui"
|
|
289
|
+
source: "@elabs-ai/components-ui",
|
|
290
|
+
summary: "A single section that toggles between hidden and shown, with a trigger that reports its state."
|
|
288
291
|
},
|
|
289
292
|
CollapsibleContent: {
|
|
290
293
|
children: true,
|
|
@@ -443,7 +446,8 @@ var A2UI_CATALOG_SCHEMA = {
|
|
|
443
446
|
}
|
|
444
447
|
},
|
|
445
448
|
events: {},
|
|
446
|
-
source: "@elabs-ai/components-ui"
|
|
449
|
+
source: "@elabs-ai/components-ui",
|
|
450
|
+
summary: "The caption for a form control, wired to it for clicks and assistive technology."
|
|
447
451
|
},
|
|
448
452
|
MetricCard: {
|
|
449
453
|
children: false,
|
|
@@ -666,7 +670,8 @@ var A2UI_CATALOG_SCHEMA = {
|
|
|
666
670
|
}
|
|
667
671
|
},
|
|
668
672
|
events: {},
|
|
669
|
-
source: "@elabs-ai/components-ui"
|
|
673
|
+
source: "@elabs-ai/components-ui",
|
|
674
|
+
summary: "A horizontal or vertical divider between regions of the same surface."
|
|
670
675
|
},
|
|
671
676
|
Slider: {
|
|
672
677
|
children: false,
|
|
@@ -972,7 +977,8 @@ var A2UI_CATALOG_SCHEMA = {
|
|
|
972
977
|
events: {
|
|
973
978
|
change: "onChange"
|
|
974
979
|
},
|
|
975
|
-
source: "@elabs-ai/components-ui"
|
|
980
|
+
source: "@elabs-ai/components-ui",
|
|
981
|
+
summary: "Multi-line text input, sized by rows and auto-growing when asked."
|
|
976
982
|
},
|
|
977
983
|
Timeline: {
|
|
978
984
|
children: false,
|
|
@@ -993,4 +999,4 @@ export {
|
|
|
993
999
|
A2UI_CATALOG_VERSION,
|
|
994
1000
|
A2UI_CATALOG_SCHEMA
|
|
995
1001
|
};
|
|
996
|
-
//# sourceMappingURL=chunk-
|
|
1002
|
+
//# sourceMappingURL=chunk-PCEEZGTQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/a2ui/core/catalog.generated.ts"],"sourcesContent":["// GENERATED by packages/cli/scripts/gen-a2ui-catalog.mjs from\n// packages/ai/src/a2ui/catalog.source.json + brand-ui.manifest.json — do not edit;\n// edit the source file (or the component) and run `pnpm gen`.\nimport type { A2uiCatalogSchema } from \"./spec\";\n\nexport const A2UI_CATALOG_VERSION = \"1\";\n\nexport const A2UI_CATALOG_SCHEMA: A2uiCatalogSchema = {\n Accordion: {\n children: true,\n props: {\n collapsible: {\n type: \"boolean\",\n },\n defaultValue: {\n type: \"string\",\n },\n type: {\n enum: [\"single\", \"multiple\"],\n required: true,\n type: \"string\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary:\n \"Vertically stacked sections that expand one at a time (or several) to reveal their content.\",\n },\n AccordionContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n AccordionItem: {\n children: true,\n props: {\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n AccordionTrigger: {\n children: true,\n props: {\n headingLevel: {\n type: \"number\",\n enum: [2, 3, 4, 5, 6],\n description:\n \"The heading level Radix's `Accordion.Header` renders. Radix hardcodes `h3`, which skips a level whenever the accordion sits directly under the page `h1` — so…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Alert: {\n children: true,\n props: {\n variant: {\n type: \"string\",\n enum: [\"default\", \"destructive\", \"success\", \"warning\", \"info\"],\n default: \"default\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose AlertTitle + AlertDescription inside.\",\n },\n AlertDescription: {\n children: true,\n props: {\n measure: {\n type: \"boolean\",\n description:\n \"Cap the line length to a readable prose measure (`max-w-prose`, ~65ch) for genuine paragraph content (#339). Off by default — short, label-style descriptions…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n AlertTitle: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Avatar: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose AvatarFallback (initials) inside.\",\n },\n AvatarFallback: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Badge: {\n children: true,\n props: {\n variant: {\n type: \"string\",\n enum: [\"default\", \"secondary\", \"outline\", \"success\", \"warning\", \"destructive\", \"info\"],\n default: \"default\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compact status/label chip (status, count, category).\",\n },\n BentoGrid: {\n children: true,\n props: {\n spotlight: {\n type: \"boolean\",\n description:\n \"Enable the cursor-following spotlight on every tile in this grid. Individual tiles can still opt out (or in) with their own `spotlight` prop. Disabled entire…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Feature/bento grid; children are BentoGridItem.\",\n },\n BentoGridItem: {\n children: true,\n props: {\n size: {\n type: \"string\",\n description:\n 'Size preset. Resolves to a col + row span. Overridden by explicit `span`. @default \"sm\"',\n enum: [\"sm\", \"md\", \"lg\", \"hero\"],\n },\n span: {\n type: \"object\",\n description:\n \"Explicit grid span. Wins over `size`. Spans clamp gracefully on narrow layouts — a `col: 4` on a 2-col grid becomes `span min(4, 2)`.\",\n },\n spotlight: {\n type: \"boolean\",\n description:\n \"Enable the cursor-following spotlight gradient on this tile. Omit to inherit the parent `BentoGrid`'s `spotlight` (itself `false` by default) — so the effect…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Button: {\n children: true,\n props: {\n disabled: {\n type: \"boolean\",\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"default\", \"lg\", \"icon\", \"icon-sm\", \"icon-lg\"],\n default: \"default\",\n },\n type: {\n enum: [\"button\", \"submit\"],\n default: \"button\",\n type: \"string\",\n },\n variant: {\n type: \"string\",\n enum: [\"default\", \"secondary\", \"destructive\", \"outline\", \"outline-subtle\", \"ghost\", \"link\"],\n default: \"default\",\n },\n },\n events: {\n click: \"onClick\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: 'An action. Bind `on.click`; one `variant: \"default\"` per group.',\n },\n ButtonGroup: {\n children: true,\n props: {\n orientation: {\n type: \"string\",\n enum: [\"horizontal\", \"vertical\"],\n default: \"horizontal\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary:\n \"Buttons joined into one connected control — a segmented choice or a set of related actions.\",\n },\n Card: {\n children: true,\n props: {\n detail: {\n type: \"node\",\n description:\n \"Optional detail-panel content. **Undefined → a plain card** (today's single `<div>` — no grid, no panel, zero behaviour change).\",\n },\n detailLabel: {\n type: \"string\",\n description: 'Accessible label for the detail region. @default \"Details\"',\n },\n detailPlacement: {\n type: \"string\",\n enum: [\"side\", \"bottom\"],\n description: 'Which edge the detail panel sits on. @default \"side\"',\n },\n interactive: {\n type: \"string\",\n enum: [\"true\", \"false\"],\n default: \"false\",\n },\n stacked: {\n type: \"boolean\",\n description:\n \"Opt-in hairline gesture: the edges of two sheets stacked behind the card's top edge (the `hairline-stack` utility). It draws OUTSIDE the card, so it needs ~1…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"The one generic surface — compose CardHeader / CardContent / CardFooter inside.\",\n },\n CardAction: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"The header's trailing action slot (a Button, a Badge).\",\n },\n CardContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardDescription: {\n children: true,\n props: {\n measure: {\n type: \"boolean\",\n description:\n \"Cap the line length to a readable prose measure (`max-w-prose`, ~65ch) for genuine paragraph content (#339). Off by default — short, subtitle-style descripti…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardFooter: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardHeader: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardTitle: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Checkbox: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultChecked: {\n type: \"boolean\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n },\n events: {\n change: \"onCheckedChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Binary on/off toggle within a form (multi-select within a group).\",\n },\n Collapsible: {\n children: true,\n props: {\n defaultOpen: {\n type: \"boolean\",\n },\n },\n events: {\n change: \"onOpenChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary:\n \"A single section that toggles between hidden and shown, with a trigger that reports its state.\",\n },\n CollapsibleContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CollapsibleTrigger: {\n children: true,\n props: {\n asChild: {\n type: \"boolean\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Descriptions: {\n children: true,\n props: {\n columns: {\n type: \"number\",\n enum: [1, 2, 3],\n description:\n \"Number of columns at the widest breakpoint. Collapses to a single column on small screens. Default 1.\",\n },\n layout: {\n type: \"string\",\n description:\n \"`horizontal` places the label beside the value; `vertical` stacks the label above the value. Default `horizontal`.\",\n enum: [\"horizontal\", \"vertical\"],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Key–value list; children are DescriptionsItem.\",\n },\n DescriptionsItem: {\n children: true,\n props: {\n label: {\n type: \"node\",\n required: true,\n description: \"The term / label for this entry.\",\n },\n numeric: {\n type: \"boolean\",\n description:\n \"When the value is numeric, set this so the value uses `tabular-nums` for aligned digits.\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n EmptyState: {\n children: false,\n props: {\n actions: {\n type: \"node\",\n description: \"Primary/secondary actions.\",\n },\n description: {\n type: \"node\",\n },\n icon: {\n type: \"node\",\n description:\n \"Optional icon shown above the title, clamped to a fixed 40×40 (this wrapper only ever forwards `icon` to `StatePanel`, never `illustration` — for a larger, u…\",\n },\n title: {\n type: \"node\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Nothing here yet — title, description, optional actions.\",\n },\n Grid: {\n builtin: true,\n children: true,\n props: {\n columns: {\n enum: [1, 2, 3, 4],\n default: 2,\n type: \"number\",\n },\n gap: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\"],\n default: \"md\",\n type: \"string\",\n },\n },\n events: {},\n source: \"builtin\",\n summary: \"Responsive CSS grid, 1–4 equal columns (collapses to one column on narrow screens).\",\n },\n Heading: {\n children: true,\n props: {\n level: {\n type: \"number\",\n description: \"Semantic heading level — drives the rendered tag AND the default size.\",\n enum: [1, 2, 3, 4, 5, 6],\n default: 2,\n },\n size: {\n type: \"string\",\n enum: [\"display-lg\", \"display\", \"title\", \"subtitle\"],\n default: \"title\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Section heading; `level` sets the HTML rank (1–6), `size` the type role.\",\n },\n Input: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n placeholder: {\n type: \"string\",\n },\n required: {\n type: \"boolean\",\n },\n type: {\n enum: [\"text\", \"email\", \"number\", \"password\", \"search\", \"tel\", \"url\", \"date\"],\n type: \"string\",\n },\n },\n events: {\n change: \"onChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Single-line text field — the base form input.\",\n },\n Kbd: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Label: {\n children: true,\n props: {\n htmlFor: {\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"The caption for a form control, wired to it for clicks and assistive technology.\",\n },\n MetricCard: {\n children: false,\n props: {\n currency: {\n type: \"string\",\n description: 'ISO 4217 code for `valueFormat: \"currency\"`. Default: `\"USD\"`.',\n },\n delta: {\n type: \"string\",\n description: 'Signed change, e.g. \"+12.4%\". Direction colors it.',\n },\n deltaDirection: {\n type: \"string\",\n enum: [\"up\", \"down\", \"neutral\"],\n },\n description: {\n type: \"node\",\n description: \"Secondary line under the value — sublabel / context.\",\n },\n evidence: {\n type: \"node\",\n description:\n \"Optional grounding footer (research 11 §B.5 KPI-3) — connects a cited figure to its source (e.g. an `EvidenceChip` from `@elabs-ai/components-ai`). Rendered …\",\n },\n label: {\n type: \"node\",\n required: true,\n },\n loading: {\n type: \"boolean\",\n description:\n \"Loading vs ready — renders a layout-shaped skeleton (matching the real box height) instead of the value/label/delta text. Default: `false`.\",\n },\n positiveIsGood: {\n type: \"boolean\",\n description: 'Whether \"up\" is good (green) — flip for metrics where down is good.',\n },\n sparkline: {\n type: \"node\",\n description:\n 'Trend slot rendered directly under the value (RM-072) — pass a `<Sparkline …/>` from `@elabs-ai/components-charts`. Hidden at `size=\"sm\"`.',\n },\n value: {\n type: \"node\",\n required: true,\n },\n valueFormat: {\n type: \"string\",\n description:\n 'How to render a NUMERIC `value`. Default: `\"compact\"`. Ignored for every other `ReactNode` — a string you already formatted is rendered verbatim.',\n enum: [\"number\", \"compact\", \"currency\", \"percent\"],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"One KPI: label, value, optional delta. Put several in a Grid.\",\n },\n Progress: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n marker: {\n type: \"number\",\n description:\n 'Reference point (0–100, same scale as `value`) — e.g. an \"expected by today\" pace or a target — rendered as a thin vertical tick on the track. Unset (default…',\n },\n markerLabel: {\n type: \"string\",\n description:\n 'What `marker` represents (already localized by the caller — e.g. `\"expected 70% by today\"`). When set, it is appended to the progress bar\\'s accessible value …',\n },\n max: {\n type: \"number\",\n },\n value: {\n type: \"number\",\n required: true,\n },\n variant: {\n type: \"string\",\n enum: [\"default\", \"success\", \"warning\", \"destructive\"],\n default: \"default\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n RadioGroup: {\n children: true,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"string\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Mutually-exclusive single choice from a small visible set.\",\n },\n RadioGroupItem: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SectionHeader: {\n children: false,\n props: {\n actions: {\n type: \"node\",\n description: \"Right-aligned actions (buttons, menus).\",\n },\n description: {\n type: \"node\",\n },\n eyebrow: {\n type: \"node\",\n description: \"Optional element rendered above the title (eyebrow / breadcrumbs).\",\n },\n size: {\n type: \"string\",\n enum: [\"default\", \"lg\"],\n description:\n 'Title size: `\"default\"` (`text-title`) for a section inside a screen; `\"lg\"` (`text-display`, description at a readable measure) for the sections of a LONG p…',\n },\n title: {\n type: \"node\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Title + description + optional actions above a region.\",\n },\n Select: {\n children: true,\n props: {\n defaultValue: {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose SelectTrigger (SelectValue) + SelectContent (SelectItem…).\",\n },\n SelectContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SelectItem: {\n children: true,\n props: {\n disabled: {\n type: \"boolean\",\n },\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SelectTrigger: {\n children: true,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n autoTitle: {\n type: \"boolean\",\n description:\n \"Auto-set a native `title` from the trigger's rendered text — but ONLY while that text is actually clipped (default `true`). Set `false` when the trigger is a…\",\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"default\"],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SelectValue: {\n children: false,\n props: {\n placeholder: {\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Separator: {\n children: false,\n props: {\n orientation: {\n enum: [\"horizontal\", \"vertical\"],\n default: \"horizontal\",\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"A horizontal or vertical divider between regions of the same surface.\",\n },\n Slider: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"array\",\n },\n max: {\n type: \"number\",\n },\n min: {\n type: \"number\",\n },\n step: {\n type: \"number\",\n },\n thumbProps: {\n type: \"array\",\n description:\n \"Escape hatch spread onto the thumb LAST — for `data-*`/`style`/etc, or to deliberately override `aria-label`/`aria-labelledby`/`aria-valuetext` (an explicit …\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n },\n Stack: {\n builtin: true,\n children: true,\n props: {\n align: {\n enum: [\"start\", \"center\", \"end\", \"stretch\"],\n default: \"stretch\",\n type: \"string\",\n },\n direction: {\n enum: [\"column\", \"row\"],\n default: \"column\",\n type: \"string\",\n },\n gap: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\"],\n default: \"md\",\n type: \"string\",\n },\n justify: {\n enum: [\"start\", \"center\", \"end\", \"between\"],\n default: \"start\",\n type: \"string\",\n },\n wrap: {\n type: \"boolean\",\n default: false,\n },\n },\n events: {},\n source: \"builtin\",\n summary:\n \"Vertical or horizontal flex group. The default container — put siblings in a Stack, never bare.\",\n },\n StatePanel: {\n children: false,\n props: {\n actions: {\n type: \"node\",\n description: \"Primary / secondary action buttons.\",\n },\n description: {\n type: \"node\",\n description: \"Supporting description below the title.\",\n },\n icon: {\n type: \"node\",\n description:\n 'Icon shown above the title, clamped to a uniform 40×40 so mismatched glyphs stay tidy. For `\"error\"` defaults to a built-in warning triangle. For `\"loading\"`…',\n },\n illustration: {\n type: \"node\",\n description:\n \"A larger illustration (one of `@elabs-ai/components-ui`'s shipped `*Illustration` components, or a consumer's own `ReactNode`) shown above the title instead …\",\n },\n kind: {\n type: \"string\",\n enum: [\"empty\", \"error\", \"loading\"],\n default: \"empty\",\n },\n loadingLabel: {\n type: \"string\",\n description: 'Accessible label for the spinner in loading state. @default \"Loading…\"',\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"md\", \"lg\"],\n description: 'Spinner size (loading kind only). @default \"md\"',\n },\n title: {\n type: \"node\",\n description: \"Heading text.\",\n },\n titleAs: {\n type: \"string\",\n enum: [\"div\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"],\n description:\n \"Heading level for the panel's title (#328 convention). Set this to the level that correctly follows whatever heading precedes this panel in the document outl…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"An empty / error / loading message panel.\",\n },\n StatusBadge: {\n children: false,\n props: {\n hideIcon: {\n type: \"boolean\",\n description: \"Render label-only (no status icon).\",\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"md\"],\n default: \"md\",\n },\n status: {\n type: \"string\",\n required: true,\n description: \"The canonical execution status, or a mapped out-of-vocabulary one (#363).\",\n enum: [\n \"pending\",\n \"running\",\n \"complete\",\n \"awaiting-approval\",\n \"denied\",\n \"failed\",\n \"skipped\",\n ],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"A closed status vocabulary with icon + text (never colour alone).\",\n },\n Switch: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultChecked: {\n type: \"boolean\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n },\n events: {\n change: \"onCheckedChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Immediate on/off setting toggle (applies on change, not on submit).\",\n },\n Table: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose TableHeader/TableBody → TableRow → TableHead/TableCell.\",\n },\n TableBody: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableCaption: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableCell: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableFooter: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableHead: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableHeader: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableRow: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Tabs: {\n children: true,\n props: {\n defaultValue: {\n type: \"string\",\n required: true,\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose TabsList (TabsTrigger…) + TabsContent per value.\",\n },\n TabsContent: {\n children: true,\n props: {\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TabsList: {\n children: true,\n props: {\n variant: {\n type: \"string\",\n enum: [\"segmented\", \"underline\"],\n default: \"segmented\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TabsTrigger: {\n children: true,\n props: {\n disabled: {\n type: \"boolean\",\n },\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Text: {\n children: true,\n props: {\n tone: {\n type: \"string\",\n enum: [\"default\", \"muted\", \"primary\"],\n default: \"default\",\n },\n variant: {\n type: \"string\",\n enum: [\"lead\", \"body\", \"caption\", \"meta\", \"kpi\", \"kpi-sm\", \"eyebrow\", \"code\"],\n default: \"body\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"A paragraph or inline run of text with a type role and tone.\",\n },\n Textarea: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n placeholder: {\n type: \"string\",\n },\n rows: {\n type: \"number\",\n },\n },\n events: {\n change: \"onChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Multi-line text input, sized by rows and auto-growing when asked.\",\n },\n Timeline: {\n children: false,\n props: {\n items: {\n type: \"array\",\n required: true,\n description: '[{ title, description?, status?: \"done\"|\"active\"|\"pending\", timestamp? }]',\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Ordered status timeline from `items` (title, status, timestamp, description).\",\n },\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
getStatusBadge
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AOOIAFDT.js";
|
|
5
5
|
|
|
6
6
|
// src/sandbox.tsx
|
|
7
7
|
import {
|
|
@@ -105,4 +105,4 @@ export {
|
|
|
105
105
|
SandboxTabsTrigger,
|
|
106
106
|
SandboxTabContent
|
|
107
107
|
};
|
|
108
|
-
//# sourceMappingURL=chunk-
|
|
108
|
+
//# sourceMappingURL=chunk-UHLVPAHG.js.map
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
ToolInput,
|
|
12
12
|
ToolOutput,
|
|
13
13
|
statusFromToolState
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-AOOIAFDT.js";
|
|
15
15
|
import {
|
|
16
16
|
buildPartGroups,
|
|
17
17
|
defaultPartStatus,
|
|
@@ -146,4 +146,4 @@ function GroupedParts({
|
|
|
146
146
|
export {
|
|
147
147
|
GroupedParts
|
|
148
148
|
};
|
|
149
|
-
//# sourceMappingURL=chunk-
|
|
149
|
+
//# sourceMappingURL=chunk-VJZJWNEC.js.map
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
catalogSchema,
|
|
12
12
|
uiCatalog
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-IH4Y3O24.js";
|
|
14
14
|
|
|
15
15
|
// src/a2ui/a2ui-surface.tsx
|
|
16
16
|
import { Skeleton, useLocale } from "@elabs-ai/components-ui";
|
|
@@ -233,4 +233,4 @@ A2uiSurface.displayName = "A2uiSurface";
|
|
|
233
233
|
export {
|
|
234
234
|
A2uiSurface
|
|
235
235
|
};
|
|
236
|
-
//# sourceMappingURL=chunk-
|
|
236
|
+
//# sourceMappingURL=chunk-VQNTO2H4.js.map
|
package/dist/grouped-parts.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
import {
|
|
4
4
|
GroupedParts
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-VJZJWNEC.js";
|
|
6
6
|
import "./chunk-X47QMM6K.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-AOOIAFDT.js";
|
|
8
8
|
import "./chunk-YSKD7UXX.js";
|
|
9
9
|
import "./chunk-TWPHAJNM.js";
|
|
10
10
|
import "./chunk-3YPT3V7L.js";
|
package/dist/index.js
CHANGED
|
@@ -115,7 +115,7 @@ import {
|
|
|
115
115
|
SandboxTabsBar,
|
|
116
116
|
SandboxTabsList,
|
|
117
117
|
SandboxTabsTrigger
|
|
118
|
-
} from "./chunk-
|
|
118
|
+
} from "./chunk-UHLVPAHG.js";
|
|
119
119
|
import {
|
|
120
120
|
SchemaDisplay,
|
|
121
121
|
SchemaDisplayBody,
|
|
@@ -337,7 +337,7 @@ import {
|
|
|
337
337
|
} from "./chunk-3XNPMDZY.js";
|
|
338
338
|
import {
|
|
339
339
|
GroupedParts
|
|
340
|
-
} from "./chunk-
|
|
340
|
+
} from "./chunk-VJZJWNEC.js";
|
|
341
341
|
import {
|
|
342
342
|
Reasoning,
|
|
343
343
|
ReasoningContent,
|
|
@@ -353,7 +353,7 @@ import {
|
|
|
353
353
|
ToolOutput,
|
|
354
354
|
getStatusBadge,
|
|
355
355
|
statusFromToolState
|
|
356
|
-
} from "./chunk-
|
|
356
|
+
} from "./chunk-AOOIAFDT.js";
|
|
357
357
|
import {
|
|
358
358
|
buildPartGroups,
|
|
359
359
|
defaultPartStatus,
|
|
@@ -673,7 +673,7 @@ import "./chunk-DZW6LM22.js";
|
|
|
673
673
|
import "./chunk-3TDHPXZZ.js";
|
|
674
674
|
import {
|
|
675
675
|
A2uiSurface
|
|
676
|
-
} from "./chunk-
|
|
676
|
+
} from "./chunk-VQNTO2H4.js";
|
|
677
677
|
import {
|
|
678
678
|
completeJson,
|
|
679
679
|
parseSurfaceJson
|
|
@@ -693,11 +693,11 @@ import {
|
|
|
693
693
|
createA2uiCatalog,
|
|
694
694
|
defineA2uiType,
|
|
695
695
|
uiCatalog
|
|
696
|
-
} from "./chunk-
|
|
696
|
+
} from "./chunk-IH4Y3O24.js";
|
|
697
697
|
import {
|
|
698
698
|
A2UI_CATALOG_SCHEMA,
|
|
699
699
|
A2UI_CATALOG_VERSION
|
|
700
|
-
} from "./chunk-
|
|
700
|
+
} from "./chunk-PCEEZGTQ.js";
|
|
701
701
|
import "./chunk-SSKZ2AED.js";
|
|
702
702
|
import "./chunk-NMVNNO3L.js";
|
|
703
703
|
import "./chunk-QUDZOTRV.js";
|
package/dist/sandbox.js
CHANGED
|
@@ -9,8 +9,8 @@ import {
|
|
|
9
9
|
SandboxTabsBar,
|
|
10
10
|
SandboxTabsList,
|
|
11
11
|
SandboxTabsTrigger
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-UHLVPAHG.js";
|
|
13
|
+
import "./chunk-AOOIAFDT.js";
|
|
14
14
|
import "./chunk-TWPHAJNM.js";
|
|
15
15
|
import "./chunk-3YPT3V7L.js";
|
|
16
16
|
import "./chunk-3TDHPXZZ.js";
|
package/dist/tool.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elabs-ai/components-ai",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.4.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
"mermaid": "^11.12.2",
|
|
51
51
|
"react": "^18.2.0 || ^19.0.0",
|
|
52
52
|
"react-dom": "^18.2.0 || ^19.0.0",
|
|
53
|
-
"@elabs-ai/components-icons": "^5.
|
|
54
|
-
"@elabs-ai/components-tokens": "^5.
|
|
55
|
-
"@elabs-ai/components-ui": "^5.
|
|
53
|
+
"@elabs-ai/components-icons": "^5.4.0",
|
|
54
|
+
"@elabs-ai/components-tokens": "^5.4.0",
|
|
55
|
+
"@elabs-ai/components-ui": "^5.4.0"
|
|
56
56
|
},
|
|
57
57
|
"peerDependenciesMeta": {
|
|
58
58
|
"@rive-app/react-webgl2": {
|
|
@@ -87,12 +87,12 @@
|
|
|
87
87
|
"tsup": "^8.3.5",
|
|
88
88
|
"typescript": "^5.7.3",
|
|
89
89
|
"vitest": "^3.0.2",
|
|
90
|
-
"@elabs-ai/components-charts": "5.
|
|
90
|
+
"@elabs-ai/components-charts": "5.4.0",
|
|
91
91
|
"@elabs-ai/components-eslint-config": "0.1.0",
|
|
92
|
-
"@elabs-ai/components-icons": "5.
|
|
93
|
-
"@elabs-ai/components-tokens": "5.
|
|
92
|
+
"@elabs-ai/components-icons": "5.4.0",
|
|
93
|
+
"@elabs-ai/components-tokens": "5.4.0",
|
|
94
94
|
"@elabs-ai/components-typescript-config": "0.1.0",
|
|
95
|
-
"@elabs-ai/components-ui": "5.
|
|
95
|
+
"@elabs-ai/components-ui": "5.4.0"
|
|
96
96
|
},
|
|
97
97
|
"scripts": {
|
|
98
98
|
"build": "tsup",
|
|
@@ -260,6 +260,7 @@
|
|
|
260
260
|
},
|
|
261
261
|
"Accordion": {
|
|
262
262
|
"type": "object",
|
|
263
|
+
"description": "Vertically stacked sections that expand one at a time (or several) to reveal their content.",
|
|
263
264
|
"properties": {
|
|
264
265
|
"type": {
|
|
265
266
|
"const": "Accordion"
|
|
@@ -761,7 +762,7 @@
|
|
|
761
762
|
"type": "boolean"
|
|
762
763
|
},
|
|
763
764
|
"spec": {
|
|
764
|
-
"description": "{ data: row[], x: string, series: string[] | { key, label?, axis?: left|right, mark?: line|area|column }[] (type: \"dual-axis\" only: default axis left, mark line; needs ≥1 line series, no right-axis columns), type?: line|area|bar|pie|scatter|radar|funnel|candlestick|heatmap|calendar|waterfall|dumbbell|unit|treemap|histogram|box|strip|bump|stream|diverging-bar|dual-axis, xType?: time|category|number, y2?, axes?: { y2?: { align?: independent|ticks, proportional?: boolean, zero?: both|auto } } (type: \"dual-axis\" only, right axis vs left; default align ticks, zero auto), group?, title?, description?, stacked?: boolean|percent|diverging, orientation?: vertical|horizontal, donut?, legend?: boolean (an object form exists; AutoChart reads it as boolean truthy today), valueFormat?: number|compact|currency|percent, currency?, palette?: mono|sequential|categorical, emphasis?: analytical|editorial, kind?: steps|records|ranking|change (change: a two-measure spec reads as a before/after move, for dumbbell), nulls?: gap|zero|connect (line/area/stream non-numeric sample, default gap), curve?: linear|monotone|natural|step|step-before|step-after (line/area/stream, default monotone), symbols?: { placement?: all|ends|first|last, shape?: circle|square|triangle|diamond|cross|star|plus|hexagon, style?: filled|hollow, size? } (line/area/stream point markers), size?: { key, range?: [lo,hi] } (scatter bubble size), shapeBy?: { key, shapes?: marker-shape[] } (scatter shape by category), trend?: linear|log (scatter trend line), shapes?: [{ kind: line|path, … }] (scatter reference lines/areas), variant?: dumbbell|slope|arrow|dots (dumbbell only, default dumbbell), delta?: { show, mode: absolute|percent } (dumbbell delta label), groupSmall?: { threshold?, max?, label? } (pie: fold small slices into an Other slice), half?: boolean (pie half-donut, default false), labels?: { series?: end|key|none, values?: { placement: first|last|all|peaks, count?, minGap?, outline?, matchColor?, format? }, points?: { key, mode?: auto|all, priorityKey? }, slices?: { placement?: inside|outside|none, show: (label|value|percent)[], matchColor?, minAngle? }, comparison?: value|difference|none } (label engine), annotations?: [{ kind: text|range|line|row, … }] (notes, bands, reference lines, row notes in data units), divergingCenter?: string (neutral series when stacked is diverging), sort?: asc|desc|none|{by,dir} (bar) | start|end|delta|deltaPercent|data|label|none (dumbbell) | desc|none (pie) | data|increasesFirst|decreasesFirst (waterfall, default data), groupBy?: string (bar/dumbbell row grouping; waterfall: a subtotal after each group), colorBy?: { key, scale?: categorical|sequential|diverging, steps? } (bar per-bar / scatter per-point colour), overlays?: [{ kind: value|range, … }] (bar value markers, range spans), comparison?: { key, label? } (bar muted prior-period column), notes?: string (italic notes under an enclosing ChartFrame), byline?: { kind?: chart|map|table, author } (ChartFrame footer: kind + author), source?: string | { name, href? } (ChartFrame footer attribution), altText?: string (image text alternative, default: description), tooltip?: { variant?: rows|table|inline, focus?: boolean, pin?: boolean } (forwarded to ChartTooltip, default rows), facet?: { by: string | { series: true }, columns?, scales?: { y?: shared|independent, rangeRounding? }, sort?: start|end|delta|deltaPercent|range|title|data, baseline?: { key } | { series }, panelHeight? } (line/area/bar/pie small multiples), dataFormat?: differences|runningTotals (waterfall only, default differences), zoomToDifferences?: boolean (waterfall only, default false) }",
|
|
765
|
+
"description": "{ data: row[], x: string, series: string[] | { key, label?, axis?: left|right, mark?: line|area|column }[] (type: \"dual-axis\" only: default axis left, mark line; needs ≥1 line series, no right-axis columns), type?: line|area|bar|pie|scatter|radar|funnel|candlestick|heatmap|calendar|waterfall|dumbbell|unit|treemap|histogram|box|strip|bump|stream|diverging-bar|dual-axis, xType?: time|category|number, y2?, axes?: { y2?: { align?: independent|ticks, proportional?: boolean, zero?: both|auto } } (type: \"dual-axis\" only, right axis vs left; default align ticks, zero auto), group?, title?, description?, stacked?: boolean|percent|diverging, orientation?: vertical|horizontal, donut?, legend?: boolean (an object form exists; AutoChart reads it as boolean truthy today), valueFormat?: number|compact|currency|percent, currency?, palette?: mono|sequential|categorical, emphasis?: analytical|editorial, kind?: steps|records|ranking|change (change: a two-measure spec reads as a before/after move, for dumbbell), nulls?: gap|zero|connect (line/area/stream non-numeric sample, default gap), curve?: linear|monotone|natural|step|step-before|step-after (line/area/stream, default monotone), symbols?: { placement?: all|ends|first|last, shape?: circle|square|triangle|diamond|cross|star|plus|hexagon, style?: filled|hollow, size? } (line/area/stream point markers), size?: { key, range?: [lo,hi] } (scatter bubble size), shapeBy?: { key, shapes?: marker-shape[] } (scatter shape by category), trend?: linear|log (scatter trend line), shapes?: [{ kind: line|path, … }] (scatter reference lines/areas), variant?: dumbbell|slope|arrow|dots (dumbbell only, default dumbbell), delta?: { show, mode: absolute|percent } (dumbbell delta label), groupSmall?: { threshold?, max?, label? } (pie: fold small slices into an Other slice), half?: boolean (pie half-donut, default false), labels?: { series?: end|key|none, values?: { placement: first|last|all|peaks, count?, minGap?, outline?, matchColor?, format? }, points?: { key, mode?: auto|all, priorityKey? }, slices?: { placement?: inside|outside|none, show: (label|value|percent)[], matchColor?, minAngle? }, comparison?: value|difference|none } (label engine), annotations?: [{ kind: text|range|line|row, … }] (notes, bands, reference lines, row notes in data units), analytics?: [{ kind: line|band|trend|window|forecast|errorBars, of?: series|all, … }] (computed overlays — line: { value: mean|median|min|max|sum|number|{ percentile }|{ stddev, around? }, axis?: x|y, label?: none|value|computation|text, ifOverflow?: clip|extend }; band: { from, to } | { spread: { percentiles: [lo,hi] }|{ stddev }|{ ci } }; trend: { model?: linear|log|exp|pow|{ poly: 2..6 }|{ loess }, ci?, extent?: data|domain }; window: { k, reduce?: mean|median|sum|min|max|ewm, replace? }; forecast: { horizon, season?, interval? }; errorBars: { low: field|{ percent }, high?, band? }), selection?: { gestures: (range|rect|lasso|radial)[], confirm?: immediate|explicit, field? } (bar/line/area/scatter/heatmap/histogram/box/strip selection gestures with a toolbar — a bar chart with range and lasso selection is { gestures: [range, lasso] }; explicit previews until the reader confirms; intents arrive as the selectionIntent event), divergingCenter?: string (neutral series when stacked is diverging), sort?: asc|desc|none|{by,dir} (bar) | start|end|delta|deltaPercent|data|label|none (dumbbell) | desc|none (pie) | data|increasesFirst|decreasesFirst (waterfall, default data), groupBy?: string (bar/dumbbell row grouping; waterfall: a subtotal after each group), colorBy?: { key, scale?: categorical|sequential|diverging, steps? } (bar per-bar / scatter per-point colour), overlays?: [{ kind: value|range, … }] (bar value markers, range spans), comparison?: { key, label? } (bar muted prior-period column), notes?: string (italic notes under an enclosing ChartFrame), byline?: { kind?: chart|map|table, author } (ChartFrame footer: kind + author), source?: string | { name, href? } (ChartFrame footer attribution), altText?: string (image text alternative, default: description), tooltip?: { variant?: rows|table|inline, focus?: boolean, pin?: boolean } (forwarded to ChartTooltip, default rows), facet?: { by: string | { series: true }, columns?, scales?: { y?: shared|independent, rangeRounding? }, sort?: start|end|delta|deltaPercent|range|title|data, baseline?: { key } | { series }, panelHeight? } (line/area/bar/pie small multiples), dataFormat?: differences|runningTotals (waterfall only, default differences), zoomToDifferences?: boolean (waterfall only, default false), scrollbar?: miniChart|bar|auto|none (bar/diverging-bar/heatmap/calendar and line/area on a category x: an overview strip that scrolls the categories; default none, or auto when maxVisibleItems is set), maxVisibleItems?: number (categories shown at once, the rest scroll behind the strip and the value axis keeps the full domain; for > 30 categories set maxVisibleItems) }",
|
|
765
766
|
"type": "object"
|
|
766
767
|
}
|
|
767
768
|
},
|
|
@@ -773,6 +774,9 @@
|
|
|
773
774
|
"properties": {
|
|
774
775
|
"datapointClick": {
|
|
775
776
|
"$ref": "#/$defs/action"
|
|
777
|
+
},
|
|
778
|
+
"selectionIntent": {
|
|
779
|
+
"$ref": "#/$defs/action"
|
|
776
780
|
}
|
|
777
781
|
},
|
|
778
782
|
"additionalProperties": false
|
|
@@ -1305,6 +1309,7 @@
|
|
|
1305
1309
|
},
|
|
1306
1310
|
"ButtonGroup": {
|
|
1307
1311
|
"type": "object",
|
|
1312
|
+
"description": "Buttons joined into one connected control — a segmented choice or a set of related actions.",
|
|
1308
1313
|
"properties": {
|
|
1309
1314
|
"type": {
|
|
1310
1315
|
"const": "ButtonGroup"
|
|
@@ -2043,6 +2048,7 @@
|
|
|
2043
2048
|
},
|
|
2044
2049
|
"Collapsible": {
|
|
2045
2050
|
"type": "object",
|
|
2051
|
+
"description": "A single section that toggles between hidden and shown, with a trigger that reports its state.",
|
|
2046
2052
|
"properties": {
|
|
2047
2053
|
"type": {
|
|
2048
2054
|
"const": "Collapsible"
|
|
@@ -2909,6 +2915,7 @@
|
|
|
2909
2915
|
},
|
|
2910
2916
|
"Label": {
|
|
2911
2917
|
"type": "object",
|
|
2918
|
+
"description": "The caption for a form control, wired to it for clicks and assistive technology.",
|
|
2912
2919
|
"properties": {
|
|
2913
2920
|
"type": {
|
|
2914
2921
|
"const": "Label"
|
|
@@ -3191,7 +3198,7 @@
|
|
|
3191
3198
|
"type": "boolean"
|
|
3192
3199
|
},
|
|
3193
3200
|
"columns": {
|
|
3194
|
-
"description": "Target columns
|
|
3201
|
+
"description": "Target columns once the grid's own container is wide enough (container queries, not the viewport — see `colsMap`). Defaults to 4.",
|
|
3195
3202
|
"enum": [2, 3, 4]
|
|
3196
3203
|
},
|
|
3197
3204
|
"featured": {
|
|
@@ -3889,6 +3896,7 @@
|
|
|
3889
3896
|
},
|
|
3890
3897
|
"Separator": {
|
|
3891
3898
|
"type": "object",
|
|
3899
|
+
"description": "A horizontal or vertical divider between regions of the same surface.",
|
|
3892
3900
|
"properties": {
|
|
3893
3901
|
"type": {
|
|
3894
3902
|
"const": "Separator"
|
|
@@ -5302,6 +5310,7 @@
|
|
|
5302
5310
|
},
|
|
5303
5311
|
"Textarea": {
|
|
5304
5312
|
"type": "object",
|
|
5313
|
+
"description": "Multi-line text input, sized by rows and auto-growing when asked.",
|
|
5305
5314
|
"properties": {
|
|
5306
5315
|
"type": {
|
|
5307
5316
|
"const": "Textarea"
|
|
@@ -574,7 +574,7 @@
|
|
|
574
574
|
"spec": {
|
|
575
575
|
"type": "object",
|
|
576
576
|
"required": true,
|
|
577
|
-
"description": "{ data: row[], x: string, series: string[] | { key, label?, axis?: left|right, mark?: line|area|column }[] (type: \"dual-axis\" only: default axis left, mark line; needs ≥1 line series, no right-axis columns), type?: line|area|bar|pie|scatter|radar|funnel|candlestick|heatmap|calendar|waterfall|dumbbell|unit|treemap|histogram|box|strip|bump|stream|diverging-bar|dual-axis, xType?: time|category|number, y2?, axes?: { y2?: { align?: independent|ticks, proportional?: boolean, zero?: both|auto } } (type: \"dual-axis\" only, right axis vs left; default align ticks, zero auto), group?, title?, description?, stacked?: boolean|percent|diverging, orientation?: vertical|horizontal, donut?, legend?: boolean (an object form exists; AutoChart reads it as boolean truthy today), valueFormat?: number|compact|currency|percent, currency?, palette?: mono|sequential|categorical, emphasis?: analytical|editorial, kind?: steps|records|ranking|change (change: a two-measure spec reads as a before/after move, for dumbbell), nulls?: gap|zero|connect (line/area/stream non-numeric sample, default gap), curve?: linear|monotone|natural|step|step-before|step-after (line/area/stream, default monotone), symbols?: { placement?: all|ends|first|last, shape?: circle|square|triangle|diamond|cross|star|plus|hexagon, style?: filled|hollow, size? } (line/area/stream point markers), size?: { key, range?: [lo,hi] } (scatter bubble size), shapeBy?: { key, shapes?: marker-shape[] } (scatter shape by category), trend?: linear|log (scatter trend line), shapes?: [{ kind: line|path, … }] (scatter reference lines/areas), variant?: dumbbell|slope|arrow|dots (dumbbell only, default dumbbell), delta?: { show, mode: absolute|percent } (dumbbell delta label), groupSmall?: { threshold?, max?, label? } (pie: fold small slices into an Other slice), half?: boolean (pie half-donut, default false), labels?: { series?: end|key|none, values?: { placement: first|last|all|peaks, count?, minGap?, outline?, matchColor?, format? }, points?: { key, mode?: auto|all, priorityKey? }, slices?: { placement?: inside|outside|none, show: (label|value|percent)[], matchColor?, minAngle? }, comparison?: value|difference|none } (label engine), annotations?: [{ kind: text|range|line|row, … }] (notes, bands, reference lines, row notes in data units), divergingCenter?: string (neutral series when stacked is diverging), sort?: asc|desc|none|{by,dir} (bar) | start|end|delta|deltaPercent|data|label|none (dumbbell) | desc|none (pie) | data|increasesFirst|decreasesFirst (waterfall, default data), groupBy?: string (bar/dumbbell row grouping; waterfall: a subtotal after each group), colorBy?: { key, scale?: categorical|sequential|diverging, steps? } (bar per-bar / scatter per-point colour), overlays?: [{ kind: value|range, … }] (bar value markers, range spans), comparison?: { key, label? } (bar muted prior-period column), notes?: string (italic notes under an enclosing ChartFrame), byline?: { kind?: chart|map|table, author } (ChartFrame footer: kind + author), source?: string | { name, href? } (ChartFrame footer attribution), altText?: string (image text alternative, default: description), tooltip?: { variant?: rows|table|inline, focus?: boolean, pin?: boolean } (forwarded to ChartTooltip, default rows), facet?: { by: string | { series: true }, columns?, scales?: { y?: shared|independent, rangeRounding? }, sort?: start|end|delta|deltaPercent|range|title|data, baseline?: { key } | { series }, panelHeight? } (line/area/bar/pie small multiples), dataFormat?: differences|runningTotals (waterfall only, default differences), zoomToDifferences?: boolean (waterfall only, default false) }"
|
|
577
|
+
"description": "{ data: row[], x: string, series: string[] | { key, label?, axis?: left|right, mark?: line|area|column }[] (type: \"dual-axis\" only: default axis left, mark line; needs ≥1 line series, no right-axis columns), type?: line|area|bar|pie|scatter|radar|funnel|candlestick|heatmap|calendar|waterfall|dumbbell|unit|treemap|histogram|box|strip|bump|stream|diverging-bar|dual-axis, xType?: time|category|number, y2?, axes?: { y2?: { align?: independent|ticks, proportional?: boolean, zero?: both|auto } } (type: \"dual-axis\" only, right axis vs left; default align ticks, zero auto), group?, title?, description?, stacked?: boolean|percent|diverging, orientation?: vertical|horizontal, donut?, legend?: boolean (an object form exists; AutoChart reads it as boolean truthy today), valueFormat?: number|compact|currency|percent, currency?, palette?: mono|sequential|categorical, emphasis?: analytical|editorial, kind?: steps|records|ranking|change (change: a two-measure spec reads as a before/after move, for dumbbell), nulls?: gap|zero|connect (line/area/stream non-numeric sample, default gap), curve?: linear|monotone|natural|step|step-before|step-after (line/area/stream, default monotone), symbols?: { placement?: all|ends|first|last, shape?: circle|square|triangle|diamond|cross|star|plus|hexagon, style?: filled|hollow, size? } (line/area/stream point markers), size?: { key, range?: [lo,hi] } (scatter bubble size), shapeBy?: { key, shapes?: marker-shape[] } (scatter shape by category), trend?: linear|log (scatter trend line), shapes?: [{ kind: line|path, … }] (scatter reference lines/areas), variant?: dumbbell|slope|arrow|dots (dumbbell only, default dumbbell), delta?: { show, mode: absolute|percent } (dumbbell delta label), groupSmall?: { threshold?, max?, label? } (pie: fold small slices into an Other slice), half?: boolean (pie half-donut, default false), labels?: { series?: end|key|none, values?: { placement: first|last|all|peaks, count?, minGap?, outline?, matchColor?, format? }, points?: { key, mode?: auto|all, priorityKey? }, slices?: { placement?: inside|outside|none, show: (label|value|percent)[], matchColor?, minAngle? }, comparison?: value|difference|none } (label engine), annotations?: [{ kind: text|range|line|row, … }] (notes, bands, reference lines, row notes in data units), analytics?: [{ kind: line|band|trend|window|forecast|errorBars, of?: series|all, … }] (computed overlays — line: { value: mean|median|min|max|sum|number|{ percentile }|{ stddev, around? }, axis?: x|y, label?: none|value|computation|text, ifOverflow?: clip|extend }; band: { from, to } | { spread: { percentiles: [lo,hi] }|{ stddev }|{ ci } }; trend: { model?: linear|log|exp|pow|{ poly: 2..6 }|{ loess }, ci?, extent?: data|domain }; window: { k, reduce?: mean|median|sum|min|max|ewm, replace? }; forecast: { horizon, season?, interval? }; errorBars: { low: field|{ percent }, high?, band? }), selection?: { gestures: (range|rect|lasso|radial)[], confirm?: immediate|explicit, field? } (bar/line/area/scatter/heatmap/histogram/box/strip selection gestures with a toolbar — a bar chart with range and lasso selection is { gestures: [range, lasso] }; explicit previews until the reader confirms; intents arrive as the selectionIntent event), divergingCenter?: string (neutral series when stacked is diverging), sort?: asc|desc|none|{by,dir} (bar) | start|end|delta|deltaPercent|data|label|none (dumbbell) | desc|none (pie) | data|increasesFirst|decreasesFirst (waterfall, default data), groupBy?: string (bar/dumbbell row grouping; waterfall: a subtotal after each group), colorBy?: { key, scale?: categorical|sequential|diverging, steps? } (bar per-bar / scatter per-point colour), overlays?: [{ kind: value|range, … }] (bar value markers, range spans), comparison?: { key, label? } (bar muted prior-period column), notes?: string (italic notes under an enclosing ChartFrame), byline?: { kind?: chart|map|table, author } (ChartFrame footer: kind + author), source?: string | { name, href? } (ChartFrame footer attribution), altText?: string (image text alternative, default: description), tooltip?: { variant?: rows|table|inline, focus?: boolean, pin?: boolean } (forwarded to ChartTooltip, default rows), facet?: { by: string | { series: true }, columns?, scales?: { y?: shared|independent, rangeRounding? }, sort?: start|end|delta|deltaPercent|range|title|data, baseline?: { key } | { series }, panelHeight? } (line/area/bar/pie small multiples), dataFormat?: differences|runningTotals (waterfall only, default differences), zoomToDifferences?: boolean (waterfall only, default false), scrollbar?: miniChart|bar|auto|none (bar/diverging-bar/heatmap/calendar and line/area on a category x: an overview strip that scrolls the categories; default none, or auto when maxVisibleItems is set), maxVisibleItems?: number (categories shown at once, the rest scroll behind the strip and the value axis keeps the full domain; for > 30 categories set maxVisibleItems) }"
|
|
578
578
|
},
|
|
579
579
|
"height": {
|
|
580
580
|
"type": "number",
|
|
@@ -585,7 +585,8 @@
|
|
|
585
585
|
}
|
|
586
586
|
},
|
|
587
587
|
"events": {
|
|
588
|
-
"datapointClick": "onDatapointClick"
|
|
588
|
+
"datapointClick": "onDatapointClick",
|
|
589
|
+
"selectionIntent": "onSelectionIntent"
|
|
589
590
|
},
|
|
590
591
|
"omit": ["copyValueOnActivate", "dimExcluded"]
|
|
591
592
|
},
|
|
@@ -25,6 +25,8 @@ export const A2UI_CATALOG_SCHEMA: A2uiCatalogSchema = {
|
|
|
25
25
|
change: "onValueChange",
|
|
26
26
|
},
|
|
27
27
|
source: "@elabs-ai/components-ui",
|
|
28
|
+
summary:
|
|
29
|
+
"Vertically stacked sections that expand one at a time (or several) to reveal their content.",
|
|
28
30
|
},
|
|
29
31
|
AccordionContent: {
|
|
30
32
|
children: true,
|
|
@@ -188,6 +190,8 @@ export const A2UI_CATALOG_SCHEMA: A2uiCatalogSchema = {
|
|
|
188
190
|
},
|
|
189
191
|
events: {},
|
|
190
192
|
source: "@elabs-ai/components-ui",
|
|
193
|
+
summary:
|
|
194
|
+
"Buttons joined into one connected control — a segmented choice or a set of related actions.",
|
|
191
195
|
},
|
|
192
196
|
Card: {
|
|
193
197
|
children: true,
|
|
@@ -297,6 +301,8 @@ export const A2UI_CATALOG_SCHEMA: A2uiCatalogSchema = {
|
|
|
297
301
|
change: "onOpenChange",
|
|
298
302
|
},
|
|
299
303
|
source: "@elabs-ai/components-ui",
|
|
304
|
+
summary:
|
|
305
|
+
"A single section that toggles between hidden and shown, with a trigger that reports its state.",
|
|
300
306
|
},
|
|
301
307
|
CollapsibleContent: {
|
|
302
308
|
children: true,
|
|
@@ -460,6 +466,7 @@ export const A2UI_CATALOG_SCHEMA: A2uiCatalogSchema = {
|
|
|
460
466
|
},
|
|
461
467
|
events: {},
|
|
462
468
|
source: "@elabs-ai/components-ui",
|
|
469
|
+
summary: "The caption for a form control, wired to it for clicks and assistive technology.",
|
|
463
470
|
},
|
|
464
471
|
MetricCard: {
|
|
465
472
|
children: false,
|
|
@@ -691,6 +698,7 @@ export const A2UI_CATALOG_SCHEMA: A2uiCatalogSchema = {
|
|
|
691
698
|
},
|
|
692
699
|
events: {},
|
|
693
700
|
source: "@elabs-ai/components-ui",
|
|
701
|
+
summary: "A horizontal or vertical divider between regions of the same surface.",
|
|
694
702
|
},
|
|
695
703
|
Slider: {
|
|
696
704
|
children: false,
|
|
@@ -1002,6 +1010,7 @@ export const A2UI_CATALOG_SCHEMA: A2uiCatalogSchema = {
|
|
|
1002
1010
|
change: "onChange",
|
|
1003
1011
|
},
|
|
1004
1012
|
source: "@elabs-ai/components-ui",
|
|
1013
|
+
summary: "Multi-line text input, sized by rows and auto-growing when asked.",
|
|
1005
1014
|
},
|
|
1006
1015
|
Timeline: {
|
|
1007
1016
|
children: false,
|
|
@@ -1049,7 +1049,7 @@ const meta = {
|
|
|
1049
1049
|
subtitle: "For copilots and agentic products",
|
|
1050
1050
|
description: {
|
|
1051
1051
|
component:
|
|
1052
|
-
"A full-page
|
|
1052
|
+
"A full-page agent workspace composed from the @elabs-ai/components-* grammar: a double-sided application shell (collapsible left nav + the real ContextPanel right rail with animated collapse and asset drill-in) wrapping a complete agentic AI interaction — reasoning, a plan, the AgentTimeline execution rail, tools with JSON behind disclosure, a ToolResultCard chart headline, an ApprovalCard decision, a task summary, a checkpoint, and a grounded AgentMessage answer with an EvidenceChip and a SourceList.",
|
|
1053
1053
|
},
|
|
1054
1054
|
},
|
|
1055
1055
|
},
|
package/src/tool.test.tsx
CHANGED
|
@@ -32,6 +32,32 @@ describe("Tool JSON-behind-disclosure (#192, research 10 §B.5)", () => {
|
|
|
32
32
|
});
|
|
33
33
|
});
|
|
34
34
|
|
|
35
|
+
describe("ToolHeader layout in narrow containers (#598)", () => {
|
|
36
|
+
it("StatusBadge element has shrink-0 class to prevent clipping in narrow flex containers", () => {
|
|
37
|
+
const { container } = render(
|
|
38
|
+
<Tool>
|
|
39
|
+
<ToolHeader type="tool-search_web" state="output-available" summary="3 results found" />
|
|
40
|
+
</Tool>,
|
|
41
|
+
);
|
|
42
|
+
// StatusBadge renders as a span with data-slot="status-badge"
|
|
43
|
+
const statusBadgeSpan = container.querySelector('span[data-slot="status-badge"]');
|
|
44
|
+
expect(statusBadgeSpan).not.toBeNull();
|
|
45
|
+
expect(statusBadgeSpan).toHaveClass("shrink-0");
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("title span has min-w-0 and truncate classes to yield space to fixed-width siblings", () => {
|
|
49
|
+
render(
|
|
50
|
+
<Tool>
|
|
51
|
+
<ToolHeader type="tool-search_web" state="output-available" title="Search Tool" />
|
|
52
|
+
</Tool>,
|
|
53
|
+
);
|
|
54
|
+
// Find the title span (it contains the title text and comes after the wrench icon)
|
|
55
|
+
const titleSpan = screen.getByText("Search Tool");
|
|
56
|
+
expect(titleSpan).toHaveClass("min-w-0");
|
|
57
|
+
expect(titleSpan).toHaveClass("truncate");
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
35
61
|
describe("ToolOutput isStreaming (#269, loading-states.md)", () => {
|
|
36
62
|
it("renders a skeleton (not null) while streaming with no output yet", () => {
|
|
37
63
|
const { container } = render(
|
package/src/tool.tsx
CHANGED
|
@@ -101,8 +101,8 @@ export const ToolHeader = ({
|
|
|
101
101
|
>
|
|
102
102
|
<div className="flex min-w-0 items-center gap-2">
|
|
103
103
|
<WrenchIcon className="size-4 shrink-0 text-muted-foreground" />
|
|
104
|
-
<span className="
|
|
105
|
-
{
|
|
104
|
+
<span className="min-w-0 truncate text-body font-medium">{title ?? derivedName}</span>
|
|
105
|
+
<StatusBadge status={statusFromToolState(state)} className="shrink-0" />
|
|
106
106
|
{summary ? (
|
|
107
107
|
<span className="truncate text-meta text-muted-foreground">{summary}</span>
|
|
108
108
|
) : null}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tool.tsx"],"sourcesContent":["\"use client\";\n\nimport { Skeleton, StatusBadge, useLocale, type Status } from \"@elabs-ai/components-ui\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"@elabs-ai/components-ui\";\nimport { cn } from \"@elabs-ai/components-ui/lib/cn\";\nimport type { DynamicToolUIPart, ToolUIPart } from \"ai\";\nimport { ChevronDownIcon, WrenchIcon } from \"lucide-react\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { isValidElement } from \"react\";\nimport type { BundledLanguage } from \"shiki\";\n\nimport { CodeBlock } from \"./code-block\";\n\nexport type ToolProps = ComponentProps<typeof Collapsible>;\n\nexport const Tool = ({ className, ...props }: ToolProps) => (\n <Collapsible\n className={cn(\"group not-prose mb-4 w-full rounded-md border\", className)}\n {...props}\n />\n);\n\nexport type ToolPart = ToolUIPart | DynamicToolUIPart;\n\n/**\n * `JSON.stringify` throws on a circular reference or a `BigInt` — both\n * realistic shapes for tool input/output payloads a model produced. Falls\n * back to a readable placeholder instead of crashing the message render.\n */\nfunction safeJsonStringify(value: unknown): string {\n try {\n return JSON.stringify(value, (_key, v) => (typeof v === \"bigint\" ? `${v.toString()}n` : v), 2);\n } catch {\n return String(value);\n }\n}\n\nexport type ToolHeaderProps = {\n title?: string;\n /**\n * The business summary line (\"3 documents found\", \"8 rows reconciled\"),\n * shown beside the name + StatusBadge (#192, research 10 §B.5). Falls back\n * to nothing — the derived tool name still labels the row.\n */\n summary?: ReactNode;\n className?: string;\n} & (\n | { type: ToolUIPart[\"type\"]; state: ToolUIPart[\"state\"]; toolName?: never }\n | {\n type: DynamicToolUIPart[\"type\"];\n state: DynamicToolUIPart[\"state\"];\n toolName: string;\n }\n);\n\n/**\n * Map the AI-SDK `ToolUIPart` 7-state machine onto the canonical `Status`\n * enum (#189, research 10 §B.1 mapping a). Lives here — not in `@elabs-ai/components-ui` —\n * because it is typed against the SDK union; the `ai` import stays TYPES-ONLY\n * (D6, gate-enforced by `pnpm ai:types-only`).\n */\nexport const statusFromToolState = (state: ToolPart[\"state\"]): Status => {\n switch (state) {\n case \"input-streaming\":\n return \"pending\";\n case \"input-available\":\n return \"running\";\n case \"approval-requested\":\n return \"awaiting-approval\";\n case \"approval-responded\":\n return \"running\";\n case \"output-available\":\n return \"complete\";\n case \"output-denied\":\n return \"denied\";\n case \"output-error\":\n return \"failed\";\n }\n};\n\n/** Same signature as before #189; renders the canonical StatusBadge. */\nexport const getStatusBadge = (status: ToolPart[\"state\"]) => (\n <StatusBadge status={statusFromToolState(status)} />\n);\n\nexport const ToolHeader = ({\n className,\n title,\n summary,\n type,\n state,\n toolName,\n ...props\n}: ToolHeaderProps) => {\n const derivedName = type === \"dynamic-tool\" ? toolName : type.split(\"-\").slice(1).join(\"-\");\n\n return (\n <CollapsibleTrigger\n className={cn(\"flex w-full items-center justify-between gap-4 p-3\", className)}\n {...props}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <WrenchIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n <span className=\"shrink-0 text-body font-medium\">{title ?? derivedName}</span>\n {getStatusBadge(state)}\n {summary ? (\n <span className=\"truncate text-meta text-muted-foreground\">{summary}</span>\n ) : null}\n </div>\n <ChevronDownIcon className=\"size-4 shrink-0 text-muted-foreground transition-transform group-data-[state=open]:rotate-180\" />\n </CollapsibleTrigger>\n );\n};\n\nexport type ToolContentProps = ComponentProps<typeof CollapsibleContent>;\n\nexport const ToolContent = ({ className, ...props }: ToolContentProps) => (\n <CollapsibleContent\n className={cn(\n \"data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-top-2 data-[state=open]:slide-in-from-top-2 space-y-4 p-4 text-popover-foreground outline-none data-[state=closed]:animate-out data-[state=open]:animate-in data-[state=open]:[--tw-ease:var(--ease-entrance)] data-[state=closed]:[--tw-ease:var(--ease-exit)]\",\n className,\n )}\n {...props}\n />\n);\n\nexport type ToolDetailsProps = ComponentProps<typeof Collapsible> & {\n /** The disclosure label. */\n label?: ReactNode;\n};\n\n/**\n * The technical view, behind disclosure — the PACKAGE DEFAULT for tool JSON\n * (#192, research 10 §B.5): a nested collapsible, COLLAPSED by default,\n * holding `ToolInput`/`ToolOutput`. The header carries the business `summary`;\n * the raw payload is one expand away, never the headline.\n */\nexport const ToolDetails = ({\n className,\n label,\n defaultOpen = false,\n children,\n ...props\n}: ToolDetailsProps) => {\n const { t } = useLocale();\n return (\n <Collapsible\n className={cn(\"group/tool-details not-prose\", className)}\n defaultOpen={defaultOpen}\n {...props}\n >\n <CollapsibleTrigger className=\"flex items-center gap-1 rounded-sm text-meta text-muted-foreground transition-colors hover:text-foreground focus-ring\">\n <ChevronDownIcon className=\"size-3.5 transition-transform group-data-[state=open]/tool-details:rotate-180\" />\n {label ?? t(\"ai.tool.showTechnicalDetails\")}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"mt-3 space-y-4\">{children}</CollapsibleContent>\n </Collapsible>\n );\n};\n\nexport type ToolInputProps = ComponentProps<\"div\"> & {\n input: ToolPart[\"input\"];\n};\n\nexport const ToolInput = ({ className, input, ...props }: ToolInputProps) => {\n const { t } = useLocale();\n return (\n <div className={cn(\"space-y-2 overflow-hidden\", className)} {...props}>\n <h4 className=\"text-eyebrow uppercase text-muted-foreground\">\n {t(\"ai.schemaDisplay.parameters\")}\n </h4>\n <div className=\"rounded-md bg-muted/50\">\n <CodeBlock code={safeJsonStringify(input)} language=\"json\" />\n </div>\n </div>\n );\n};\n\nexport type ToolOutputProps = ComponentProps<\"div\"> & {\n /**\n * The tool result. Objects/strings render as JSON inside the technical view.\n *\n * @deprecated Passing a pre-rendered **React element** here (the \"rich\n * output under a muted Result heading\" path) is deprecated since #192\n * (research 10 §B.5): a produced artifact is the HEADLINE, not a technical\n * detail — host it in a `<ToolResultCard>` and keep `ToolOutput` for the\n * JSON payload behind `<ToolDetails>`. The element path still renders for\n * existing consumers (e.g. the copy-owned `ai-chart` registry block) but\n * will be removed in a future release.\n */\n output: ToolPart[\"output\"];\n errorText: ToolPart[\"errorText\"];\n /**\n * The call has not produced output yet (loading-states.md `isStreaming`) —\n * derive it from the existing `statusFromToolState(state)` mapping\n * (`\"input-streaming\"`/`\"input-available\"` → not yet `\"complete\"`/`\"failed\"`)\n * rather than a second source of truth. While true and no `output`/\n * `errorText` has arrived, renders a layout-shaped skeleton in the Result\n * slot instead of `null`, so the technical view reserves its space. A\n * still-running call is never a terminal failure — the error branch is\n * suppressed while `isStreaming` per the loading-states.md error rule, even\n * if a stale `errorText` is still set from a previous render.\n * @default false\n */\n isStreaming?: boolean;\n};\n\nexport const ToolOutput = ({\n className,\n output,\n errorText,\n isStreaming = false,\n ...props\n}: ToolOutputProps) => {\n const { t } = useLocale();\n\n // `output` is a defined-but-falsy result (`0`, `false`, `\"\"`) for plenty of\n // real tools (a count, a boolean check, an empty-string field) — only\n // `undefined` means \"no output (yet)\".\n const hasOutput = output !== undefined;\n\n if (!(hasOutput || errorText || isStreaming)) {\n return null;\n }\n\n const showError = !isStreaming && Boolean(errorText);\n const pending = isStreaming && !hasOutput && !errorText;\n\n let Output: ReactNode = null;\n\n if (hasOutput) {\n if (isValidElement(output)) {\n Output = output;\n } else if (typeof output === \"string\") {\n // A tool result is arbitrary text, not guaranteed JSON — forcing the\n // JSON highlighter on it mis-colours ordinary strings. Shiki's own\n // `BundledLanguage` union (grammar-backed languages) omits its\n // hard-coded plain-text pseudo-languages (`isPlainLang`:\n // \"plaintext\" | \"txt\" | \"text\" | \"plain\") — `createHighlighter`/\n // `codeToTokens` accept and special-case them with no grammar load\n // (verified: `getLoadedLanguages()` stays empty, no throw), so this\n // is a type-only gap, not a runtime one.\n Output = <CodeBlock code={output} language={\"text\" as BundledLanguage} />;\n } else {\n // Objects, arrays, numbers, booleans, null, bigint — all safe to\n // stringify for display.\n Output = <CodeBlock code={safeJsonStringify(output)} language=\"json\" />;\n }\n }\n\n return (\n <div className={cn(\"space-y-2\", className)} {...props}>\n <h4 className=\"text-eyebrow uppercase text-muted-foreground\">\n {showError ? t(\"ai.tool.error\") : t(\"ai.tool.result\")}\n </h4>\n {pending ? (\n <div className=\"space-y-2 rounded-md bg-muted/50 p-3\" role=\"status\" aria-live=\"polite\">\n <span className=\"sr-only\">{t(\"loading\")}</span>\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-1/2\" />\n </div>\n ) : (\n <div\n className={cn(\n \"overflow-x-auto rounded-md text-caption [&_table]:w-full\",\n // #124: this colours the ambient text of the error/result body —\n // running text, so the error branch takes the ink rung.\n showError ? \"bg-destructive/10 text-destructive-text\" : \"bg-muted/50 text-foreground\",\n )}\n >\n {showError && <div>{errorText}</div>}\n {Output}\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/a2ui/core/catalog.generated.ts"],"sourcesContent":["// GENERATED by packages/cli/scripts/gen-a2ui-catalog.mjs from\n// packages/ai/src/a2ui/catalog.source.json + brand-ui.manifest.json — do not edit;\n// edit the source file (or the component) and run `pnpm gen`.\nimport type { A2uiCatalogSchema } from \"./spec\";\n\nexport const A2UI_CATALOG_VERSION = \"1\";\n\nexport const A2UI_CATALOG_SCHEMA: A2uiCatalogSchema = {\n Accordion: {\n children: true,\n props: {\n collapsible: {\n type: \"boolean\",\n },\n defaultValue: {\n type: \"string\",\n },\n type: {\n enum: [\"single\", \"multiple\"],\n required: true,\n type: \"string\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n },\n AccordionContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n AccordionItem: {\n children: true,\n props: {\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n AccordionTrigger: {\n children: true,\n props: {\n headingLevel: {\n type: \"number\",\n enum: [2, 3, 4, 5, 6],\n description:\n \"The heading level Radix's `Accordion.Header` renders. Radix hardcodes `h3`, which skips a level whenever the accordion sits directly under the page `h1` — so…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Alert: {\n children: true,\n props: {\n variant: {\n type: \"string\",\n enum: [\"default\", \"destructive\", \"success\", \"warning\", \"info\"],\n default: \"default\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose AlertTitle + AlertDescription inside.\",\n },\n AlertDescription: {\n children: true,\n props: {\n measure: {\n type: \"boolean\",\n description:\n \"Cap the line length to a readable prose measure (`max-w-prose`, ~65ch) for genuine paragraph content (#339). Off by default — short, label-style descriptions…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n AlertTitle: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Avatar: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose AvatarFallback (initials) inside.\",\n },\n AvatarFallback: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Badge: {\n children: true,\n props: {\n variant: {\n type: \"string\",\n enum: [\"default\", \"secondary\", \"outline\", \"success\", \"warning\", \"destructive\", \"info\"],\n default: \"default\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compact status/label chip (status, count, category).\",\n },\n BentoGrid: {\n children: true,\n props: {\n spotlight: {\n type: \"boolean\",\n description:\n \"Enable the cursor-following spotlight on every tile in this grid. Individual tiles can still opt out (or in) with their own `spotlight` prop. Disabled entire…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Feature/bento grid; children are BentoGridItem.\",\n },\n BentoGridItem: {\n children: true,\n props: {\n size: {\n type: \"string\",\n description:\n 'Size preset. Resolves to a col + row span. Overridden by explicit `span`. @default \"sm\"',\n enum: [\"sm\", \"md\", \"lg\", \"hero\"],\n },\n span: {\n type: \"object\",\n description:\n \"Explicit grid span. Wins over `size`. Spans clamp gracefully on narrow layouts — a `col: 4` on a 2-col grid becomes `span min(4, 2)`.\",\n },\n spotlight: {\n type: \"boolean\",\n description:\n \"Enable the cursor-following spotlight gradient on this tile. Omit to inherit the parent `BentoGrid`'s `spotlight` (itself `false` by default) — so the effect…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Button: {\n children: true,\n props: {\n disabled: {\n type: \"boolean\",\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"default\", \"lg\", \"icon\", \"icon-sm\", \"icon-lg\"],\n default: \"default\",\n },\n type: {\n enum: [\"button\", \"submit\"],\n default: \"button\",\n type: \"string\",\n },\n variant: {\n type: \"string\",\n enum: [\"default\", \"secondary\", \"destructive\", \"outline\", \"outline-subtle\", \"ghost\", \"link\"],\n default: \"default\",\n },\n },\n events: {\n click: \"onClick\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: 'An action. Bind `on.click`; one `variant: \"default\"` per group.',\n },\n ButtonGroup: {\n children: true,\n props: {\n orientation: {\n type: \"string\",\n enum: [\"horizontal\", \"vertical\"],\n default: \"horizontal\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Card: {\n children: true,\n props: {\n detail: {\n type: \"node\",\n description:\n \"Optional detail-panel content. **Undefined → a plain card** (today's single `<div>` — no grid, no panel, zero behaviour change).\",\n },\n detailLabel: {\n type: \"string\",\n description: 'Accessible label for the detail region. @default \"Details\"',\n },\n detailPlacement: {\n type: \"string\",\n enum: [\"side\", \"bottom\"],\n description: 'Which edge the detail panel sits on. @default \"side\"',\n },\n interactive: {\n type: \"string\",\n enum: [\"true\", \"false\"],\n default: \"false\",\n },\n stacked: {\n type: \"boolean\",\n description:\n \"Opt-in hairline gesture: the edges of two sheets stacked behind the card's top edge (the `hairline-stack` utility). It draws OUTSIDE the card, so it needs ~1…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"The one generic surface — compose CardHeader / CardContent / CardFooter inside.\",\n },\n CardAction: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"The header's trailing action slot (a Button, a Badge).\",\n },\n CardContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardDescription: {\n children: true,\n props: {\n measure: {\n type: \"boolean\",\n description:\n \"Cap the line length to a readable prose measure (`max-w-prose`, ~65ch) for genuine paragraph content (#339). Off by default — short, subtitle-style descripti…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardFooter: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardHeader: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CardTitle: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Checkbox: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultChecked: {\n type: \"boolean\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n },\n events: {\n change: \"onCheckedChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Binary on/off toggle within a form (multi-select within a group).\",\n },\n Collapsible: {\n children: true,\n props: {\n defaultOpen: {\n type: \"boolean\",\n },\n },\n events: {\n change: \"onOpenChange\",\n },\n source: \"@elabs-ai/components-ui\",\n },\n CollapsibleContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n CollapsibleTrigger: {\n children: true,\n props: {\n asChild: {\n type: \"boolean\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Descriptions: {\n children: true,\n props: {\n columns: {\n type: \"number\",\n enum: [1, 2, 3],\n description:\n \"Number of columns at the widest breakpoint. Collapses to a single column on small screens. Default 1.\",\n },\n layout: {\n type: \"string\",\n description:\n \"`horizontal` places the label beside the value; `vertical` stacks the label above the value. Default `horizontal`.\",\n enum: [\"horizontal\", \"vertical\"],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Key–value list; children are DescriptionsItem.\",\n },\n DescriptionsItem: {\n children: true,\n props: {\n label: {\n type: \"node\",\n required: true,\n description: \"The term / label for this entry.\",\n },\n numeric: {\n type: \"boolean\",\n description:\n \"When the value is numeric, set this so the value uses `tabular-nums` for aligned digits.\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n EmptyState: {\n children: false,\n props: {\n actions: {\n type: \"node\",\n description: \"Primary/secondary actions.\",\n },\n description: {\n type: \"node\",\n },\n icon: {\n type: \"node\",\n description:\n \"Optional icon shown above the title, clamped to a fixed 40×40 (this wrapper only ever forwards `icon` to `StatePanel`, never `illustration` — for a larger, u…\",\n },\n title: {\n type: \"node\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Nothing here yet — title, description, optional actions.\",\n },\n Grid: {\n builtin: true,\n children: true,\n props: {\n columns: {\n enum: [1, 2, 3, 4],\n default: 2,\n type: \"number\",\n },\n gap: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\"],\n default: \"md\",\n type: \"string\",\n },\n },\n events: {},\n source: \"builtin\",\n summary: \"Responsive CSS grid, 1–4 equal columns (collapses to one column on narrow screens).\",\n },\n Heading: {\n children: true,\n props: {\n level: {\n type: \"number\",\n description: \"Semantic heading level — drives the rendered tag AND the default size.\",\n enum: [1, 2, 3, 4, 5, 6],\n default: 2,\n },\n size: {\n type: \"string\",\n enum: [\"display-lg\", \"display\", \"title\", \"subtitle\"],\n default: \"title\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Section heading; `level` sets the HTML rank (1–6), `size` the type role.\",\n },\n Input: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n placeholder: {\n type: \"string\",\n },\n required: {\n type: \"boolean\",\n },\n type: {\n enum: [\"text\", \"email\", \"number\", \"password\", \"search\", \"tel\", \"url\", \"date\"],\n type: \"string\",\n },\n },\n events: {\n change: \"onChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Single-line text field — the base form input.\",\n },\n Kbd: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Label: {\n children: true,\n props: {\n htmlFor: {\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n MetricCard: {\n children: false,\n props: {\n currency: {\n type: \"string\",\n description: 'ISO 4217 code for `valueFormat: \"currency\"`. Default: `\"USD\"`.',\n },\n delta: {\n type: \"string\",\n description: 'Signed change, e.g. \"+12.4%\". Direction colors it.',\n },\n deltaDirection: {\n type: \"string\",\n enum: [\"up\", \"down\", \"neutral\"],\n },\n description: {\n type: \"node\",\n description: \"Secondary line under the value — sublabel / context.\",\n },\n evidence: {\n type: \"node\",\n description:\n \"Optional grounding footer (research 11 §B.5 KPI-3) — connects a cited figure to its source (e.g. an `EvidenceChip` from `@elabs-ai/components-ai`). Rendered …\",\n },\n label: {\n type: \"node\",\n required: true,\n },\n loading: {\n type: \"boolean\",\n description:\n \"Loading vs ready — renders a layout-shaped skeleton (matching the real box height) instead of the value/label/delta text. Default: `false`.\",\n },\n positiveIsGood: {\n type: \"boolean\",\n description: 'Whether \"up\" is good (green) — flip for metrics where down is good.',\n },\n sparkline: {\n type: \"node\",\n description:\n 'Trend slot rendered directly under the value (RM-072) — pass a `<Sparkline …/>` from `@elabs-ai/components-charts`. Hidden at `size=\"sm\"`.',\n },\n value: {\n type: \"node\",\n required: true,\n },\n valueFormat: {\n type: \"string\",\n description:\n 'How to render a NUMERIC `value`. Default: `\"compact\"`. Ignored for every other `ReactNode` — a string you already formatted is rendered verbatim.',\n enum: [\"number\", \"compact\", \"currency\", \"percent\"],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"One KPI: label, value, optional delta. Put several in a Grid.\",\n },\n Progress: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n marker: {\n type: \"number\",\n description:\n 'Reference point (0–100, same scale as `value`) — e.g. an \"expected by today\" pace or a target — rendered as a thin vertical tick on the track. Unset (default…',\n },\n markerLabel: {\n type: \"string\",\n description:\n 'What `marker` represents (already localized by the caller — e.g. `\"expected 70% by today\"`). When set, it is appended to the progress bar\\'s accessible value …',\n },\n max: {\n type: \"number\",\n },\n value: {\n type: \"number\",\n required: true,\n },\n variant: {\n type: \"string\",\n enum: [\"default\", \"success\", \"warning\", \"destructive\"],\n default: \"default\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n RadioGroup: {\n children: true,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"string\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Mutually-exclusive single choice from a small visible set.\",\n },\n RadioGroupItem: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SectionHeader: {\n children: false,\n props: {\n actions: {\n type: \"node\",\n description: \"Right-aligned actions (buttons, menus).\",\n },\n description: {\n type: \"node\",\n },\n eyebrow: {\n type: \"node\",\n description: \"Optional element rendered above the title (eyebrow / breadcrumbs).\",\n },\n size: {\n type: \"string\",\n enum: [\"default\", \"lg\"],\n description:\n 'Title size: `\"default\"` (`text-title`) for a section inside a screen; `\"lg\"` (`text-display`, description at a readable measure) for the sections of a LONG p…',\n },\n title: {\n type: \"node\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Title + description + optional actions above a region.\",\n },\n Select: {\n children: true,\n props: {\n defaultValue: {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose SelectTrigger (SelectValue) + SelectContent (SelectItem…).\",\n },\n SelectContent: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SelectItem: {\n children: true,\n props: {\n disabled: {\n type: \"boolean\",\n },\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SelectTrigger: {\n children: true,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n autoTitle: {\n type: \"boolean\",\n description:\n \"Auto-set a native `title` from the trigger's rendered text — but ONLY while that text is actually clipped (default `true`). Set `false` when the trigger is a…\",\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"default\"],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n SelectValue: {\n children: false,\n props: {\n placeholder: {\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Separator: {\n children: false,\n props: {\n orientation: {\n enum: [\"horizontal\", \"vertical\"],\n default: \"horizontal\",\n type: \"string\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Slider: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"array\",\n },\n max: {\n type: \"number\",\n },\n min: {\n type: \"number\",\n },\n step: {\n type: \"number\",\n },\n thumbProps: {\n type: \"array\",\n description:\n \"Escape hatch spread onto the thumb LAST — for `data-*`/`style`/etc, or to deliberately override `aria-label`/`aria-labelledby`/`aria-valuetext` (an explicit …\",\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n },\n Stack: {\n builtin: true,\n children: true,\n props: {\n align: {\n enum: [\"start\", \"center\", \"end\", \"stretch\"],\n default: \"stretch\",\n type: \"string\",\n },\n direction: {\n enum: [\"column\", \"row\"],\n default: \"column\",\n type: \"string\",\n },\n gap: {\n enum: [\"none\", \"xs\", \"sm\", \"md\", \"lg\"],\n default: \"md\",\n type: \"string\",\n },\n justify: {\n enum: [\"start\", \"center\", \"end\", \"between\"],\n default: \"start\",\n type: \"string\",\n },\n wrap: {\n type: \"boolean\",\n default: false,\n },\n },\n events: {},\n source: \"builtin\",\n summary:\n \"Vertical or horizontal flex group. The default container — put siblings in a Stack, never bare.\",\n },\n StatePanel: {\n children: false,\n props: {\n actions: {\n type: \"node\",\n description: \"Primary / secondary action buttons.\",\n },\n description: {\n type: \"node\",\n description: \"Supporting description below the title.\",\n },\n icon: {\n type: \"node\",\n description:\n 'Icon shown above the title, clamped to a uniform 40×40 so mismatched glyphs stay tidy. For `\"error\"` defaults to a built-in warning triangle. For `\"loading\"`…',\n },\n illustration: {\n type: \"node\",\n description:\n \"A larger illustration (one of `@elabs-ai/components-ui`'s shipped `*Illustration` components, or a consumer's own `ReactNode`) shown above the title instead …\",\n },\n kind: {\n type: \"string\",\n enum: [\"empty\", \"error\", \"loading\"],\n default: \"empty\",\n },\n loadingLabel: {\n type: \"string\",\n description: 'Accessible label for the spinner in loading state. @default \"Loading…\"',\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"md\", \"lg\"],\n description: 'Spinner size (loading kind only). @default \"md\"',\n },\n title: {\n type: \"node\",\n description: \"Heading text.\",\n },\n titleAs: {\n type: \"string\",\n enum: [\"div\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"],\n description:\n \"Heading level for the panel's title (#328 convention). Set this to the level that correctly follows whatever heading precedes this panel in the document outl…\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"An empty / error / loading message panel.\",\n },\n StatusBadge: {\n children: false,\n props: {\n hideIcon: {\n type: \"boolean\",\n description: \"Render label-only (no status icon).\",\n },\n size: {\n type: \"string\",\n enum: [\"sm\", \"md\"],\n default: \"md\",\n },\n status: {\n type: \"string\",\n required: true,\n description: \"The canonical execution status, or a mapped out-of-vocabulary one (#363).\",\n enum: [\n \"pending\",\n \"running\",\n \"complete\",\n \"awaiting-approval\",\n \"denied\",\n \"failed\",\n \"skipped\",\n ],\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"A closed status vocabulary with icon + text (never colour alone).\",\n },\n Switch: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultChecked: {\n type: \"boolean\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n },\n events: {\n change: \"onCheckedChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Immediate on/off setting toggle (applies on change, not on submit).\",\n },\n Table: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose TableHeader/TableBody → TableRow → TableHead/TableCell.\",\n },\n TableBody: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableCaption: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableCell: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableFooter: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableHead: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableHeader: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TableRow: {\n children: true,\n props: {},\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Tabs: {\n children: true,\n props: {\n defaultValue: {\n type: \"string\",\n required: true,\n },\n },\n events: {\n change: \"onValueChange\",\n },\n source: \"@elabs-ai/components-ui\",\n summary: \"Compose TabsList (TabsTrigger…) + TabsContent per value.\",\n },\n TabsContent: {\n children: true,\n props: {\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TabsList: {\n children: true,\n props: {\n variant: {\n type: \"string\",\n enum: [\"segmented\", \"underline\"],\n default: \"segmented\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n TabsTrigger: {\n children: true,\n props: {\n disabled: {\n type: \"boolean\",\n },\n value: {\n type: \"string\",\n required: true,\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n },\n Text: {\n children: true,\n props: {\n tone: {\n type: \"string\",\n enum: [\"default\", \"muted\", \"primary\"],\n default: \"default\",\n },\n variant: {\n type: \"string\",\n enum: [\"lead\", \"body\", \"caption\", \"meta\", \"kpi\", \"kpi-sm\", \"eyebrow\", \"code\"],\n default: \"body\",\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"A paragraph or inline run of text with a type role and tone.\",\n },\n Textarea: {\n children: false,\n props: {\n \"aria-label\": {\n type: \"string\",\n },\n defaultValue: {\n type: \"string\",\n },\n disabled: {\n type: \"boolean\",\n },\n id: {\n type: \"string\",\n },\n placeholder: {\n type: \"string\",\n },\n rows: {\n type: \"number\",\n },\n },\n events: {\n change: \"onChange\",\n },\n source: \"@elabs-ai/components-ui\",\n },\n Timeline: {\n children: false,\n props: {\n items: {\n type: \"array\",\n required: true,\n description: '[{ title, description?, status?: \"done\"|\"active\"|\"pending\", timestamp? }]',\n },\n },\n events: {},\n source: \"@elabs-ai/components-ui\",\n summary: \"Ordered status timeline from `items` (title, status, timestamp, description).\",\n },\n};\n"],"mappings":"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","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|