@nadicodeai/ui 0.2.0 → 0.3.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/AGENTS.md +2 -0
- package/README.md +29 -0
- package/dist/components/action-band.d.ts.map +1 -1
- package/dist/components/action-band.js +2 -1
- package/dist/components/agent-message.d.ts +2 -1
- package/dist/components/agent-message.d.ts.map +1 -1
- package/dist/components/agent-message.js +14 -21
- package/dist/components/agent-thread.d.ts.map +1 -1
- package/dist/components/agent-thread.js +3 -10
- package/dist/components/ai-elements/open-in-chat.d.ts.map +1 -1
- package/dist/components/ai-elements/open-in-chat.js +7 -18
- package/dist/components/alert-dialog.js +1 -1
- package/dist/components/alert.js +1 -1
- package/dist/components/automation-section.d.ts.map +1 -1
- package/dist/components/automation-section.js +38 -43
- package/dist/components/benefits-bento.js +1 -1
- package/dist/components/bento.d.ts +2 -2
- package/dist/components/bento.d.ts.map +1 -1
- package/dist/components/bento.js +4 -3
- package/dist/components/button.js +5 -5
- package/dist/components/card.js +1 -1
- package/dist/components/demo-surface.d.ts +10 -2
- package/dist/components/demo-surface.d.ts.map +1 -1
- package/dist/components/demo-surface.js +9 -2
- package/dist/components/dialog.js +1 -1
- package/dist/components/faq.d.ts +6 -5
- package/dist/components/faq.d.ts.map +1 -1
- package/dist/components/faq.js +8 -6
- package/dist/components/files-preview.d.ts.map +1 -1
- package/dist/components/files-preview.js +8 -17
- package/dist/components/hero-split.d.ts.map +1 -1
- package/dist/components/hero-split.js +3 -2
- package/dist/components/input.js +1 -1
- package/dist/components/installer-shell.d.ts.map +1 -1
- package/dist/components/installer-shell.js +9 -12
- package/dist/components/logo-band.d.ts.map +1 -1
- package/dist/components/logo-band.js +2 -3
- package/dist/components/pricing.d.ts.map +1 -1
- package/dist/components/pricing.js +5 -3
- package/dist/components/seam-grid.d.ts +30 -0
- package/dist/components/seam-grid.d.ts.map +1 -0
- package/dist/components/seam-grid.js +30 -0
- package/dist/components/section-intro.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/shift-band.d.ts.map +1 -1
- package/dist/components/shift-band.js +2 -1
- package/dist/components/state-notice.d.ts +13 -0
- package/dist/components/state-notice.d.ts.map +1 -0
- package/dist/components/state-notice.js +8 -0
- package/dist/components/stats-band.d.ts.map +1 -1
- package/dist/components/stats-band.js +4 -5
- package/dist/components/testimonials.d.ts.map +1 -1
- package/dist/components/testimonials.js +3 -4
- package/dist/components/textarea.js +1 -1
- package/dist/components/use-case-bento.d.ts +4 -2
- package/dist/components/use-case-bento.d.ts.map +1 -1
- package/dist/components/use-case-bento.js +3 -3
- package/dist/components/watch-it-work-band.d.ts +3 -2
- package/dist/components/watch-it-work-band.d.ts.map +1 -1
- package/dist/components/watch-it-work-band.js +4 -4
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/lib/agent-work-state.d.ts +36 -0
- package/dist/lib/agent-work-state.d.ts.map +1 -0
- package/dist/lib/agent-work-state.js +36 -0
- package/dist/lib/seam.d.ts +29 -0
- package/dist/lib/seam.d.ts.map +1 -0
- package/dist/lib/seam.js +30 -0
- package/dist/styles/globals.css +46 -36
- package/docs/agents/nadicodeai-ui.md +22 -0
- package/package.json +3 -1
package/AGENTS.md
CHANGED
|
@@ -112,6 +112,8 @@ through `docs/terminal-tui-semantics.md`.
|
|
|
112
112
|
|
|
113
113
|
| Command | When |
|
|
114
114
|
| --- | --- |
|
|
115
|
+
| `npm run dev -w @nadicodeai/ui` | Watch `src/` and incrementally refresh `dist/` for local website or app iteration |
|
|
116
|
+
| `npm run build:fast -w @nadicodeai/ui` | One-shot incremental `dist/` refresh for local development after the full package has already been built |
|
|
115
117
|
| `npm run build -w @nadicodeai/ui` | Emit the consumable `dist/` package surface before packing or app builds |
|
|
116
118
|
| `npm pack --dry-run -w @nadicodeai/ui` | Verify exactly what external npm consumers would receive after package surface, export, CSS, docs, or skill changes |
|
|
117
119
|
| `npm run test -w @nadicodeai/ui` | Run this workspace's guards (browser-free; also runs inside the root `npm run test` gate) |
|
package/README.md
CHANGED
|
@@ -134,11 +134,40 @@ Current product subpaths:
|
|
|
134
134
|
- `@nadicodeai/ui/components/settings-section`
|
|
135
135
|
- `@nadicodeai/ui/components/theme-mode-switcher`
|
|
136
136
|
|
|
137
|
+
`StateNotice` (`@nadicodeai/ui/components/state-notice`) is the supported
|
|
138
|
+
low-level state-banner primitive behind `AgentMessageStateNotice` and
|
|
139
|
+
`AgentThreadStateBanner`. It owns the shared icon, required `title`, optional
|
|
140
|
+
description, and actions skeleton with `role="status"`/`role="alert"` semantics.
|
|
141
|
+
|
|
137
142
|
Recommended migration order is documented in
|
|
138
143
|
`docs/migration/nadia-consumer-readiness.md`: web admin or portal first,
|
|
139
144
|
installer second, desktop shell third, desktop chat last, and terminal/TUI
|
|
140
145
|
consumers through `docs/terminal-tui-semantics.md`.
|
|
141
146
|
|
|
147
|
+
## Layout primitives
|
|
148
|
+
|
|
149
|
+
`SeamGrid` is a supported low-level layout primitive: the single owner of the
|
|
150
|
+
"gap-as-seam" grid used by the bordered section grids (stats band, testimonials,
|
|
151
|
+
logo band, and siblings). It renders a `div` with the invariant `grid gap-px`
|
|
152
|
+
base and paints one hairline seam at every cell boundary, so borderless,
|
|
153
|
+
square-cornered cells never double a line.
|
|
154
|
+
|
|
155
|
+
```tsx
|
|
156
|
+
import { SeamGrid } from "@nadicodeai/ui/components/seam-grid";
|
|
157
|
+
|
|
158
|
+
<SeamGrid surface="canvas" className="grid-cols-2 lg:grid-cols-4">
|
|
159
|
+
{/* borderless, square-cornered cells */}
|
|
160
|
+
</SeamGrid>;
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
The only seam-specific prop is `surface`: `"canvas"` (default) paints the brand
|
|
164
|
+
`line` via `bg-border`; `"ink"` mixes the line toward the ink role for darker
|
|
165
|
+
panels. `surface` also lands on a `data-surface` attribute. Pass `className`,
|
|
166
|
+
`children`, and any `div` props to keep your own column map, heights, and
|
|
167
|
+
`data-*` attributes. The seam colour helper itself is an internal implementation
|
|
168
|
+
detail (no public subpath export); couple to `SeamGrid` and its `surface` prop,
|
|
169
|
+
not to the underlying arbitrary Tailwind class string.
|
|
170
|
+
|
|
142
171
|
## shadcn and AI Elements discovery
|
|
143
172
|
|
|
144
173
|
Use shadcn MCP or the CLI for live discovery and install guidance while working
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-band.d.ts","sourceRoot":"","sources":["../../src/components/action-band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"action-band.d.ts","sourceRoot":"","sources":["../../src/components/action-band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAuC9B,KAAK,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IACnD,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC1B,CAAA;AAED,iBAAS,UAAU,CAAC,EAClB,MAAgB,EAChB,SAAS,EACT,QAAQ,EACR,KAAK,EACL,GAAG,KAAK,EACT,EAAE,eAAe,qBAsBjB;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7B;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW3E;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7E;AAED,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
|
+
import { SeamGrid } from "./seam-grid.js";
|
|
3
4
|
/**
|
|
4
5
|
* action-band — full-lane conversion stage for a final CTA or page-level ask.
|
|
5
6
|
*
|
|
@@ -22,7 +23,7 @@ function ActionBand({ active = "inset", className, children, style, ...props })
|
|
|
22
23
|
}, ...props, children: [_jsx("div", { className: "nc-stage-fill", "aria-hidden": "true" }), _jsx(ActionBandConnector, { edge: "start" }), _jsx("div", { className: "nc-stage-grid", children: _jsx("div", { className: "nc-stage-active", children: children }) }), _jsx(ActionBandConnector, { edge: "end" })] }));
|
|
23
24
|
}
|
|
24
25
|
function ActionBandContent({ className, ...props }) {
|
|
25
|
-
return (_jsx(
|
|
26
|
+
return (_jsx(SeamGrid, { "data-slot": "action-band-content", className: cn("min-w-0 lg:h-[var(--nc-h-action-band)] lg:grid-cols-12", className), ...props }));
|
|
26
27
|
}
|
|
27
28
|
function ActionBandCopy({ className, ...props }) {
|
|
28
29
|
return (_jsx("div", { "data-slot": "action-band-copy", className: cn("nc-panel-cell relative overflow-hidden !bg-[var(--nc-ink)] !text-[var(--nc-canvas)] lg:col-span-6", className), ...props }));
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { type AgentArtifactModel, type AgentRedactionRule } from "./artifact-panel";
|
|
3
3
|
import { type AgentApprovalChoice, type AgentToolApprovalRequest } from "./agent-tool-approval";
|
|
4
|
+
import { type AgentWorkState } from "../lib/agent-work-state";
|
|
4
5
|
export type AgentMessageRole = "user" | "assistant" | "system";
|
|
5
|
-
export type AgentWorkState
|
|
6
|
+
export type { AgentWorkState };
|
|
6
7
|
export type AgentMessageSourceKind = "human" | "agent" | "system" | "tool" | "runtime";
|
|
7
8
|
export type AgentMessageSourceMetadata = {
|
|
8
9
|
kind: AgentMessageSourceKind;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-message.d.ts","sourceRoot":"","sources":["../../src/components/agent-message.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"agent-message.d.ts","sourceRoot":"","sources":["../../src/components/agent-message.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAkC9B,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAA;AAIzC,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG/E,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;AAE9D,YAAY,EAAE,cAAc,EAAE,CAAA;AAE9B,MAAM,MAAM,sBAAsB,GAC9B,OAAO,GACP,OAAO,GACP,QAAQ,GACR,MAAM,GACN,SAAS,CAAA;AAEb,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,sBAAsB,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IAC7C,SAAS,CAAC,EAAE,kBAAkB,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CAAA;IAC/C,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,kBAAkB,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,SAAS,GACT,SAAS,GACT,OAAO,GACP,QAAQ,GACR,oBAAoB,GACpB,oBAAoB,CAAA;AAExB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,mBAAmB,CAAA;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,wBAAwB,CAAA;IACnC,SAAS,CAAC,EAAE,kBAAkB,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,gCAAgC,GAAG,CAC7C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE,kBAAkB,KACzB,IAAI,CAAA;AAET,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAA;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,kBAAkB,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,kBAAkB,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,WAAW,CAAA;IACjB,SAAS,EAAE,qBAAqB,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,kBAAkB,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,oBAAoB,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,kBAAkB,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM,CAAC,CAAA;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,gBAAgB,GACxB,oBAAoB,GACpB,yBAAyB,GACzB,oBAAoB,GACpB,sBAAsB,GACtB,wBAAwB,GACxB,qBAAqB,CAAA;AAEzB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,gBAAgB,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,0BAA0B,CAAA;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IACxC,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC1B,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAA;IACpC,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAA;IAChC,SAAS,CAAC,EAAE,kBAAkB,CAAA;CAC/B,CAAA;AAgCD,iBAAS,uBAAuB,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,WAAW,EACX,OAAO,GACR,EAAE;IACD,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM,CAAC,CAAA;IAChD,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,qBAYA;AAED,iBAAS,oBAAoB,CAAC,EAC5B,WAAW,GACZ,EAAE;IACD,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAA;CACrC,4BA2BA;AAED,iBAAS,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAA;CAAE,4BAuB1E;AAkCD,iBAAS,aAAa,CAAC,EACrB,QAAQ,EACR,OAAO,EACP,gBAAgB,GACjB,EAAE;IACD,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,gBAAgB,CAAC,EAAE,gCAAgC,CAAA;CACpD,qBAiDA;AA8ED,iBAAS,YAAY,CAAC,EACpB,OAAO,EACP,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,GAAG;IACrD,OAAO,EAAE,iBAAiB,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IAC7C,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,oBAAoB,CAAC,EAAE,gCAAgC,CAAA;CACxD,qBA8DA;AAED,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,GACd,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
3
|
+
import { BotIcon, InfoIcon, UserIcon } from "lucide-react";
|
|
4
4
|
import { Attachment, AttachmentInfo, AttachmentPreview, Attachments, } from "./ai-elements/attachments.js";
|
|
5
5
|
import { Message, MessageContent, MessageResponse, } from "./ai-elements/message.js";
|
|
6
6
|
import { Reasoning, ReasoningContent, ReasoningTrigger, } from "./ai-elements/reasoning.js";
|
|
@@ -9,30 +9,24 @@ import { Tool, ToolContent, ToolHeader, ToolInput, ToolOutput, } from "./ai-elem
|
|
|
9
9
|
import { ArtifactPanel, RedactedNotice, StackTraceDisclosure, getAgentRedactionText, } from "./artifact-panel.js";
|
|
10
10
|
import { AgentToolApproval, } from "./agent-tool-approval.js";
|
|
11
11
|
import { Badge } from "./badge.js";
|
|
12
|
+
import { StateNotice } from "./state-notice.js";
|
|
12
13
|
import { agentAttachmentToData } from "../lib/agent-attachment.js";
|
|
14
|
+
import { statePresentation } from "../lib/agent-work-state.js";
|
|
13
15
|
import { cn } from "../lib/utils.js";
|
|
14
16
|
const roleIcons = {
|
|
15
17
|
assistant: BotIcon,
|
|
16
18
|
system: InfoIcon,
|
|
17
19
|
user: UserIcon,
|
|
18
20
|
};
|
|
19
|
-
const
|
|
20
|
-
empty: "Empty",
|
|
21
|
-
fatal: "Fatal",
|
|
22
|
-
idle: "Idle",
|
|
23
|
-
interrupted: "Interrupted",
|
|
24
|
-
"permission-denied": "Permission denied",
|
|
25
|
-
queued: "Queued",
|
|
26
|
-
retryable: "Retryable",
|
|
27
|
-
streaming: "Streaming",
|
|
28
|
-
};
|
|
29
|
-
const stateIcons = {
|
|
30
|
-
fatal: FileWarningIcon,
|
|
31
|
-
interrupted: AlertTriangleIcon,
|
|
32
|
-
"permission-denied": ShieldXIcon,
|
|
33
|
-
queued: ClockIcon,
|
|
34
|
-
retryable: RefreshCwIcon,
|
|
35
|
-
streaming: LoaderCircleIcon,
|
|
21
|
+
const stateMeta = {
|
|
22
|
+
empty: { label: "Empty" },
|
|
23
|
+
fatal: { label: "Fatal" },
|
|
24
|
+
idle: { label: "Idle" },
|
|
25
|
+
interrupted: { label: "Interrupted" },
|
|
26
|
+
"permission-denied": { label: "Permission denied" },
|
|
27
|
+
queued: { label: "Queued" },
|
|
28
|
+
retryable: { label: "Retryable" },
|
|
29
|
+
streaming: { label: "Streaming" },
|
|
36
30
|
};
|
|
37
31
|
const toolStatusToAiState = {
|
|
38
32
|
"approval-requested": "approval-requested",
|
|
@@ -44,8 +38,7 @@ const toolStatusToAiState = {
|
|
|
44
38
|
success: "output-available",
|
|
45
39
|
};
|
|
46
40
|
function AgentMessageStateNotice({ state, title, description, actions, }) {
|
|
47
|
-
|
|
48
|
-
return (_jsxs("div", { "data-slot": "agent-message-state", "data-agent-state": state, role: state === "fatal" || state === "permission-denied" ? "alert" : "status", className: "flex flex-wrap items-center gap-3 rounded-md border bg-muted/30 px-3 py-2 text-sm", children: [_jsx(Icon, { className: cn("size-4 text-muted-foreground", state === "streaming" && "animate-spin") }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "font-medium", children: title ?? stateLabels[state] }), description && (_jsx("div", { className: "text-muted-foreground", children: description }))] }), actions] }));
|
|
41
|
+
return (_jsx(StateNotice, { "data-slot": "agent-message-state", state: state, icon: statePresentation(state).icon, title: title ?? stateMeta[state].label, description: description, actions: actions, className: "rounded-md px-3 py-2" }));
|
|
49
42
|
}
|
|
50
43
|
function AgentAttachmentsList({ attachments, }) {
|
|
51
44
|
if (!attachments?.length) {
|
|
@@ -95,7 +88,7 @@ function AgentMessagePartView({ part, toolActions, onToolApprovalChoice, }) {
|
|
|
95
88
|
function AgentMessageMeta({ role, metadata, state, }) {
|
|
96
89
|
const Icon = roleIcons[role];
|
|
97
90
|
const label = metadata?.label ?? role;
|
|
98
|
-
return (_jsxs("div", { "data-slot": "agent-message-meta", className: "flex flex-wrap items-center gap-2 text-xs text-muted-foreground", children: [_jsx(Icon, { className: "size-3.5" }), _jsx("span", { className: "font-medium capitalize", children: label }), metadata?.model && _jsx(Badge, { variant: "outline", children: metadata.model }), metadata?.timestamp && _jsx("span", { children: metadata.timestamp }), state && state !== "idle" && (_jsx(Badge, { variant: "secondary", children:
|
|
91
|
+
return (_jsxs("div", { "data-slot": "agent-message-meta", className: "flex flex-wrap items-center gap-2 text-xs text-muted-foreground", children: [_jsx(Icon, { className: "size-3.5" }), _jsx("span", { className: "font-medium capitalize", children: label }), metadata?.model && _jsx(Badge, { variant: "outline", children: metadata.model }), metadata?.timestamp && _jsx("span", { children: metadata.timestamp }), state && state !== "idle" && (_jsx(Badge, { variant: "secondary", children: stateMeta[state].label }))] }));
|
|
99
92
|
}
|
|
100
93
|
function AgentMessage({ message, toolActions, retryAction, onToolApprovalChoice, className, ...props }) {
|
|
101
94
|
const parts = message.parts ??
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-thread.d.ts","sourceRoot":"","sources":["../../src/components/agent-thread.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"agent-thread.d.ts","sourceRoot":"","sources":["../../src/components/agent-thread.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EACL,YAAY,EAEb,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,gCAAgC,EACrC,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAA;AAMnC,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,CAAA;AAsCD,iBAAS,sBAAsB,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,WAAW,EACX,OAAO,GACR,EAAE,oBAAoB,GAAG;IACxB,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,CAAA;CACjD,qBAcA;AAED,iBAAS,qBAAqB,CAAC,EAC7B,KAAK,EACL,WAAW,EACX,OAAO,GACR,EAAE,oBAAoB,qBAYtB;AAiBD,iBAAS,WAAW,CAAC,EACnB,QAAQ,EACR,KAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,WAA2C,EAC3C,SAAS,EACT,gBAAgB,EAChB,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,EAAE,UAAU,CAAC,GAAG;IAC/D,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IAC7B,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAA;IAClF,UAAU,CAAC,EAAE,oBAAoB,CAAA;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IAC7C,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,oBAAoB,CAAC,EAAE,gCAAgC,CAAA;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,qBAqDA;AAED,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,CAAA"}
|
|
@@ -1,52 +1,45 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { AlertTriangleIcon, ClockIcon, FileWarningIcon, LoaderCircleIcon, RefreshCwIcon, ShieldXIcon, } from "lucide-react";
|
|
4
3
|
import { Conversation, ConversationContent, } from "./ai-elements/conversation.js";
|
|
5
4
|
import { AgentMessage, } from "./agent-message.js";
|
|
6
5
|
import { FeedbackState } from "./feedback-state.js";
|
|
6
|
+
import { StateNotice } from "./state-notice.js";
|
|
7
|
+
import { statePresentation } from "../lib/agent-work-state.js";
|
|
7
8
|
import { cn } from "../lib/utils.js";
|
|
8
9
|
const threadStateDefaults = {
|
|
9
10
|
empty: {
|
|
10
11
|
description: "Start with a prompt or queue an agent task.",
|
|
11
|
-
icon: ClockIcon,
|
|
12
12
|
title: "No agent messages",
|
|
13
13
|
},
|
|
14
14
|
fatal: {
|
|
15
15
|
description: "The consuming app should show its recovery action here.",
|
|
16
|
-
icon: FileWarningIcon,
|
|
17
16
|
title: "Unable to continue",
|
|
18
17
|
},
|
|
19
18
|
interrupted: {
|
|
20
19
|
description: "The current run stopped before the agent finished.",
|
|
21
|
-
icon: AlertTriangleIcon,
|
|
22
20
|
title: "Run interrupted",
|
|
23
21
|
},
|
|
24
22
|
"permission-denied": {
|
|
25
23
|
description: "This session cannot access the requested action or content.",
|
|
26
|
-
icon: ShieldXIcon,
|
|
27
24
|
title: "Permission denied",
|
|
28
25
|
},
|
|
29
26
|
queued: {
|
|
30
27
|
description: "The next agent step is waiting for capacity or approval.",
|
|
31
|
-
icon: ClockIcon,
|
|
32
28
|
title: "Queued",
|
|
33
29
|
},
|
|
34
30
|
retryable: {
|
|
35
31
|
description: "The run can be attempted again by the consuming app.",
|
|
36
|
-
icon: RefreshCwIcon,
|
|
37
32
|
title: "Retry available",
|
|
38
33
|
},
|
|
39
34
|
streaming: {
|
|
40
35
|
description: "The assistant is preparing a response.",
|
|
41
|
-
icon: LoaderCircleIcon,
|
|
42
36
|
title: "Streaming",
|
|
43
37
|
},
|
|
44
38
|
};
|
|
45
39
|
const defaultMaxAgentThreadMessages = 50;
|
|
46
40
|
function AgentThreadStateBanner({ state, title, description, actions, }) {
|
|
47
41
|
const fallback = threadStateDefaults[state];
|
|
48
|
-
|
|
49
|
-
return (_jsxs("div", { "data-slot": "agent-thread-state", "data-agent-state": state, role: state === "fatal" || state === "permission-denied" ? "alert" : "status", className: "flex flex-wrap items-center gap-3 rounded-lg border bg-muted/30 px-4 py-3 text-sm", children: [_jsx(Icon, { className: cn("size-4 text-muted-foreground", state === "streaming" && "animate-spin") }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "font-medium", children: title ?? fallback.title }), _jsx("div", { className: "text-muted-foreground", children: description ?? fallback.description })] }), actions] }));
|
|
42
|
+
return (_jsx(StateNotice, { "data-slot": "agent-thread-state", state: state, icon: statePresentation(state).icon, title: title ?? fallback.title, description: description ?? fallback.description, actions: actions, className: "rounded-lg px-4 py-3" }));
|
|
50
43
|
}
|
|
51
44
|
function AgentThreadEmptyState({ title, description, actions, }) {
|
|
52
45
|
return (_jsx(FeedbackState, { "data-slot": "agent-thread-empty-state", status: "empty", title: title ?? threadStateDefaults.empty.title, description: description ?? threadStateDefaults.empty.description, actions: actions, compact: true, className: "min-h-56 rounded-lg bg-muted/20" }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-in-chat.d.ts","sourceRoot":"","sources":["../../../src/components/ai-elements/open-in-chat.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAOpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAiK5C,MAAM,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,YAAY,CAAC,GAAG;IAC9D,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,qBAAqB,WAAW,gCAQtD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAE5E,eAAO,MAAM,aAAa,GAAI,yBAAyB,kBAAkB,gCAMxE,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEtE,eAAO,MAAM,UAAU,GAAI,OAAO,eAAe,gCAEhD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAExE,eAAO,MAAM,WAAW,GAAI,OAAO,gBAAgB,gCAElD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEhF,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,gCAE1D,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAE5E,eAAO,MAAM,aAAa,GAAI,wBAAwB,kBAAkB,gCASvE,CAAC;
|
|
1
|
+
{"version":3,"file":"open-in-chat.d.ts","sourceRoot":"","sources":["../../../src/components/ai-elements/open-in-chat.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AAOpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAiK5C,MAAM,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,YAAY,CAAC,GAAG;IAC9D,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,qBAAqB,WAAW,gCAQtD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAE5E,eAAO,MAAM,aAAa,GAAI,yBAAyB,kBAAkB,gCAMxE,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEtE,eAAO,MAAM,UAAU,GAAI,OAAO,eAAe,gCAEhD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAExE,eAAO,MAAM,WAAW,GAAI,OAAO,gBAAgB,gCAElD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,cAAc,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEhF,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,gCAE1D,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAE5E,eAAO,MAAM,aAAa,GAAI,wBAAwB,kBAAkB,gCASvE,CAAC;AAyBF,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEzE,eAAO,MAAM,aAAa,GAAI,OAAO,kBAAkB,gCAEtD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAExE,eAAO,MAAM,YAAY,GAAI,OAAO,iBAAiB,gCAEpD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEpE,eAAO,MAAM,QAAQ,GAAI,OAAO,aAAa,gCAE5C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEvE,eAAO,MAAM,WAAW,GAAI,OAAO,gBAAgB,gCAElD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAExE,eAAO,MAAM,YAAY,GAAI,OAAO,iBAAiB,gCAEpD,CAAC"}
|
|
@@ -67,23 +67,12 @@ export const OpenInItem = (props) => (_jsx(DropdownMenuItem, { ...props }));
|
|
|
67
67
|
export const OpenInLabel = (props) => (_jsx(DropdownMenuLabel, { ...props }));
|
|
68
68
|
export const OpenInSeparator = (props) => (_jsx(DropdownMenuSeparator, { ...props }));
|
|
69
69
|
export const OpenInTrigger = ({ children, ...props }) => (_jsx(DropdownMenuTrigger, { ...props, asChild: true, children: children ?? (_jsxs(Button, { type: "button", variant: "outline", children: ["Open in chat", _jsx(ChevronDownIcon, { className: "size-4" })] })) }));
|
|
70
|
-
|
|
70
|
+
const OpenInProviderItem = ({ provider, ...props }) => {
|
|
71
71
|
const { query } = useOpenInContext();
|
|
72
|
-
return (_jsx(DropdownMenuItem, { asChild: true, ...props, children: _jsxs("a", { className: "flex items-center gap-2", href: providers.
|
|
73
|
-
};
|
|
74
|
-
export const OpenInClaude = (props) => {
|
|
75
|
-
const { query } = useOpenInContext();
|
|
76
|
-
return (_jsx(DropdownMenuItem, { asChild: true, ...props, children: _jsxs("a", { className: "flex items-center gap-2", href: providers.claude.createUrl(query), rel: "noopener", target: "_blank", children: [_jsx("span", { className: "shrink-0", children: providers.claude.icon }), _jsx("span", { className: "flex-1", children: providers.claude.title }), _jsx(ExternalLinkIcon, { className: "size-4 shrink-0" })] }) }));
|
|
77
|
-
};
|
|
78
|
-
export const OpenInT3 = (props) => {
|
|
79
|
-
const { query } = useOpenInContext();
|
|
80
|
-
return (_jsx(DropdownMenuItem, { asChild: true, ...props, children: _jsxs("a", { className: "flex items-center gap-2", href: providers.t3.createUrl(query), rel: "noopener", target: "_blank", children: [_jsx("span", { className: "shrink-0", children: providers.t3.icon }), _jsx("span", { className: "flex-1", children: providers.t3.title }), _jsx(ExternalLinkIcon, { className: "size-4 shrink-0" })] }) }));
|
|
81
|
-
};
|
|
82
|
-
export const OpenInScira = (props) => {
|
|
83
|
-
const { query } = useOpenInContext();
|
|
84
|
-
return (_jsx(DropdownMenuItem, { asChild: true, ...props, children: _jsxs("a", { className: "flex items-center gap-2", href: providers.scira.createUrl(query), rel: "noopener", target: "_blank", children: [_jsx("span", { className: "shrink-0", children: providers.scira.icon }), _jsx("span", { className: "flex-1", children: providers.scira.title }), _jsx(ExternalLinkIcon, { className: "size-4 shrink-0" })] }) }));
|
|
85
|
-
};
|
|
86
|
-
export const OpenInCursor = (props) => {
|
|
87
|
-
const { query } = useOpenInContext();
|
|
88
|
-
return (_jsx(DropdownMenuItem, { asChild: true, ...props, children: _jsxs("a", { className: "flex items-center gap-2", href: providers.cursor.createUrl(query), rel: "noopener", target: "_blank", children: [_jsx("span", { className: "shrink-0", children: providers.cursor.icon }), _jsx("span", { className: "flex-1", children: providers.cursor.title }), _jsx(ExternalLinkIcon, { className: "size-4 shrink-0" })] }) }));
|
|
72
|
+
return (_jsx(DropdownMenuItem, { asChild: true, ...props, children: _jsxs("a", { className: "flex items-center gap-2", href: providers[provider].createUrl(query), rel: "noopener", target: "_blank", children: [_jsx("span", { className: "shrink-0", children: providers[provider].icon }), _jsx("span", { className: "flex-1", children: providers[provider].title }), _jsx(ExternalLinkIcon, { className: "size-4 shrink-0" })] }) }));
|
|
89
73
|
};
|
|
74
|
+
export const OpenInChatGPT = (props) => (_jsx(OpenInProviderItem, { provider: "chatgpt", ...props }));
|
|
75
|
+
export const OpenInClaude = (props) => (_jsx(OpenInProviderItem, { provider: "claude", ...props }));
|
|
76
|
+
export const OpenInT3 = (props) => (_jsx(OpenInProviderItem, { provider: "t3", ...props }));
|
|
77
|
+
export const OpenInScira = (props) => (_jsx(OpenInProviderItem, { provider: "scira", ...props }));
|
|
78
|
+
export const OpenInCursor = (props) => (_jsx(OpenInProviderItem, { provider: "cursor", ...props }));
|
|
@@ -16,7 +16,7 @@ function AlertDialogOverlay({ className, ...props }) {
|
|
|
16
16
|
return (_jsx(AlertDialogPrimitive.Overlay, { "data-slot": "alert-dialog-overlay", className: cn("fixed inset-0 z-50 bg-foreground/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0", className), ...props }));
|
|
17
17
|
}
|
|
18
18
|
function AlertDialogContent({ className, size = "default", ...props }) {
|
|
19
|
-
return (_jsxs(AlertDialogPortal, { children: [_jsx(AlertDialogOverlay, {}), _jsx(AlertDialogPrimitive.Content, { "data-slot": "alert-dialog-content", "data-size": size, className: cn("group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-
|
|
19
|
+
return (_jsxs(AlertDialogPortal, { children: [_jsx(AlertDialogOverlay, {}), _jsx(AlertDialogPrimitive.Content, { "data-slot": "alert-dialog-content", "data-size": size, className: cn("group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-md border bg-background p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg", className), ...props })] }));
|
|
20
20
|
}
|
|
21
21
|
function AlertDialogHeader({ className, ...props }) {
|
|
22
22
|
return (_jsx("div", { "data-slot": "alert-dialog-header", className: cn("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]", className), ...props }));
|
package/dist/components/alert.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cva } from "class-variance-authority";
|
|
3
3
|
import { cn } from "../lib/utils.js";
|
|
4
|
-
const alertVariants = cva("relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-
|
|
4
|
+
const alertVariants = cva("relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-md border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", {
|
|
5
5
|
variants: {
|
|
6
6
|
variant: {
|
|
7
7
|
default: "bg-card text-card-foreground",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"automation-section.d.ts","sourceRoot":"","sources":["../../src/components/automation-section.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"automation-section.d.ts","sourceRoot":"","sources":["../../src/components/automation-section.tsx"],"names":[],"mappings":"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"}
|
|
@@ -8,53 +8,48 @@ import { Input } from "./input.js";
|
|
|
8
8
|
import { Item, ItemActions, ItemContent, ItemDescription, ItemGroup, ItemMedia, ItemTitle, } from "./item.js";
|
|
9
9
|
import { SettingsField, SettingsSection } from "./settings-section.js";
|
|
10
10
|
import { Switch } from "./switch.js";
|
|
11
|
-
const
|
|
12
|
-
ready:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
const automationStatusMeta = {
|
|
12
|
+
ready: {
|
|
13
|
+
label: "Ready",
|
|
14
|
+
variant: "secondary",
|
|
15
|
+
icon: _jsx(CheckCircleIcon, { className: "size-4" }),
|
|
16
|
+
},
|
|
17
|
+
running: {
|
|
18
|
+
label: "Running",
|
|
19
|
+
variant: "default",
|
|
20
|
+
icon: _jsx(LoaderCircleIcon, { className: "size-4 animate-spin" }),
|
|
21
|
+
},
|
|
22
|
+
paused: {
|
|
23
|
+
label: "Paused",
|
|
24
|
+
variant: "outline",
|
|
25
|
+
icon: _jsx(PauseCircleIcon, { className: "size-4" }),
|
|
26
|
+
},
|
|
27
|
+
error: {
|
|
28
|
+
label: "Needs review",
|
|
29
|
+
variant: "destructive",
|
|
30
|
+
icon: _jsx(AlertTriangleIcon, { className: "size-4" }),
|
|
31
|
+
},
|
|
32
|
+
disabled: {
|
|
33
|
+
label: "Disabled",
|
|
34
|
+
variant: "outline",
|
|
35
|
+
icon: _jsx(PauseCircleIcon, { className: "size-4" }),
|
|
36
|
+
},
|
|
17
37
|
};
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
disabled: "outline",
|
|
38
|
+
const mcpStatusMeta = {
|
|
39
|
+
connected: { label: "Connected", variant: "secondary" },
|
|
40
|
+
review: { label: "Review", variant: "outline" },
|
|
41
|
+
error: { label: "Error", variant: "destructive" },
|
|
42
|
+
disabled: { label: "Disabled", variant: "outline" },
|
|
24
43
|
};
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
error: _jsx(AlertTriangleIcon, { className: "size-4" }),
|
|
30
|
-
disabled: _jsx(PauseCircleIcon, { className: "size-4" }),
|
|
31
|
-
};
|
|
32
|
-
const mcpStatusLabels = {
|
|
33
|
-
connected: "Connected",
|
|
34
|
-
review: "Review",
|
|
35
|
-
error: "Error",
|
|
36
|
-
disabled: "Disabled",
|
|
37
|
-
};
|
|
38
|
-
const mcpStatusVariants = {
|
|
39
|
-
connected: "secondary",
|
|
40
|
-
review: "outline",
|
|
41
|
-
error: "destructive",
|
|
42
|
-
disabled: "outline",
|
|
43
|
-
};
|
|
44
|
-
const environmentStateLabels = {
|
|
45
|
-
configured: "Configured",
|
|
46
|
-
missing: "Missing",
|
|
47
|
-
invalid: "Needs review",
|
|
48
|
-
};
|
|
49
|
-
const environmentStateVariants = {
|
|
50
|
-
configured: "secondary",
|
|
51
|
-
missing: "outline",
|
|
52
|
-
invalid: "destructive",
|
|
44
|
+
const environmentStateMeta = {
|
|
45
|
+
configured: { label: "Configured", variant: "secondary" },
|
|
46
|
+
missing: { label: "Missing", variant: "outline" },
|
|
47
|
+
invalid: { label: "Needs review", variant: "destructive" },
|
|
53
48
|
};
|
|
54
49
|
function AutomationSection({ title, description, actions, automations = [], emptyTitle = "No automations configured", emptyDescription = "Add automation rows from the consuming app when there is work to run.", onAutomationEnabledChange, children, className, ...props }) {
|
|
55
50
|
return (_jsxs("section", { "data-slot": "automation-section", className: cn("grid gap-5 rounded-lg border bg-background p-5", className), ...props, children: [(title || description || actions) && (_jsxs("div", { "data-slot": "automation-section-header", className: "flex flex-wrap items-start justify-between gap-3", children: [_jsxs("div", { className: "grid gap-1", children: [title && (_jsx("h2", { "data-slot": "automation-section-title", className: "text-base font-semibold", children: title })), description && (_jsx("p", { "data-slot": "automation-section-description", className: "text-sm text-muted-foreground", children: description }))] }), actions && (_jsx("div", { "data-slot": "automation-section-actions", children: actions }))] })), automations.length > 0 ? (_jsx(ItemGroup, { "data-slot": "automation-section-items", className: "gap-2", children: automations.map((automation) => {
|
|
56
51
|
const status = automation.status ?? "ready";
|
|
57
|
-
return (_jsxs(Item, { "data-slot": "automation-section-item", "data-status": status, "data-enabled": automation.enabled, "data-disabled": automation.disabled ? true : undefined, variant: "outline", children: [_jsx(ItemMedia, { variant: "icon", "aria-hidden": "true", children:
|
|
52
|
+
return (_jsxs(Item, { "data-slot": "automation-section-item", "data-status": status, "data-enabled": automation.enabled, "data-disabled": automation.disabled ? true : undefined, variant: "outline", children: [_jsx(ItemMedia, { variant: "icon", "aria-hidden": "true", children: automationStatusMeta[status].icon }), _jsxs(ItemContent, { children: [_jsx(ItemTitle, { children: automation.title }), automation.description && (_jsx(ItemDescription, { children: automation.description })), automation.meta && (_jsx("div", { className: "text-sm text-muted-foreground", children: automation.meta }))] }), _jsxs(ItemActions, { children: [_jsx(Badge, { variant: automationStatusMeta[status].variant, children: automationStatusMeta[status].label }), _jsx(Switch, { "aria-label": automation.toggleLabel ?? "Toggle automation", checked: Boolean(automation.enabled), disabled: automation.disabled, onCheckedChange: (enabled) => onAutomationEnabledChange?.(automation.id, enabled) }), automation.actions] })] }, automation.id));
|
|
58
53
|
}) })) : (_jsx(FeedbackState, { "data-slot": "automation-section-empty", status: "empty", title: emptyTitle, description: emptyDescription, compact: true, className: "rounded-md" })), children] }));
|
|
59
54
|
}
|
|
60
55
|
function renderAutomationSettingsField(field) {
|
|
@@ -67,14 +62,14 @@ function ProviderSettings({ fields, title = "Provider settings", description = "
|
|
|
67
62
|
function McpServerSettings({ servers, title = "MCP servers", description = "Server availability and permission state are controlled by the consuming app.", onServerEnabledChange, ...props }) {
|
|
68
63
|
return (_jsx("div", { "data-slot": "mcp-server-settings", children: _jsx(SettingsSection, { title: title, description: description, ...props, children: servers.map((server) => {
|
|
69
64
|
const status = server.status ?? "review";
|
|
70
|
-
return (_jsx(SettingsField, { id: server.id, label: server.label, description: server.description, error: server.error, invalid: status === "error" || Boolean(server.error), disabled: server.disabled, controlClassName: "gap-2", children: ({ controlProps }) => (_jsxs(_Fragment, { children: [_jsx(Badge, { variant:
|
|
65
|
+
return (_jsx(SettingsField, { id: server.id, label: server.label, description: server.description, error: server.error, invalid: status === "error" || Boolean(server.error), disabled: server.disabled, controlClassName: "gap-2", children: ({ controlProps }) => (_jsxs(_Fragment, { children: [_jsx(Badge, { variant: mcpStatusMeta[status].variant, children: mcpStatusMeta[status].label }), _jsx(Switch, { ...controlProps, checked: Boolean(server.enabled), onCheckedChange: (enabled) => onServerEnabledChange?.(server.id, enabled) }), server.actions] })) }, server.id));
|
|
71
66
|
}) }) }));
|
|
72
67
|
}
|
|
73
68
|
function EnvironmentVariablesSettings({ variables, title = "Environment variables", description = "Only variable names and redacted state are shown here.", ...props }) {
|
|
74
69
|
return (_jsx("div", { "data-slot": "environment-variables-settings", children: _jsx(SettingsSection, { title: title, description: description, ...props, children: variables.map((variable) => {
|
|
75
70
|
const state = variable.state ?? "missing";
|
|
76
71
|
const valueLabel = state === "configured" ? "Value redacted" : "No value shown";
|
|
77
|
-
return (_jsx(SettingsField, { id: variable.id, label: variable.name, description: variable.description, error: variable.error, invalid: state === "invalid" || Boolean(variable.error), required: variable.required, controlClassName: "gap-2", children: ({ controlProps }) => (_jsxs(_Fragment, { children: [_jsx(Input, { ...controlProps, value: valueLabel, readOnly: true, "aria-label": `${variable.name} redacted value state` }), _jsx(Badge, { variant:
|
|
72
|
+
return (_jsx(SettingsField, { id: variable.id, label: variable.name, description: variable.description, error: variable.error, invalid: state === "invalid" || Boolean(variable.error), required: variable.required, controlClassName: "gap-2", children: ({ controlProps }) => (_jsxs(_Fragment, { children: [_jsx(Input, { ...controlProps, value: valueLabel, readOnly: true, "aria-label": `${variable.name} redacted value state` }), _jsx(Badge, { variant: environmentStateMeta[state].variant, children: environmentStateMeta[state].label }), variable.actions] })) }, variable.id));
|
|
78
73
|
}) }) }));
|
|
79
74
|
}
|
|
80
75
|
export { AutomationSection, EnvironmentVariablesSettings, McpServerSettings, ProviderSettings, };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Bento, BentoItem } from "./bento.js";
|
|
3
3
|
function BenefitsBento({ kicker, title, body, image, benefits, ...props }) {
|
|
4
|
-
return (_jsx("div", { "data-slot": "benefits-bento", ...props, children: _jsxs(Bento, { columns: 2, children: [_jsx(BentoItem, { flush: true, stretch: true, children: image }), _jsxs(BentoItem, { children: [_jsx("p", { className: "nc-type-caption-mono text-muted-foreground uppercase", children: kicker }), _jsx("h2", { className: "nc-type-title-md text-foreground", children: title }), _jsx("p", { className: "nc-type-body-md text-
|
|
4
|
+
return (_jsx("div", { "data-slot": "benefits-bento", ...props, children: _jsxs(Bento, { columns: 2, children: [_jsx(BentoItem, { flush: true, stretch: true, children: image }), _jsxs(BentoItem, { children: [_jsx("p", { className: "nc-type-caption-mono text-muted-foreground uppercase", children: kicker }), _jsx("h2", { className: "nc-type-title-md text-foreground", children: title }), _jsx("p", { className: "nc-type-body-md text-[var(--nc-body)]", children: body }), _jsx("div", { className: "grid gap-4 pt-2 sm:grid-cols-2", children: benefits.map((benefit) => (_jsxs("div", { className: "grid gap-1", children: [_jsx("h3", { className: "nc-type-body-md-strong text-foreground", children: benefit.title }), _jsx("p", { className: "nc-type-body-sm text-[var(--nc-body)]", children: benefit.body })] }, benefit.title))) })] })] }) }));
|
|
5
5
|
}
|
|
6
6
|
export { BenefitsBento };
|
|
@@ -3,8 +3,8 @@ import * as React from "react";
|
|
|
3
3
|
* bento — NadicodeAI's bordered marketing grid grammar.
|
|
4
4
|
*
|
|
5
5
|
* This is the reusable shadcn-style source component for bento sections. The
|
|
6
|
-
* grid owns seams once (`gap-px bg-border
|
|
7
|
-
* choose content and spans, not border math.
|
|
6
|
+
* grid owns seams once (`gap-px bg-border`, via `SeamGrid` with no `surface`);
|
|
7
|
+
* cells are borderless fills. Pages choose content and spans, not border math.
|
|
8
8
|
*/
|
|
9
9
|
declare const spanClasses: Record<number, string>;
|
|
10
10
|
declare const columnClasses: Record<number, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bento.d.ts","sourceRoot":"","sources":["../../src/components/bento.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"bento.d.ts","sourceRoot":"","sources":["../../src/components/bento.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B;;;;;;GAMG;AAEH,QAAA,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAavC,CAAA;AAED,QAAA,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKzC,CAAA;AAED,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,MAAe,EACf,OAAY,EACZ,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAA;IACzC,OAAO,CAAC,EAAE,MAAM,OAAO,aAAa,CAAA;CACrC,qBAeA;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,IAAI,EACJ,OAAgB,EAChB,KAAa,EACb,OAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,IAAI,CAAC,EAAE,MAAM,OAAO,WAAW,CAAA;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAA;IACzC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,qBAiBA;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQtE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQvE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQtE;AAED,iBAAS,YAAY,CAAC,EACpB,KAAK,EACL,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,qBAgBlD;AAED,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/components/bento.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
|
+
import { SeamGrid } from "./seam-grid.js";
|
|
3
4
|
/**
|
|
4
5
|
* bento — NadicodeAI's bordered marketing grid grammar.
|
|
5
6
|
*
|
|
6
7
|
* This is the reusable shadcn-style source component for bento sections. The
|
|
7
|
-
* grid owns seams once (`gap-px bg-border
|
|
8
|
-
* choose content and spans, not border math.
|
|
8
|
+
* grid owns seams once (`gap-px bg-border`, via `SeamGrid` with no `surface`);
|
|
9
|
+
* cells are borderless fills. Pages choose content and spans, not border math.
|
|
9
10
|
*/
|
|
10
11
|
const spanClasses = {
|
|
11
12
|
1: "lg:col-span-1",
|
|
@@ -28,7 +29,7 @@ const columnClasses = {
|
|
|
28
29
|
12: "grid-cols-1 lg:grid-cols-12",
|
|
29
30
|
};
|
|
30
31
|
function Bento({ className, height = "auto", columns = 12, ...props }) {
|
|
31
|
-
return (_jsx(
|
|
32
|
+
return (_jsx(SeamGrid, { "data-slot": "bento", "data-height": height, className: cn("items-stretch", columnClasses[columns], height === "primary" && "lg:h-[var(--nc-h-bento-primary)]", height === "secondary" && "lg:h-[var(--nc-h-bento-secondary)]", className), ...props }));
|
|
32
33
|
}
|
|
33
34
|
function BentoItem({ className, span, surface = "card", flush = false, stretch = false, ...props }) {
|
|
34
35
|
return (_jsx("div", { "data-slot": "bento-item", "data-surface": surface, className: cn("nc-panel-cell relative min-w-0 overflow-hidden", span ? spanClasses[span] : null, surface === "card" && "bg-card", surface === "soft" && "bg-[var(--nc-canvas-soft)]", flush && "!p-0", stretch && "items-stretch ![align-content:stretch] ![grid-template-rows:minmax(0,1fr)]", className), ...props }));
|
|
@@ -3,7 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { cva } from "class-variance-authority";
|
|
4
4
|
import { Slot } from "radix-ui";
|
|
5
5
|
import { cn } from "../lib/utils.js";
|
|
6
|
-
const buttonVariants = cva("inline-flex shrink-0 items-center justify-center gap-2 rounded-
|
|
6
|
+
const buttonVariants = cva("inline-flex shrink-0 items-center justify-center gap-2 rounded-sm text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
|
|
7
7
|
variants: {
|
|
8
8
|
variant: {
|
|
9
9
|
default: "bg-primary text-primary-foreground hover:bg-primary/90",
|
|
@@ -15,11 +15,11 @@ const buttonVariants = cva("inline-flex shrink-0 items-center justify-center gap
|
|
|
15
15
|
},
|
|
16
16
|
size: {
|
|
17
17
|
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
18
|
-
xs: "h-6 gap-1 rounded-
|
|
19
|
-
sm: "h-8 gap-1.5 rounded-
|
|
20
|
-
lg: "h-10 rounded-
|
|
18
|
+
xs: "h-6 gap-1 rounded-sm px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
|
|
19
|
+
sm: "h-8 gap-1.5 rounded-sm px-3 has-[>svg]:px-2.5",
|
|
20
|
+
lg: "h-10 rounded-sm px-6 has-[>svg]:px-4",
|
|
21
21
|
icon: "size-9",
|
|
22
|
-
"icon-xs": "size-6 rounded-
|
|
22
|
+
"icon-xs": "size-6 rounded-sm [&_svg:not([class*='size-'])]:size-3",
|
|
23
23
|
"icon-sm": "size-8",
|
|
24
24
|
"icon-lg": "size-10",
|
|
25
25
|
},
|
package/dist/components/card.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
3
|
function Card({ className, ...props }) {
|
|
4
|
-
return (_jsx("div", { "data-slot": "card", className: cn("flex flex-col gap-6 rounded-
|
|
4
|
+
return (_jsx("div", { "data-slot": "card", className: cn("flex flex-col gap-6 rounded-md border bg-card py-6 text-card-foreground shadow-sm", className), ...props }));
|
|
5
5
|
}
|
|
6
6
|
function CardHeader({ className, ...props }) {
|
|
7
7
|
return (_jsx("div", { "data-slot": "card-header", className: cn("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6", className), ...props }));
|
|
@@ -9,6 +9,7 @@ type DemoSurfaceScript = {
|
|
|
9
9
|
agent: string;
|
|
10
10
|
traces: string[];
|
|
11
11
|
artifactKind: string;
|
|
12
|
+
artifactKindLabel?: string;
|
|
12
13
|
artifactTitle: string;
|
|
13
14
|
artifactBody: string;
|
|
14
15
|
approvalTitle: string;
|
|
@@ -16,11 +17,18 @@ type DemoSurfaceScript = {
|
|
|
16
17
|
usage: string;
|
|
17
18
|
steps: string;
|
|
18
19
|
};
|
|
19
|
-
|
|
20
|
+
type DemoSurfaceLabels = {
|
|
21
|
+
approvalLabel: string;
|
|
22
|
+
approveAction: string;
|
|
23
|
+
editAction: string;
|
|
24
|
+
liveDemoLabel: string;
|
|
25
|
+
};
|
|
26
|
+
declare function DemoSurface({ script, title, className, children, autoplay, labels, ...props }: React.ComponentProps<"div"> & {
|
|
20
27
|
script?: DemoSurfaceScript;
|
|
21
28
|
title?: string;
|
|
22
29
|
autoplay?: boolean;
|
|
30
|
+
labels?: Partial<DemoSurfaceLabels>;
|
|
23
31
|
}): React.JSX.Element;
|
|
24
32
|
export { DemoSurface };
|
|
25
|
-
export type { DemoSurfaceScript };
|
|
33
|
+
export type { DemoSurfaceLabels, DemoSurfaceScript };
|
|
26
34
|
//# sourceMappingURL=demo-surface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demo-surface.d.ts","sourceRoot":"","sources":["../../src/components/demo-surface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,KAAK,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;AAE7D,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,UAAU,GAAG,MAAM,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;
|
|
1
|
+
{"version":3,"file":"demo-surface.d.ts","sourceRoot":"","sources":["../../src/components/demo-surface.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,KAAK,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;AAE7D,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,UAAU,GAAG,MAAM,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAeD,iBAAS,WAAW,CAAC,EACnB,MAAM,EACN,KAAe,EACf,SAAS,EACT,QAAQ,EACR,QAAe,EACf,MAAM,EACN,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;CACpC,qBAoGA;AAED,OAAO,EAAE,WAAW,EAAE,CAAA;AACtB,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAA"}
|