@devalok/shilp-sutra 0.23.3 → 0.25.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 (89) hide show
  1. package/dist/_chunks/framer.js +946 -672
  2. package/dist/_chunks/keybinding.js +19 -0
  3. package/dist/_chunks/stat-row.js +455 -0
  4. package/dist/_chunks/tiptap.js +1 -1
  5. package/dist/_chunks/vendor-client.js +1 -1
  6. package/dist/_chunks/vendor-utils.js +1311 -1168
  7. package/dist/ai/ai-command-provider.d.ts +23 -0
  8. package/dist/ai/ai-command-provider.d.ts.map +1 -0
  9. package/dist/ai/ai-command-provider.js +20 -0
  10. package/dist/ai/block-renderer.d.ts +12 -0
  11. package/dist/ai/block-renderer.d.ts.map +1 -0
  12. package/dist/ai/block-renderer.js +54 -0
  13. package/dist/ai/blocks/block-table.d.ts +6 -0
  14. package/dist/ai/blocks/block-table.d.ts.map +1 -0
  15. package/dist/ai/blocks/confirm.d.ts +6 -0
  16. package/dist/ai/blocks/confirm.d.ts.map +1 -0
  17. package/dist/ai/blocks/divider.d.ts +6 -0
  18. package/dist/ai/blocks/divider.d.ts.map +1 -0
  19. package/dist/ai/blocks/error.d.ts +6 -0
  20. package/dist/ai/blocks/error.d.ts.map +1 -0
  21. package/dist/ai/blocks/index.d.ts +11 -0
  22. package/dist/ai/blocks/index.d.ts.map +1 -0
  23. package/dist/ai/blocks/index.js +13 -0
  24. package/dist/ai/blocks/info.d.ts +8 -0
  25. package/dist/ai/blocks/info.d.ts.map +1 -0
  26. package/dist/ai/blocks/loading.d.ts +6 -0
  27. package/dist/ai/blocks/loading.d.ts.map +1 -0
  28. package/dist/ai/blocks/stat-row.d.ts +6 -0
  29. package/dist/ai/blocks/stat-row.d.ts.map +1 -0
  30. package/dist/ai/blocks/success.d.ts +6 -0
  31. package/dist/ai/blocks/success.d.ts.map +1 -0
  32. package/dist/ai/blocks/text.d.ts +8 -0
  33. package/dist/ai/blocks/text.d.ts.map +1 -0
  34. package/dist/ai/command-bar.d.ts +40 -0
  35. package/dist/ai/command-bar.d.ts.map +1 -0
  36. package/dist/ai/command-bar.js +545 -0
  37. package/dist/ai/conversation.d.ts +20 -0
  38. package/dist/ai/conversation.d.ts.map +1 -0
  39. package/dist/ai/conversation.js +255 -0
  40. package/dist/ai/devadoot-icon.d.ts +23 -0
  41. package/dist/ai/devadoot-icon.d.ts.map +1 -0
  42. package/dist/ai/index.d.ts +22 -0
  43. package/dist/ai/index.d.ts.map +1 -0
  44. package/dist/ai/index.js +170 -0
  45. package/dist/ai/types.d.ts +81 -0
  46. package/dist/ai/types.d.ts.map +1 -0
  47. package/dist/composed/avatar-group.js +1 -1
  48. package/dist/composed/command-palette.d.ts +32 -2
  49. package/dist/composed/command-palette.d.ts.map +1 -1
  50. package/dist/composed/command-palette.js +176 -140
  51. package/dist/composed/content-card.js +1 -1
  52. package/dist/composed/index.d.ts +1 -1
  53. package/dist/composed/index.d.ts.map +1 -1
  54. package/dist/composed/priority-indicator.js +1 -1
  55. package/dist/composed/status-badge.js +1 -1
  56. package/dist/shell/app-command-palette.d.ts +36 -5
  57. package/dist/shell/app-command-palette.d.ts.map +1 -1
  58. package/dist/shell/app-command-palette.js +158 -137
  59. package/dist/shell/index.d.ts +1 -1
  60. package/dist/shell/index.d.ts.map +1 -1
  61. package/dist/tailwind/index.cjs +1 -1
  62. package/dist/tailwind/preset.js +1 -1
  63. package/dist/ui/alert.js +1 -1
  64. package/dist/ui/avatar.js +1 -1
  65. package/dist/ui/badge.js +1 -1
  66. package/dist/ui/banner.js +4 -4
  67. package/dist/ui/button.js +7 -7
  68. package/dist/ui/card.js +7 -7
  69. package/dist/ui/chip.js +1 -1
  70. package/dist/ui/input.js +5 -5
  71. package/dist/ui/lib/keybinding.d.ts +8 -0
  72. package/dist/ui/lib/keybinding.d.ts.map +1 -0
  73. package/dist/ui/lib/motion.d.ts +4 -0
  74. package/dist/ui/lib/motion.d.ts.map +1 -1
  75. package/dist/ui/lib/motion.js +18 -14
  76. package/dist/ui/lib/utils.js +1 -1
  77. package/dist/ui/progress.js +1 -1
  78. package/dist/ui/segmented-control.js +1 -1
  79. package/dist/ui/select.js +1 -1
  80. package/dist/ui/sheet.js +6 -6
  81. package/dist/ui/sidebar.js +1 -1
  82. package/dist/ui/skeleton.js +4 -4
  83. package/dist/ui/tabs.js +1 -1
  84. package/dist/ui/text.js +1 -1
  85. package/dist/ui/textarea.js +1 -1
  86. package/dist/ui/toggle.js +1 -1
  87. package/llms-full.txt +1 -1
  88. package/llms.txt +45 -2
  89. package/package.json +733 -699
