@devalok/shilp-sutra 0.51.0 → 0.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/AGENTS.md +1 -1
  2. package/MIGRATION.md +12 -0
  3. package/dist/_chunks/motion-provider.js +7 -6
  4. package/dist/_chunks/motion-provider.js.map +1 -1
  5. package/dist/_chunks/success.js +53 -53
  6. package/dist/ai/command-bar.js +158 -158
  7. package/dist/ai/command-bar.js.map +1 -1
  8. package/dist/ai/conversation.js +5 -5
  9. package/dist/composed/command-palette.js +17 -17
  10. package/dist/composed/command-palette.js.map +1 -1
  11. package/dist/composed/priority-indicator.d.ts +15 -6
  12. package/dist/composed/priority-indicator.d.ts.map +1 -1
  13. package/dist/composed/priority-indicator.js +37 -88
  14. package/dist/composed/priority-indicator.js.map +1 -1
  15. package/dist/composed/schedule-view.d.ts +17 -2
  16. package/dist/composed/schedule-view.d.ts.map +1 -1
  17. package/dist/composed/schedule-view.js +163 -64
  18. package/dist/composed/schedule-view.js.map +1 -1
  19. package/dist/motion/motion-provider.d.ts.map +1 -1
  20. package/dist/shell/bottom-navbar.d.ts +32 -6
  21. package/dist/shell/bottom-navbar.d.ts.map +1 -1
  22. package/dist/shell/bottom-navbar.js +156 -129
  23. package/dist/shell/bottom-navbar.js.map +1 -1
  24. package/dist/tokens/primitives.css +6 -2
  25. package/dist/tokens/semantic.css +20 -1
  26. package/dist/tokens/utilities.css +6 -0
  27. package/dist/ui/autocomplete.d.ts +34 -32
  28. package/dist/ui/autocomplete.d.ts.map +1 -1
  29. package/dist/ui/autocomplete.js +115 -110
  30. package/dist/ui/autocomplete.js.map +1 -1
  31. package/dist/ui/button-group.js +2 -0
  32. package/dist/ui/button-group.js.map +1 -1
  33. package/dist/ui/button-processing.d.ts.map +1 -1
  34. package/dist/ui/button-processing.js +1 -0
  35. package/dist/ui/button-processing.js.map +1 -1
  36. package/dist/ui/button.d.ts +3 -3
  37. package/dist/ui/button.d.ts.map +1 -1
  38. package/dist/ui/button.js +26 -0
  39. package/dist/ui/button.js.map +1 -1
  40. package/dist/ui/color-input.d.ts.map +1 -1
  41. package/dist/ui/color-input.js +82 -82
  42. package/dist/ui/color-input.js.map +1 -1
  43. package/dist/ui/combobox.js +4 -4
  44. package/dist/ui/icon.d.ts +2 -0
  45. package/dist/ui/icon.d.ts.map +1 -1
  46. package/dist/ui/icon.js +31 -26
  47. package/dist/ui/icon.js.map +1 -1
  48. package/dist/ui/index.js +30 -30
  49. package/dist/ui/search-input.d.ts.map +1 -1
  50. package/dist/ui/search-input.js +5 -4
  51. package/dist/ui/search-input.js.map +1 -1
  52. package/dist/ui/segmented-control.d.ts +28 -6
  53. package/dist/ui/segmented-control.d.ts.map +1 -1
  54. package/dist/ui/segmented-control.js +61 -43
  55. package/dist/ui/segmented-control.js.map +1 -1
  56. package/dist/ui/sidebar.js +7 -7
  57. package/dist/ui/split-button.d.ts.map +1 -1
  58. package/dist/ui/split-button.js +7 -0
  59. package/dist/ui/split-button.js.map +1 -1
  60. package/docs/components/composed/priority-indicator.md +22 -11
  61. package/docs/components/composed/schedule-view.md +20 -5
  62. package/docs/components/shell/bottom-navbar.md +24 -5
  63. package/docs/components/ui/autocomplete.md +26 -10
  64. package/docs/components/ui/button.md +2 -2
  65. package/docs/components/ui/segmented-control.md +31 -11
  66. package/docs/recipes/install-remix.md +3 -3
  67. package/docs/recipes/install-vite.md +3 -3
  68. package/docs/recipes/server-components.md +2 -2
  69. package/llms.txt +1 -1
  70. package/make-kit/foundations/color.md +20 -0
  71. package/make-kit/foundations/dark-mode.md +6 -9
  72. package/make-kit/foundations/icons.md +3 -3
  73. package/make-kit/setup.md +4 -4
  74. package/mcp-manifest.json +239 -35
  75. package/package.json +1 -1
  76. package/scripts/welcome.mjs +59 -1
  77. package/skill/SKILL.md +1 -1
  78. package/skill/references/components.md +1 -1
  79. package/skill/references/server-components.md +2 -2
  80. package/skill/references/setup-remix.md +3 -3
  81. package/skill/references/setup-vite.md +3 -3
