@nadicodeai/ui 0.1.1 → 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 +9 -4
- package/README.md +41 -7
- 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/code-block.d.ts +8 -1
- package/dist/components/ai-elements/code-block.d.ts.map +1 -1
- package/dist/components/ai-elements/code-block.js +77 -19
- package/dist/components/ai-elements/model-selector.d.ts +1 -1
- package/dist/components/ai-elements/model-selector.d.ts.map +1 -1
- package/dist/components/ai-elements/open-in-chat.d.ts +0 -2
- package/dist/components/ai-elements/open-in-chat.d.ts.map +1 -1
- package/dist/components/ai-elements/open-in-chat.js +7 -29
- 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/chart.d.ts +5 -1
- package/dist/components/chart.d.ts.map +1 -1
- package/dist/components/chart.js +23 -4
- 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/sonner.d.ts +1 -1
- package/dist/components/sonner.d.ts.map +1 -1
- package/dist/components/sonner.js +2 -2
- 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/theme-mode-switcher.d.ts +17 -0
- package/dist/components/theme-mode-switcher.d.ts.map +1 -0
- package/dist/components/theme-mode-switcher.js +24 -0
- 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 +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -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/lib/theme-mode.d.ts +4 -0
- package/dist/lib/theme-mode.d.ts.map +1 -0
- package/dist/lib/theme-mode.js +4 -0
- package/dist/styles/globals.css +131 -117
- package/docs/agents/nadicodeai-ui.md +22 -0
- package/package.json +9 -3
- package/skills/nadicodeai-ui/SKILL.md +2 -1
|
@@ -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 }));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type ToasterProps } from "sonner";
|
|
2
|
-
declare const Toaster: ({ ...props }: ToasterProps) => import("react").JSX.Element;
|
|
2
|
+
declare const Toaster: ({ theme, ...props }: ToasterProps) => import("react").JSX.Element;
|
|
3
3
|
export { Toaster };
|
|
4
4
|
//# sourceMappingURL=sonner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sonner.d.ts","sourceRoot":"","sources":["../../src/components/sonner.tsx"],"names":[],"mappings":"AASA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAA;AAE7D,QAAA,MAAM,OAAO,GAAI,
|
|
1
|
+
{"version":3,"file":"sonner.d.ts","sourceRoot":"","sources":["../../src/components/sonner.tsx"],"names":[],"mappings":"AASA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAA;AAE7D,QAAA,MAAM,OAAO,GAAI,qBAA+B,YAAY,gCAuB3D,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { CircleCheckIcon, InfoIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon, } from "lucide-react";
|
|
4
4
|
import { Toaster as Sonner } from "sonner";
|
|
5
|
-
const Toaster = ({ ...props }) => {
|
|
5
|
+
const Toaster = ({ theme = "light", ...props }) => {
|
|
6
6
|
return (_jsx(Sonner, { className: "toaster group", icons: {
|
|
7
7
|
success: _jsx(CircleCheckIcon, { className: "size-4" }),
|
|
8
8
|
info: _jsx(InfoIcon, { className: "size-4" }),
|
|
@@ -14,6 +14,6 @@ const Toaster = ({ ...props }) => {
|
|
|
14
14
|
"--normal-text": "var(--popover-foreground)",
|
|
15
15
|
"--normal-border": "var(--border)",
|
|
16
16
|
"--border-radius": "var(--radius)",
|
|
17
|
-
}, ...props, theme:
|
|
17
|
+
}, ...props, theme: theme }));
|
|
18
18
|
};
|
|
19
19
|
export { Toaster };
|
|
@@ -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 };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { ToggleGroup } from "./toggle-group";
|
|
3
|
+
import { isThemeMode, themeModes, type ThemeMode } from "../lib/theme-mode";
|
|
4
|
+
export { isThemeMode, themeModes };
|
|
5
|
+
export type { ThemeMode };
|
|
6
|
+
export type ThemeModeOptionLabels = Record<ThemeMode, string>;
|
|
7
|
+
export type ThemeModeSwitcherProps = Omit<React.ComponentProps<typeof ToggleGroup>, "children" | "defaultValue" | "onValueChange" | "type" | "value"> & {
|
|
8
|
+
"aria-label": string;
|
|
9
|
+
compact?: boolean;
|
|
10
|
+
itemClassName?: string;
|
|
11
|
+
labels: ThemeModeOptionLabels;
|
|
12
|
+
onValueChange: (value: ThemeMode) => void;
|
|
13
|
+
value: ThemeMode;
|
|
14
|
+
};
|
|
15
|
+
declare function ThemeModeSwitcher({ "aria-label": ariaLabel, className, compact, disabled, itemClassName, labels, onValueChange, value, ...props }: ThemeModeSwitcherProps): React.JSX.Element;
|
|
16
|
+
export { ThemeModeSwitcher };
|
|
17
|
+
//# sourceMappingURL=theme-mode-switcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-mode-switcher.d.ts","sourceRoot":"","sources":["../../src/components/theme-mode-switcher.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,WAAW,EAAmB,MAAM,2BAA2B,CAAA;AACxE,OAAO,EACL,WAAW,EACX,UAAU,EACV,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAA;AAClC,YAAY,EAAE,SAAS,EAAE,CAAA;AAEzB,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;AAE7D,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,KAAK,CAAC,cAAc,CAAC,OAAO,WAAW,CAAC,EACxC,UAAU,GAAG,cAAc,GAAG,eAAe,GAAG,MAAM,GAAG,OAAO,CACjE,GAAG;IACF,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,qBAAqB,CAAA;IAC7B,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IACzC,KAAK,EAAE,SAAS,CAAA;CACjB,CAAA;AAQD,iBAAS,iBAAiB,CAAC,EACzB,YAAY,EAAE,SAAS,EACvB,SAAS,EACT,OAAe,EACf,QAAQ,EACR,aAAa,EACb,MAAM,EACN,aAAa,EACb,KAAK,EACL,GAAG,KAAK,EACT,EAAE,sBAAsB,qBAuCxB;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { MonitorIcon, MoonIcon, SunIcon } from "lucide-react";
|
|
4
|
+
import { ToggleGroup, ToggleGroupItem } from "./toggle-group.js";
|
|
5
|
+
import { isThemeMode, themeModes, } from "../lib/theme-mode.js";
|
|
6
|
+
import { cn } from "../lib/utils.js";
|
|
7
|
+
export { isThemeMode, themeModes };
|
|
8
|
+
const themeModeIcons = {
|
|
9
|
+
light: SunIcon,
|
|
10
|
+
dark: MoonIcon,
|
|
11
|
+
system: MonitorIcon,
|
|
12
|
+
};
|
|
13
|
+
function ThemeModeSwitcher({ "aria-label": ariaLabel, className, compact = false, disabled, itemClassName, labels, onValueChange, value, ...props }) {
|
|
14
|
+
return (_jsx(ToggleGroup, { "aria-label": ariaLabel, className: cn("max-w-full", className), disabled: disabled, onValueChange: (nextValue) => {
|
|
15
|
+
if (isThemeMode(nextValue)) {
|
|
16
|
+
onValueChange(nextValue);
|
|
17
|
+
}
|
|
18
|
+
}, type: "single", value: value, variant: "outline", ...props, children: themeModes.map((mode) => {
|
|
19
|
+
const Icon = themeModeIcons[mode];
|
|
20
|
+
const label = labels[mode];
|
|
21
|
+
return (_jsxs(ToggleGroupItem, { "aria-label": label, className: cn("min-w-0 gap-1.5 px-2.5", compact ? "h-8 text-xs" : "h-9", itemClassName), disabled: disabled, value: mode, children: [_jsx(Icon, { "aria-hidden": "true", className: "size-4", "data-icon": true }), _jsx("span", { className: "min-w-0 truncate", children: label })] }, mode));
|
|
22
|
+
}) }));
|
|
23
|
+
}
|
|
24
|
+
export { ThemeModeSwitcher };
|
|
@@ -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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { SeamGrid } from "./seam-grid.js";
|
|
3
3
|
import { Bento, BentoItem } from "./bento.js";
|
|
4
|
-
import { DemoSurface } from "./demo-surface.js";
|
|
5
|
-
function WatchItWorkBand({ kicker = "Product demonstration", title = "Watch it work", lead, primaryDemo, secondaryDemo, className, ...props }) {
|
|
6
|
-
return (_jsx(
|
|
4
|
+
import { DemoSurface, } from "./demo-surface.js";
|
|
5
|
+
function WatchItWorkBand({ kicker = "Product demonstration", title = "Watch it work", lead, primaryDemo, secondaryDemo, demoLabels, className, ...props }) {
|
|
6
|
+
return (_jsx(SeamGrid, { "data-slot": "watch-it-work-band", className: className, ...props, children: _jsxs(Bento, { children: [_jsxs(BentoItem, { span: 4, 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 }), lead ? (_jsx("p", { className: "nc-type-body-md text-muted-foreground", children: lead })) : null] }), primaryDemo ? (_jsx(BentoItem, { span: 4, surface: "soft", stretch: true, className: "p-[var(--nc-sm)]", children: _jsx(DemoSurface, { labels: demoLabels, script: primaryDemo, title: "Conversation" }) })) : null, secondaryDemo ? (_jsx(BentoItem, { span: 4, surface: "soft", stretch: true, className: "p-[var(--nc-sm)]", children: _jsx(DemoSurface, { labels: demoLabels, script: secondaryDemo, title: "Screen" }) })) : null] }) }));
|
|
7
7
|
}
|
|
8
8
|
export { WatchItWorkBand };
|
package/dist/index.d.ts
CHANGED
|
@@ -75,6 +75,7 @@ export * from "./components/quote-card";
|
|
|
75
75
|
export * from "./components/radio-group";
|
|
76
76
|
export * from "./components/resizable";
|
|
77
77
|
export * from "./components/scroll-area";
|
|
78
|
+
export * from "./components/seam-grid";
|
|
78
79
|
export * from "./components/section-intro";
|
|
79
80
|
export * from "./components/select";
|
|
80
81
|
export * from "./components/separator";
|
|
@@ -87,12 +88,14 @@ export * from "./components/slider";
|
|
|
87
88
|
export * from "./components/sonner";
|
|
88
89
|
export * from "./components/spinner";
|
|
89
90
|
export * from "./components/stat-block";
|
|
91
|
+
export * from "./components/state-notice";
|
|
90
92
|
export * from "./components/stats-band";
|
|
91
93
|
export * from "./components/switch";
|
|
92
94
|
export * from "./components/table";
|
|
93
95
|
export * from "./components/tabs";
|
|
94
96
|
export * from "./components/testimonials";
|
|
95
97
|
export * from "./components/textarea";
|
|
98
|
+
export * from "./components/theme-mode-switcher";
|
|
96
99
|
export * from "./components/toggle";
|
|
97
100
|
export * from "./components/toggle-group";
|
|
98
101
|
export * from "./components/tooltip";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA;AACzC,cAAc,kCAAkC,CAAA;AAChD,cAAc,2BAA2B,CAAA;AACzC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,oBAAoB,CAAA;AAClC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,mCAAmC,CAAA;AACjD,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,2BAA2B,CAAA;AACzC,cAAc,sBAAsB,CAAA;AACpC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,iCAAiC,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -75,6 +75,7 @@ export * from "./components/quote-card.js";
|
|
|
75
75
|
export * from "./components/radio-group.js";
|
|
76
76
|
export * from "./components/resizable.js";
|
|
77
77
|
export * from "./components/scroll-area.js";
|
|
78
|
+
export * from "./components/seam-grid.js";
|
|
78
79
|
export * from "./components/section-intro.js";
|
|
79
80
|
export * from "./components/select.js";
|
|
80
81
|
export * from "./components/separator.js";
|
|
@@ -87,12 +88,14 @@ export * from "./components/slider.js";
|
|
|
87
88
|
export * from "./components/sonner.js";
|
|
88
89
|
export * from "./components/spinner.js";
|
|
89
90
|
export * from "./components/stat-block.js";
|
|
91
|
+
export * from "./components/state-notice.js";
|
|
90
92
|
export * from "./components/stats-band.js";
|
|
91
93
|
export * from "./components/switch.js";
|
|
92
94
|
export * from "./components/table.js";
|
|
93
95
|
export * from "./components/tabs.js";
|
|
94
96
|
export * from "./components/testimonials.js";
|
|
95
97
|
export * from "./components/textarea.js";
|
|
98
|
+
export * from "./components/theme-mode-switcher.js";
|
|
96
99
|
export * from "./components/toggle.js";
|
|
97
100
|
export * from "./components/toggle-group.js";
|
|
98
101
|
export * from "./components/tooltip.js";
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal seam for the `AgentWorkState` presentation contract.
|
|
3
|
+
*
|
|
4
|
+
* This module is the ONE place a work state's icon, ARIA `role`, and
|
|
5
|
+
* busy/motion signal are decided. Every caller (`agent-message.tsx`,
|
|
6
|
+
* `agent-thread.tsx`, `state-notice.tsx`) reads `statePresentation` instead
|
|
7
|
+
* of keeping its own copy of the icon table or the role/busy rule, so a
|
|
8
|
+
* future state's presentation rule has exactly one place to be added or
|
|
9
|
+
* fixed.
|
|
10
|
+
*
|
|
11
|
+
* This is NOT part of the public package surface. It has no `exports`
|
|
12
|
+
* subpath, matching `agent-attachment.ts` and `seam.ts` in this directory.
|
|
13
|
+
*
|
|
14
|
+
* Dependency direction is one-way: components import this module; this
|
|
15
|
+
* module never imports a component (no cycle).
|
|
16
|
+
*/
|
|
17
|
+
import type { ComponentType } from "react";
|
|
18
|
+
type AgentWorkState = "idle" | "empty" | "queued" | "streaming" | "interrupted" | "retryable" | "permission-denied" | "fatal";
|
|
19
|
+
type AgentWorkStatePresentation = {
|
|
20
|
+
icon: ComponentType<{
|
|
21
|
+
className?: string;
|
|
22
|
+
}>;
|
|
23
|
+
role: "alert" | "status";
|
|
24
|
+
busy: boolean;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* statePresentation is the single source of truth for a presentable
|
|
28
|
+
* `AgentWorkState`'s icon, ARIA `role`, and busy/motion signal. Icon values
|
|
29
|
+
* reproduce `agent-message.tsx`'s `stateMeta` and `agent-thread.tsx`'s
|
|
30
|
+
* `threadStateDefaults` (confirmed byte-identical icon-for-icon); `role`
|
|
31
|
+
* and `busy` reproduce `state-notice.tsx`'s inline rules verbatim.
|
|
32
|
+
*/
|
|
33
|
+
declare function statePresentation(state: Exclude<AgentWorkState, "idle" | "empty">): AgentWorkStatePresentation;
|
|
34
|
+
export { statePresentation };
|
|
35
|
+
export type { AgentWorkState };
|
|
36
|
+
//# sourceMappingURL=agent-work-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-work-state.d.ts","sourceRoot":"","sources":["../../src/lib/agent-work-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAU1C,KAAK,cAAc,GACf,MAAM,GACN,OAAO,GACP,QAAQ,GACR,WAAW,GACX,aAAa,GACb,WAAW,GACX,mBAAmB,GACnB,OAAO,CAAA;AAEX,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3C,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAA;IACxB,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAcD;;;;;;GAMG;AACH,iBAAS,iBAAiB,CACxB,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,GAC/C,0BAA0B,CAE5B;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAC5B,YAAY,EAAE,cAAc,EAAE,CAAA"}
|