@@ -0,0 +1,255 @@
1
+ "use client";
2
+ import { jsxs as o, jsx as e } from "react/jsx-runtime";
3
+ import * as i from "react";
4
+ import { IconCircle as T, IconCircleX as O, IconLoader2 as S, IconCircleCheck as L } from "@tabler/icons-react";
5
+ import { cn as A } from "../ui/lib/utils.js";
6
+ import { springs as C } from "../ui/lib/motion.js";
7
+ import { u as U } from "../_chunks/motion-provider.js";
8
+ import { BlockRenderer as V } from "./block-renderer.js";
9
+ import { useAICommand as $ } from "./ai-command-provider.js";
10
+ import { A as z, m as u } from "../_chunks/framer.js";
11
+ function D({ status: t }) {
12
+ switch (t) {
13
+ case "done":
14
+ return /* @__PURE__ */ e(
15
+ L,
16
+ {
17
+ className: "h-4 w-4 text-success-11",
18
+ "aria-hidden": "true"
19
+ }
20
+ );
21
+ case "active":
22
+ return /* @__PURE__ */ e(
23
+ u.span,
24
+ {
25
+ className: "inline-flex h-4 w-4 items-center justify-center text-accent-9",
26
+ animate: { rotate: 360 },
27
+ transition: { repeat: 1 / 0, duration: 1, ease: "linear" },
28
+ "aria-hidden": "true",
29
+ children: /* @__PURE__ */ e(S, { className: "h-4 w-4" })
30
+ }
31
+ );
32
+ case "error":
33
+ return /* @__PURE__ */ e(
34
+ O,
35
+ {
36
+ className: "h-4 w-4 text-error-11",
37
+ "aria-hidden": "true"
38
+ }
39
+ );
40
+ case "pending":
41
+ default:
42
+ return /* @__PURE__ */ e(
43
+ T,
44
+ {
45
+ className: "h-4 w-4 text-surface-fg-subtle opacity-50",
46
+ "aria-hidden": "true"
47
+ }
48
+ );
49
+ }
50
+ }
51
+ function x({
52
+ name: t,
53
+ icon: n
54
+ }) {
55
+ return /* @__PURE__ */ o("div", { className: "flex items-center gap-ds-02b mb-ds-03", children: [
56
+ n && /* @__PURE__ */ e("span", { className: "h-4 w-4 flex items-center justify-center", children: n }),
57
+ /* @__PURE__ */ e("span", { className: "text-ds-xs font-semibold uppercase tracking-wider text-surface-fg-subtle", children: t })
58
+ ] });
59
+ }
60
+ function F({
61
+ message: t,
62
+ reducedMotion: n
63
+ }) {
64
+ return n ? /* @__PURE__ */ e("div", { className: "bg-surface-raised rounded-ds-lg px-ds-05 py-ds-04", children: /* @__PURE__ */ e("p", { className: "text-ds-sm text-surface-fg", children: t.content }) }) : /* @__PURE__ */ e(
65
+ u.div,
66
+ {
67
+ className: "bg-surface-raised rounded-ds-lg px-ds-05 py-ds-04",
68
+ initial: { opacity: 0, y: 8 },
69
+ animate: { opacity: 1, y: 0 },
70
+ transition: C.snappy,
71
+ children: /* @__PURE__ */ e("p", { className: "text-ds-sm text-surface-fg", children: t.content })
72
+ }
73
+ );
74
+ }
75
+ function G({
76
+ message: t,
77
+ agent: n,
78
+ onAction: c,
79
+ customBlocks: a
80
+ }) {
81
+ return /* @__PURE__ */ o("div", { children: [
82
+ /* @__PURE__ */ e(x, { name: n.name, icon: n.icon }),
83
+ t.blocks && /* @__PURE__ */ e(
84
+ V,
85
+ {
86
+ blocks: t.blocks,
87
+ onAction: c,
88
+ customBlocks: a
89
+ }
90
+ )
91
+ ] });
92
+ }
93
+ function P({
94
+ steps: t,
95
+ agent: n,
96
+ reducedMotion: c
97
+ }) {
98
+ return t && t.length > 0 ? /* @__PURE__ */ o("div", { role: "status", "aria-busy": "true", "aria-label": "Processing", children: [
99
+ /* @__PURE__ */ e(x, { name: n.name, icon: n.icon }),
100
+ /* @__PURE__ */ e("div", { className: "flex flex-col gap-ds-02b", children: t.map((a, p) => /* @__PURE__ */ o(
101
+ u.div,
102
+ {
103
+ className: "flex items-center gap-ds-02b",
104
+ initial: c ? void 0 : { opacity: 0, x: -8 },
105
+ animate: { opacity: 1, x: 0 },
106
+ transition: c ? { duration: 0 } : { duration: 0.2, delay: p * 0.05 },
107
+ children: [
108
+ /* @__PURE__ */ e(D, { status: a.status }),
109
+ /* @__PURE__ */ e(
110
+ "span",
111
+ {
112
+ className: A(
113
+ "text-ds-sm",
114
+ a.status === "pending" ? "text-surface-fg-subtle" : "text-surface-fg"
115
+ ),
116
+ children: a.label
117
+ }
118
+ )
119
+ ]
120
+ },
121
+ a.id
122
+ )) })
123
+ ] }) : /* @__PURE__ */ o(
124
+ "div",
125
+ {
126
+ role: "status",
127
+ "aria-busy": "true",
128
+ "aria-label": `${n.name} is processing`,
129
+ children: [
130
+ /* @__PURE__ */ e(x, { name: n.name, icon: n.icon }),
131
+ /* @__PURE__ */ o("div", { className: "flex items-center gap-ds-02", children: [
132
+ !c && [0, 1, 2].map((a) => /* @__PURE__ */ e(
133
+ u.span,
134
+ {
135
+ className: "h-1.5 w-1.5 rounded-full bg-accent-9",
136
+ animate: { scale: [1, 1.4, 1], opacity: [0.4, 1, 0.4] },
137
+ transition: {
138
+ duration: 1.4,
139
+ repeat: 1 / 0,
140
+ ease: "easeInOut",
141
+ delay: a * 0.16
142
+ }
143
+ },
144
+ a
145
+ )),
146
+ /* @__PURE__ */ o("span", { className: "ml-ds-02b text-ds-sm text-surface-fg-subtle", children: [
147
+ n.name,
148
+ " is thinking..."
149
+ ] })
150
+ ] })
151
+ ]
152
+ }
153
+ );
154
+ }
155
+ function X({ onClick: t }) {
156
+ return /* @__PURE__ */ o(
157
+ u.button,
158
+ {
159
+ role: "button",
160
+ "aria-label": "Scroll to latest response",
161
+ className: "absolute bottom-ds-04 left-1/2 -translate-x-1/2 z-10 flex items-center gap-ds-02 bg-accent-9 text-accent-fg text-ds-xs font-medium rounded-full px-ds-04 py-ds-02 shadow-floating",
162
+ initial: { opacity: 0, y: 8 },
163
+ animate: { opacity: 1, y: 0 },
164
+ exit: { opacity: 0, y: 8 },
165
+ transition: C.snappy,
166
+ onClick: t,
167
+ children: [
168
+ "↓",
169
+ " New response"
170
+ ]
171
+ }
172
+ );
173
+ }
174
+ const _ = { name: "Assistant" };
175
+ function ee({
176
+ messages: t,
177
+ isProcessing: n = !1,
178
+ processingSteps: c,
179
+ agent: a,
180
+ onAction: p,
181
+ customBlocks: y,
182
+ maxHeight: m,
183
+ autoScroll: f = !0,
184
+ className: B
185
+ }) {
186
+ const r = $(), { reducedMotion: v } = U(), N = a ?? (r == null ? void 0 : r.agent) ?? _, R = p ?? (r == null ? void 0 : r.onAction), j = i.useMemo(() => ({ ...(r == null ? void 0 : r.customBlocks) ?? {}, ...y }), [r == null ? void 0 : r.customBlocks, y]), g = i.useRef(null), l = i.useRef(null), [h, w] = i.useState(!0), [E, b] = i.useState(!1), I = i.useRef(t.length), k = i.useRef(n);
187
+ i.useEffect(() => {
188
+ if (!f || !l.current) return;
189
+ const s = new IntersectionObserver(
190
+ ([d]) => {
191
+ w(d.isIntersecting), d.isIntersecting && b(!1);
192
+ },
193
+ {
194
+ root: g.current,
195
+ threshold: 0.1
196
+ }
197
+ );
198
+ return s.observe(l.current), () => s.disconnect();
199
+ }, [f]), i.useEffect(() => {
200
+ var d;
201
+ const s = t.length !== I.current || n !== k.current;
202
+ I.current = t.length, k.current = n, !(!s || !f) && (h ? (d = l.current) == null || d.scrollIntoView({ behavior: "smooth", block: "end" }) : b(!0));
203
+ }, [t, n, h, f]);
204
+ const M = i.useCallback(() => {
205
+ var s;
206
+ (s = l.current) == null || s.scrollIntoView({ behavior: "smooth", block: "end" }), w(!0), b(!1);
207
+ }, []);
208
+ return /* @__PURE__ */ o("div", { className: A("relative", B), children: [
209
+ /* @__PURE__ */ o(
210
+ "div",
211
+ {
212
+ ref: g,
213
+ className: "flex flex-col gap-ds-05 overflow-y-auto",
214
+ "aria-live": "polite",
215
+ style: m ? {
216
+ maxHeight: typeof m == "number" ? `${m}px` : m
217
+ } : void 0,
218
+ children: [
219
+ t.map(
220
+ (s) => s.role === "user" ? /* @__PURE__ */ e(
221
+ F,
222
+ {
223
+ message: s,
224
+ reducedMotion: v
225
+ },
226
+ s.id
227
+ ) : /* @__PURE__ */ e(
228
+ G,
229
+ {
230
+ message: s,
231
+ agent: N,
232
+ onAction: R,
233
+ customBlocks: j
234
+ },
235
+ s.id
236
+ )
237
+ ),
238
+ n && /* @__PURE__ */ e(
239
+ P,
240
+ {
241
+ steps: c,
242
+ agent: N,
243
+ reducedMotion: v
244
+ }
245
+ ),
246
+ /* @__PURE__ */ e("div", { ref: l, className: "h-px" })
247
+ ]
248
+ }
249
+ ),
250
+ /* @__PURE__ */ e(z, { children: !h && E && /* @__PURE__ */ e(X, { onClick: M }) })
251
+ ] });
252
+ }
253
+ export {
254
+ ee as AIConversation
255
+ };
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ /**
3
+ * DevadootIcon -- Animated Devalok chakra for the AI command system.
4
+ *
5
+ * Renders the Devalok chakra SVG with **fill-first** animations:
6
+ * - idle: gradient color breathing (pink ↔ rose, slow cycle)
7
+ * - processing: gradient sweep (pink → purple → blue → pink cycle) + glow pulse
8
+ * - responded: bright flash → settle to solid brand + brief scale pop
9
+ * - error: red fill + glow pulse
10
+ *
11
+ * Inspired by Google Gemini's gradient-as-identity approach: the color IS
12
+ * the animation, not just rotation/scale applied to a static shape.
13
+ */
14
+ import * as React from 'react';
15
+ export type DevadootState = 'idle' | 'processing' | 'responded' | 'error';
16
+ export interface DevadootIconProps {
17
+ state?: DevadootState;
18
+ size?: number;
19
+ className?: string;
20
+ }
21
+ declare const DevadootIcon: React.NamedExoticComponent<DevadootIconProps>;
22
+ export { DevadootIcon };
23
+ //# sourceMappingURL=devadoot-icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devadoot-icon.d.ts","sourceRoot":"","sources":["../../src/ai/devadoot-icon.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,CAAA;AAEzE,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiCD,QAAA,MAAM,YAAY,+CAwJhB,CAAA;AAIF,OAAO,EAAE,YAAY,EAAE,CAAA"}
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ export { CommandBar } from './command-bar';
3
+ export type { CommandBarProps } from './command-bar';
4
+ export { AIConversation } from './conversation';
5
+ export type { AIConversationProps } from './conversation';
6
+ export { BlockRenderer } from './block-renderer';
7
+ export type { BlockRendererProps } from './block-renderer';
8
+ export { AICommandProvider, useAICommand } from './ai-command-provider';
9
+ export type { AICommandProviderProps, AICommandContext } from './ai-command-provider';
10
+ export { DevadootIcon } from './devadoot-icon';
11
+ export type { DevadootIconProps, DevadootState } from './devadoot-icon';
12
+ export { TextBlock } from './blocks/text';
13
+ export { BlockTable } from './blocks/block-table';
14
+ export { ConfirmBlock } from './blocks/confirm';
15
+ export { SuccessBlock } from './blocks/success';
16
+ export { ErrorBlock } from './blocks/error';
17
+ export { InfoBlock } from './blocks/info';
18
+ export { LoadingBlock } from './blocks/loading';
19
+ export { DividerBlock } from './blocks/divider';
20
+ export { StatRowBlock } from './blocks/stat-row';
21
+ export type { Block, AIResponse, ConversationMessage, ProcessingStep, BlockComponentProps, BlockTableColumn, BlockTableData, ConfirmBlockData, SuccessBlockData, ErrorBlockData, LoadingBlockData, StatRowStat, StatRowBlockData, } from './types';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACvE,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAErF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAGvE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,YAAY,EACV,KAAK,EACL,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,gBAAgB,GACjB,MAAM,SAAS,CAAA"}
@@ -0,0 +1,170 @@
1
+ "use client";
2
+ import { CommandBar as $ } from "./command-bar.js";
3
+ import { AIConversation as S } from "./conversation.js";
4
+ import { BlockRenderer as b } from "./block-renderer.js";
5
+ import { AICommandProvider as H, useAICommand as L } from "./ai-command-provider.js";
6
+ import { jsx as o, jsxs as l } from "react/jsx-runtime";
7
+ import * as a from "react";
8
+ import { cn as g } from "../ui/lib/utils.js";
9
+ import { u as x } from "../_chunks/motion-provider.js";
10
+ import { m as i, A as m, a as R, b as v, c as A } from "../_chunks/framer.js";
11
+ import { B as U, C as V, D as q, E as J, I as Q, L as W, S as X, a as Y, T as Z } from "../_chunks/stat-row.js";
12
+ const s = "M25.97,21.39c-0.9-1.85,0.08-3.95-1.72-5.39c1.76-1.44,0.8-3.55,1.69-5.39c0.05-0.12,0.04-0.25-0.02-0.35c-0.06-0.1-0.16-0.18-0.29-0.19c-2.05-0.15-3.35-2.04-5.5-1.21c-0.39-2.21-2.7-2.44-3.84-4.13c-0.08-0.1-0.19-0.16-0.31-0.16c-0.12,0-0.23,0.05-0.31,0.16c-1.14,1.69-3.43,1.92-3.82,4.13c-2.14-0.83-3.47,1.07-5.52,1.21c-0.13,0.01-0.23,0.09-0.29,0.19c-0.06,0.1-0.07,0.23-0.02,0.35c0.9,1.85-0.08,3.95,1.72,5.39c-1.76,1.44-0.8,3.55-1.69,5.39C6,21.51,6.02,21.64,6.07,21.74c0.06,0.1,0.16,0.18,0.29,0.19c2.05,0.15,3.38,2.06,5.52,1.23c0.39,2.21,2.67,2.43,3.82,4.12c0.08,0.1,0.19,0.16,0.31,0.16c0.12,0,0.23-0.05,0.31-0.16c1.14-1.69,3.42-1.92,3.81-4.13c2.14,0.83,3.48-1.07,5.53-1.22c0.13-0.01,0.23-0.09,0.29-0.19C26.01,21.64,26.02,21.51,25.97,21.39z", t = "#D33163", D = "#E8457A", C = "#9B5DE5", E = "#C850C0", h = "#FF6B9D", p = "#E5383B";
13
+ function T(c) {
14
+ const e = R(0);
15
+ return a.useEffect(() => {
16
+ const r = v(e, 360, {
17
+ duration: c === "processing" ? 4 : 12,
18
+ repeat: 1 / 0,
19
+ ease: "linear"
20
+ });
21
+ return () => r.stop();
22
+ }, [e, c]), A(e, (r) => `rotate(${r}, 16, 16)`);
23
+ }
24
+ const k = a.memo(function({
25
+ state: e = "idle",
26
+ size: r = 20,
27
+ className: f
28
+ }) {
29
+ const { reducedMotion: y } = x(), B = T(e), n = a.useId(), u = a.useId();
30
+ if (y)
31
+ return /* @__PURE__ */ o(
32
+ "svg",
33
+ {
34
+ viewBox: "0 0 32 32",
35
+ width: r,
36
+ height: r,
37
+ className: f,
38
+ "aria-hidden": "true",
39
+ children: /* @__PURE__ */ o(
40
+ "path",
41
+ {
42
+ d: s,
43
+ fill: e === "error" ? p : t
44
+ }
45
+ )
46
+ }
47
+ );
48
+ const d = e === "error" ? { s1: p, s2: "#FF6B6B", s3: p } : e === "processing" ? { s1: t, s2: C, s3: E } : e === "responded" ? { s1: h, s2: t, s3: h } : { s1: t, s2: D, s3: t }, I = e === "processing" ? 3 : e === "error" ? 2.5 : 0;
49
+ return /* @__PURE__ */ o(
50
+ "span",
51
+ {
52
+ className: g("relative inline-flex items-center justify-center", f),
53
+ style: { width: r, height: r },
54
+ "aria-hidden": "true",
55
+ children: /* @__PURE__ */ l(
56
+ i.svg,
57
+ {
58
+ viewBox: "0 0 32 32",
59
+ width: r,
60
+ height: r,
61
+ animate: e === "responded" ? { scale: [1.18, 1] } : e === "error" ? { x: [0, -2, 2, -1.5, 1.5, 0] } : { scale: 1, x: 0 },
62
+ transition: e === "responded" ? { scale: { type: "spring", stiffness: 500, damping: 15 } } : e === "error" ? { x: { duration: 0.4 } } : { duration: 0.3 },
63
+ style: { overflow: "visible" },
64
+ children: [
65
+ /* @__PURE__ */ l("defs", { children: [
66
+ /* @__PURE__ */ l(
67
+ i.linearGradient,
68
+ {
69
+ id: n,
70
+ x1: "0",
71
+ y1: "0",
72
+ x2: "1",
73
+ y2: "1",
74
+ gradientTransform: B,
75
+ children: [
76
+ /* @__PURE__ */ o(
77
+ i.stop,
78
+ {
79
+ offset: "0%",
80
+ animate: { stopColor: d.s1 },
81
+ transition: { duration: e === "processing" ? 3 : 5, repeat: 1 / 0, repeatType: "reverse", ease: "easeInOut" }
82
+ }
83
+ ),
84
+ /* @__PURE__ */ o(
85
+ i.stop,
86
+ {
87
+ offset: "50%",
88
+ animate: { stopColor: d.s2 },
89
+ transition: { duration: e === "processing" ? 3 : 5, repeat: 1 / 0, repeatType: "reverse", ease: "easeInOut", delay: 0.5 }
90
+ }
91
+ ),
92
+ /* @__PURE__ */ o(
93
+ i.stop,
94
+ {
95
+ offset: "100%",
96
+ animate: { stopColor: d.s3 },
97
+ transition: { duration: e === "processing" ? 3 : 5, repeat: 1 / 0, repeatType: "reverse", ease: "easeInOut", delay: 1 }
98
+ }
99
+ )
100
+ ]
101
+ }
102
+ ),
103
+ /* @__PURE__ */ o("filter", { id: u, x: "-50%", y: "-50%", width: "200%", height: "200%", children: /* @__PURE__ */ o(
104
+ i.feGaussianBlur,
105
+ {
106
+ in: "SourceGraphic",
107
+ animate: { stdDeviation: I },
108
+ transition: { duration: 0.6, ease: "easeOut" }
109
+ }
110
+ ) })
111
+ ] }),
112
+ /* @__PURE__ */ o(m, { children: (e === "processing" || e === "error") && /* @__PURE__ */ o(
113
+ i.path,
114
+ {
115
+ d: s,
116
+ fill: `url(#${n})`,
117
+ filter: `url(#${u})`,
118
+ initial: { opacity: 0 },
119
+ animate: { opacity: [0.2, 0.45, 0.2] },
120
+ exit: { opacity: 0 },
121
+ transition: {
122
+ opacity: { duration: 3, repeat: 1 / 0, ease: "easeInOut" }
123
+ }
124
+ }
125
+ ) }),
126
+ /* @__PURE__ */ o(m, { children: e === "processing" && /* @__PURE__ */ o(
127
+ i.path,
128
+ {
129
+ d: s,
130
+ fill: "white",
131
+ initial: { opacity: 0 },
132
+ animate: { opacity: [0, 0.12, 0] },
133
+ exit: { opacity: 0 },
134
+ transition: {
135
+ opacity: { duration: 2.5, repeat: 1 / 0, ease: "easeInOut" }
136
+ }
137
+ }
138
+ ) }),
139
+ /* @__PURE__ */ o(
140
+ i.path,
141
+ {
142
+ d: s,
143
+ fill: `url(#${n})`,
144
+ animate: e === "responded" ? { fill: [`url(#${n})`, `url(#${n})`] } : {}
145
+ }
146
+ )
147
+ ]
148
+ }
149
+ )
150
+ }
151
+ );
152
+ });
153
+ k.displayName = "DevadootIcon";
154
+ export {
155
+ H as AICommandProvider,
156
+ S as AIConversation,
157
+ b as BlockRenderer,
158
+ U as BlockTable,
159
+ $ as CommandBar,
160
+ V as ConfirmBlock,
161
+ k as DevadootIcon,
162
+ q as DividerBlock,
163
+ J as ErrorBlock,
164
+ Q as InfoBlock,
165
+ W as LoadingBlock,
166
+ X as StatRowBlock,
167
+ Y as SuccessBlock,
168
+ Z as TextBlock,
169
+ L as useAICommand
170
+ };
@@ -0,0 +1,81 @@
1
+ "use client";
2
+ export interface Block {
3
+ type: string;
4
+ id?: string;
5
+ data: Record<string, unknown>;
6
+ confidence?: 'high' | 'medium' | 'low';
7
+ }
8
+ export interface AIResponse {
9
+ blocks: Block[];
10
+ conversationId?: string;
11
+ pendingAction?: {
12
+ id: string;
13
+ label: string;
14
+ description?: string;
15
+ destructive?: boolean;
16
+ };
17
+ }
18
+ export interface ProcessingStep {
19
+ id: string;
20
+ label: string;
21
+ status: 'pending' | 'active' | 'done' | 'error';
22
+ }
23
+ export interface ConversationMessage {
24
+ id: string;
25
+ role: 'user' | 'assistant';
26
+ content?: string;
27
+ blocks?: Block[];
28
+ createdAt: Date;
29
+ steps?: ProcessingStep[];
30
+ }
31
+ export interface BlockComponentProps<T = Record<string, unknown>> {
32
+ data: T;
33
+ blockId?: string;
34
+ confidence?: 'high' | 'medium' | 'low';
35
+ onAction?: (actionId: string, type: 'confirm' | 'cancel' | 'undo') => void;
36
+ }
37
+ export interface BlockTableColumn {
38
+ key: string;
39
+ label: string;
40
+ variant?: 'badge' | 'number' | 'text';
41
+ }
42
+ export interface BlockTableData {
43
+ columns: BlockTableColumn[];
44
+ rows: Record<string, unknown>[];
45
+ caption?: string;
46
+ sortable?: boolean;
47
+ }
48
+ export interface ConfirmBlockData {
49
+ actionId: string;
50
+ label: string;
51
+ description?: string;
52
+ destructive?: boolean;
53
+ rationale?: string;
54
+ }
55
+ export interface SuccessBlockData {
56
+ title: string;
57
+ message: string;
58
+ undoable?: boolean;
59
+ undoTimeout?: number;
60
+ }
61
+ export interface ErrorBlockData {
62
+ title: string;
63
+ message: string;
64
+ suggestion?: string;
65
+ }
66
+ export interface LoadingBlockData {
67
+ lines?: number;
68
+ steps?: ProcessingStep[];
69
+ }
70
+ export interface StatRowStat {
71
+ label: string;
72
+ value: string | number;
73
+ change?: {
74
+ value: string;
75
+ direction: 'up' | 'down' | 'neutral';
76
+ };
77
+ }
78
+ export interface StatRowBlockData {
79
+ stats: StatRowStat[];
80
+ }
81
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as t, jsxs as s } from "react/jsx-runtime";
3
3
  import * as v from "react";
