@nadicodeai/ui 9.2.0 → 10.0.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 +1 -0
- package/README.md +5 -5
- package/dist/agent-orb.d.ts +3 -0
- package/dist/agent-orb.d.ts.map +1 -0
- package/dist/agent-orb.js +2 -0
- package/dist/assets/brand/aionlabs.svg +2 -0
- package/dist/assets/brand/airtable.svg +2 -0
- package/dist/assets/brand/apple.svg +2 -0
- package/dist/assets/brand/arcee.svg +2 -0
- package/dist/assets/brand/asana.svg +2 -0
- package/dist/assets/brand/atlassian.svg +2 -0
- package/dist/assets/brand/baidu.svg +2 -0
- package/dist/assets/brand/bytedance.svg +2 -0
- package/dist/assets/brand/claude.svg +2 -0
- package/dist/assets/brand/cohere.svg +2 -0
- package/dist/assets/brand/datadog.svg +2 -0
- package/dist/assets/brand/deepseek.svg +2 -0
- package/dist/assets/brand/discord.svg +2 -0
- package/dist/assets/brand/dolphin.svg +2 -0
- package/dist/assets/brand/dotsstudio.svg +2 -0
- package/dist/assets/brand/figma.svg +2 -0
- package/dist/assets/brand/gemini.svg +2 -0
- package/dist/assets/brand/github.svg +2 -0
- package/dist/assets/brand/gitlab.svg +2 -0
- package/dist/assets/brand/gmail.svg +2 -0
- package/dist/assets/brand/google-calendar.svg +2 -0
- package/dist/assets/brand/google-drive.svg +2 -0
- package/dist/assets/brand/grok.svg +2 -0
- package/dist/assets/brand/huggingface.svg +2 -0
- package/dist/assets/brand/ibm.svg +2 -0
- package/dist/assets/brand/inception.svg +2 -0
- package/dist/assets/brand/inclusionai.svg +2 -0
- package/dist/assets/brand/index.json +778 -0
- package/dist/assets/brand/inference.svg +2 -0
- package/dist/assets/brand/intercom.svg +2 -0
- package/dist/assets/brand/jira.svg +2 -0
- package/dist/assets/brand/kwaipilot.svg +2 -0
- package/dist/assets/brand/linear.svg +2 -0
- package/dist/assets/brand/linux.svg +2 -0
- package/dist/assets/brand/liquid.svg +2 -0
- package/dist/assets/brand/longcat.svg +2 -0
- package/dist/assets/brand/mattermost.svg +2 -0
- package/dist/assets/brand/meta.svg +2 -0
- package/dist/assets/brand/microsoft.svg +2 -0
- package/dist/assets/brand/minimax.svg +2 -0
- package/dist/assets/brand/mistral.svg +2 -0
- package/dist/assets/brand/moonshot.svg +2 -0
- package/dist/assets/brand/morph.svg +2 -0
- package/dist/assets/brand/n8n.svg +2 -0
- package/dist/assets/brand/netlify.svg +2 -0
- package/dist/assets/brand/nexagi.svg +2 -0
- package/dist/assets/brand/notion.svg +2 -0
- package/dist/assets/brand/nousresearch.svg +2 -0
- package/dist/assets/brand/nova.svg +2 -0
- package/dist/assets/brand/nvidia.svg +2 -0
- package/dist/assets/brand/openai.svg +2 -0
- package/dist/assets/brand/openrouter.svg +2 -0
- package/dist/assets/brand/paypal.svg +2 -0
- package/dist/assets/brand/perceptron.svg +2 -0
- package/dist/assets/brand/perplexity.svg +2 -0
- package/dist/assets/brand/poolside.svg +2 -0
- package/dist/assets/brand/postgresql.svg +2 -0
- package/dist/assets/brand/qwen.svg +2 -0
- package/dist/assets/brand/reka.svg +2 -0
- package/dist/assets/brand/relace.svg +2 -0
- package/dist/assets/brand/sakana.svg +2 -0
- package/dist/assets/brand/sentry.svg +2 -0
- package/dist/assets/brand/signal.svg +2 -0
- package/dist/assets/brand/slack.svg +2 -0
- package/dist/assets/brand/spotify.svg +2 -0
- package/dist/assets/brand/square.svg +2 -0
- package/dist/assets/brand/stepfun.svg +2 -0
- package/dist/assets/brand/stripe.svg +2 -0
- package/dist/assets/brand/supabase.svg +2 -0
- package/dist/assets/brand/telegram.svg +2 -0
- package/dist/assets/brand/tencent.svg +2 -0
- package/dist/assets/brand/the-drummer.svg +2 -0
- package/dist/assets/brand/thinkingmachines.svg +2 -0
- package/dist/assets/brand/todoist.svg +2 -0
- package/dist/assets/brand/unbiased.svg +2 -0
- package/dist/assets/brand/unreal-engine.svg +2 -0
- package/dist/assets/brand/upstage.svg +2 -0
- package/dist/assets/brand/vercel.svg +2 -0
- package/dist/assets/brand/webflow.svg +2 -0
- package/dist/assets/brand/whatsapp.svg +2 -0
- package/dist/assets/brand/windows.svg +2 -0
- package/dist/assets/brand/writer.svg +2 -0
- package/dist/assets/brand/xiaomimimo.svg +2 -0
- package/dist/assets/brand/youtube.svg +2 -0
- package/dist/assets/brand/yuanbao.svg +2 -0
- package/dist/assets/brand/zai.svg +2 -0
- package/dist/assets/brand/zapier.svg +2 -0
- package/dist/components/action-band.js +1 -1
- package/dist/components/action-status.d.ts +5 -0
- package/dist/components/action-status.d.ts.map +1 -1
- package/dist/components/action-status.js +6 -2
- package/dist/components/agent-orb-appearance.d.ts +16 -2
- package/dist/components/agent-orb-appearance.d.ts.map +1 -1
- package/dist/components/agent-orb-appearance.js +28 -5
- package/dist/components/agent-orb.d.ts +6 -3
- package/dist/components/agent-orb.d.ts.map +1 -1
- package/dist/components/agent-orb.js +20 -7
- package/dist/components/app-mark-aliases.d.ts +16 -0
- package/dist/components/app-mark-aliases.d.ts.map +1 -0
- package/dist/components/app-mark-aliases.js +84 -0
- package/dist/components/app-mark.d.ts +4 -0
- package/dist/components/app-mark.d.ts.map +1 -1
- package/dist/components/app-mark.js +14 -31
- package/dist/components/automation-section.d.ts.map +1 -1
- package/dist/components/automation-section.js +2 -2
- package/dist/components/badge.js +1 -1
- package/dist/components/brand.d.ts +3 -2
- package/dist/components/brand.d.ts.map +1 -1
- package/dist/components/brand.js +18 -28
- package/dist/components/button.js +1 -1
- package/dist/components/code-editor-mockup.d.ts +1 -1
- package/dist/components/code-editor-mockup.js +1 -1
- package/dist/components/collection-filters.js +2 -2
- package/dist/components/confirm-dialog.d.ts +3 -1
- package/dist/components/confirm-dialog.d.ts.map +1 -1
- package/dist/components/confirm-dialog.js +3 -3
- package/dist/components/drawer.js +5 -5
- package/dist/components/feature-grid.js +2 -2
- package/dist/components/feedback-state.d.ts.map +1 -1
- package/dist/components/feedback-state.js +6 -9
- package/dist/components/footer.js +2 -2
- package/dist/components/hero.js +1 -1
- package/dist/components/house-icons.d.ts.map +1 -1
- package/dist/components/house-icons.js +9 -1
- package/dist/components/input-otp.js +1 -1
- package/dist/components/installer-shell.d.ts.map +1 -1
- package/dist/components/installer-shell.js +5 -6
- package/dist/components/logo-band.js +1 -1
- package/dist/components/navigation-menu.js +2 -2
- package/dist/components/pending-label.d.ts +15 -0
- package/dist/components/pending-label.d.ts.map +1 -0
- package/dist/components/pending-label.js +14 -0
- package/dist/components/proof-slot.js +1 -1
- package/dist/components/section-intro.js +2 -2
- package/dist/components/security-grid.js +1 -1
- package/dist/components/sheet.js +1 -1
- package/dist/components/shift-band.js +1 -1
- package/dist/components/skeleton.d.ts +4 -0
- package/dist/components/skeleton.d.ts.map +1 -1
- package/dist/components/skeleton.js +5 -1
- package/dist/components/sonner.d.ts.map +1 -1
- package/dist/components/sonner.js +5 -2
- package/dist/components/statement.js +2 -2
- package/dist/components/steps.js +2 -2
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/texture-strip.js +1 -1
- package/dist/components/toggle.js +1 -1
- package/dist/components/waiting-line.d.ts +30 -0
- package/dist/components/waiting-line.d.ts.map +1 -0
- package/dist/components/waiting-line.js +33 -0
- package/dist/eslint/rules/no-invalid-token-utility.js +1 -1
- package/dist/index.d.ts +2 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -8
- package/dist/internal/agent-orb-motion.d.ts +9 -1
- package/dist/internal/agent-orb-motion.d.ts.map +1 -1
- package/dist/internal/agent-orb-motion.js +23 -11
- package/dist/internal/agent-orb.d.ts +14 -1
- package/dist/internal/agent-orb.d.ts.map +1 -1
- package/dist/internal/agent-orb.js +78 -22
- package/dist/internal/assistant-ui/attachment.d.ts.map +1 -1
- package/dist/internal/assistant-ui/attachment.js +3 -2
- package/dist/internal/assistant-ui/reasoning.d.ts.map +1 -1
- package/dist/internal/assistant-ui/reasoning.js +4 -4
- package/dist/internal/assistant-ui/tool-fallback.d.ts.map +1 -1
- package/dist/internal/assistant-ui/tool-fallback.js +5 -4
- package/dist/internal/assistant-ui/tool-group.d.ts.map +1 -1
- package/dist/internal/assistant-ui/tool-group.js +4 -3
- package/dist/lib/motion.d.ts +18 -4
- package/dist/lib/motion.d.ts.map +1 -1
- package/dist/lib/motion.js +18 -4
- package/dist/styles/globals.css +0 -1
- package/docs/activity.md +99 -117
- package/docs/agent-orb.md +72 -19
- package/docs/component-classification.md +4 -4
- package/docs/consuming-cross-repo.md +8 -10
- package/docs/contract.md +10 -9
- package/docs/icon-assets.md +106 -0
- package/docs/migration/10.0.0.md +144 -0
- package/package.json +8 -7
- package/dist/activity.d.ts +0 -2
- package/dist/activity.d.ts.map +0 -1
- package/dist/activity.js +0 -2
- package/dist/components/activity-orb.d.ts +0 -21
- package/dist/components/activity-orb.d.ts.map +0 -1
- package/dist/components/activity-orb.js +0 -26
- package/dist/components/benefits-bento.d.ts +0 -15
- package/dist/components/benefits-bento.d.ts.map +0 -1
- package/dist/components/benefits-bento.js +0 -6
- package/dist/components/bento.d.ts +0 -39
- package/dist/components/bento.d.ts.map +0 -1
- package/dist/components/bento.js +0 -70
- package/dist/components/glyph-spinner.d.ts +0 -10
- package/dist/components/glyph-spinner.d.ts.map +0 -1
- package/dist/components/glyph-spinner.js +0 -101
- package/dist/components/nav-bar.d.ts +0 -24
- package/dist/components/nav-bar.d.ts.map +0 -1
- package/dist/components/nav-bar.js +0 -35
- package/dist/components/page-frame.d.ts +0 -30
- package/dist/components/page-frame.d.ts.map +0 -1
- package/dist/components/page-frame.js +0 -30
- package/dist/components/spinner.d.ts +0 -3
- package/dist/components/spinner.d.ts.map +0 -1
- package/dist/components/spinner.js +0 -7
- package/dist/components/use-case-bento.d.ts +0 -13
- package/dist/components/use-case-bento.d.ts.map +0 -1
- package/dist/components/use-case-bento.js +0 -8
- package/dist/internal/activity-orb.d.ts +0 -27
- package/dist/internal/activity-orb.d.ts.map +0 -1
- package/dist/internal/activity-orb.js +0 -150
package/dist/components/sheet.js
CHANGED
|
@@ -21,7 +21,7 @@ function SheetOverlay({ className, ...props }) {
|
|
|
21
21
|
return (_jsx(SheetPrimitive.Backdrop, { "data-slot": "sheet-overlay", className: cn("fixed inset-0 z-50 bg-scrim/scrim", overlayBackdropMotion, className), ...props }));
|
|
22
22
|
}
|
|
23
23
|
function SheetContent({ className, children, side = "right", showCloseButton = true, closeLabel = "Close", ...props }) {
|
|
24
|
-
return (_jsxs(SheetPortal, { children: [_jsx(SheetOverlay, {}), _jsxs(SheetPrimitive.Popup, { "data-slot": "sheet-content", "data-side": side, className: cn("fixed z-50 flex max-h-[calc(100%-var(--nc-lg))] flex-col gap-nadicode-md rounded-md border-0 bg-popover bg-clip-padding text-sm text-popover-foreground nc-elevation-modal transition-[opacity,translate] duration-[var(--nc-duration-close)] ease-[var(--nc-ease-out-strong)] data-open:duration-[var(--nc-duration-open)] data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-
|
|
24
|
+
return (_jsxs(SheetPortal, { children: [_jsx(SheetOverlay, {}), _jsxs(SheetPrimitive.Popup, { "data-slot": "sheet-content", "data-side": side, className: cn("fixed z-50 flex max-h-[calc(100%-var(--nc-lg))] flex-col gap-nadicode-md rounded-md border-0 bg-popover bg-clip-padding text-sm text-popover-foreground nc-elevation-modal transition-[opacity,translate] duration-[var(--nc-duration-close)] ease-[var(--nc-ease-out-strong)] data-open:duration-[var(--nc-duration-open)] data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-opacity data-[side=bottom]:inset-x-nadicode-sm data-[side=bottom]:bottom-nadicode-sm data-[side=bottom]:h-auto data-[side=bottom]:data-ending-style:translate-y-nadicode-md data-[side=bottom]:data-starting-style:translate-y-nadicode-md motion-reduce:data-[side=bottom]:data-ending-style:translate-none motion-reduce:data-[side=bottom]:data-starting-style:translate-none data-[side=left]:inset-y-nadicode-sm data-[side=left]:left-nadicode-sm data-[side=left]:w-3/4 data-[side=left]:data-ending-style:-translate-x-nadicode-md data-[side=left]:data-starting-style:-translate-x-nadicode-md motion-reduce:data-[side=left]:data-ending-style:translate-none motion-reduce:data-[side=left]:data-starting-style:translate-none data-[side=right]:inset-y-nadicode-sm data-[side=right]:right-nadicode-sm data-[side=right]:w-3/4 data-[side=right]:data-ending-style:translate-x-nadicode-md data-[side=right]:data-starting-style:translate-x-nadicode-md motion-reduce:data-[side=right]:data-ending-style:translate-none motion-reduce:data-[side=right]:data-starting-style:translate-none data-[side=top]:inset-x-nadicode-sm data-[side=top]:top-nadicode-sm data-[side=top]:h-auto data-[side=top]:data-ending-style:-translate-y-nadicode-md data-[side=top]:data-starting-style:-translate-y-nadicode-md motion-reduce:data-[side=top]:data-ending-style:translate-none motion-reduce:data-[side=top]:data-starting-style:translate-none data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm", className), ...props, children: [children, showCloseButton && (_jsxs(SheetPrimitive.Close, { "data-slot": "sheet-close", render: _jsx(Button, { variant: "ghost", className: "absolute top-nadicode-md right-nadicode-md", size: "icon-sm" }), children: [_jsx(XIcon, {}), _jsx("span", { className: "sr-only", children: closeLabel })] }))] })] }));
|
|
25
25
|
}
|
|
26
26
|
function SheetHeader({ className, ...props }) {
|
|
27
27
|
return (_jsx("div", { "data-slot": "sheet-header", className: cn("flex flex-col gap-0.5 p-nadicode-lg", className), ...props }));
|
|
@@ -3,7 +3,7 @@ import { cn } from "../lib/utils.js";
|
|
|
3
3
|
import { SeamGrid } from "./seam-grid.js";
|
|
4
4
|
import { SectionIntro, SectionIntroKicker, SectionIntroLead, SectionIntroTitle, } from "./section-intro.js";
|
|
5
5
|
function ShiftBand({ kicker, title, children, proofs, className, ...props }) {
|
|
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-
|
|
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 font-medium text-foreground", children: proof.title }), _jsx("p", { className: "nc-type-body-sm text-[var(--nc-body)]", children: proof.body })] }, proof.title))) })] }));
|
|
7
7
|
}
|
|
8
8
|
function ShiftBandLead({ className, ...props }) {
|
|
9
9
|
return _jsx(SectionIntroLead, { className: cn("text-balance text-center", className), ...props });
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A still placeholder in the shape of the content that is coming. It does not
|
|
3
|
+
* pulse: a page load is the system's work, and only an Agent moves on its own.
|
|
4
|
+
*/
|
|
1
5
|
declare function Skeleton({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
|
|
2
6
|
export { Skeleton };
|
|
3
7
|
//# sourceMappingURL=skeleton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/components/skeleton.tsx"],"names":[],"mappings":"AAEA,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,+
|
|
1
|
+
{"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../src/components/skeleton.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AACH,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,+BAErE;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* A still placeholder in the shape of the content that is coming. It does not
|
|
5
|
+
* pulse: a page load is the system's work, and only an Agent moves on its own.
|
|
6
|
+
*/
|
|
3
7
|
function Skeleton({ className, ...props }) {
|
|
4
|
-
return
|
|
8
|
+
return _jsx("div", { "data-slot": "skeleton", className: cn("rounded-md bg-muted", className), ...props });
|
|
5
9
|
}
|
|
6
10
|
export { Skeleton };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sonner.d.ts","sourceRoot":"","sources":["../../src/components/sonner.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"sonner.d.ts","sourceRoot":"","sources":["../../src/components/sonner.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AAK9D,QAAA,MAAM,OAAO,GAAI,cAAc,YAAY,gCAgC1C,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { useTheme } from "next-themes";
|
|
4
4
|
import { Toaster as Sonner } from "sonner";
|
|
5
|
-
import { CircleCheckIcon, InfoIcon, TriangleAlertIcon, OctagonXIcon
|
|
5
|
+
import { CircleCheckIcon, InfoIcon, TriangleAlertIcon, OctagonXIcon } from "lucide-react";
|
|
6
|
+
import { WaitingLine } from "./waiting-line.js";
|
|
6
7
|
const Toaster = ({ ...props }) => {
|
|
7
8
|
const { theme = "system" } = useTheme();
|
|
8
9
|
return (_jsx(Sonner, { theme: theme, className: "toaster group", icons: {
|
|
@@ -10,7 +11,9 @@ const Toaster = ({ ...props }) => {
|
|
|
10
11
|
info: _jsx(InfoIcon, { className: "size-4" }),
|
|
11
12
|
warning: _jsx(TriangleAlertIcon, { className: "size-4" }),
|
|
12
13
|
error: _jsx(OctagonXIcon, { className: "size-4" }),
|
|
13
|
-
|
|
14
|
+
// A toast that stays up is already past a second, so its mark is the
|
|
15
|
+
// one waiting line rather than a spinning glyph.
|
|
16
|
+
loading: _jsx(WaitingLine, { className: "w-8", decorative: true }),
|
|
14
17
|
}, style: {
|
|
15
18
|
"--normal-bg": "var(--popover)",
|
|
16
19
|
"--normal-text": "var(--popover-foreground)",
|
|
@@ -20,14 +20,14 @@ function Statement({ className, ...props }) {
|
|
|
20
20
|
* renders only when `index` is set.
|
|
21
21
|
*/
|
|
22
22
|
function StatementEyebrow({ index, children, className, ...props }) {
|
|
23
|
-
return (_jsxs("p", { "data-slot": "statement-eyebrow", className: cn("nc-type-
|
|
23
|
+
return (_jsxs("p", { "data-slot": "statement-eyebrow", className: cn("nc-type-label-mono flex items-center gap-2 uppercase text-muted-foreground", className), ...props, children: [index != null ? (_jsxs("span", { "data-slot": "statement-eyebrow-index", className: "text-[var(--nc-link-deep)]", children: ["[", index, "]"] })) : null, children] }));
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
26
|
* StatementTitle — the large headline. Its lead clause reads in the foreground
|
|
27
27
|
* role; wrap the continuation clause in `StatementTail` to drop it to muted.
|
|
28
28
|
*/
|
|
29
29
|
function StatementTitle({ className, ...props }) {
|
|
30
|
-
return (_jsx("h2", { "data-slot": "statement-title", className: cn("nc-type-
|
|
30
|
+
return (_jsx("h2", { "data-slot": "statement-title", className: cn("nc-type-display-md max-w-[24ch] text-foreground", className), ...props }));
|
|
31
31
|
}
|
|
32
32
|
/** StatementTail — the muted continuation clause inside `StatementTitle` (V5 `.t2`). */
|
|
33
33
|
function StatementTail({ className, ...props }) {
|
package/dist/components/steps.js
CHANGED
|
@@ -32,9 +32,9 @@ function Steps({ kicker, title, children, className, ...props }) {
|
|
|
32
32
|
return (_jsxs("section", { "data-slot": "steps", className: cn("grid gap-8", className), ...props, children: [kicker || title ? (_jsxs(SectionIntro, { align: "start", className: "min-h-0 bg-transparent p-0", children: [kicker ? _jsx(SectionIntroKicker, { children: kicker }) : null, title ? (_jsx(SectionIntroTitle, { className: "mx-0 max-w-[28ch] text-balance text-left", children: title })) : null] })) : null, _jsx("div", { "data-slot": "steps-rail", "aria-hidden": "true", className: "h-px w-full bg-foreground" }), _jsx("div", { "data-slot": "steps-stations", className: "grid grid-cols-1 gap-10 sm:grid-cols-2 md:grid-cols-4", children: stations }), branches.length > 0 ? branches : null] }));
|
|
33
33
|
}
|
|
34
34
|
function Step({ index, title, price, body, className, children, ...props }) {
|
|
35
|
-
return (_jsxs("div", { "data-slot": "step", className: cn("flex flex-col gap-3", className), ...props, children: [_jsx("span", { "data-slot": "step-marker", "aria-hidden": "true", className: "size-2 rounded-[1px] bg-primary" }), index ? (_jsx("span", { "data-slot": "step-index", className: "font-mono text-[10px] tracking-[0.14em] text-muted-foreground uppercase", children: index })) : null, title ? (_jsx("h3", { "data-slot": "step-title", className: "nc-type-body-md-
|
|
35
|
+
return (_jsxs("div", { "data-slot": "step", className: cn("flex flex-col gap-3", className), ...props, children: [_jsx("span", { "data-slot": "step-marker", "aria-hidden": "true", className: "size-2 rounded-[1px] bg-primary" }), index ? (_jsx("span", { "data-slot": "step-index", className: "font-mono text-[10px] tracking-[0.14em] text-muted-foreground uppercase", children: index })) : null, title ? (_jsx("h3", { "data-slot": "step-title", className: "nc-type-body-md font-medium text-foreground", children: title })) : null, price ? (_jsx("span", { "data-slot": "step-price", className: "font-mono text-xs font-semibold tracking-[0.04em] text-[var(--nc-link-deep)] uppercase", children: price })) : null, body ? (_jsx("p", { "data-slot": "step-body", className: "nc-type-body-sm max-w-[30ch] text-muted-foreground", children: body })) : null, children] }));
|
|
36
36
|
}
|
|
37
37
|
function StepsBranch({ label, title, body, className, children, ...props }) {
|
|
38
|
-
return (_jsxs("aside", { "data-slot": "steps-branch", className: cn("flex flex-col gap-3 border-l border-dashed border-border pl-6", className), ...props, children: [label ? (_jsx("span", { "data-slot": "steps-branch-label", className: "font-mono text-[10px] tracking-[0.14em] text-[var(--nc-link-deep)] uppercase", children: label })) : null, title ? (_jsx("h3", { "data-slot": "steps-branch-title", className: "nc-type-body-md-
|
|
38
|
+
return (_jsxs("aside", { "data-slot": "steps-branch", className: cn("flex flex-col gap-3 border-l border-dashed border-border pl-6", className), ...props, children: [label ? (_jsx("span", { "data-slot": "steps-branch-label", className: "font-mono text-[10px] tracking-[0.14em] text-[var(--nc-link-deep)] uppercase", children: label })) : null, title ? (_jsx("h3", { "data-slot": "steps-branch-title", className: "nc-type-body-md font-medium text-foreground", children: title })) : null, body ? (_jsx("p", { "data-slot": "steps-branch-body", className: "nc-type-body-sm max-w-[52ch] text-muted-foreground", children: body })) : null, children] }));
|
|
39
39
|
}
|
|
40
40
|
export { Steps, Step, StepsBranch };
|
package/dist/components/table.js
CHANGED
|
@@ -18,7 +18,7 @@ function TableFooter({ className, ...props }) {
|
|
|
18
18
|
return (_jsx("tfoot", { "data-slot": "table-footer", className: cn("border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0", className), ...props }));
|
|
19
19
|
}
|
|
20
20
|
function TableRow({ className, ...props }) {
|
|
21
|
-
return (_jsx("tr", { "data-slot": "table-row", className: cn("border-b border-border transition-colors
|
|
21
|
+
return (_jsx("tr", { "data-slot": "table-row", className: cn("border-b border-border transition-colors in-[tbody]:hover:bg-accent in-[tbody]:has-[:focus-visible]:bg-accent in-[tbody]:has-aria-expanded:bg-accent data-[state=selected]:bg-muted", className), ...props }));
|
|
22
22
|
}
|
|
23
23
|
function TableHead({ className, ...props }) {
|
|
24
24
|
return (_jsx("th", { "data-slot": "table-head", className: cn("h-9 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0", className), ...props }));
|
package/dist/components/tabs.js
CHANGED
|
@@ -20,7 +20,7 @@ function TabsList({ className, variant = "default", ...props }) {
|
|
|
20
20
|
return (_jsx(TabsPrimitive.List, { "data-slot": "tabs-list", "data-variant": variant, className: cn(tabsListVariants({ variant }), className), ...props }));
|
|
21
21
|
}
|
|
22
22
|
function TabsTrigger({ className, ...props }) {
|
|
23
|
-
return (_jsx(TabsPrimitive.Tab, { "data-slot": "tabs-trigger", className: cn("nc-transition-paint relative inline-flex h-[calc(100%-1px)] min-h-touch-target min-w-touch-target flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[variant=default]/tabs-list:data-active:shadow-none group-data-[variant=line]/tabs-list:data-active:shadow-none [@media(hover:hover)_and_(pointer:fine)]:min-h-0 [@media(hover:hover)_and_(pointer:fine)]:min-w-0 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent", "data-active:bg-background data-active:text-foreground", "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity after:duration-[var(--nc-duration-confirm)] after:ease-[var(--nc-ease-out-strong)] group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:-bottom-1 group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100
|
|
23
|
+
return (_jsx(TabsPrimitive.Tab, { "data-slot": "tabs-trigger", className: cn("nc-transition-paint relative inline-flex h-[calc(100%-1px)] min-h-touch-target min-w-touch-target flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[variant=default]/tabs-list:data-active:shadow-none group-data-[variant=line]/tabs-list:data-active:shadow-none [@media(hover:hover)_and_(pointer:fine)]:min-h-0 [@media(hover:hover)_and_(pointer:fine)]:min-w-0 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent", "data-active:bg-background data-active:text-foreground", "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity after:duration-[var(--nc-duration-confirm)] after:ease-[var(--nc-ease-out-strong)] group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:-bottom-1 group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100", className), ...props }));
|
|
24
24
|
}
|
|
25
25
|
function TabsContent({ className, ...props }) {
|
|
26
26
|
return (_jsx(TabsPrimitive.Panel, { "data-slot": "tabs-content", className: cn("flex-1 text-sm outline-none", className), ...props }));
|
|
@@ -24,7 +24,7 @@ function TextureStrip({ className, ...props }) {
|
|
|
24
24
|
* surface. This wrapper remains exported to preserve the public 0.10 API.
|
|
25
25
|
*/
|
|
26
26
|
function TextureStripChip({ className, ...props }) {
|
|
27
|
-
return (_jsx("span", { "data-slot": "texture-strip-chip", className: cn("nc-type-
|
|
27
|
+
return (_jsx("span", { "data-slot": "texture-strip-chip", className: cn("nc-type-label-mono rounded-full border border-border bg-background px-3 py-1 text-muted-foreground uppercase", className), ...props }));
|
|
28
28
|
}
|
|
29
29
|
// The deprecated export is named here because this is where it is DEFINED —
|
|
30
30
|
// re-exporting it is what keeps the 0.10 public API alive.
|
|
@@ -3,7 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { Toggle as TogglePrimitive } from "@base-ui/react/toggle";
|
|
4
4
|
import { cva } from "class-variance-authority";
|
|
5
5
|
import { cn } from "../lib/utils.js";
|
|
6
|
-
const toggleVariants = cva("group/toggle inline-flex min-h-touch-target min-w-touch-target items-center justify-center gap-1 rounded-md border border-transparent text-sm font-medium whitespace-nowrap transition-[background-color,border-color,color,opacity] duration-[var(--nc-duration-confirm)] ease-[var(--nc-ease-out-strong)]
|
|
6
|
+
const toggleVariants = cva("group/toggle inline-flex min-h-touch-target min-w-touch-target items-center justify-center gap-1 rounded-md border border-transparent text-sm font-medium whitespace-nowrap transition-[background-color,border-color,color,opacity] duration-[var(--nc-duration-confirm)] ease-[var(--nc-ease-out-strong)] hover:bg-muted hover:text-foreground disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-pressed:bg-accent aria-pressed:font-semibold aria-pressed:text-accent-foreground data-pressed:bg-accent data-pressed:font-semibold data-pressed:text-accent-foreground [@media(hover:hover)_and_(pointer:fine)]:min-h-0 [@media(hover:hover)_and_(pointer:fine)]:min-w-0 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
|
|
7
7
|
variants: {
|
|
8
8
|
variant: {
|
|
9
9
|
default: "bg-transparent",
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Below this, a wait is not worth an indicator: the pending label on the
|
|
4
|
+
* control already says the system took the request. The delay is owned here so
|
|
5
|
+
* every surface waits the same amount of time before anything moves.
|
|
6
|
+
*/
|
|
7
|
+
declare const WAITING_LINE_DELAY_MS = 1000;
|
|
8
|
+
type WaitingLineProps = Omit<React.ComponentProps<"div">, "children"> & ({
|
|
9
|
+
decorative: true;
|
|
10
|
+
label?: never;
|
|
11
|
+
} | {
|
|
12
|
+
decorative?: false;
|
|
13
|
+
label: string;
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* The one moving thing a system wait may show: a 2 px ink track with a 32%
|
|
17
|
+
* segment crossing it linearly, after a second of waiting. Under reduced
|
|
18
|
+
* motion the whole line breathes in opacity instead of travelling.
|
|
19
|
+
*
|
|
20
|
+
* The track takes its 2 px from the moment the wait starts and stays empty and
|
|
21
|
+
* unannounced until that second is up, so the line arriving moves nothing
|
|
22
|
+
* around it. The interface answers briefly: one thing moves, and only the one
|
|
23
|
+
* the person is waiting for.
|
|
24
|
+
*
|
|
25
|
+
* An Agent's work is not a system wait: it shows that Agent's orb in its state
|
|
26
|
+
* and a sentence saying what it is doing.
|
|
27
|
+
*/
|
|
28
|
+
declare function WaitingLine({ className, decorative, label, ...props }: WaitingLineProps): React.JSX.Element;
|
|
29
|
+
export { WaitingLine, WAITING_LINE_DELAY_MS };
|
|
30
|
+
//# sourceMappingURL=waiting-line.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waiting-line.d.ts","sourceRoot":"","sources":["../../src/components/waiting-line.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;GAIG;AACH,QAAA,MAAM,qBAAqB,OAAO,CAAC;AAEnC,KAAK,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,GACnE,CAAC;IAAE,UAAU,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG;IAAE,UAAU,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEhF;;;;;;;;;;;;GAYG;AACH,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,UAAkB,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,qBA0BxF;AAED,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cn } from "../lib/utils.js";
|
|
5
|
+
/**
|
|
6
|
+
* Below this, a wait is not worth an indicator: the pending label on the
|
|
7
|
+
* control already says the system took the request. The delay is owned here so
|
|
8
|
+
* every surface waits the same amount of time before anything moves.
|
|
9
|
+
*/
|
|
10
|
+
const WAITING_LINE_DELAY_MS = 1000;
|
|
11
|
+
/**
|
|
12
|
+
* The one moving thing a system wait may show: a 2 px ink track with a 32%
|
|
13
|
+
* segment crossing it linearly, after a second of waiting. Under reduced
|
|
14
|
+
* motion the whole line breathes in opacity instead of travelling.
|
|
15
|
+
*
|
|
16
|
+
* The track takes its 2 px from the moment the wait starts and stays empty and
|
|
17
|
+
* unannounced until that second is up, so the line arriving moves nothing
|
|
18
|
+
* around it. The interface answers briefly: one thing moves, and only the one
|
|
19
|
+
* the person is waiting for.
|
|
20
|
+
*
|
|
21
|
+
* An Agent's work is not a system wait: it shows that Agent's orb in its state
|
|
22
|
+
* and a sentence saying what it is doing.
|
|
23
|
+
*/
|
|
24
|
+
function WaitingLine({ className, decorative = false, label, ...props }) {
|
|
25
|
+
const [elapsed, setElapsed] = React.useState(false);
|
|
26
|
+
React.useEffect(() => {
|
|
27
|
+
const timer = window.setTimeout(() => setElapsed(true), WAITING_LINE_DELAY_MS);
|
|
28
|
+
return () => window.clearTimeout(timer);
|
|
29
|
+
}, []);
|
|
30
|
+
const announced = elapsed && !decorative;
|
|
31
|
+
return (_jsx("div", { ...props, "aria-label": announced ? label : undefined, className: cn("relative h-0.5 w-full overflow-hidden", className), "data-slot": "waiting-line", "data-waiting": elapsed || undefined, role: announced ? "status" : undefined, children: elapsed ? (_jsx("span", { "aria-hidden": "true", className: "nc-anim-wait absolute inset-y-0 start-0 block bg-current" })) : null }));
|
|
32
|
+
}
|
|
33
|
+
export { WaitingLine, WAITING_LINE_DELAY_MS };
|
|
@@ -34,7 +34,7 @@ export const noInvalidTokenUtility = {
|
|
|
34
34
|
schema: [],
|
|
35
35
|
messages: {
|
|
36
36
|
invalidTokenUtility:
|
|
37
|
-
"{{utility}} is not generated by the installed
|
|
37
|
+
"{{utility}} is not generated by the installed nadicode design system. Use a utility from @nadicodeai/design-system/tailwind.",
|
|
38
38
|
},
|
|
39
39
|
},
|
|
40
40
|
create(context) {
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ export * from "./components/account-menu.js";
|
|
|
3
3
|
export * from "./components/action-band.js";
|
|
4
4
|
export * from "./components/action-menu.js";
|
|
5
5
|
export * from "./components/action-status.js";
|
|
6
|
-
export * from "./components/activity-orb.js";
|
|
7
6
|
export * from "./components/activity-calendar.js";
|
|
8
7
|
export * from "./components/agent-card.js";
|
|
9
8
|
export * from "./components/agent-orb.js";
|
|
@@ -14,8 +13,6 @@ export * from "./components/aspect-ratio.js";
|
|
|
14
13
|
export * from "./components/automation-section.js";
|
|
15
14
|
export * from "./components/avatar.js";
|
|
16
15
|
export * from "./components/badge.js";
|
|
17
|
-
export * from "./components/benefits-bento.js";
|
|
18
|
-
export * from "./components/bento.js";
|
|
19
16
|
export * from "./components/brand.js";
|
|
20
17
|
export * from "./components/brand-field.js";
|
|
21
18
|
export * from "./components/brand-icons.js";
|
|
@@ -69,7 +66,6 @@ export * from "./components/file-type-icon.js";
|
|
|
69
66
|
export * from "./components/footer.js";
|
|
70
67
|
export * from "./components/form.js";
|
|
71
68
|
export * from "./components/glass-control.js";
|
|
72
|
-
export * from "./components/glyph-spinner.js";
|
|
73
69
|
export * from "./components/handoff-banner.js";
|
|
74
70
|
export * from "./components/hero.js";
|
|
75
71
|
export * from "./components/hero-split.js";
|
|
@@ -95,12 +91,11 @@ export * from "./components/menubar.js";
|
|
|
95
91
|
export * from "./components/model-identity.js";
|
|
96
92
|
export * from "./components/model-mark.js";
|
|
97
93
|
export * from "./components/native-select.js";
|
|
98
|
-
export * from "./components/nav-bar.js";
|
|
99
94
|
export * from "./components/navigation-menu.js";
|
|
100
95
|
export * from "./components/newsletter.js";
|
|
101
96
|
export * from "./components/notice-banner.js";
|
|
102
|
-
export * from "./components/page-frame.js";
|
|
103
97
|
export * from "./components/pagination.js";
|
|
98
|
+
export * from "./components/pending-label.js";
|
|
104
99
|
export * from "./components/plugin-slot-boundary.js";
|
|
105
100
|
export * from "./components/popover.js";
|
|
106
101
|
export * from "./components/pricing.js";
|
|
@@ -126,7 +121,6 @@ export * from "./components/sidebar.js";
|
|
|
126
121
|
export * from "./components/skeleton.js";
|
|
127
122
|
export * from "./components/slider.js";
|
|
128
123
|
export * from "./components/sonner.js";
|
|
129
|
-
export * from "./components/spinner.js";
|
|
130
124
|
export * from "./components/statement.js";
|
|
131
125
|
export * from "./components/status-dot.js";
|
|
132
126
|
export * from "./components/status-row.js";
|
|
@@ -147,5 +141,5 @@ export * from "./components/tool-icon.js";
|
|
|
147
141
|
export * from "./components/tooltip.js";
|
|
148
142
|
export * from "./components/trend-badge.js";
|
|
149
143
|
export * from "./components/usage-meter.js";
|
|
150
|
-
export * from "./components/
|
|
144
|
+
export * from "./components/waiting-line.js";
|
|
151
145
|
//# sourceMappingURL=index.d.ts.map
|
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,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,6 @@ export * from "./components/account-menu.js";
|
|
|
3
3
|
export * from "./components/action-band.js";
|
|
4
4
|
export * from "./components/action-menu.js";
|
|
5
5
|
export * from "./components/action-status.js";
|
|
6
|
-
export * from "./components/activity-orb.js";
|
|
7
6
|
export * from "./components/activity-calendar.js";
|
|
8
7
|
export * from "./components/agent-card.js";
|
|
9
8
|
export * from "./components/agent-orb.js";
|
|
@@ -14,8 +13,6 @@ export * from "./components/aspect-ratio.js";
|
|
|
14
13
|
export * from "./components/automation-section.js";
|
|
15
14
|
export * from "./components/avatar.js";
|
|
16
15
|
export * from "./components/badge.js";
|
|
17
|
-
export * from "./components/benefits-bento.js";
|
|
18
|
-
export * from "./components/bento.js";
|
|
19
16
|
export * from "./components/brand.js";
|
|
20
17
|
export * from "./components/brand-field.js";
|
|
21
18
|
export * from "./components/brand-icons.js";
|
|
@@ -69,7 +66,6 @@ export * from "./components/file-type-icon.js";
|
|
|
69
66
|
export * from "./components/footer.js";
|
|
70
67
|
export * from "./components/form.js";
|
|
71
68
|
export * from "./components/glass-control.js";
|
|
72
|
-
export * from "./components/glyph-spinner.js";
|
|
73
69
|
export * from "./components/handoff-banner.js";
|
|
74
70
|
export * from "./components/hero.js";
|
|
75
71
|
export * from "./components/hero-split.js";
|
|
@@ -95,12 +91,11 @@ export * from "./components/menubar.js";
|
|
|
95
91
|
export * from "./components/model-identity.js";
|
|
96
92
|
export * from "./components/model-mark.js";
|
|
97
93
|
export * from "./components/native-select.js";
|
|
98
|
-
export * from "./components/nav-bar.js";
|
|
99
94
|
export * from "./components/navigation-menu.js";
|
|
100
95
|
export * from "./components/newsletter.js";
|
|
101
96
|
export * from "./components/notice-banner.js";
|
|
102
|
-
export * from "./components/page-frame.js";
|
|
103
97
|
export * from "./components/pagination.js";
|
|
98
|
+
export * from "./components/pending-label.js";
|
|
104
99
|
export * from "./components/plugin-slot-boundary.js";
|
|
105
100
|
export * from "./components/popover.js";
|
|
106
101
|
export * from "./components/pricing.js";
|
|
@@ -126,7 +121,6 @@ export * from "./components/sidebar.js";
|
|
|
126
121
|
export * from "./components/skeleton.js";
|
|
127
122
|
export * from "./components/slider.js";
|
|
128
123
|
export * from "./components/sonner.js";
|
|
129
|
-
export * from "./components/spinner.js";
|
|
130
124
|
export * from "./components/statement.js";
|
|
131
125
|
export * from "./components/status-dot.js";
|
|
132
126
|
export * from "./components/status-row.js";
|
|
@@ -147,4 +141,4 @@ export * from "./components/tool-icon.js";
|
|
|
147
141
|
export * from "./components/tooltip.js";
|
|
148
142
|
export * from "./components/trend-badge.js";
|
|
149
143
|
export * from "./components/usage-meter.js";
|
|
150
|
-
export * from "./components/
|
|
144
|
+
export * from "./components/waiting-line.js";
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { AgentOrbFigure } from "./agent-orb.js";
|
|
2
2
|
export type AgentOrbState = "idle" | "working" | "waiting" | "blocked" | "thinking" | "done";
|
|
3
3
|
export declare function stateSpeed(state: AgentOrbState, form: AgentOrbFigure): number;
|
|
4
|
+
/**
|
|
5
|
+
* Reduced motion turns movement off and keeps opacity and colour, so a
|
|
6
|
+
* thinking or working orb breathes between full ink and 0.45 over 1.6 s,
|
|
7
|
+
* ease-in-out, and busy still reads as busy. Every other state holds still.
|
|
8
|
+
*/
|
|
9
|
+
export declare function reducedBreath(state: AgentOrbState, seconds: number): number;
|
|
4
10
|
export declare function motionPose(form: AgentOrbFigure, state: AgentOrbState, age: number): {
|
|
5
11
|
sx: number;
|
|
6
12
|
sy: number;
|
|
@@ -10,5 +16,7 @@ export declare function motionPose(form: AgentOrbFigure, state: AgentOrbState, a
|
|
|
10
16
|
split: number;
|
|
11
17
|
opacity: number;
|
|
12
18
|
};
|
|
13
|
-
export declare function paintOrbCue(context: CanvasRenderingContext2D, state: AgentOrbState, size: number, seconds: number, reduced: boolean, colors: readonly string[], depth: "back" | "front"
|
|
19
|
+
export declare function paintOrbCue(context: CanvasRenderingContext2D, state: AgentOrbState, size: number, seconds: number, reduced: boolean, colors: readonly string[], depth: "back" | "front",
|
|
20
|
+
/** The orb's whole ink, so the cue breathes with the body under reduced motion. */
|
|
21
|
+
ink?: number): void;
|
|
14
22
|
//# sourceMappingURL=agent-orb-motion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-orb-motion.d.ts","sourceRoot":"","sources":["../../src/internal/agent-orb-motion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAa7F,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"agent-orb-motion.d.ts","sourceRoot":"","sources":["../../src/internal/agent-orb-motion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AAa7F,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,UAKpE;AAKD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,UAIlE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM;;;;;;;;EAsCjF;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,KAAK,EAAE,MAAM,GAAG,OAAO;AACvB,mFAAmF;AACnF,GAAG,SAAI,QAgER"}
|
|
@@ -9,9 +9,24 @@ const personalities = {
|
|
|
9
9
|
morph: { speed: 0.9, tilt: 0.12 },
|
|
10
10
|
};
|
|
11
11
|
export function stateSpeed(state, form) {
|
|
12
|
-
|
|
12
|
+
// Idle is 0: only an Agent at work moves, so a list of twenty shows at a
|
|
13
|
+
// glance which ones are busy.
|
|
14
|
+
const speed = { idle: 0, working: 1, thinking: 1, waiting: 0, blocked: 0, done: 0.65 };
|
|
13
15
|
return speed[state] * personalities[form].speed;
|
|
14
16
|
}
|
|
17
|
+
/** The breath's period, in seconds. */
|
|
18
|
+
const BREATH_SECONDS = 1.6;
|
|
19
|
+
/**
|
|
20
|
+
* Reduced motion turns movement off and keeps opacity and colour, so a
|
|
21
|
+
* thinking or working orb breathes between full ink and 0.45 over 1.6 s,
|
|
22
|
+
* ease-in-out, and busy still reads as busy. Every other state holds still.
|
|
23
|
+
*/
|
|
24
|
+
export function reducedBreath(state, seconds) {
|
|
25
|
+
if (state !== "thinking" && state !== "working")
|
|
26
|
+
return 1;
|
|
27
|
+
const phase = (1 - Math.cos((seconds * Math.PI * 2) / BREATH_SECONDS)) / 2;
|
|
28
|
+
return 1 - 0.55 * phase;
|
|
29
|
+
}
|
|
15
30
|
export function motionPose(form, state, age) {
|
|
16
31
|
const personality = personalities[form];
|
|
17
32
|
let sx = 0.82;
|
|
@@ -21,13 +36,8 @@ export function motionPose(form, state, age) {
|
|
|
21
36
|
let rotation = 0;
|
|
22
37
|
const split = 0;
|
|
23
38
|
let opacity = 1;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
sx += breath * 0.01;
|
|
27
|
-
sy += breath * 0.01;
|
|
28
|
-
y = -breath * 0.004;
|
|
29
|
-
}
|
|
30
|
-
else if (state === "waiting") {
|
|
39
|
+
// Idle has no branch: it is the still pose every gesture departs from.
|
|
40
|
+
if (state === "waiting") {
|
|
31
41
|
sx = 0.8;
|
|
32
42
|
sy = 0.84;
|
|
33
43
|
y = -0.015;
|
|
@@ -59,7 +69,9 @@ export function motionPose(form, state, age) {
|
|
|
59
69
|
}
|
|
60
70
|
return { sx, sy, x, y, rotation, split, opacity };
|
|
61
71
|
}
|
|
62
|
-
export function paintOrbCue(context, state, size, seconds, reduced, colors, depth
|
|
72
|
+
export function paintOrbCue(context, state, size, seconds, reduced, colors, depth,
|
|
73
|
+
/** The orb's whole ink, so the cue breathes with the body under reduced motion. */
|
|
74
|
+
ink = 1) {
|
|
63
75
|
if (state !== "working" && state !== "thinking" && state !== "done")
|
|
64
76
|
return;
|
|
65
77
|
context.save();
|
|
@@ -70,7 +82,7 @@ export function paintOrbCue(context, state, size, seconds, reduced, colors, dept
|
|
|
70
82
|
? 0.5
|
|
71
83
|
: (1 + Math.cos((seconds * Math.PI * 2) / 3.6 - (i * Math.PI * 2) / 3)) / 2;
|
|
72
84
|
context.fillStyle = colors[i % colors.length];
|
|
73
|
-
context.globalAlpha = 0.65 + pulse * 0.35;
|
|
85
|
+
context.globalAlpha = (0.65 + pulse * 0.35) * ink;
|
|
74
86
|
context.beginPath();
|
|
75
87
|
context.arc(size * (0.5 + (i - 1) * 0.09), size * 0.08, Math.max(1, size * (0.022 + pulse * 0.005)), 0, Math.PI * 2);
|
|
76
88
|
context.fill();
|
|
@@ -108,7 +120,7 @@ export function paintOrbCue(context, state, size, seconds, reduced, colors, dept
|
|
|
108
120
|
if (front !== (depth === "front"))
|
|
109
121
|
continue;
|
|
110
122
|
const taper = Math.sin(Math.PI * (0.04 + fraction * 0.92));
|
|
111
|
-
context.globalAlpha = fade * (front ? 0.92 : 0.55) * (0.25 + taper * 0.75);
|
|
123
|
+
context.globalAlpha = fade * (front ? 0.92 : 0.55) * (0.25 + taper * 0.75) * ink;
|
|
112
124
|
context.lineWidth = Math.max(0.65, size * 0.027 * taper);
|
|
113
125
|
context.beginPath();
|
|
114
126
|
context.moveTo(...point(angle));
|
|
@@ -13,6 +13,8 @@ export type AgentOrbForm = keyof typeof agentOrbForms;
|
|
|
13
13
|
/** A chosen form, or Nadia's own ribbon, which nobody chooses. */
|
|
14
14
|
export type AgentOrbFigure = AgentOrbForm | "nadia";
|
|
15
15
|
export type AgentOrbSize = 20 | 24 | 32 | 40 | 64 | 96 | 160;
|
|
16
|
+
/** How loudly one orb reads on its own ground. */
|
|
17
|
+
export type AgentOrbPresence = "plain" | "over-picture";
|
|
16
18
|
/**
|
|
17
19
|
* The vendor's `ribbon` geometry (thinking-orbs 0.3.1, MIT, Jakub Antalik),
|
|
18
20
|
* repeated here only so every dot carries its lane through the depth sort. The
|
|
@@ -20,7 +22,18 @@ export type AgentOrbSize = 20 | 24 | 32 | 40 | 64 | 96 | 160;
|
|
|
20
22
|
* a stripe jump between lanes as the ribbon turns; the lane is the stable id.
|
|
21
23
|
*/
|
|
22
24
|
export declare function stripedRibbonFrame(size: number, t: number, opts: ModeOpts): OrbFrame;
|
|
23
|
-
export
|
|
25
|
+
export type AgentOrbMountOptions = {
|
|
26
|
+
form: AgentOrbFigure;
|
|
27
|
+
/**
|
|
28
|
+
* The size the canvas is laid out at when nothing else sizes it. The engine
|
|
29
|
+
* paints the box it actually occupies, so this is only the starting point.
|
|
30
|
+
*/
|
|
31
|
+
size: AgentOrbSize;
|
|
32
|
+
paused?: boolean;
|
|
33
|
+
state?: AgentOrbState;
|
|
34
|
+
presence?: AgentOrbPresence;
|
|
35
|
+
};
|
|
36
|
+
export declare function mountAgentOrb(canvas: HTMLCanvasElement, options: AgentOrbMountOptions): {
|
|
24
37
|
destroy(): void;
|
|
25
38
|
setPaused(_value: boolean): void;
|
|
26
39
|
setState(_value: AgentOrbState): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-orb.d.ts","sourceRoot":"","sources":["../../src/internal/agent-orb.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EAEb,KAAK,QAAQ,EAId,MAAM,sBAAsB,CAAC;AAE9B,OAAO,
|
|
1
|
+
{"version":3,"file":"agent-orb.d.ts","sourceRoot":"","sources":["../../src/internal/agent-orb.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EAEb,KAAK,QAAQ,EAId,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,aAAa,EAKnB,MAAM,oBAAoB,CAAC;AAE5B,QAAA,MAAM,aAAa;;;;;;;;CAQ0B,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,aAAa,CAAC;AACtD,kEAAkE;AAClE,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,OAAO,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;AAE7D,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,cAAc,CAAC;AA+BxD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAuDpF;AAmFD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB;;;OAGG;IACH,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,oBAAoB;;sBAIzC,OAAO;qBAAuB,aAAa;EAqJvF"}
|