@devalok/shilp-sutra 0.34.0 → 0.34.1

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 (172) hide show
  1. package/dist/_chunks/badge-group.js +306 -246
  2. package/dist/_chunks/chat.js +513 -0
  3. package/dist/_chunks/date-picker.js +748 -0
  4. package/dist/_chunks/document-preview.js +109 -90
  5. package/dist/_chunks/file-preview.js +492 -504
  6. package/dist/_chunks/framer.js +5564 -5613
  7. package/dist/_chunks/image-preview.js +127 -88
  8. package/dist/_chunks/keybinding.js +12 -14
  9. package/dist/_chunks/link-context.js +19 -16
  10. package/dist/_chunks/mention-suggestion.js +353 -350
  11. package/dist/_chunks/motion-provider.js +26 -20
  12. package/dist/_chunks/popover.js +127 -0
  13. package/dist/_chunks/primitives.js +7584 -6425
  14. package/dist/_chunks/rich-chat-input.js +2070 -0
  15. package/dist/_chunks/rolldown-runtime.js +21 -0
  16. package/dist/_chunks/shared.js +126 -0
  17. package/dist/_chunks/sonner.js +605 -734
  18. package/dist/_chunks/stat-row.js +418 -440
  19. package/dist/_chunks/tiptap.js +15850 -19964
  20. package/dist/_chunks/tree-view.js +231 -290
  21. package/dist/_chunks/use-calendar.js +161 -208
  22. package/dist/_chunks/vendor-client.js +314 -2199
  23. package/dist/_chunks/vendor-utils.js +1721 -2978
  24. package/dist/ai/ai-command-provider.js +23 -17
  25. package/dist/ai/block-renderer.js +68 -51
  26. package/dist/ai/blocks/index.js +2 -12
  27. package/dist/ai/command-bar.js +470 -519
  28. package/dist/ai/conversation.js +241 -227
  29. package/dist/ai/index.js +181 -167
  30. package/dist/ai/types.js +0 -1
  31. package/dist/composed/activity-feed.js +232 -202
  32. package/dist/composed/avatar-group.js +164 -222
  33. package/dist/composed/bulk-action-bar.js +174 -165
  34. package/dist/composed/command-palette.js +290 -308
  35. package/dist/composed/confirm-dialog.js +28 -48
  36. package/dist/composed/content-card.js +69 -108
  37. package/dist/composed/date-picker/index.js +3 -13
  38. package/dist/composed/deadline-indicator.js +68 -74
  39. package/dist/composed/emoji-picker.js +83 -110
  40. package/dist/composed/empty-state.js +64 -103
  41. package/dist/composed/error-boundary.js +129 -127
  42. package/dist/composed/file-preview.js +2 -12
  43. package/dist/composed/filter-bar.js +98 -130
  44. package/dist/composed/form-section.js +61 -45
  45. package/dist/composed/global-loading.js +34 -47
  46. package/dist/composed/index.js +34 -92
  47. package/dist/composed/inline-edit.js +92 -107
  48. package/dist/composed/lib/string-utils.js +8 -8
  49. package/dist/composed/loading-skeleton.js +103 -171
  50. package/dist/composed/markdown-viewer.js +187 -139
  51. package/dist/composed/master-detail.js +147 -156
  52. package/dist/composed/member-picker.js +46 -49
  53. package/dist/composed/multi-select-popover.js +181 -179
  54. package/dist/composed/page-header.js +54 -76
  55. package/dist/composed/page-skeletons.js +143 -127
  56. package/dist/composed/priority-indicator.js +105 -111
  57. package/dist/composed/responsive-overlay.js +36 -41
  58. package/dist/composed/rich-chat-input.js +2 -1860
  59. package/dist/composed/rich-text-editor.js +561 -424
  60. package/dist/composed/schedule-view.js +134 -185
  61. package/dist/composed/simple-tooltip.js +21 -21
  62. package/dist/composed/status-badge.js +133 -137
  63. package/dist/hooks/index.js +7 -12
  64. package/dist/hooks/use-color-mode.js +28 -25
  65. package/dist/hooks/use-mobile.js +13 -13
  66. package/dist/hooks/use-toast.js +2 -4
  67. package/dist/hooks/use-touch-device.js +9 -11
  68. package/dist/hooks/use-viewport-height.js +14 -14
  69. package/dist/motion/index.js +3 -11
  70. package/dist/motion/primitives-index.js +226 -186
  71. package/dist/shell/app-command-palette.js +203 -234
  72. package/dist/shell/bottom-navbar.js +150 -190
  73. package/dist/shell/command-registry.js +13 -14
  74. package/dist/shell/index.js +10 -20
  75. package/dist/shell/link-context.js +2 -5
  76. package/dist/shell/notification-center.js +238 -259
  77. package/dist/shell/notification-preferences.js +241 -184
  78. package/dist/shell/sidebar.js +251 -281
  79. package/dist/shell/top-bar.js +203 -237
  80. package/dist/tailwind/index.cjs +426 -442
  81. package/dist/tailwind/index.js +2 -4
  82. package/dist/tailwind/preset.js +443 -459
  83. package/dist/ui/accordion.js +52 -60
  84. package/dist/ui/alert-dialog.js +111 -156
  85. package/dist/ui/alert.js +177 -99
  86. package/dist/ui/aspect-ratio.js +13 -16
  87. package/dist/ui/autocomplete.js +112 -148
  88. package/dist/ui/avatar.js +196 -169
  89. package/dist/ui/badge-group.js +2 -7
  90. package/dist/ui/badge-indicator.js +42 -51
  91. package/dist/ui/badge.js +2 -15
  92. package/dist/ui/banner.js +76 -68
  93. package/dist/ui/breadcrumb.js +65 -84
  94. package/dist/ui/button-group.js +109 -102
  95. package/dist/ui/button-processing.js +69 -73
  96. package/dist/ui/button.js +393 -279
  97. package/dist/ui/card.js +151 -157
  98. package/dist/ui/charts/index.js +1002 -1319
  99. package/dist/ui/chat/index.js +2 -11
  100. package/dist/ui/checkbox.js +77 -100
  101. package/dist/ui/code.js +18 -32
  102. package/dist/ui/collapsible.js +21 -29
  103. package/dist/ui/color-input.js +453 -372
  104. package/dist/ui/color-swatch.js +60 -90
  105. package/dist/ui/combobox.js +244 -293
  106. package/dist/ui/container.js +18 -24
  107. package/dist/ui/context-menu.js +154 -203
  108. package/dist/ui/data-table-body.js +116 -213
  109. package/dist/ui/data-table-bulk-actions.js +43 -59
  110. package/dist/ui/data-table-card.js +84 -71
  111. package/dist/ui/data-table-context.js +39 -42
  112. package/dist/ui/data-table-header.js +98 -139
  113. package/dist/ui/data-table-pagination.js +69 -82
  114. package/dist/ui/data-table-toolbar.js +104 -130
  115. package/dist/ui/data-table.js +278 -354
  116. package/dist/ui/devalok-grain.js +77 -66
  117. package/dist/ui/dialog.js +122 -151
  118. package/dist/ui/dropdown-menu.js +152 -203
  119. package/dist/ui/file-upload.js +242 -266
  120. package/dist/ui/form.js +60 -56
  121. package/dist/ui/hover-card.js +54 -54
  122. package/dist/ui/icon-button.js +21 -26
  123. package/dist/ui/icon-context.js +17 -17
  124. package/dist/ui/icon-group.js +22 -29
  125. package/dist/ui/icon.js +201 -121
  126. package/dist/ui/index.js +74 -350
  127. package/dist/ui/input-otp.js +44 -48
  128. package/dist/ui/input.js +92 -169
  129. package/dist/ui/label.js +17 -22
  130. package/dist/ui/lib/date-utils.js +14 -11
  131. package/dist/ui/lib/motion.js +77 -36
  132. package/dist/ui/lib/utils.js +39 -16
  133. package/dist/ui/link.js +13 -24
  134. package/dist/ui/menubar.js +132 -210
  135. package/dist/ui/navigation-menu.js +163 -193
  136. package/dist/ui/number-input.js +72 -95
  137. package/dist/ui/pagination.js +122 -159
  138. package/dist/ui/popover.js +2 -131
  139. package/dist/ui/progress-ring.js +133 -143
  140. package/dist/ui/progress.js +51 -95
  141. package/dist/ui/radio.js +41 -50
  142. package/dist/ui/search-input.js +51 -53
  143. package/dist/ui/segmented-control.js +93 -114
  144. package/dist/ui/select.js +131 -157
  145. package/dist/ui/separator.js +15 -25
  146. package/dist/ui/sheet.js +135 -163
  147. package/dist/ui/sidebar.js +357 -600
  148. package/dist/ui/skeleton.js +179 -231
  149. package/dist/ui/slider.js +24 -34
  150. package/dist/ui/spinner.js +226 -205
  151. package/dist/ui/split-button.js +227 -276
  152. package/dist/ui/stack.js +56 -70
  153. package/dist/ui/stat-card.js +259 -251
  154. package/dist/ui/status-dot.js +67 -63
  155. package/dist/ui/stepper.js +119 -168
  156. package/dist/ui/switch.js +51 -54
  157. package/dist/ui/table.js +57 -90
  158. package/dist/ui/tabs.js +139 -156
  159. package/dist/ui/text.js +52 -59
  160. package/dist/ui/textarea.js +40 -57
  161. package/dist/ui/toast-types.js +0 -1
  162. package/dist/ui/toast.js +554 -536
  163. package/dist/ui/toaster.js +23 -33
  164. package/dist/ui/toggle-group.js +37 -41
  165. package/dist/ui/toggle.js +36 -40
  166. package/dist/ui/tooltip.js +80 -65
  167. package/dist/ui/tree-view/index.js +2 -6
  168. package/dist/ui/visually-hidden.js +12 -10
  169. package/llms-full.txt +1 -1
  170. package/package.json +1 -1
  171. package/dist/_chunks/date-time-picker.js +0 -851
  172. package/dist/_chunks/typing-indicator.js +0 -565