4
- import { ag as $ } from "../_chunks/vendor-utils.js";
4
+ import { ay as $ } from "../_chunks/vendor-utils.js";
5
5
  import { cn as o } from "../ui/lib/utils.js";
6
6
  import { Avatar as E, AvatarImage as F, AvatarFallback as G } from "../ui/avatar.js";
7
7
  import { TooltipProvider as H, Tooltip as x, TooltipTrigger as y, TooltipContent as N } from "../ui/tooltip.js";
@@ -8,21 +8,51 @@
8
8
  import * as React from 'react';
9
9
  export interface CommandItem {
10
10
  id: string;
11
- label: string;
12
- description?: string;
11
+ /** Display label string or ReactNode. When ReactNode, provide `filterValue` for search filtering. */
12
+ label: string | React.ReactNode;
13
+ /** Optional description — string or ReactNode. */
14
+ description?: string | React.ReactNode;
13
15
  icon?: React.ReactNode;
16
+ /** Keyboard shortcut hint displayed as keycap badges (e.g., "G D", "Ctrl+N"). */
14
17
  shortcut?: string;
18
+ /** Custom render override for the label. Receives the current search query for match highlighting. */
19
+ renderLabel?: (query: string) => React.ReactNode;
20
+ /** Plain-text value used for search filtering when `label` is a ReactNode. Falls back to `label` if string. */
21
+ filterValue?: string;
15
22
  onSelect: () => void;
16
23
  }
