@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.
Files changed (72) hide show
  1. package/AGENTS.md +2 -0
  2. package/README.md +29 -0
  3. package/dist/components/action-band.d.ts.map +1 -1
  4. package/dist/components/action-band.js +2 -1
  5. package/dist/components/agent-message.d.ts +2 -1
  6. package/dist/components/agent-message.d.ts.map +1 -1
  7. package/dist/components/agent-message.js +14 -21
  8. package/dist/components/agent-thread.d.ts.map +1 -1
  9. package/dist/components/agent-thread.js +3 -10
  10. package/dist/components/ai-elements/open-in-chat.d.ts.map +1 -1
  11. package/dist/components/ai-elements/open-in-chat.js +7 -18
  12. package/dist/components/alert-dialog.js +1 -1
  13. package/dist/components/alert.js +1 -1
  14. package/dist/components/automation-section.d.ts.map +1 -1
  15. package/dist/components/automation-section.js +38 -43
  16. package/dist/components/benefits-bento.js +1 -1
  17. package/dist/components/bento.d.ts +2 -2
  18. package/dist/components/bento.d.ts.map +1 -1
  19. package/dist/components/bento.js +4 -3
  20. package/dist/components/button.js +5 -5
  21. package/dist/components/card.js +1 -1
  22. package/dist/components/demo-surface.d.ts +10 -2
  23. package/dist/components/demo-surface.d.ts.map +1 -1
  24. package/dist/components/demo-surface.js +9 -2
  25. package/dist/components/dialog.js +1 -1
  26. package/dist/components/faq.d.ts +6 -5
  27. package/dist/components/faq.d.ts.map +1 -1
  28. package/dist/components/faq.js +8 -6
  29. package/dist/components/files-preview.d.ts.map +1 -1
  30. package/dist/components/files-preview.js +8 -17
  31. package/dist/components/hero-split.d.ts.map +1 -1
  32. package/dist/components/hero-split.js +3 -2
  33. package/dist/components/input.js +1 -1
  34. package/dist/components/installer-shell.d.ts.map +1 -1
  35. package/dist/components/installer-shell.js +9 -12
  36. package/dist/components/logo-band.d.ts.map +1 -1
  37. package/dist/components/logo-band.js +2 -3
  38. package/dist/components/pricing.d.ts.map +1 -1
  39. package/dist/components/pricing.js +5 -3
  40. package/dist/components/seam-grid.d.ts +30 -0
  41. package/dist/components/seam-grid.d.ts.map +1 -0
  42. package/dist/components/seam-grid.js +30 -0
  43. package/dist/components/section-intro.js +1 -1
  44. package/dist/components/select.js +1 -1
  45. package/dist/components/shift-band.d.ts.map +1 -1
  46. package/dist/components/shift-band.js +2 -1
  47. package/dist/components/state-notice.d.ts +13 -0
  48. package/dist/components/state-notice.d.ts.map +1 -0
  49. package/dist/components/state-notice.js +8 -0
  50. package/dist/components/stats-band.d.ts.map +1 -1
  51. package/dist/components/stats-band.js +4 -5
  52. package/dist/components/testimonials.d.ts.map +1 -1
  53. package/dist/components/testimonials.js +3 -4
  54. package/dist/components/textarea.js +1 -1
  55. package/dist/components/use-case-bento.d.ts +4 -2
  56. package/dist/components/use-case-bento.d.ts.map +1 -1
  57. package/dist/components/use-case-bento.js +3 -3
  58. package/dist/components/watch-it-work-band.d.ts +3 -2
  59. package/dist/components/watch-it-work-band.d.ts.map +1 -1
  60. package/dist/components/watch-it-work-band.js +4 -4
  61. package/dist/index.d.ts +2 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +2 -0
  64. package/dist/lib/agent-work-state.d.ts +36 -0
  65. package/dist/lib/agent-work-state.d.ts.map +1 -0
  66. package/dist/lib/agent-work-state.js +36 -0
  67. package/dist/lib/seam.d.ts +29 -0
  68. package/dist/lib/seam.d.ts.map +1 -0
  69. package/dist/lib/seam.js +30 -0
  70. package/dist/styles/globals.css +46 -36
  71. package/docs/agents/nadicodeai-ui.md +22 -0
  72. 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;AAsC9B,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