@@ -0,0 +1,513 @@
1
+ "use client";
2
+ import { a as e, c as t } from "./framer.js";
3
+ import { motionProps as n, springs as r, tweens as i } from "../ui/lib/motion.js";
4
+ import { cn as a } from "../ui/lib/utils.js";
5
+ import { Spinner as o } from "../ui/spinner.js";
6
+ import { Icon as s } from "../ui/icon.js";
7
+ import { Avatar as c, AvatarFallback as l, AvatarImage as u } from "../ui/avatar.js";
8
+ import { Button as d } from "../ui/button.js";
9
+ import { Tooltip as f, TooltipContent as p, TooltipTrigger as m } from "../ui/tooltip.js";
10
+ import * as h from "react";
11
+ import { jsx as g, jsxs as _ } from "react/jsx-runtime";
12
+ import { IconAlertCircle as v, IconSend as y, IconSquare as b, IconTrash as x } from "@tabler/icons-react";
13
+ //#region src/ui/chat/message-list.tsx
14
+ var S = h.forwardRef(({ children: n, autoScroll: r = !0, newMessageCount: s = 0, onScrollToBottom: c, onLoadMore: l, isLoadingMore: u = !1, emptySlot: d, scrollToBottomSlot: f, headerSlot: p, className: m, ...v }, y) => {
15
+ let b = h.useRef(null), x = h.useRef(!0), [S, C] = h.useState(!0), w = h.useRef(!1), T = h.useRef(0), E = h.Children.count(n) === 0 && !u, D = h.useCallback(() => {
16
+ let e = b.current;
17
+ if (!e) return;
18
+ let t = e.scrollHeight - e.scrollTop - e.clientHeight < 40;
19
+ x.current = t, C(t), e.scrollTop < 100 && l && !w.current && (w.current = !0, T.current = e.scrollHeight, l());
20
+ }, [l]);
21
+ h.useLayoutEffect(() => {
22
+ let e = b.current;
23
+ if (e) {
24
+ if (w.current) {
25
+ e.scrollTop = e.scrollHeight - T.current, w.current = !1;
26
+ return;
27
+ }
28
+ r && x.current && e.scrollTo({
29
+ top: e.scrollHeight,
30
+ behavior: "smooth"
31
+ });
32
+ }
33
+ }, [n, r]), h.useEffect(() => {
34
+ u || (w.current = !1);
35
+ }, [u]);
36
+ let O = s > 0 && !S, k = h.useCallback(() => {
37
+ let e = b.current;
38
+ e && e.scrollTo({
39
+ top: e.scrollHeight,
40
+ behavior: "smooth"
41
+ }), c?.();
42
+ }, [c]);
43
+ return /* @__PURE__ */ _("div", {
44
+ ref: y,
45
+ className: a("relative flex flex-1 flex-col overflow-hidden", m),
46
+ ...v,
47
+ children: [
48
+ p,
49
+ /* @__PURE__ */ _("div", {
50
+ ref: b,
51
+ role: "log",
52
+ "aria-live": "polite",
53
+ "aria-relevant": "additions",
54
+ className: "flex-1 overflow-y-auto px-ds-05 py-ds-04",
55
+ style: {
56
+ scrollbarWidth: "thin",
57
+ scrollbarColor: "var(--color-surface-border) transparent"
58
+ },
59
+ onScroll: D,
60
+ children: [u && /* @__PURE__ */ g("div", {
61
+ className: "flex justify-center py-ds-03",
62
+ children: /* @__PURE__ */ g(o, { size: "sm" })
63
+ }), E ? d : /* @__PURE__ */ g("div", {
64
+ className: "flex flex-col gap-ds-04",
65
+ children: /* @__PURE__ */ g(t, {
66
+ initial: !1,
67
+ children: n
68
+ })
69
+ })]
70
+ }),
71
+ /* @__PURE__ */ g(t, { children: O && /* @__PURE__ */ _(e.button, {
72
+ initial: {
73
+ opacity: 0,
74
+ y: 10
75
+ },
76
+ animate: {
77
+ opacity: 1,
78
+ y: 0
79
+ },
80
+ exit: {
81
+ opacity: 0,
82
+ y: 10
83
+ },
84
+ transition: i.fade,
85
+ onClick: k,
86
+ className: "absolute bottom-ds-04 left-1/2 z-10 -translate-x-1/2 rounded-full bg-accent-9 px-ds-04 py-ds-02 text-ds-xs font-medium text-accent-fg shadow-raised transition-colors hover:bg-accent-10",
87
+ children: [s, " new"]
88
+ }) })
89
+ ]
90
+ });
91
+ });
92
+ S.displayName = "MessageList";
93
+ //#endregion
94
+ //#region src/ui/chat/message.tsx
95
+ var C = h.createContext({
96
+ variant: "flat",
97
+ placement: "start",
98
+ grouped: !1
99
+ });
100
+ function w() {
101
+ return h.useContext(C);
102
+ }
103
+ var T = h.forwardRef(({ children: t, variant: i = "flat", placement: o = "start", highlight: c, grouped: l = !1, deleted: u = !1, deletedText: d = "This message was deleted", className: f, ...p }, m) => {
104
+ let v = h.useMemo(() => ({
105
+ variant: i,
106
+ placement: o,
107
+ grouped: l,
108
+ highlight: c
109
+ }), [
110
+ i,
111
+ o,
112
+ l,
113
+ c
114
+ ]);
115
+ return u ? /* @__PURE__ */ _(e.div, {
116
+ ref: m,
117
+ initial: {
118
+ opacity: 0,
119
+ y: 8
120
+ },
121
+ animate: {
122
+ opacity: 1,
123
+ y: 0
124
+ },
125
+ transition: r.snappy,
126
+ className: a("flex items-center gap-ds-02 py-ds-02 text-ds-xs text-surface-fg-subtle/50 italic", f),
127
+ ...n(p),
128
+ children: [/* @__PURE__ */ g(s, {
129
+ icon: x,
130
+ size: "xs"
131
+ }), d]
132
+ }) : i === "bubble" ? /* @__PURE__ */ g(C.Provider, {
133
+ value: v,
134
+ children: /* @__PURE__ */ g(e.div, {
135
+ ref: m,
136
+ initial: {
137
+ opacity: 0,
138
+ y: 8
139
+ },
140
+ animate: {
141
+ opacity: 1,
142
+ y: 0
143
+ },
144
+ transition: r.snappy,
145
+ className: a("group/message relative flex", o === "end" ? "justify-end" : "justify-start", c === "mention" && "border-l-2 border-l-accent-9 bg-accent-2 pl-ds-03 rounded-ds-sm", c === "internal" && "bg-warning-2/50 rounded-ds-sm", f),
146
+ ...n(p),
147
+ children: /* @__PURE__ */ g("div", {
148
+ className: a("max-w-[85%] rounded-ds-2xl px-ds-04 py-ds-03", o === "end" ? "bg-accent-3 text-surface-fg" : "bg-surface-raised text-surface-fg"),
149
+ children: t
150
+ })
151
+ })
152
+ }) : /* @__PURE__ */ g(C.Provider, {
153
+ value: v,
154
+ children: /* @__PURE__ */ g(e.div, {
155
+ ref: m,
156
+ initial: {
157
+ opacity: 0,
158
+ y: 8
159
+ },
160
+ animate: {
161
+ opacity: 1,
162
+ y: 0
163
+ },
164
+ transition: r.snappy,
165
+ className: a("group/message relative flex gap-ds-04", l && "-mt-ds-01", c === "mention" && "border-l-2 border-l-accent-9 bg-accent-2 pl-ds-03 rounded-ds-sm", c === "internal" && "bg-warning-2/50 rounded-ds-sm", f),
166
+ ...n(p),
167
+ children: t
168
+ })
169
+ });
170
+ });
171
+ T.displayName = "Message";
172
+ function E({ src: e, fallback: t, icon: n, size: r = "md", children: i }) {
173
+ let { grouped: o } = w(), s = r === "sm" ? "w-5" : "w-6";
174
+ return o ? /* @__PURE__ */ g("div", { className: a(s, r === "sm" ? "h-5" : "h-6", "shrink-0") }) : i ? /* @__PURE__ */ g("div", {
175
+ className: a(s, "shrink-0 flex items-start"),
176
+ children: i
177
+ }) : n ? /* @__PURE__ */ g("div", {
178
+ className: a(s, r === "sm" ? "h-5" : "h-6", "shrink-0 flex items-center justify-center rounded-ds-full bg-surface-raised-hover"),
179
+ children: n
180
+ }) : /* @__PURE__ */ g("div", {
181
+ className: a(s, "shrink-0"),
182
+ children: /* @__PURE__ */ _(c, {
183
+ size: r === "sm" ? "xs" : "sm",
184
+ children: [e && /* @__PURE__ */ g(u, {
185
+ src: e,
186
+ alt: t ?? ""
187
+ }), /* @__PURE__ */ g(l, { children: t ?? "" })]
188
+ })
189
+ });
190
+ }
191
+ E.displayName = "Message.Avatar";
192
+ function D({ children: e, className: t, ...n }) {
193
+ return /* @__PURE__ */ g("div", {
194
+ className: a("min-w-0 flex-1 flex flex-col gap-ds-02", t),
195
+ ...n,
196
+ children: e
197
+ });
198
+ }
199
+ D.displayName = "Message.Content";
200
+ function O(e) {
201
+ return e.toLocaleTimeString("en-US", {
202
+ hour: "numeric",
203
+ minute: "2-digit"
204
+ });
205
+ }
206
+ function k({ name: e, badge: t, timestamp: n, formattedTimestamp: r, timestampFormat: i = O }) {
207
+ let { grouped: a } = w();
208
+ if (a) return null;
209
+ let o = r ?? (n ? i(n) : void 0);
210
+ return /* @__PURE__ */ _("div", {
211
+ className: "flex items-baseline gap-ds-02",
212
+ children: [
213
+ /* @__PURE__ */ g("span", {
214
+ className: "font-semibold text-[13px] text-surface-fg",
215
+ children: e
216
+ }),
217
+ t,
218
+ o && /* @__PURE__ */ g("span", {
219
+ className: "text-[11px] text-surface-fg-subtle/50",
220
+ children: o
221
+ })
222
+ ]
223
+ });
224
+ }
225
+ k.displayName = "Message.Author";
226
+ function A({ children: e, className: t, ...n }) {
227
+ return /* @__PURE__ */ g("div", {
228
+ className: a("text-[13px] leading-relaxed text-surface-fg whitespace-pre-wrap", t),
229
+ ...n,
230
+ children: e
231
+ });
232
+ }
233
+ A.displayName = "Message.Body";
234
+ function j({ content: e, onSave: t, onCancel: n, canEdit: r = !1, renderContent: i }) {
235
+ let [o, s] = h.useState(!1), [c, l] = h.useState(e), u = h.useRef(null);
236
+ h.useEffect(() => {
237
+ o && u.current && (u.current.focus(), u.current.select());
238
+ }, [o]);
239
+ let d = h.useCallback(() => {
240
+ r && (l(e), s(!0));
241
+ }, [r, e]), f = h.useCallback(() => {
242
+ let n = c.trim();
243
+ n && n !== e && t(n), s(!1);
244
+ }, [
245
+ c,
246
+ e,
247
+ t
248
+ ]), p = h.useCallback(() => {
249
+ s(!1), l(e), n?.();
250
+ }, [e, n]), m = h.useCallback((e) => {
251
+ e.key === "Enter" && !e.shiftKey ? (e.preventDefault(), f()) : e.key === "Escape" && (e.preventDefault(), p());
252
+ }, [f, p]);
253
+ return o ? /* @__PURE__ */ _("div", {
254
+ className: "text-[13px] leading-relaxed",
255
+ children: [/* @__PURE__ */ g("textarea", {
256
+ ref: u,
257
+ value: c,
258
+ onChange: (e) => l(e.target.value),
259
+ onKeyDown: m,
260
+ onBlur: f,
261
+ className: "w-full resize-none rounded-ds-sm border border-surface-border-strong bg-surface-raised-hover px-ds-02 py-ds-01 text-[13px] leading-relaxed text-surface-fg focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9",
262
+ rows: 2
263
+ }), /* @__PURE__ */ g("div", {
264
+ className: "mt-ds-01 text-ds-xs text-surface-fg-subtle/50",
265
+ children: "Enter to save · Escape to cancel"
266
+ })]
267
+ }) : /* @__PURE__ */ g("div", {
268
+ className: a("text-[13px] leading-relaxed text-surface-fg whitespace-pre-wrap", r && "cursor-pointer hover:bg-surface-raised-hover rounded-ds-sm transition-colors"),
269
+ onClick: d,
270
+ role: r ? "button" : void 0,
271
+ tabIndex: r ? 0 : void 0,
272
+ onKeyDown: r ? (e) => {
273
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), d());
274
+ } : void 0,
275
+ children: i ? i(e) : e
276
+ });
277
+ }
278
+ j.displayName = "Message.EditableBody";
279
+ function M({ reactions: e, onReact: t }) {
280
+ return e.length === 0 ? null : /* @__PURE__ */ g("div", {
281
+ className: "flex flex-wrap gap-ds-02 mt-ds-03",
282
+ children: e.map((e) => /* @__PURE__ */ _("button", {
283
+ type: "button",
284
+ onClick: () => t(e.emoji),
285
+ className: a("inline-flex items-center gap-ds-01 rounded-full px-ds-02 py-ds-01 text-ds-xs transition-colors", e.reacted ? "bg-accent-3 ring-1 ring-accent-6" : "bg-surface-raised-hover hover:bg-surface-raised-active"),
286
+ children: [/* @__PURE__ */ g("span", { children: e.emoji }), /* @__PURE__ */ g("span", { children: e.count })]
287
+ }, e.emoji))
288
+ });
289
+ }
290
+ M.displayName = "Message.Reactions";
291
+ function N({ children: e, delay: t = 100 }) {
292
+ return /* @__PURE__ */ g("div", {
293
+ className: a("absolute -top-2 right-0 z-10", "flex items-center gap-ds-01 rounded-ds-md border border-surface-border bg-surface-raised px-ds-01 py-ds-01 shadow-raised", "opacity-0 group-hover/message:opacity-100 transition-opacity duration-150"),
294
+ style: { transitionDelay: `${t}ms` },
295
+ children: e
296
+ });
297
+ }
298
+ N.displayName = "Message.Actions";
299
+ function P({ icon: e, label: t, onClick: n, variant: r = "default" }) {
300
+ return /* @__PURE__ */ _(f, { children: [/* @__PURE__ */ g(m, {
301
+ asChild: !0,
302
+ children: /* @__PURE__ */ g("button", {
303
+ type: "button",
304
+ onClick: n,
305
+ "aria-label": t,
306
+ className: a("p-ds-02 rounded-ds-sm transition-colors", r === "default" && "text-surface-fg-subtle hover:text-surface-fg hover:bg-surface-raised-hover", r === "danger" && "text-surface-fg-subtle hover:text-error-11 hover:bg-surface-raised-hover"),
307
+ children: /* @__PURE__ */ g(s, {
308
+ icon: e,
309
+ size: "xs"
310
+ })
311
+ })
312
+ }), /* @__PURE__ */ g(p, { children: t })] });
313
+ }
314
+ P.displayName = "Message.Action";
315
+ var F = Object.assign(T, {
316
+ Avatar: E,
317
+ Content: D,
318
+ Author: k,
319
+ Body: A,
320
+ EditableBody: j,
321
+ Reactions: M,
322
+ Actions: N,
323
+ Action: P
324
+ });
325
+ //#endregion
326
+ //#region src/ui/chat/system-message.tsx
327
+ function I(e) {
328
+ return new Date(e).toLocaleTimeString("en-US", {
329
+ hour: "numeric",
330
+ minute: "2-digit"
331
+ });
332
+ }
333
+ var L = h.forwardRef(({ icon: e, timestamp: t, variant: n = "event", children: r, className: i, ...o }, c) => n === "alert" ? /* @__PURE__ */ g("div", {
334
+ ref: c,
335
+ className: a("flex justify-center", i),
336
+ ...o,
337
+ children: /* @__PURE__ */ _("div", {
338
+ className: "flex items-center gap-ds-03 rounded-ds-lg bg-error-3 px-ds-04 py-ds-03",
339
+ children: [
340
+ e ?? /* @__PURE__ */ g(s, {
341
+ icon: v,
342
+ size: "sm"
343
+ }),
344
+ /* @__PURE__ */ g("span", {
345
+ className: "text-ds-sm text-error-11",
346
+ children: r
347
+ }),
348
+ t && /* @__PURE__ */ g("span", {
349
+ className: "text-ds-sm text-error-11/60",
350
+ children: I(t)
351
+ })
352
+ ]
353
+ })
354
+ }) : /* @__PURE__ */ _("div", {
355
+ ref: c,
356
+ className: a("flex items-center gap-ds-02 rounded-ds-sm bg-surface-raised-hover/30 px-ds-02 py-ds-01 -mx-ds-02 text-ds-sm text-surface-fg-subtle/60", i),
357
+ ...o,
358
+ children: [
359
+ e,
360
+ /* @__PURE__ */ g("span", {
361
+ className: "flex-1",
362
+ children: r
363
+ }),
364
+ t && /* @__PURE__ */ g("span", { children: I(t) })
365
+ ]
366
+ }));
367
+ L.displayName = "SystemMessage";
368
+ //#endregion
369
+ //#region src/ui/chat/date-separator.tsx
370
+ function R(e) {
371
+ let t = /* @__PURE__ */ new Date(), n = new Date(t.getFullYear(), t.getMonth(), t.getDate()), r = new Date(e.getFullYear(), e.getMonth(), e.getDate()), i = n.getTime() - r.getTime(), a = Math.round(i / (1e3 * 60 * 60 * 24));
372
+ if (a === 0) return "Today";
373
+ if (a === 1) return "Yesterday";
374
+ let o = e.toLocaleString("en-US", { month: "short" }), s = e.getDate();
375
+ return e.getFullYear() === t.getFullYear() ? `${o} ${s}` : `${o} ${s}, ${e.getFullYear()}`;
376
+ }
377
+ function z({ date: e, format: t, className: n }) {
378
+ let r = typeof e == "string" ? new Date(e) : e, i = t ? t(r) : R(r);
379
+ return /* @__PURE__ */ _("div", {
380
+ className: a("flex items-center gap-ds-03 py-ds-03", n),
381
+ children: [
382
+ /* @__PURE__ */ g("div", { className: "flex-1 border-t border-surface-border-subtle" }),
383
+ /* @__PURE__ */ g("span", {
384
+ className: "text-ds-xs font-medium text-surface-fg-subtle/50 uppercase tracking-wider",
385
+ children: i
386
+ }),
387
+ /* @__PURE__ */ g("div", { className: "flex-1 border-t border-surface-border-subtle" })
388
+ ]
389
+ });
390
+ }
391
+ z.displayName = "DateSeparator";
392
+ //#endregion
393
+ //#region src/ui/chat/unread-separator.tsx
394
+ function B({ label: e = "NEW", count: t, className: n }) {
395
+ return /* @__PURE__ */ _("div", {
396
+ className: a("relative flex items-center py-ds-02", n),
397
+ children: [
398
+ /* @__PURE__ */ g("div", { className: "flex-1 border-t-2 border-accent-7" }),
399
+ /* @__PURE__ */ g("span", {
400
+ className: "px-ds-03 text-ds-xs font-semibold text-accent-11",
401
+ children: t ? `${t} ${e}` : e
402
+ }),
403
+ /* @__PURE__ */ g("div", { className: "flex-1 border-t-2 border-accent-7" })
404
+ ]
405
+ });
406
+ }
407
+ B.displayName = "UnreadSeparator";
408
+ //#endregion
409
+ //#region src/ui/chat/message-input.tsx
410
+ var V = h.forwardRef(({ onSubmit: e, placeholder: t = "Type a message...", disabled: n = !1, isStreaming: r = !1, onCancel: i, leadingSlot: o, trailingSlot: c, disclaimer: l, sendIcon: u, className: f, ...p }, m) => {
411
+ let [v, x] = h.useState(""), S = h.useRef(null), C = h.useCallback(() => {
412
+ let e = S.current;
413
+ e && (e.style.height = "auto", e.style.height = `${Math.min(e.scrollHeight, 160)}px`);
414
+ }, []), w = h.useCallback((e) => {
415
+ x(e.target.value), C();
416
+ }, [C]), T = h.useCallback(() => {
417
+ let t = v.trim();
418
+ !t || r || (e(t), x(""), S.current && (S.current.style.height = "auto"));
419
+ }, [
420
+ v,
421
+ r,
422
+ e
423
+ ]), E = h.useCallback((e) => {
424
+ e.key === "Enter" && !e.shiftKey && (e.preventDefault(), r || T());
425
+ }, [r, T]), D = v.trim().length === 0;
426
+ return /* @__PURE__ */ _("div", {
427
+ ref: m,
428
+ className: a("border-t border-surface-border-subtle px-ds-05 py-ds-04", f),
429
+ ...p,
430
+ children: [/* @__PURE__ */ _("div", {
431
+ className: "flex items-end gap-ds-02 rounded-ds-xl border border-surface-border bg-surface-base p-ds-03",
432
+ children: [
433
+ o,
434
+ /* @__PURE__ */ g("textarea", {
435
+ ref: S,
436
+ value: v,
437
+ onChange: w,
438
+ onKeyDown: E,
439
+ placeholder: t,
440
+ disabled: n,
441
+ rows: 1,
442
+ className: "flex-1 resize-none bg-transparent px-ds-02 py-ds-01 text-ds-sm text-surface-fg placeholder:text-surface-fg-subtle/50 focus:outline-hidden disabled:opacity-50",
443
+ style: { maxHeight: 160 }
444
+ }),
445
+ r ? /* @__PURE__ */ g(d, {
446
+ variant: "ghost",
447
+ size: "icon-sm",
448
+ color: "error",
449
+ onClick: i,
450
+ "aria-label": "Stop",
451
+ children: /* @__PURE__ */ g(s, {
452
+ icon: b,
453
+ size: "sm"
454
+ })
455
+ }) : /* @__PURE__ */ g(d, {
456
+ variant: "ghost",
457
+ size: "icon-sm",
458
+ onClick: T,
459
+ disabled: D || n,
460
+ "aria-label": "Send",
461
+ children: u ?? /* @__PURE__ */ g(s, {
462
+ icon: y,
463
+ size: "sm"
464
+ })
465
+ }),
466
+ c
467
+ ]
468
+ }), l && /* @__PURE__ */ g("p", {
469
+ className: "mt-ds-02 text-center text-ds-xs text-surface-fg-subtle/50",
470
+ children: l
471
+ })]
472
+ });
473
+ });
474
+ V.displayName = "MessageInput";
475
+ //#endregion
476
+ //#region src/ui/chat/typing-indicator.tsx
477
+ function H(e) {
478
+ return e.length === 1 ? `${e[0].name} is typing...` : e.length === 2 ? `${e[0].name} and ${e[1].name} are typing...` : "Several people are typing...";
479
+ }
480
+ function U({ users: n, className: r }) {
481
+ return /* @__PURE__ */ g("div", {
482
+ className: a("min-h-[24px] px-ds-05", r),
483
+ children: /* @__PURE__ */ g(t, { children: n.length > 0 && /* @__PURE__ */ _(e.div, {
484
+ initial: { opacity: 0 },
485
+ animate: { opacity: 1 },
486
+ exit: { opacity: 0 },
487
+ className: "flex items-center gap-ds-02 text-ds-xs text-surface-fg-subtle",
488
+ children: [/* @__PURE__ */ g("span", {
489
+ className: "flex items-center gap-ds-01",
490
+ children: [
491
+ 0,
492
+ 1,
493
+ 2
494
+ ].map((t) => /* @__PURE__ */ g(e.span, {
495
+ className: "h-1 w-1 rounded-full bg-surface-fg-subtle",
496
+ animate: { y: [
497
+ 0,
498
+ -3,
499
+ 0
500
+ ] },
501
+ transition: {
502
+ duration: .5,
503
+ repeat: Infinity,
504
+ delay: t * .15
505
+ }
506
+ }, t))
507
+ }), /* @__PURE__ */ g("span", { children: H(n) })]
508
+ }) })
509
+ });
510
+ }
511
+ U.displayName = "TypingIndicator";
512
+ //#endregion
513
+ export { L as a, S as c, z as i, V as n, F as o, B as r, w as s, U as t };