17
24
  export interface CommandGroup {
18
25
  label: string;
19
26
  items: CommandItem[];
20
27
  }
28
+ /** A single keyboard hint shown in the footer. */
29
+ export interface FooterHint {
30
+ /** Key(s) to display — rendered as text inside `<kbd>` or as an icon. */
31
+ keys: string;
32
+ /** Human-readable label for the hint (e.g., "Navigate", "Select"). */
33
+ label: string;
34
+ }
21
35
  export interface CommandPaletteProps extends React.ComponentPropsWithoutRef<'div'> {
22
36
  groups?: CommandGroup[];
23
37
  placeholder?: string;
24
38
  onSearch?: (query: string) => void;
25
39
  emptyMessage?: string;
40
+ /** Full custom empty state ReactNode — overrides `emptyMessage` when provided. */
41
+ emptyState?: React.ReactNode;
42
+ /** Controlled open state. */
43
+ open?: boolean;
44
+ /** Default open state for uncontrolled usage. */
45
+ defaultOpen?: boolean;
46
+ /** Called when the open state changes. */
47
+ onOpenChange?: (open: boolean) => void;
48
+ /** Keybinding(s) to toggle the palette. Pass `false` to disable.
49
+ * String format: modifier+key, e.g., 'mod+k', 'ctrl+shift+p'.
50
+ * 'mod' maps to Meta on macOS, Ctrl otherwise. */
51
+ keybinding?: string | string[] | false;
52
+ /** Max height of the results container. CSS value. Default '320px'. */
53
+ maxHeight?: string | number;
54
+ /** Custom footer keyboard hints. Pass `false` to hide the footer entirely. */
55
+ footerHints?: FooterHint[] | false;
26
56
  }