package/AGENTS.md CHANGED
@@ -20,7 +20,7 @@ If you are a human, read [README.md](./README.md) instead.
20
20
 
21
21
  ## How to get details, in priority order
22
22
 
23
- 1. **shilp-sutra MCP** — version-exact answers as JSON, cheapest on context. Hosted at `https://shilp-sutra.devalok.in/mcp` (connect it if it isn't already; it beats reading the frozen docs in `node_modules`). The tool surface is listed under "MCP tools" below. Always pass the consumer's installed version (from `node_modules/@devalok/shilp-sutra/package.json`) as `version`.
23
+ 1. **shilp-sutra MCP** — version-exact answers as JSON, cheapest on context. Hosted at `https://shilp-sutra.devalok.in/mcp`. On install the package writes a project-scoped `.mcp.json` declaring this server, so your client (Claude Code / Cursor / Codex) should prompt you to approve it approve it. If it is not wired yet, add it in one command: `claude mcp add --transport http shilp-sutra https://shilp-sutra.devalok.in/mcp` (or the equivalent in your agent). It beats reading the frozen docs in `node_modules`. The tool surface is listed under "MCP tools" below. Always pass the consumer's installed version (from `node_modules/@devalok/shilp-sutra/package.json`) as `version`.
24
24
  2. **`packages/core/llms.txt`** — the ~3K-token router: what exists + where to get detail. Load this by default; it is deliberately tiny.
25
25
  3. **`packages/core/docs/components/<tier>/<name>.md`** — single-component doc (~3K tokens: props, examples, composability, gotchas). Read ONLY the components you're using — never bulk-read the directory or concatenate these.
26
26
  4. **`packages/core/mcp-manifest.json`** — everything machine-readable (props, tokens, composition; react-docgen shape). Prefer targeted reads over prose when you need structured data without the MCP.
package/MIGRATION.md CHANGED
@@ -4,6 +4,18 @@ This page indexes all breaking changes across `@devalok/shilp-sutra` versions. F
4
4
 
5
5
  > **Upgrading from &lt; 0.36?** Start here, then read each intermediate version section. Breaking changes stack — skipping versions means stacking migrations.
6
6
 
7
+ ## v0.53.0 — additive (no migration required)
8
+
9
+ Nothing breaks at the TypeScript level; this release is additive.
10
+
11
+ > Auto-stubbed by `version-packages` so the release audit's MIGRATION-section gate can't block. If any behavioral or visual change needs consumer action, replace this stub with the specifics on the Version Packages PR before publishing.
12
+
13
+ ## v0.52.0 — additive (no migration required)
14
+
15
+ Nothing breaks at the TypeScript level; this release is additive.
16
+
17
+ > Auto-stubbed by `version-packages` so the release audit's MIGRATION-section gate can't block. If any behavioral or visual change needs consumer action, replace this stub with the specifics on the Version Packages PR before publishing.
18
+
7
19
  ## v0.51.0 — additive (no migration required)
8
20
 
9
21
  Nothing breaks at the TypeScript level; this release is additive.
@@ -4,11 +4,7 @@ import * as n from "react";
4
4
  import { jsx as r } from "react/jsx-runtime";
5
5
  import { MotionConfig as i, useReducedMotion as a } from "framer-motion";
6
6
  //#region src/motion/motion-provider.tsx
7
- var o = n.createContext({
8
- springs: e,
9
- tweens: t,
10
- reducedMotion: !1
11
- });
7
+ var o = n.createContext(null);
12
8
  function s({ children: s, reducedMotion: c = "user" }) {
13
9
  let l = a() ?? !1, u = c === "user" ? l : c, d = n.useMemo(() => ({
14
10
  springs: e,
@@ -24,7 +20,12 @@ function s({ children: s, reducedMotion: c = "user" }) {
24
20
  });
25
21
  }
26
22
  function c() {
27
- return n.useContext(o);
23
+ let r = n.useContext(o), i = a() ?? !1;
24
+ return r || {
25
+ springs: e,
26
+ tweens: t,
27
+ reducedMotion: i
28
+ };
28
29
  }
29
30
  //#endregion
30
31
  export { s as MotionProvider, c as useMotion };
@@ -1 +1 @@
1
- {"version":3,"file":"motion-provider.js","names":[],"sources":["../../src/motion/motion-provider.tsx"],"sourcesContent":["'use client'\n\nimport { MotionConfig, useReducedMotion as useFMReducedMotion } from 'framer-motion'\nimport * as React from 'react'\n\nimport { springs, tweens } from '../ui/lib/motion'\n\ntype ReducedMotionMode = 'user' | boolean\n\ntype MotionContextValue = {\n springs: typeof springs\n tweens: typeof tweens\n reducedMotion: boolean\n}\n\nconst MotionContext = React.createContext<MotionContextValue>({\n springs,\n tweens,\n reducedMotion: false,\n})\n\ntype MotionProviderProps = {\n children: React.ReactNode\n /** 'user' = detect OS preference, true = force off, false = force on */\n reducedMotion?: ReducedMotionMode\n}\n\nfunction MotionProvider({ children, reducedMotion = 'user' }: MotionProviderProps) {\n const osPreference = useFMReducedMotion() ?? false\n const isReduced = reducedMotion === 'user' ? osPreference : reducedMotion\n\n const value = React.useMemo<MotionContextValue>(\n () => ({ springs, tweens, reducedMotion: isReduced }),\n [isReduced],\n )\n\n return (\n <MotionContext.Provider value={value}>\n <MotionConfig reducedMotion={reducedMotion === 'user' ? 'user' : reducedMotion ? 'always' : 'never'}>\n {children}\n </MotionConfig>\n </MotionContext.Provider>\n )\n}\n\nfunction useMotion() {\n return React.useContext(MotionContext)\n}\n\nexport { MotionProvider, type MotionProviderProps,useMotion }\n"],"mappings":";;;;;AAeA,IAAM,IAAgB,EAAM,cAAkC;CAC5D;CACA;CACA,eAAe;AACjB,CAAC;AAQD,SAAS,EAAe,EAAE,aAAU,mBAAgB,UAA+B;CACjF,IAAM,IAAe,EAAmB,KAAK,IACvC,IAAY,MAAkB,SAAS,IAAe,GAEtD,IAAQ,EAAM,eACX;EAAE;EAAS;EAAQ,eAAe;CAAU,IACnD,CAAC,CAAS,CACZ;CAEA,OACE,kBAAC,EAAc,UAAf;EAA+B;YAC7B,kBAAC,GAAD;GAAc,eAAe,MAAkB,SAAS,SAAS,IAAgB,WAAW;GACzF;EACW,CAAA;CACQ,CAAA;AAE5B;AAEA,SAAS,IAAY;CACnB,OAAO,EAAM,WAAW,CAAa;AACvC"}
1
+ {"version":3,"file":"motion-provider.js","names":[],"sources":["../../src/motion/motion-provider.tsx"],"sourcesContent":["'use client'\n\nimport { MotionConfig, useReducedMotion as useFMReducedMotion } from 'framer-motion'\nimport * as React from 'react'\n\nimport { springs, tweens } from '../ui/lib/motion'\n\ntype ReducedMotionMode = 'user' | boolean\n\ntype MotionContextValue = {\n springs: typeof springs\n tweens: typeof tweens\n reducedMotion: boolean\n}\n\n// `null` default = \"no MotionProvider mounted\". `useMotion()` detects this and\n// falls back to the OS `prefers-reduced-motion` setting, so components respect\n// reduced motion out of the box — a provider is an override, not a requirement.\nconst MotionContext = React.createContext<MotionContextValue | null>(null)\n\ntype MotionProviderProps = {\n children: React.ReactNode\n /** 'user' = detect OS preference, true = force off, false = force on */\n reducedMotion?: ReducedMotionMode\n}\n\nfunction MotionProvider({ children, reducedMotion = 'user' }: MotionProviderProps) {\n const osPreference = useFMReducedMotion() ?? false\n const isReduced = reducedMotion === 'user' ? osPreference : reducedMotion\n\n const value = React.useMemo<MotionContextValue>(\n () => ({ springs, tweens, reducedMotion: isReduced }),\n [isReduced],\n )\n\n return (\n <MotionContext.Provider value={value}>\n <MotionConfig reducedMotion={reducedMotion === 'user' ? 'user' : reducedMotion ? 'always' : 'never'}>\n {children}\n </MotionConfig>\n </MotionContext.Provider>\n )\n}\n\nfunction useMotion(): MotionContextValue {\n const ctx = React.useContext(MotionContext)\n // Always called (hook order stable); only used when no provider is mounted.\n const osPreference = useFMReducedMotion() ?? false\n if (ctx) return ctx\n return { springs, tweens, reducedMotion: osPreference }\n}\n\nexport { MotionProvider, type MotionProviderProps,useMotion }\n"],"mappings":";;;;;AAkBA,IAAM,IAAgB,EAAM,cAAyC,IAAI;AAQzE,SAAS,EAAe,EAAE,aAAU,mBAAgB,UAA+B;CACjF,IAAM,IAAe,EAAmB,KAAK,IACvC,IAAY,MAAkB,SAAS,IAAe,GAEtD,IAAQ,EAAM,eACX;EAAE;EAAS;EAAQ,eAAe;CAAU,IACnD,CAAC,CAAS,CACZ;CAEA,OACE,kBAAC,EAAc,UAAf;EAA+B;YAC7B,kBAAC,GAAD;GAAc,eAAe,MAAkB,SAAS,SAAS,IAAgB,WAAW;GACzF;EACW,CAAA;CACQ,CAAA;AAE5B;AAEA,SAAS,IAAgC;CACvC,IAAM,IAAM,EAAM,WAAW,CAAa,GAEpC,IAAe,EAAmB,KAAK;CAE7C,OADI,KACG;EAAE;EAAS;EAAQ,eAAe;CAAa;AACxD"}
@@ -3,14 +3,14 @@ import { durations as e, springs as t, tweens as n } from "../ui/lib/motion.js";
3
3
  import { cn as r } from "../ui/lib/utils.js";
4
4
  import { Icon as i } from "../ui/icon.js";
5
5
  import { Alert as a } from "../ui/alert.js";
6
- import { Skeleton as o } from "../ui/skeleton.js";
7
- import { BadgeCompound as s } from "./badge-group.js";
8
- import { Button as c } from "../ui/button.js";
9
- import { Collapsible as l, CollapsibleContent as u, CollapsibleTrigger as d } from "../ui/collapsible.js";
10
- import { Table as f, TableBody as p, TableCaption as m, TableCell as h, TableHead as g, TableHeader as _, TableRow as v } from "../ui/table.js";
11
- import { Separator as y } from "../ui/separator.js";
12
- import { StatCard as b } from "../ui/stat-card.js";
13
- import { useMotion as x } from "./motion-provider.js";
6
+ import { useMotion as o } from "./motion-provider.js";
7
+ import { Skeleton as s } from "../ui/skeleton.js";
8
+ import { BadgeCompound as c } from "./badge-group.js";
9
+ import { Button as l } from "../ui/button.js";
10
+ import { Collapsible as u, CollapsibleContent as d, CollapsibleTrigger as f } from "../ui/collapsible.js";
11
+ import { Table as p, TableBody as m, TableCaption as h, TableCell as g, TableHead as _, TableHeader as v, TableRow as y } from "../ui/table.js";
12
+ import { Separator as b } from "../ui/separator.js";
13
+ import { StatCard as x } from "../ui/stat-card.js";
14
14
  import { BlockShell as S } from "./block-shell.js";
15
15
  import * as C from "react";
16
16
  import { jsx as w, jsxs as T } from "react/jsx-runtime";
@@ -21,14 +21,14 @@ function A(e, t) {
21
21
  if (t.variant === "badge") {
22
22
  if (e && typeof e == "object" && "label" in e) {
23
23
  let t = e;
24
- return /* @__PURE__ */ w(s, {
24
+ return /* @__PURE__ */ w(c, {
25
25
  variant: "subtle",
26
26
  size: "sm",
27
27
  color: t.color,
28
28
  children: t.label
29
29
  });
30
30
  }
31
- return /* @__PURE__ */ w(s, {
31
+ return /* @__PURE__ */ w(c, {
32
32
  variant: "subtle",
33
33
  size: "sm",
34
34
  children: String(e ?? "")
@@ -45,38 +45,38 @@ function j(e, t, n) {
45
45
  });
46
46
  }
47
47
  var M = C.memo(function({ data: e, confidence: n }) {
48
- let { reducedMotion: i } = x(), [a, o] = C.useState(null), [s, c] = C.useState(null), l = C.useCallback((t) => {
49
- e.sortable && (a === t ? s === "asc" ? c("desc") : s === "desc" && (o(null), c(null)) : (o(t), c("asc")));
48
+ let { reducedMotion: i } = o(), [a, s] = C.useState(null), [c, l] = C.useState(null), u = C.useCallback((t) => {
49
+ e.sortable && (a === t ? c === "asc" ? l("desc") : c === "desc" && (s(null), l(null)) : (s(t), l("asc")));
50
50
  }, [
51
51
  e.sortable,
52
52
  a,
53
- s
54
- ]), u = e.columns ?? [], d = j(e.rows ?? [], a, s);
53
+ c
54
+ ]), d = e.columns ?? [], f = j(e.rows ?? [], a, c);
55
55
  return /* @__PURE__ */ w(S, {
56
56
  confidence: n,
57
57
  className: "overflow-x-auto",
58
- children: /* @__PURE__ */ T(f, { children: [
59
- e.caption && /* @__PURE__ */ w(m, { children: e.caption }),
60
- /* @__PURE__ */ w(_, { children: /* @__PURE__ */ w(v, { children: u.map((t) => {
61
- let n = a === t.key, i = e.sortable ? n ? s === "asc" ? "ascending" : "descending" : "none" : void 0;
62
- return /* @__PURE__ */ w(g, {
58
+ children: /* @__PURE__ */ T(p, { children: [
59
+ e.caption && /* @__PURE__ */ w(h, { children: e.caption }),
60
+ /* @__PURE__ */ w(v, { children: /* @__PURE__ */ w(y, { children: d.map((t) => {
61
+ let n = a === t.key, i = e.sortable ? n ? c === "asc" ? "ascending" : "descending" : "none" : void 0;
62
+ return /* @__PURE__ */ w(_, {
63
63
  role: "columnheader",
64
64
  className: r(t.variant === "number" && "text-right", e.sortable && "cursor-pointer select-none"),
65
65
  tabIndex: e.sortable ? 0 : void 0,
66
- onClick: e.sortable ? () => l(t.key) : void 0,
66
+ onClick: e.sortable ? () => u(t.key) : void 0,
67
67
  onKeyDown: e.sortable ? (e) => {
68
- (e.key === "Enter" || e.key === " ") && (e.preventDefault(), l(t.key));
68
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), u(t.key));
69
69
  } : void 0,
70
70
  "aria-sort": i,
71
71
  children: /* @__PURE__ */ T("span", {
72
72
  className: "inline-flex items-center gap-1",
73
73
  children: [
74
74
  t.label,
75
- n && s === "asc" && /* @__PURE__ */ w("span", {
75
+ n && c === "asc" && /* @__PURE__ */ w("span", {
76
76
  "aria-hidden": "true",
77
77
  children: "▲"
78
78
  }),
79
- n && s === "desc" && /* @__PURE__ */ w("span", {
79
+ n && c === "desc" && /* @__PURE__ */ w("span", {
80
80
  "aria-hidden": "true",
81
81
  children: "▼"
82
82
  })
@@ -84,7 +84,7 @@ var M = C.memo(function({ data: e, confidence: n }) {
84
84
  })
85
85
  }, t.key);
86
86
  }) }) }),
87
- /* @__PURE__ */ w(p, { children: d.map((e, n) => {
87
+ /* @__PURE__ */ w(m, { children: f.map((e, n) => {
88
88
  let a = typeof e.id == "string" || typeof e.id == "number" ? String(e.id) : `row-${n}`;
89
89
  return /* @__PURE__ */ w(i ? "tr" : k.tr, {
90
90
  className: "hover:bg-surface-raised-hover transition-colors",
@@ -102,7 +102,7 @@ var M = C.memo(function({ data: e, confidence: n }) {
102
102
  delay: n * .03
103
103
  }
104
104
  },
105
- children: u.map((t) => /* @__PURE__ */ w(h, {
105
+ children: d.map((t) => /* @__PURE__ */ w(g, {
106
106
  className: r("text-body-sm py-ds-02b px-ds-04", t.variant === "number" && "text-right tabular-nums font-medium"),
107
107
  children: A(e[t.key], t)
108
108
  }, t.key))
@@ -129,27 +129,27 @@ var N = C.memo(function({ data: e, confidence: t, onAction: n }) {
129
129
  }),
130
130
  /* @__PURE__ */ T("div", {
131
131
  className: "flex items-center gap-3",
132
- children: [/* @__PURE__ */ w(c, {
132
+ children: [/* @__PURE__ */ w(l, {
133
133
  variant: "solid",
134
134
  color: e.destructive ? "error" : void 0,
135
135
  onClick: r,
136
136
  children: e.label
137
- }), /* @__PURE__ */ w(c, {
137
+ }), /* @__PURE__ */ w(l, {
138
138
  variant: "ghost",
139
139
  onClick: i,
140
140
  children: "Cancel"
141
141
  })]
142
142
  }),
143
- e.rationale && /* @__PURE__ */ T(l, {
143
+ e.rationale && /* @__PURE__ */ T(u, {
144
144
  className: "mt-3",
145
- children: [/* @__PURE__ */ w(d, {
145
+ children: [/* @__PURE__ */ w(f, {
146
146
  asChild: !0,
147
147
  children: /* @__PURE__ */ w("button", {
148
148
  type: "button",
149
149
  className: "text-caption text-surface-fg-subtle underline cursor-pointer",
150
150
  children: "Why this action?"
151
151
  })
152
- }), /* @__PURE__ */ w(u, { children: /* @__PURE__ */ w("p", {
152
+ }), /* @__PURE__ */ w(d, { children: /* @__PURE__ */ w("p", {
153
153
  className: "text-body-sm text-surface-fg-muted mt-2 p-3 bg-surface-raised rounded-surface",
154
154
  children: e.rationale
155
155
  }) })]
@@ -161,13 +161,13 @@ N.displayName = "ConfirmBlock";
161
161
  //#endregion
162
162
  //#region src/ai/blocks/divider.tsx
163
163
  var P = C.memo(function(e) {
164
- let { reducedMotion: t } = x();
165
- return t ? /* @__PURE__ */ w(y, {}) : /* @__PURE__ */ w(k.div, {
164
+ let { reducedMotion: t } = o();
165
+ return t ? /* @__PURE__ */ w(b, {}) : /* @__PURE__ */ w(k.div, {
166
166
  initial: { scaleX: 0 },
167
167
  animate: { scaleX: 1 },
168
168
  style: { originX: .5 },
169
169
  transition: n.elegant,
170
- children: /* @__PURE__ */ w(y, {})
170
+ children: /* @__PURE__ */ w(b, {})
171
171
  });
172
172
  });
173
173
  P.displayName = "DividerBlock";
@@ -227,7 +227,7 @@ function L({ status: e }) {
227
227
  }
228
228
  }
229
229
  var R = C.memo(function({ data: t }) {
230
- let { reducedMotion: n } = x(), i = n;
230
+ let { reducedMotion: n } = o(), i = n;
231
231
  if (t.lines != null) {
232
232
  let e = Math.max(1, t.lines);
233
233
  return /* @__PURE__ */ T("div", {
@@ -235,7 +235,7 @@ var R = C.memo(function({ data: t }) {
235
235
  "aria-busy": "true",
236
236
  "aria-label": "Loading",
237
237
  className: "flex flex-col gap-2",
238
- children: [Array.from({ length: e }).map((t, n) => /* @__PURE__ */ w(o, {
238
+ children: [Array.from({ length: e }).map((t, n) => /* @__PURE__ */ w(s, {
239
239
  animation: "shimmer",
240
240
  className: r("h-4", n === e - 1 ? "w-3/5" : "w-full")
241
241
  }, n)), /* @__PURE__ */ w("span", {
@@ -285,7 +285,7 @@ R.displayName = "LoadingBlock";
285
285
  //#endregion
286
286
  //#region src/ai/blocks/stat-row.tsx
287
287
  var z = C.memo(function({ data: e }) {
288
- let { reducedMotion: n } = x(), r = e.stats ?? [];
288
+ let { reducedMotion: n } = o(), r = e.stats ?? [];
289
289
  return r.length === 0 ? null : /* @__PURE__ */ w("div", {
290
290
  className: "flex flex-wrap gap-ds-05",
291
291
  children: r.map((e, r) => {
@@ -295,7 +295,7 @@ var z = C.memo(function({ data: e }) {
295
295
  } : void 0;
296
296
  return n ? /* @__PURE__ */ w("div", {
297
297
  className: "flex-1 min-w-[140px]",
298
- children: /* @__PURE__ */ w(b, {
298
+ children: /* @__PURE__ */ w(x, {
299
299
  label: e.label,
300
300
  value: e.value,
301
301
  delta: i
@@ -311,7 +311,7 @@ var z = C.memo(function({ data: e }) {
311
311
  ...t.responsive,
312
312
  delay: r * .08
313
313
  },
314
- children: /* @__PURE__ */ w(b, {
314
+ children: /* @__PURE__ */ w(x, {
315
315
  label: e.label,
316
316
  value: e.value,
317
317
  delta: i
@@ -324,20 +324,20 @@ z.displayName = "StatRowBlock";
324
324
  //#endregion
325
325
  //#region src/ai/blocks/success.tsx
326
326
  var B = 5e3, V = C.memo(function({ data: e, blockId: t, confidence: n, onAction: r }) {
327
- let { reducedMotion: i } = x(), o = i, s = e.undoTimeout ?? B, [l, u] = C.useState(s), [d, f] = C.useState(!!e.undoable);
327
+ let { reducedMotion: i } = o(), s = i, c = e.undoTimeout ?? B, [u, d] = C.useState(c), [f, p] = C.useState(!!e.undoable);
328
328
  C.useEffect(() => {
329
329
  if (!e.undoable) return;
330
330
  let t = setInterval(() => {
331
- u((e) => {
331
+ d((e) => {
332
332
  let n = e - 100;
333
- return n <= 0 ? (clearInterval(t), f(!1), 0) : n;
333
+ return n <= 0 ? (clearInterval(t), p(!1), 0) : n;
334
334
  });
335
335
  }, 100);
336
336
  return () => clearInterval(t);
337
- }, [e.undoable, s]);
338
- let p = C.useCallback(() => {
337
+ }, [e.undoable, c]);
338
+ let m = C.useCallback(() => {
339
339
  r?.(t || "unknown", "undo");
340
- }, [t, r]), m = Math.ceil(l / 1e3), h = 2 * Math.PI * 9;
340
+ }, [t, r]), h = Math.ceil(u / 1e3), g = 2 * Math.PI * 9;
341
341
  return /* @__PURE__ */ T(S, {
342
342
  confidence: n,
343
343
  children: [/* @__PURE__ */ w(a, {
@@ -345,13 +345,13 @@ var B = 5e3, V = C.memo(function({ data: e, blockId: t, confidence: n, onAction:
345
345
  variant: "subtle",
346
346
  title: e.title,
347
347
  children: e.message
348
- }), d && e.undoable && /* @__PURE__ */ w("div", {
348
+ }), f && e.undoable && /* @__PURE__ */ w("div", {
349
349
  className: "mt-2 flex items-center gap-2",
350
- children: /* @__PURE__ */ w(c, {
350
+ children: /* @__PURE__ */ w(l, {
351
351
  variant: "ghost",
352
352
  size: "sm",
353
- onClick: p,
354
- "aria-label": `Undo action, ${m} seconds remaining`,
353
+ onClick: m,
354
+ "aria-label": `Undo action, ${h} seconds remaining`,
355
355
  children: /* @__PURE__ */ T("span", {
356
356
  className: "flex items-center gap-1.5",
357
357
  children: [/* @__PURE__ */ T("svg", {
@@ -375,11 +375,11 @@ var B = 5e3, V = C.memo(function({ data: e, blockId: t, confidence: n, onAction:
375
375
  fill: "none",
376
376
  stroke: "currentColor",
377
377
  strokeWidth: 2,
378
- strokeDasharray: h,
379
- initial: o ? void 0 : { strokeDashoffset: 0 },
380
- animate: { strokeDashoffset: h },
381
- transition: o ? { duration: 0 } : {
382
- duration: s / 1e3,
378
+ strokeDasharray: g,
379
+ initial: s ? void 0 : { strokeDashoffset: 0 },
380
+ animate: { strokeDashoffset: g },
381
+ transition: s ? { duration: 0 } : {
382
+ duration: c / 1e3,
383
383
  ease: "linear"
384
384
  }
385
385
  })]