@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
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
|
+
const defaultDemoSurfaceLabels = {
|
|
4
|
+
approvalLabel: "Human approval",
|
|
5
|
+
approveAction: "Approve",
|
|
6
|
+
editAction: "Edit",
|
|
7
|
+
liveDemoLabel: "live demo",
|
|
8
|
+
};
|
|
3
9
|
function delayStep(index) {
|
|
4
10
|
return {
|
|
5
11
|
"--nc-anim-delay": `calc(var(--nc-duration-stagger) * ${index})`,
|
|
6
12
|
};
|
|
7
13
|
}
|
|
8
|
-
function DemoSurface({ script, title = "Nadia", className, children, autoplay = true, ...props }) {
|
|
14
|
+
function DemoSurface({ script, title = "Nadia", className, children, autoplay = true, labels, ...props }) {
|
|
9
15
|
if (!script) {
|
|
10
16
|
return (_jsx("div", { "data-slot": "demo-surface", className: cn("grid min-h-0 bg-card", className), ...props, children: children }));
|
|
11
17
|
}
|
|
12
|
-
|
|
18
|
+
const demoLabels = { ...defaultDemoSurfaceLabels, ...labels };
|
|
19
|
+
return (_jsxs("div", { "data-slot": "demo-surface", className: cn("nc-chat-thread h-[var(--nc-h-bento-mobile-main)] min-h-0 lg:h-full", className), "data-nc-autoplay": autoplay ? "" : undefined, "data-nc-autoplay-name": title, ...props, children: [_jsxs("div", { className: "nc-chat-thread-header", children: [_jsx("span", { className: "nc-agent-avatar", "data-accent": script.accent, "aria-hidden": "true", children: "NA" }), _jsxs("div", { className: "nc-chat-thread-identity", children: [_jsx("div", { className: "nc-chat-thread-domain", children: script.domain }), _jsxs("div", { className: "nc-chat-thread-name", children: [_jsx("span", { children: title }), _jsxs("span", { className: "nc-chat-thread-role", children: ["/ ", script.role] })] })] }), _jsx("span", { className: "nc-chat-thread-workflow", children: script.workflow })] }), _jsxs("div", { className: "nc-chat-thread-body", children: [_jsx("div", { className: "nc-chat-bubble-user nc-anim-msg-in", style: delayStep(0), children: script.user }), _jsx("div", { className: "nc-chat-bubble-agent nc-anim-msg-in", "data-accent": script.accent, style: delayStep(1), children: script.agent }), script.traces.map((trace, index) => (_jsx("div", { className: "nc-tool-call-trace nc-anim-msg-in", style: delayStep(index + 2), children: trace }, trace))), _jsxs("div", { className: "nc-artifact-preview nc-anim-msg-in", "data-kind": script.artifactKind, style: delayStep(5), children: [_jsxs("div", { className: "nc-artifact-preview-header", children: [_jsx("span", { className: "nc-artifact-preview-title", children: script.artifactTitle }), _jsx("span", { className: "nc-artifact-preview-kind", children: script.artifactKindLabel ?? script.artifactKind })] }), _jsx("div", { className: "nc-artifact-preview-body", children: script.artifactBody })] }), _jsxs("div", { className: "nc-approval-gate nc-anim-msg-in", style: delayStep(6), children: [_jsx("span", { className: "nc-approval-gate-label", children: demoLabels.approvalLabel }), _jsx("span", { className: "nc-approval-gate-title", children: script.approvalTitle }), _jsx("span", { className: "nc-approval-gate-copy", children: script.approvalCopy }), _jsxs("span", { className: "nc-approval-gate-actions", children: [_jsx("button", { type: "button", children: demoLabels.approveAction }), _jsx("button", { type: "button", "data-variant": "secondary", children: demoLabels.editAction })] })] })] }), _jsx("div", { className: "nc-chat-thread-footer", children: _jsxs("div", { className: "nc-usage-meter", children: [_jsxs("div", { className: "nc-usage-meter-meta", children: [_jsx("span", { children: script.role }), _jsx("span", { className: "nc-usage-meter-sep", children: "/" }), _jsx("span", { children: script.steps }), _jsx("span", { className: "nc-usage-meter-spacer" }), _jsx("span", { children: demoLabels.liveDemoLabel })] }), _jsx("div", { className: "nc-usage-meter-track", children: _jsx("div", { className: "nc-usage-meter-fill", style: { "--nc-usage": script.usage } }) })] }) })] }));
|
|
13
20
|
}
|
|
14
21
|
export { DemoSurface };
|
|
@@ -20,7 +20,7 @@ function DialogOverlay({ className, ...props }) {
|
|
|
20
20
|
return (_jsx(DialogPrimitive.Overlay, { "data-slot": "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 }));
|
|
21
21
|
}
|
|
22
22
|
function DialogContent({ className, children, showCloseButton = true, ...props }) {
|
|
23
|
-
return (_jsxs(DialogPortal, { "data-slot": "dialog-portal", children: [_jsx(DialogOverlay, {}), _jsxs(DialogPrimitive.Content, { "data-slot": "dialog-content", className: cn("fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-
|
|
23
|
+
return (_jsxs(DialogPortal, { "data-slot": "dialog-portal", children: [_jsx(DialogOverlay, {}), _jsxs(DialogPrimitive.Content, { "data-slot": "dialog-content", className: cn("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 outline-none 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 sm:max-w-lg", className), ...props, children: [children, showCloseButton && (_jsxs(DialogPrimitive.Close, { "data-slot": "dialog-close", className: "absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", children: [_jsx(XIcon, {}), _jsx("span", { className: "sr-only", children: "Close" })] }))] })] }));
|
|
24
24
|
}
|
|
25
25
|
function DialogHeader({ className, ...props }) {
|
|
26
26
|
return (_jsx("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2 text-center sm:text-left", className), ...props }));
|
package/dist/components/faq.d.ts
CHANGED
|
@@ -3,11 +3,12 @@ import * as React from "react";
|
|
|
3
3
|
* faq — single-column question/answer accordion (replaces the retired
|
|
4
4
|
* `sections/faq.css` + its coupled `faq-item` rows).
|
|
5
5
|
*
|
|
6
|
-
* SINGLE-OWNER SEAM: a single-track gap-as-seam grid (`gap-px bg-border
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* SINGLE-OWNER SEAM: a single-track gap-as-seam grid (`gap-px bg-border`, owned
|
|
7
|
+
* by `SeamGrid` with no `surface`) owns every divider BETWEEN items. Each
|
|
8
|
+
* `FaqItem` is a borderless fill that repairs no inter-item seam; the only
|
|
9
|
+
* hairline an item owns is its internal summary/answer rule (drawn by `FaqItem`,
|
|
10
|
+
* not here). A faq is one column at every breakpoint — no column count, no dark
|
|
11
|
+
* inversion (matching the retired section's variants:none).
|
|
11
12
|
*
|
|
12
13
|
* Token-only; no `dark:` styling.
|
|
13
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"faq.d.ts","sourceRoot":"","sources":["../../src/components/faq.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"faq.d.ts","sourceRoot":"","sources":["../../src/components/faq.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B;;;;;;;;;;;;GAYG;AAEH,iBAAS,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQhE;AAED,OAAO,EAAE,GAAG,EAAE,CAAA"}
|
package/dist/components/faq.js
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
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
|
* faq — single-column question/answer accordion (replaces the retired
|
|
5
6
|
* `sections/faq.css` + its coupled `faq-item` rows).
|
|
6
7
|
*
|
|
7
|
-
* SINGLE-OWNER SEAM: a single-track gap-as-seam grid (`gap-px bg-border
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* SINGLE-OWNER SEAM: a single-track gap-as-seam grid (`gap-px bg-border`, owned
|
|
9
|
+
* by `SeamGrid` with no `surface`) owns every divider BETWEEN items. Each
|
|
10
|
+
* `FaqItem` is a borderless fill that repairs no inter-item seam; the only
|
|
11
|
+
* hairline an item owns is its internal summary/answer rule (drawn by `FaqItem`,
|
|
12
|
+
* not here). A faq is one column at every breakpoint — no column count, no dark
|
|
13
|
+
* inversion (matching the retired section's variants:none).
|
|
12
14
|
*
|
|
13
15
|
* Token-only; no `dark:` styling.
|
|
14
16
|
*/
|
|
15
17
|
function Faq({ className, ...props }) {
|
|
16
|
-
return (_jsx(
|
|
18
|
+
return (_jsx(SeamGrid, { "data-slot": "faq", className: cn("h-full grid-cols-1", className), ...props }));
|
|
17
19
|
}
|
|
18
20
|
export { Faq };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files-preview.d.ts","sourceRoot":"","sources":["../../src/components/files-preview.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAS9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAE5C,OAAO,EACL,QAAQ,EAGT,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAA;AAKpC,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,OAAO,GACP,UAAU,GACV,SAAS,GACT,SAAS,GACT,SAAS,CAAA;AAEb,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IAC1B,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,kBAAkB,CAAA;IAC9B,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;CAC3B,CAAA;
|
|
1
|
+
{"version":3,"file":"files-preview.d.ts","sourceRoot":"","sources":["../../src/components/files-preview.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAS9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAE5C,OAAO,EACL,QAAQ,EAGT,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAA;AAKpC,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,OAAO,GACP,UAAU,GACV,SAAS,GACT,SAAS,GACT,SAAS,CAAA;AAEb,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IAC1B,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,kBAAkB,CAAA;IAC9B,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;CAC3B,CAAA;AA2ED,iBAAS,eAAe,CAAC,EACvB,KAAK,EACL,YAAY,EACZ,oBAAyB,EACzB,aAAa,EACb,qBAAqB,EACrB,YAAY,EACZ,SAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,EAAE,iBAAiB,GAAG,UAAU,GAAG,kBAAkB,GAAG,UAAU,CAAC,GAAG;IACjH,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC/B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACjD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAA;CAC7C,qBAuCA;AA8CD,iBAAS,YAAY,CAAC,EACpB,KAAK,EACL,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,KAAK,EAAE,aAAa,EAAE,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC/B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAA;IAC5C,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,qBAgDA;AAED,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -9,21 +9,12 @@ import { Badge } from "./badge.js";
|
|
|
9
9
|
import { FeedbackState } from "./feedback-state.js";
|
|
10
10
|
import { cn } from "../lib/utils.js";
|
|
11
11
|
const defaultCodeLanguage = "plaintext";
|
|
12
|
-
const
|
|
13
|
-
added: "Added",
|
|
14
|
-
blocked: "Blocked",
|
|
15
|
-
deleted: "Deleted",
|
|
16
|
-
modified: "Modified",
|
|
17
|
-
running: "Running",
|
|
18
|
-
unchanged: "Unchanged",
|
|
19
|
-
};
|
|
20
|
-
const fileStatusIcons = {
|
|
21
|
-
added: CircleCheckIcon,
|
|
22
|
-
blocked: CircleAlertIcon,
|
|
23
|
-
deleted: CircleDashedIcon,
|
|
24
|
-
modified: CircleDotIcon,
|
|
25
|
-
running: CircleDotIcon,
|
|
26
|
-
unchanged: CircleDashedIcon,
|
|
12
|
+
const fileStatusMeta = {
|
|
13
|
+
added: { label: "Added", icon: _jsx(CircleCheckIcon, { className: "size-3" }) },
|
|
14
|
+
blocked: { label: "Blocked", icon: _jsx(CircleAlertIcon, { className: "size-3" }) },
|
|
15
|
+
deleted: { label: "Deleted", icon: _jsx(CircleDashedIcon, { className: "size-3" }) },
|
|
16
|
+
modified: { label: "Modified", icon: _jsx(CircleDotIcon, { className: "size-3" }) },
|
|
17
|
+
running: { label: "Running", icon: _jsx(CircleDotIcon, { className: "size-3" }) },
|
|
27
18
|
};
|
|
28
19
|
function collectNodes(nodes, map = new Map()) {
|
|
29
20
|
for (const node of nodes) {
|
|
@@ -50,8 +41,8 @@ function FileStatusBadge({ status }) {
|
|
|
50
41
|
if (!status || status === "unchanged") {
|
|
51
42
|
return null;
|
|
52
43
|
}
|
|
53
|
-
const
|
|
54
|
-
return (_jsxs(Badge, { "data-slot": "file-status-badge", variant: "outline", className: "gap-1", children: [
|
|
44
|
+
const { icon, label } = fileStatusMeta[status];
|
|
45
|
+
return (_jsxs(Badge, { "data-slot": "file-status-badge", variant: "outline", className: "gap-1", children: [icon, label] }));
|
|
55
46
|
}
|
|
56
47
|
function renderFileNode(node) {
|
|
57
48
|
if (node.type === "directory") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hero-split.d.ts","sourceRoot":"","sources":["../../src/components/hero-split.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"hero-split.d.ts","sourceRoot":"","sources":["../../src/components/hero-split.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B;;;;;;;;;;;;;;;;GAgBG;AAEH,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAYtE;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW1E;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAa5E;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
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
|
* hero-split — the page-opening hero (replaces the retired `sections/hero-split.css`).
|
|
5
6
|
*
|
|
@@ -18,9 +19,9 @@ import { cn } from "../lib/utils.js";
|
|
|
18
19
|
* is the hero's surface, not a padded stamp. Token-only; no `dark:` styling.
|
|
19
20
|
*/
|
|
20
21
|
function HeroSplit({ className, ...props }) {
|
|
21
|
-
return (_jsx(
|
|
22
|
+
return (_jsx(SeamGrid, { "data-slot": "hero-split", className: cn(
|
|
22
23
|
// The panel owns internal seams only; the page/frame/hatch rail owns the perimeter.
|
|
23
|
-
"
|
|
24
|
+
"min-h-[inherit] min-w-0 grid-cols-1 sm:grid-cols-[minmax(0,1fr)_minmax(0,1.5fr)]", className), ...props }));
|
|
24
25
|
}
|
|
25
26
|
function HeroSplitCopy({ className, ...props }) {
|
|
26
27
|
return (_jsx("div", { "data-slot": "hero-split-copy", className: cn("grid min-w-0 content-center gap-4 overflow-hidden bg-card p-[clamp(24px,4vw,56px)]", className), ...props }));
|
package/dist/components/input.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
3
|
function Input({ className, type, ...props }) {
|
|
4
|
-
return (_jsx("input", { type: type, "data-slot": "input", className: cn("h-9 w-full min-w-0 rounded-
|
|
4
|
+
return (_jsx("input", { type: type, "data-slot": "input", className: cn("h-9 w-full min-w-0 rounded-sm border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50", "aria-invalid:border-destructive aria-invalid:ring-destructive/20", className), ...props }));
|
|
5
5
|
}
|
|
6
6
|
export { Input };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer-shell.d.ts","sourceRoot":"","sources":["../../src/components/installer-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAkB9B,KAAK,mBAAmB,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAA;AACzE,KAAK,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAA;AAEvE,KAAK,kBAAkB,GAAG;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,MAAM,CAAC,EAAE,mBAAmB,CAAA;CAC7B,CAAA;AAED,KAAK,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,GAAG;IAC1E,KAAK,EAAE,mBAAmB,CAAA;IAC1B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC5B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;
|
|
1
|
+
{"version":3,"file":"installer-shell.d.ts","sourceRoot":"","sources":["../../src/components/installer-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAkB9B,KAAK,mBAAmB,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAA;AACzE,KAAK,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAA;AAEvE,KAAK,kBAAkB,GAAG;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,MAAM,CAAC,EAAE,mBAAmB,CAAA;CAC7B,CAAA;AAED,KAAK,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,GAAG;IAC1E,KAAK,EAAE,mBAAmB,CAAA;IAC1B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC5B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAwED,iBAAS,cAAc,CAAC,EACtB,KAAK,EACL,KAAK,EACL,WAAW,EACX,aAAa,EACb,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,aAAoC,EACpC,SAAS,EACT,gBAAgB,EAChB,GAAG,KAAK,EACT,EAAE,mBAAmB,qBA2DrB;AAED,OAAO,EAAE,cAAc,EAAE,CAAA;AACzB,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAA"}
|
|
@@ -5,17 +5,14 @@ import { cn } from "../lib/utils.js";
|
|
|
5
5
|
import { Card, CardContent, CardHeader, } from "./card.js";
|
|
6
6
|
import { FeedbackState } from "./feedback-state.js";
|
|
7
7
|
import { Progress } from "./progress.js";
|
|
8
|
-
const
|
|
9
|
-
welcome: "empty",
|
|
10
|
-
progress:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
progress: _jsx(LoaderCircleIcon, { className: "size-5 animate-spin" }),
|
|
17
|
-
success: _jsx(CheckCircleIcon, { className: "size-5" }),
|
|
18
|
-
failure: _jsx(XCircleIcon, { className: "size-5" }),
|
|
8
|
+
const installerStateMeta = {
|
|
9
|
+
welcome: { status: "empty", icon: _jsx(SparklesIcon, { className: "size-5" }) },
|
|
10
|
+
progress: {
|
|
11
|
+
status: "loading",
|
|
12
|
+
icon: _jsx(LoaderCircleIcon, { className: "size-5 animate-spin" }),
|
|
13
|
+
},
|
|
14
|
+
success: { status: "empty", icon: _jsx(CheckCircleIcon, { className: "size-5" }) },
|
|
15
|
+
failure: { status: "error", icon: _jsx(XCircleIcon, { className: "size-5" }) },
|
|
19
16
|
};
|
|
20
17
|
const installerStepIcons = {
|
|
21
18
|
pending: _jsx(CircleIcon, { className: "size-4" }),
|
|
@@ -31,6 +28,6 @@ function InstallerShellStepList({ steps, }) {
|
|
|
31
28
|
}
|
|
32
29
|
function InstallerShell({ state, title, description, progressValue, steps, actions, aside, children, progressLabel = "Installer progress", className, contentClassName, ...props }) {
|
|
33
30
|
const showProgress = state === "progress" && typeof progressValue === "number";
|
|
34
|
-
return (_jsx("section", { "data-slot": "installer-shell", "data-state": state, className: cn("grid min-h-svh place-items-center bg-background p-4 text-foreground md:p-6", className), ...props, children: _jsxs(Card, { className: "w-full max-w-3xl overflow-hidden", children: [_jsx(CardHeader, { children: _jsx(FeedbackState, { "data-slot": "installer-shell-feedback", status:
|
|
31
|
+
return (_jsx("section", { "data-slot": "installer-shell", "data-state": state, className: cn("grid min-h-svh place-items-center bg-background p-4 text-foreground md:p-6", className), ...props, children: _jsxs(Card, { className: "w-full max-w-3xl overflow-hidden", children: [_jsx(CardHeader, { children: _jsx(FeedbackState, { "data-slot": "installer-shell-feedback", status: installerStateMeta[state].status, title: title, description: description, icon: installerStateMeta[state].icon, actions: actions, compact: true, className: "rounded-none border-0 bg-transparent p-0 md:p-0" }) }), _jsxs(CardContent, { "data-slot": "installer-shell-content", className: cn("grid gap-5", contentClassName), children: [showProgress && (_jsxs("div", { "data-slot": "installer-shell-progress", className: "grid gap-2", children: [_jsxs("div", { className: "flex items-center justify-between gap-3 text-sm", children: [_jsx("span", { className: "font-medium", children: progressLabel }), _jsxs("span", { className: "text-muted-foreground", children: [Math.round(progressValue), "%"] })] }), _jsx(Progress, { value: progressValue, "aria-label": progressLabel })] })), steps?.length ? _jsx(InstallerShellStepList, { steps: steps }) : null, children && (_jsx("div", { "data-slot": "installer-shell-primary", className: "min-w-0", children: children })), aside && (_jsx("div", { "data-slot": "installer-shell-aside", className: "rounded-md border bg-muted/30 p-4 text-sm text-muted-foreground", children: aside }))] })] }) }));
|
|
35
32
|
}
|
|
36
33
|
export { InstallerShell };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logo-band.d.ts","sourceRoot":"","sources":["../../src/components/logo-band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"logo-band.d.ts","sourceRoot":"","sources":["../../src/components/logo-band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B;;;;;;;;;;;;;GAaG;AAEH,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,OAAW,EACX,OAAkB,EAClB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3B,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;CAC3B,qBAmBA;AAED,iBAAS,QAAQ,CAAC,EAChB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,qBAEvC;AAED,iBAAS,gBAAgB,CAAC,EACxB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,qBAEvC;AAED,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
|
+
import { seamSurfaceClass } from "../lib/seam.js";
|
|
3
4
|
/**
|
|
4
5
|
* logo-band / integrations-grid — wall of monochrome marks (replaces the retired
|
|
5
6
|
* `sections/logo-band.css` + `sections/integrations-grid.css` + their coupled
|
|
@@ -22,9 +23,7 @@ function LogoGrid({ className, columns = 4, surface = "canvas", ...props }) {
|
|
|
22
23
|
5: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-5",
|
|
23
24
|
6: "grid-cols-2 sm:grid-cols-3 lg:grid-cols-6",
|
|
24
25
|
};
|
|
25
|
-
return (_jsx("div", { className: cn("grid h-full gap-px", cols[columns], surface
|
|
26
|
-
? "bg-[color-mix(in_srgb,var(--nc-line)_40%,var(--nc-ink))]"
|
|
27
|
-
: "bg-border", className), ...props }));
|
|
26
|
+
return (_jsx("div", { className: cn("grid h-full gap-px", cols[columns], seamSurfaceClass(surface), className), ...props }));
|
|
28
27
|
}
|
|
29
28
|
function LogoBand({ ...props }) {
|
|
30
29
|
return _jsx(LogoGrid, { "data-slot": "logo-band", ...props });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/components/pricing.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/components/pricing.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,KAAK,eAAe,GAAG,MAAM,GAAG,UAAU,CAAA;AAE1C,iBAAS,OAAO,CAAC,EACf,SAAS,EACT,OAAW,EACX,QAAiB,EACjB,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACf,QAAQ,CAAC,EAAE,eAAe,CAAA;CAC3B,qBA2CA;AAED,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { cn } from "../lib/utils.js";
|
|
4
|
+
import { SeamGrid } from "./seam-grid.js";
|
|
4
5
|
function Pricing({ className, columns = 3, emphasis = "none", children, ...props }) {
|
|
5
|
-
return (_jsx(
|
|
6
|
-
// gap-as-seam:
|
|
7
|
-
|
|
6
|
+
return (_jsx(SeamGrid, { "data-slot": "pricing", "data-emphasis": emphasis, className: cn(
|
|
7
|
+
// gap-as-seam: SeamGrid (no surface) is the single owner of every divider
|
|
8
|
+
// between tiers (`gap-px bg-border`).
|
|
9
|
+
"h-full", columns === 2
|
|
8
10
|
? "grid-cols-1 sm:grid-cols-2"
|
|
9
11
|
: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
|
|
10
12
|
// the featured card is the rail's positioning context and gets the rail span.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type SeamSurface } from "../lib/seam";
|
|
3
|
+
/**
|
|
4
|
+
* SeamGrid is the single owner of the "gap-as-seam" grid mechanics shared by the
|
|
5
|
+
* bordered section grids (stats-band, testimonials, logo-band, and their siblings).
|
|
6
|
+
*
|
|
7
|
+
* SINGLE-OWNER SEAM: a `grid` with `gap-px` lets the panel paint one hairline at
|
|
8
|
+
* every cell boundary while borderless, square-cornered cells fill on top, so no
|
|
9
|
+
* coordinate ever carries two lines. The seam COLOUR is the only thing that flips
|
|
10
|
+
* with `surface`, and that colour comes from `seamSurfaceClass` in the internal
|
|
11
|
+
* `lib/seam` module, the one place the ink `color-mix(...)` string lives.
|
|
12
|
+
*
|
|
13
|
+
* `surface` is OPTIONAL. Pass `"canvas"` or `"ink"` (as the bordered proof bands
|
|
14
|
+
* do) to mark the grid with `data-surface` and pick the seam colour. Omit it for
|
|
15
|
+
* the plain canvas seam (`bg-border`) with NO `data-surface` marker, exactly the
|
|
16
|
+
* single-owner `gap-px bg-border` grid the canvas-only section grids render
|
|
17
|
+
* (faq, pricing, hero-split, bento, shift-band, action-band content, watch-it-work).
|
|
18
|
+
* Token-only; no `dark:` styling. Callers keep their own column maps, heights,
|
|
19
|
+
* `data-slot`, and extra classes by passing `className` and spreading props.
|
|
20
|
+
*
|
|
21
|
+
* This is a supported low-level layout primitive. The seam class helper stays
|
|
22
|
+
* module-private (`lib/seam`, no public subpath export); consumers reach for
|
|
23
|
+
* `SeamGrid` and its `surface` prop rather than the raw arbitrary Tailwind class
|
|
24
|
+
* string.
|
|
25
|
+
*/
|
|
26
|
+
declare function SeamGrid({ surface, className, ...props }: React.ComponentProps<"div"> & {
|
|
27
|
+
surface?: SeamSurface;
|
|
28
|
+
}): React.JSX.Element;
|
|
29
|
+
export { SeamGrid };
|
|
30
|
+
//# sourceMappingURL=seam-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seam-grid.d.ts","sourceRoot":"","sources":["../../src/components/seam-grid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAE/D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,iBAAS,QAAQ,CAAC,EAChB,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,WAAW,CAAA;CAAE,qBAUzD;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../lib/utils.js";
|
|
3
|
+
import { seamSurfaceClass } from "../lib/seam.js";
|
|
4
|
+
/**
|
|
5
|
+
* SeamGrid is the single owner of the "gap-as-seam" grid mechanics shared by the
|
|
6
|
+
* bordered section grids (stats-band, testimonials, logo-band, and their siblings).
|
|
7
|
+
*
|
|
8
|
+
* SINGLE-OWNER SEAM: a `grid` with `gap-px` lets the panel paint one hairline at
|
|
9
|
+
* every cell boundary while borderless, square-cornered cells fill on top, so no
|
|
10
|
+
* coordinate ever carries two lines. The seam COLOUR is the only thing that flips
|
|
11
|
+
* with `surface`, and that colour comes from `seamSurfaceClass` in the internal
|
|
12
|
+
* `lib/seam` module, the one place the ink `color-mix(...)` string lives.
|
|
13
|
+
*
|
|
14
|
+
* `surface` is OPTIONAL. Pass `"canvas"` or `"ink"` (as the bordered proof bands
|
|
15
|
+
* do) to mark the grid with `data-surface` and pick the seam colour. Omit it for
|
|
16
|
+
* the plain canvas seam (`bg-border`) with NO `data-surface` marker, exactly the
|
|
17
|
+
* single-owner `gap-px bg-border` grid the canvas-only section grids render
|
|
18
|
+
* (faq, pricing, hero-split, bento, shift-band, action-band content, watch-it-work).
|
|
19
|
+
* Token-only; no `dark:` styling. Callers keep their own column maps, heights,
|
|
20
|
+
* `data-slot`, and extra classes by passing `className` and spreading props.
|
|
21
|
+
*
|
|
22
|
+
* This is a supported low-level layout primitive. The seam class helper stays
|
|
23
|
+
* module-private (`lib/seam`, no public subpath export); consumers reach for
|
|
24
|
+
* `SeamGrid` and its `surface` prop rather than the raw arbitrary Tailwind class
|
|
25
|
+
* string.
|
|
26
|
+
*/
|
|
27
|
+
function SeamGrid({ surface, className, ...props }) {
|
|
28
|
+
return (_jsx("div", { "data-surface": surface, className: cn("grid gap-px", seamSurfaceClass(surface ?? "canvas"), className), ...props }));
|
|
29
|
+
}
|
|
30
|
+
export { SeamGrid };
|
|
@@ -17,6 +17,6 @@ function SectionIntroTitle({ className, size = "lg", ...props }) {
|
|
|
17
17
|
return (_jsx("h2", { "data-slot": "section-intro-title", className: cn(size === "lg" ? "nc-type-title-lg" : "nc-type-title-md", "mx-auto text-foreground", className), ...props }));
|
|
18
18
|
}
|
|
19
19
|
function SectionIntroLead({ className, ...props }) {
|
|
20
|
-
return (_jsx("p", { "data-slot": "section-intro-lead", className: cn("nc-type-body-md mx-auto max-w-[64ch] text-
|
|
20
|
+
return (_jsx("p", { "data-slot": "section-intro-lead", className: cn("nc-type-body-md mx-auto max-w-[64ch] text-[var(--nc-body)]", className), ...props }));
|
|
21
21
|
}
|
|
22
22
|
export { SectionIntro, SectionIntroKicker, SectionIntroTitle, SectionIntroLead };
|
|
@@ -13,7 +13,7 @@ function SelectValue({ ...props }) {
|
|
|
13
13
|
return _jsx(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
|
|
14
14
|
}
|
|
15
15
|
function SelectTrigger({ className, size = "default", children, ...props }) {
|
|
16
|
-
return (_jsxs(SelectPrimitive.Trigger, { "data-slot": "select-trigger", "data-size": size, className: cn("flex w-fit items-center justify-between gap-2 rounded-
|
|
16
|
+
return (_jsxs(SelectPrimitive.Trigger, { "data-slot": "select-trigger", "data-size": size, className: cn("flex w-fit items-center justify-between gap-2 rounded-sm border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground", className), ...props, children: [children, _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(ChevronDownIcon, { className: "size-4 opacity-50" }) })] }));
|
|
17
17
|
}
|
|
18
18
|
function SelectContent({ className, children, position = "item-aligned", align = "center", ...props }) {
|
|
19
19
|
return (_jsx(SelectPrimitive.Portal, { children: _jsxs(SelectPrimitive.Content, { "data-slot": "select-content", className: cn("relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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", position === "popper" &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shift-band.d.ts","sourceRoot":"","sources":["../../src/components/shift-band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"shift-band.d.ts","sourceRoot":"","sources":["../../src/components/shift-band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAY9B,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,iBAAS,SAAS,CAAC,EACjB,MAAM,EACN,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB,qBAsBA;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,qBAOxE;AAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAA;AACnC,YAAY,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
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
|
import { SectionIntro, SectionIntroKicker, SectionIntroLead, SectionIntroTitle, } from "./section-intro.js";
|
|
4
5
|
function ShiftBand({ kicker, title, children, proofs, className, ...props }) {
|
|
5
|
-
return (_jsxs(
|
|
6
|
+
return (_jsxs(SeamGrid, { "data-slot": "shift-band", className: className, ...props, children: [_jsxs(SectionIntro, { className: "justify-items-center text-center", children: [_jsx(SectionIntroKicker, { children: kicker }), _jsx(SectionIntroTitle, { className: "max-w-[18ch] text-balance text-center", children: title }), children] }), _jsx(SeamGrid, { className: "md:grid-cols-4", children: proofs.map((proof) => (_jsxs("div", { className: "nc-panel-cell bg-card", children: [_jsx("h3", { className: "nc-type-body-md-strong text-foreground", children: proof.title }), _jsx("p", { className: "nc-type-body-sm text-[var(--nc-body)]", children: proof.body })] }, proof.title))) })] }));
|
|
6
7
|
}
|
|
7
8
|
function ShiftBandLead({ className, ...props }) {
|
|
8
9
|
return (_jsx(SectionIntroLead, { className: cn("text-balance text-center", className), ...props }));
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { AgentWorkState } from "./agent-message";
|
|
3
|
+
declare function StateNotice({ state, icon: Icon, title, description, actions, className, ...props }: {
|
|
4
|
+
state: Exclude<AgentWorkState, "empty" | "idle">;
|
|
5
|
+
icon: React.ComponentType<{
|
|
6
|
+
className?: string;
|
|
7
|
+
}>;
|
|
8
|
+
title: React.ReactNode;
|
|
9
|
+
description?: React.ReactNode;
|
|
10
|
+
actions?: React.ReactNode;
|
|
11
|
+
} & Omit<React.ComponentProps<"div">, "title">): React.JSX.Element;
|
|
12
|
+
export { StateNotice };
|
|
13
|
+
//# sourceMappingURL=state-notice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-notice.d.ts","sourceRoot":"","sources":["../../src/components/state-notice.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAIhE,iBAAS,WAAW,CAAC,EACnB,KAAK,EACL,IAAI,EAAE,IAAI,EACV,KAAK,EACL,WAAW,EACX,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACT,EAAE;IACD,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,GAAG,MAAM,CAAC,CAAA;IAChD,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,qBA2B7C;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { statePresentation } from "../lib/agent-work-state.js";
|
|
3
|
+
import { cn } from "../lib/utils.js";
|
|
4
|
+
function StateNotice({ state, icon: Icon, title, description, actions, className, ...props }) {
|
|
5
|
+
const { role, busy } = statePresentation(state);
|
|
6
|
+
return (_jsxs("div", { "data-agent-state": state, role: role, className: cn("flex flex-wrap items-center gap-3 border bg-muted/30 text-sm", className), ...props, children: [_jsx(Icon, { className: cn("size-4 text-muted-foreground", busy && "animate-spin") }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "font-medium", children: title }), description && (_jsx("div", { className: "text-muted-foreground", children: description }))] }), actions] }));
|
|
7
|
+
}
|
|
8
|
+
export { StateNotice };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats-band.d.ts","sourceRoot":"","sources":["../../src/components/stats-band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"stats-band.d.ts","sourceRoot":"","sources":["../../src/components/stats-band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B;;;;;;;;;;GAUG;AAEH,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,OAAW,EACX,OAAkB,EAClB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3B,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;CAC3B,qBAiBA;AAED,OAAO,EAAE,SAAS,EAAE,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
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
|
* stats-band — proof row of headline statistics (replaces the retired
|
|
5
6
|
* `sections/stats-band.css` + its coupled `stat-block` cells).
|
|
@@ -19,10 +20,8 @@ function StatsBand({ className, columns = 4, surface = "canvas", ...props }) {
|
|
|
19
20
|
5: "grid-cols-2 lg:grid-cols-5",
|
|
20
21
|
6: "grid-cols-2 lg:grid-cols-6",
|
|
21
22
|
};
|
|
22
|
-
return (
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
? "bg-[color-mix(in_srgb,var(--nc-line)_40%,var(--nc-ink))]"
|
|
26
|
-
: "bg-border", className), ...props }));
|
|
23
|
+
return (
|
|
24
|
+
// single-owner seam: SeamGrid owns every divider; ink flips only its colour.
|
|
25
|
+
_jsx(SeamGrid, { "data-slot": "stats-band", surface: surface, className: cn("h-full", cols[columns], className), ...props }));
|
|
27
26
|
}
|
|
28
27
|
export { StatsBand };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testimonials.d.ts","sourceRoot":"","sources":["../../src/components/testimonials.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"testimonials.d.ts","sourceRoot":"","sources":["../../src/components/testimonials.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B;;;;;;;;;;;;;GAaG;AAEH,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,OAAO,EACP,OAAkB,EAClB,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACf,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;CAC3B,qBA+BA;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
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
|
* testimonials — credibility row of customer quotes (replaces the retired
|
|
5
6
|
* `sections/testimonials.css` + its coupled `quote-card` cells).
|
|
@@ -19,10 +20,8 @@ function Testimonials({ className, columns, surface = "canvas", children, ...pro
|
|
|
19
20
|
// single featured mode — the lone card is centered; no grid, no seam.
|
|
20
21
|
return (_jsx("div", { "data-slot": "testimonials", "data-surface": surface, className: cn("flex h-full items-center justify-center", className), ...props, children: _jsx("div", { className: "w-full max-w-[760px]", children: children }) }));
|
|
21
22
|
}
|
|
22
|
-
return (_jsx(
|
|
23
|
+
return (_jsx(SeamGrid, { "data-slot": "testimonials", surface: surface, className: cn("h-full", columns === 2
|
|
23
24
|
? "grid-cols-1 sm:grid-cols-2"
|
|
24
|
-
: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
|
|
25
|
-
? "bg-[color-mix(in_srgb,var(--nc-line)_40%,var(--nc-ink))]"
|
|
26
|
-
: "bg-border", className), ...props, children: children }));
|
|
25
|
+
: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3", className), ...props, children: children }));
|
|
27
26
|
}
|
|
28
27
|
export { Testimonials };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
3
|
function Textarea({ className, ...props }) {
|
|
4
|
-
return (_jsx("textarea", { "data-slot": "textarea", className: cn("flex field-sizing-content min-h-16 w-full rounded-
|
|
4
|
+
return (_jsx("textarea", { "data-slot": "textarea", className: cn("flex field-sizing-content min-h-16 w-full rounded-sm border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm", className), ...props }));
|
|
5
5
|
}
|
|
6
6
|
export { Textarea };
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { type DemoSurfaceScript } from "./demo-surface";
|
|
3
|
-
declare function UseCaseBento({ kicker, title, body, proof, media, mediaClassName, demo, className, ...props }: React.ComponentProps<"article"> & {
|
|
2
|
+
import { type DemoSurfaceLabels, type DemoSurfaceScript } from "./demo-surface";
|
|
3
|
+
declare function UseCaseBento({ kicker, title, body, proof, proofLabel, media, mediaClassName, demo, demoLabels, className, ...props }: React.ComponentProps<"article"> & {
|
|
4
4
|
kicker: string;
|
|
5
5
|
title: string;
|
|
6
6
|
body: string;
|
|
7
7
|
proof: string;
|
|
8
|
+
proofLabel?: string;
|
|
8
9
|
media: React.ReactNode;
|
|
9
10
|
mediaClassName?: string;
|
|
10
11
|
demo: DemoSurfaceScript;
|
|
12
|
+
demoLabels?: Partial<DemoSurfaceLabels>;
|
|
11
13
|
}): React.JSX.Element;
|
|
12
14
|
export { UseCaseBento };
|
|
13
15
|
//# sourceMappingURL=use-case-bento.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-case-bento.d.ts","sourceRoot":"","sources":["../../src/components/use-case-bento.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,
|
|
1
|
+
{"version":3,"file":"use-case-bento.d.ts","sourceRoot":"","sources":["../../src/components/use-case-bento.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAA;AAGvB,iBAAS,YAAY,CAAC,EACpB,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,UAAmC,EACnC,KAAK,EACL,cAAc,EACd,IAAI,EACJ,UAAU,EACV,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,iBAAiB,CAAA;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;CACxC,qBAmDA;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
3
|
import { Bento, BentoCopy, BentoDemo, BentoItem, BentoMedia } from "./bento.js";
|
|
4
|
-
import { DemoSurface } from "./demo-surface.js";
|
|
4
|
+
import { DemoSurface, } from "./demo-surface.js";
|
|
5
5
|
import { MediaMount } from "./media-mount.js";
|
|
6
|
-
function UseCaseBento({ kicker, title, body, proof, media, mediaClassName, demo, className, ...props }) {
|
|
7
|
-
return (_jsx("article", { "data-slot": "use-case-bento", className: className, ...props, children: _jsxs(Bento, { height: "primary", children: [_jsxs(BentoItem, { span: 3, children: [_jsx("div", { className: "nc-artifact-surface pointer-events-none absolute inset-0 border-0 p-0 opacity-60", "aria-hidden": "true" }), _jsxs(BentoCopy, { children: [_jsx("p", { className: "nc-type-caption-mono text-muted-foreground uppercase", children: kicker }), _jsx("h3", { className: "nc-type-title-md text-foreground", children: title }), _jsx("p", { className: "nc-type-body-sm text-
|
|
6
|
+
function UseCaseBento({ kicker, title, body, proof, proofLabel = "What the agent shows", media, mediaClassName, demo, demoLabels, className, ...props }) {
|
|
7
|
+
return (_jsx("article", { "data-slot": "use-case-bento", className: className, ...props, children: _jsxs(Bento, { height: "primary", children: [_jsxs(BentoItem, { span: 3, children: [_jsx("div", { className: "nc-artifact-surface pointer-events-none absolute inset-0 border-0 p-0 opacity-60", "aria-hidden": "true" }), _jsxs(BentoCopy, { children: [_jsx("p", { className: "nc-type-caption-mono text-muted-foreground uppercase", children: kicker }), _jsx("h3", { className: "nc-type-title-md text-foreground", children: title }), _jsx("p", { className: "nc-type-body-sm text-[var(--nc-body)]", children: body }), _jsxs("div", { className: "grid gap-2 border-t border-border pt-4", children: [_jsx("p", { className: "nc-type-caption-mono text-muted-foreground uppercase", children: proofLabel }), _jsx("p", { className: "nc-type-body-sm text-foreground", children: proof })] })] })] }), _jsx(BentoItem, { span: 5, flush: true, stretch: true, className: "min-h-[var(--nc-h-bento-primary)]", children: _jsx(BentoMedia, { children: _jsx(MediaMount, { ratio: "auto", className: cn("!h-full min-h-[var(--nc-h-bento-primary)]", mediaClassName), children: media }) }) }), _jsx(BentoItem, { span: 4, surface: "soft", stretch: true, className: "min-h-0 p-[var(--nc-sm)]", children: _jsx(BentoDemo, { children: _jsx(DemoSurface, { labels: demoLabels, script: demo, title: title }) }) })] }) }));
|
|
8
8
|
}
|
|
9
9
|
export { UseCaseBento };
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { type DemoSurfaceScript } from "./demo-surface";
|
|
3
|
-
declare function WatchItWorkBand({ kicker, title, lead, primaryDemo, secondaryDemo, className, ...props }: React.ComponentProps<"div"> & {
|
|
2
|
+
import { type DemoSurfaceLabels, type DemoSurfaceScript } from "./demo-surface";
|
|
3
|
+
declare function WatchItWorkBand({ kicker, title, lead, primaryDemo, secondaryDemo, demoLabels, className, ...props }: React.ComponentProps<"div"> & {
|
|
4
4
|
kicker?: string;
|
|
5
5
|
title?: string;
|
|
6
6
|
lead?: string;
|
|
7
7
|
primaryDemo?: DemoSurfaceScript;
|
|
8
8
|
secondaryDemo?: DemoSurfaceScript;
|
|
9
|
+
demoLabels?: Partial<DemoSurfaceLabels>;
|
|
9
10
|
}): React.JSX.Element;
|
|
10
11
|
export { WatchItWorkBand };
|
|
11
12
|
//# sourceMappingURL=watch-it-work-band.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch-it-work-band.d.ts","sourceRoot":"","sources":["../../src/components/watch-it-work-band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,
|
|
1
|
+
{"version":3,"file":"watch-it-work-band.d.ts","sourceRoot":"","sources":["../../src/components/watch-it-work-band.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAA;AAEvB,iBAAS,eAAe,CAAC,EACvB,MAAgC,EAChC,KAAuB,EACvB,IAAI,EACJ,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,aAAa,CAAC,EAAE,iBAAiB,CAAA;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;CACxC,qBA8BA;AAED,OAAO,EAAE,eAAe,EAAE,CAAA"}
|