27
57
  declare const CommandPalette: React.ForwardRefExoticComponent<CommandPaletteProps & React.RefAttributes<HTMLDivElement>>;
28
58
  export { CommandPalette };
@@ -1 +1 @@
1
- {"version":3,"file":"command-palette.d.ts","sourceRoot":"","sources":["../../src/composed/command-palette.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAmB9B,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,WAAW,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAChF,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAMD,QAAA,MAAM,cAAc,4FAqVnB,CAAA;AAID,OAAO,EAAE,cAAc,EAAE,CAAA"}
1
+ {"version":3,"file":"command-palette.d.ts","sourceRoot":"","sources":["../../src/composed/command-palette.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAoB9B,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,uGAAuG;IACvG,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAA;IAC/B,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAA;IACtC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sGAAsG;IACtG,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;IAChD,+GAA+G;IAC/G,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,WAAW,EAAE,CAAA;CACrB;AAED,kDAAkD;AAClD,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAChF,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,kFAAkF;IAClF,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAE5B,6BAA6B;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAEtC;;uDAEmD;IACnD,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,KAAK,CAAA;IAEtC,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAE3B,8EAA8E;IAC9E,WAAW,CAAC,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;CACnC;AAmCD,QAAA,MAAM,cAAc,4FAmanB,CAAA;AAID,OAAO,EAAE,cAAc,EAAE,CAAA"}