+ {"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("div", { "data-slot": "action-band-content", className: cn("grid min-w-0 gap-px bg-border lg:h-[var(--nc-h-action-band)] lg:grid-cols-12", className), ...props }));
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 = "idle" | "empty" | "queued" | "streaming" | "interrupted" | "retryable" | "permission-denied" | "fatal";
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;AA4C9B,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAA;AAKzC,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;AAE9D,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,OAAO,GACP,QAAQ,GACR,WAAW,GACX,aAAa,GACb,WAAW,GACX,mBAAmB,GACnB,OAAO,CAAA;AAEX,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;AA4CD,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,qBAyBA;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
+ {"version":3,"file":"agent-message.d.ts","sourceRoot":"","sources":["../../src/components/agent-message.tsx"],"names":[],"mappings":"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"}
@@ -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 { AlertTriangleIcon, BotIcon, ClockIcon, FileWarningIcon, InfoIcon, LoaderCircleIcon, RefreshCwIcon, ShieldXIcon, UserIcon, } from "lucide-react";
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 stateLabels = {
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
- const Icon = stateIcons[state];
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: stateLabels[state] }))] }));
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;AAU9B,OAAO,EACL,YAAY,EAEb,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,gCAAgC,EACrC,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAA;AAInC,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;AA8CD,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,qBA0BA;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
+ {"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
- const Icon = fallback.icon;
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;AAEF,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEzE,eAAO,MAAM,aAAa,GAAI,OAAO,kBAAkB,gCAgBtD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAExE,eAAO,MAAM,YAAY,GAAI,OAAO,iBAAiB,gCAgBpD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEpE,eAAO,MAAM,QAAQ,GAAI,OAAO,aAAa,gCAgB5C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEvE,eAAO,MAAM,WAAW,GAAI,OAAO,gBAAgB,gCAgBlD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAExE,eAAO,MAAM,YAAY,GAAI,OAAO,iBAAiB,gCAgBpD,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
- export const OpenInChatGPT = (props) => {
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.chatgpt.createUrl(query), rel: "noopener", target: "_blank", children: [_jsx("span", { className: "shrink-0", children: providers.chatgpt.icon }), _jsx("span", { className: "flex-1", children: providers.chatgpt.title }), _jsx(ExternalLinkIcon, { className: "size-4 shrink-0" })] }) }));
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-lg 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 })] }));
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 }));
@@ -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-lg 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", {
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 automationStatusLabels = {
12
- ready: "Ready",
13
- running: "Running",
14
- paused: "Paused",
15
- error: "Needs review",
16
- disabled: "Disabled",
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 automationStatusVariants = {
19
- ready: "secondary",
20
- running: "default",
21
- paused: "outline",
22
- error: "destructive",
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 automationStatusIcons = {
26
- ready: _jsx(CheckCircleIcon, { className: "size-4" }),
27
- running: _jsx(LoaderCircleIcon, { className: "size-4 animate-spin" }),
28
- paused: _jsx(PauseCircleIcon, { className: "size-4" }),
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: automationStatusIcons[status] }), _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: automationStatusVariants[status], children: automationStatusLabels[status] }), _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));
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: mcpStatusVariants[status], children: mcpStatusLabels[status] }), _jsx(Switch, { ...controlProps, checked: Boolean(server.enabled), onCheckedChange: (enabled) => onServerEnabledChange?.(server.id, enabled) }), server.actions] })) }, server.id));
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: environmentStateVariants[state], children: environmentStateLabels[state] }), variable.actions] })) }, variable.id));
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-muted-foreground", 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-muted-foreground", children: benefit.body })] }, benefit.title))) })] })] }) }));
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`); cells are borderless fills. Pages
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;AAI9B;;;;;;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"}
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"}
@@ -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`); cells are borderless fills. Pages
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("div", { "data-slot": "bento", "data-height": height, className: cn("grid items-stretch gap-px bg-border", columnClasses[columns], height === "primary" && "lg:h-[var(--nc-h-bento-primary)]", height === "secondary" && "lg:h-[var(--nc-h-bento-secondary)]", className), ...props }));
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-md 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", {
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-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
19
- sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
20
- lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
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-md [&_svg:not([class*='size-'])]:size-3",
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
  },
@@ -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-xl border bg-card py-6 text-card-foreground shadow-sm", className), ...props }));
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
- declare function DemoSurface({ script, title, className, children, autoplay, ...props }: React.ComponentProps<"div"> & {
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;AAQD,iBAAS,WAAW,CAAC,EACnB,MAAM,EACN,KAAe,EACf,SAAS,EACT,QAAQ,EACR,QAAe,EACf,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;CACnB,qBAgGA;AAED,OAAO,EAAE,WAAW,EAAE,CAAA;AACtB,YAAY,EAAE,iBAAiB,EAAE,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"}