@devalok/shilp-sutra 0.33.2 → 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 (175) 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 -451
  81. package/dist/tailwind/index.js +2 -4
  82. package/dist/tailwind/preset.d.ts.map +1 -1
  83. package/dist/tailwind/preset.js +443 -468
  84. package/dist/ui/accordion.js +52 -60
  85. package/dist/ui/alert-dialog.js +111 -156
  86. package/dist/ui/alert.js +177 -99
  87. package/dist/ui/aspect-ratio.js +13 -16
  88. package/dist/ui/autocomplete.js +112 -148
  89. package/dist/ui/avatar.js +196 -169
  90. package/dist/ui/badge-group.js +2 -7
  91. package/dist/ui/badge-indicator.js +42 -51
  92. package/dist/ui/badge.js +2 -15
  93. package/dist/ui/banner.js +76 -68
  94. package/dist/ui/breadcrumb.js +65 -84
  95. package/dist/ui/button-group.js +109 -102
  96. package/dist/ui/button-processing.js +69 -73
  97. package/dist/ui/button.js +393 -279
  98. package/dist/ui/card.js +151 -157
  99. package/dist/ui/charts/index.js +1002 -1319
  100. package/dist/ui/chat/index.js +2 -11
  101. package/dist/ui/checkbox.js +77 -100
  102. package/dist/ui/code.js +18 -32
  103. package/dist/ui/collapsible.js +21 -29
  104. package/dist/ui/color-input.js +453 -372
  105. package/dist/ui/color-swatch.js +60 -90
  106. package/dist/ui/combobox.js +244 -293
  107. package/dist/ui/container.js +18 -24
  108. package/dist/ui/context-menu.js +154 -203
  109. package/dist/ui/data-table-body.js +116 -213
  110. package/dist/ui/data-table-bulk-actions.js +43 -59
  111. package/dist/ui/data-table-card.js +84 -71
  112. package/dist/ui/data-table-context.js +39 -42
  113. package/dist/ui/data-table-header.js +98 -139
  114. package/dist/ui/data-table-pagination.js +69 -82
  115. package/dist/ui/data-table-toolbar.js +104 -130
  116. package/dist/ui/data-table.js +278 -354
  117. package/dist/ui/devalok-grain.js +77 -66
  118. package/dist/ui/dialog.js +122 -151
  119. package/dist/ui/dropdown-menu.js +152 -203
  120. package/dist/ui/file-upload.js +242 -266
  121. package/dist/ui/form.js +60 -56
  122. package/dist/ui/hover-card.js +54 -54
  123. package/dist/ui/icon-button.js +21 -26
  124. package/dist/ui/icon-context.js +17 -17
  125. package/dist/ui/icon-group.js +22 -29
  126. package/dist/ui/icon.js +201 -121
  127. package/dist/ui/index.js +74 -350
  128. package/dist/ui/input-otp.d.ts.map +1 -1
  129. package/dist/ui/input-otp.js +44 -48
  130. package/dist/ui/input.js +92 -169
  131. package/dist/ui/label.js +17 -22
  132. package/dist/ui/lib/date-utils.js +14 -11
  133. package/dist/ui/lib/motion.js +77 -36
  134. package/dist/ui/lib/utils.js +39 -16
  135. package/dist/ui/link.js +13 -24
  136. package/dist/ui/menubar.js +132 -210
  137. package/dist/ui/navigation-menu.js +164 -194
  138. package/dist/ui/number-input.js +72 -95
  139. package/dist/ui/pagination.js +122 -159
  140. package/dist/ui/popover.js +2 -131
  141. package/dist/ui/progress-ring.js +133 -143
  142. package/dist/ui/progress.js +51 -95
  143. package/dist/ui/radio.js +41 -50
  144. package/dist/ui/search-input.js +51 -53
  145. package/dist/ui/segmented-control.js +93 -114
  146. package/dist/ui/select.js +131 -157
  147. package/dist/ui/separator.js +15 -25
  148. package/dist/ui/sheet.js +135 -163
  149. package/dist/ui/sidebar.js +357 -600
  150. package/dist/ui/skeleton.js +179 -231
  151. package/dist/ui/slider.js +24 -34
  152. package/dist/ui/spinner.js +226 -205
  153. package/dist/ui/split-button.js +227 -276
  154. package/dist/ui/stack.js +56 -70
  155. package/dist/ui/stat-card.js +259 -251
  156. package/dist/ui/status-dot.js +67 -63
  157. package/dist/ui/stepper.js +119 -168
  158. package/dist/ui/switch.js +51 -54
  159. package/dist/ui/table.js +57 -90
  160. package/dist/ui/tabs.js +139 -156
  161. package/dist/ui/text.js +52 -59
  162. package/dist/ui/textarea.js +40 -57
  163. package/dist/ui/toast-types.js +0 -1
  164. package/dist/ui/toast.js +554 -536
  165. package/dist/ui/toaster.js +23 -33
  166. package/dist/ui/toggle-group.js +37 -41
  167. package/dist/ui/toggle.js +36 -40
  168. package/dist/ui/tooltip.js +80 -65
  169. package/dist/ui/tree-view/index.js +2 -6
  170. package/dist/ui/visually-hidden.js +12 -10
  171. package/llms-full.txt +1 -1
  172. package/llms.txt +12 -0
  173. package/package.json +3 -3
  174. package/dist/_chunks/date-time-picker.js +0 -851
  175. package/dist/_chunks/typing-indicator.js +0 -565
@@ -1,269 +1,245 @@
1
1
  "use client";
2
- import { jsxs as p, jsx as t } from "react/jsx-runtime";
3
- import * as r from "react";
4
- import { IconPaperclip as Z, IconCheck as q, IconUpload as G } from "@tabler/icons-react";
5
- import { cn as h } from "./lib/utils.js";
6
- import { springs as w, tweens as N } from "./lib/motion.js";
7
- import { Spinner as B } from "./spinner.js";
8
- import { Icon as I } from "./icon.js";
9
- import { m as c, A as M } from "../_chunks/framer.js";
10
- const H = 10 * 1024 * 1024;
11
- function J(a, l) {
12
- return l.split(",").map((s) => s.trim()).some((s) => s.startsWith(".") ? a.name.toLowerCase().endsWith(s.toLowerCase()) : s.endsWith("/*") ? a.type.startsWith(s.slice(0, s.indexOf("/") + 1)) : a.type === s);
2
+ import { a as e, c as t } from "../_chunks/framer.js";
3
+ import { springs as n, tweens as r } from "./lib/motion.js";
4
+ import { cn as i } from "./lib/utils.js";
5
+ import { Spinner as a } from "./spinner.js";
6
+ import { Icon as o } from "./icon.js";
7
+ import * as s from "react";
8
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
9
+ import { IconCheck as u, IconPaperclip as d, IconUpload as f } from "@tabler/icons-react";
10
+ //#region src/ui/file-upload.tsx
11
+ var p = 10 * 1024 * 1024;
12
+ function m(e, t) {
13
+ return t.split(",").map((e) => e.trim()).some((t) => t.startsWith(".") ? e.name.toLowerCase().endsWith(t.toLowerCase()) : t.endsWith("/*") ? e.type.startsWith(t.slice(0, t.indexOf("/") + 1)) : e.type === t);
13
14
  }
14
- function U(a) {
15
- return a < 1024 ? `${a} B` : a < 1024 * 1024 ? `${(a / 1024).toFixed(1)} KB` : `${(a / (1024 * 1024)).toFixed(1)} MB`;
15
+ function h(e) {
16
+ return e < 1024 ? `${e} B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(1)} KB` : `${(e / (1024 * 1024)).toFixed(1)} MB`;
16
17
  }
17
- const Q = r.forwardRef(
18
- ({
19
- accept: a,
20
- maxSize: l = H,
21
- multiple: s = !1,
22
- uploading: o = !1,
23
- progress: x = 0,
24
- onFiles: A,
25
- error: F,
26
- compact: W = !1,
27
- disabled: n = !1,
28
- className: E,
29
- label: v,
30
- sublabel: j,
31
- ...L
32
- }, R) => {
33
- const y = r.useRef(null), [b, f] = r.useState(!1), [K, d] = r.useState(
34
- null
35
- ), g = r.useRef(!1), k = r.useRef(!1), u = F || K, C = r.useCallback(() => {
36
- n || o || y.current?.click();
37
- }, [n, o]), m = r.useCallback(
38
- (e) => {
39
- d(null);
40
- for (const i of e) {
41
- if (i.size > l) {
42
- d(
43
- `File "${i.name}" exceeds the maximum size of ${U(l)}`
44
- );
45
- return;
46
- }
47
- if (a && !J(i, a)) {
48
- d(
49
- `File "${i.name}" is not an accepted file type`
50
- );
51
- return;
52
- }
53
- }
54
- A(e);
55
- },
56
- [l, a, A]
57
- ), $ = r.useCallback(
58
- (e) => {
59
- k.current = !0;
60
- const i = e.target.files;
61
- !i || i.length === 0 || (m(Array.from(i)), e.target.value = "");
62
- },
63
- [m]
64
- ), P = r.useCallback(() => {
65
- g.current = !0, k.current = !1;
66
- }, []), z = r.useCallback(() => {
67
- g.current && !k.current && a && d("File type is not accepted"), g.current = !1;
68
- }, [a]), S = r.useCallback(
69
- (e) => {
70
- e.preventDefault(), e.stopPropagation(), !n && !o && f(!0);
71
- },
72
- [n, o]
73
- ), T = r.useCallback(
74
- (e) => {
75
- e.preventDefault(), e.stopPropagation(), !n && !o && f(!0);
76
- },
77
- [n, o]
78
- ), _ = r.useCallback(
79
- (e) => {
80
- e.preventDefault(), e.stopPropagation(), f(!1);
81
- },
82
- []
83
- ), V = r.useCallback(
84
- (e) => {
85
- if (e.preventDefault(), e.stopPropagation(), f(!1), n || o) return;
86
- const i = e.dataTransfer.files;
87
- !i || i.length === 0 || m(Array.from(i));
88
- },
89
- [n, o, m]
90
- ), O = v ?? "Drop files here or click to browse", X = j ?? `Max file size: ${U(l)}`, D = r.useId();
91
- return W ? /* @__PURE__ */ p("div", { ref: R, className: h("inline-flex flex-col", E), ...L, children: [
92
- /* @__PURE__ */ p(
93
- "button",
94
- {
95
- type: "button",
96
- onClick: C,
97
- disabled: n,
98
- className: h(
99
- "inline-flex items-center gap-ds-02 rounded-ds-md px-ds-03 py-ds-02",
100
- "text-ds-sm font-medium",
101
- "border border-surface-border-strong",
102
- "bg-surface-raised-hover text-surface-fg-muted",
103
- "hover:bg-accent-2",
104
- "disabled:opacity-action-disabled disabled:cursor-not-allowed",
105
- "transition-colors"
106
- ),
107
- children: [
108
- o ? /* @__PURE__ */ t(B, { size: "sm" }) : /* @__PURE__ */ t(I, { icon: Z, size: "sm" }),
109
- v ?? "Attach files"
110
- ]
111
- }
112
- ),
113
- /* @__PURE__ */ t(
114
- "input",
115
- {
116
- ref: y,
117
- id: D,
118
- type: "file",
119
- className: "sr-only",
120
- style: { visibility: "hidden" },
121
- "aria-hidden": "true",
122
- "aria-label": v ?? "Attach files",
123
- accept: a,
124
- multiple: s,
125
- disabled: n,
126
- onChange: $,
127
- onClick: P,
128
- onFocus: z,
129
- tabIndex: -1
130
- }
131
- ),
132
- u && /* @__PURE__ */ t(
133
- "p",
134
- {
135
- role: "alert",
136
- "aria-live": "polite",
137
- className: "mt-ds-02 text-ds-xs text-error-11",
138
- children: u
139
- }
140
- )
141
- ] }) : /* @__PURE__ */ p(
142
- "div",
143
- {
144
- ref: R,
145
- ...L,
146
- role: "presentation",
147
- className: h("flex flex-col", E),
148
- "data-drag-active": b ? "true" : void 0,
149
- onDragEnter: S,
150
- onDragOver: T,
151
- onDragLeave: _,
152
- onDrop: V,
153
- children: [
154
- /* @__PURE__ */ p(
155
- c.div,
156
- {
157
- role: "button",
158
- tabIndex: 0,
159
- "aria-disabled": n || void 0,
160
- onClick: n ? void 0 : C,
161
- onKeyDown: (e) => {
162
- !n && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), C());
163
- },
164
- className: h(
165
- "flex flex-col items-center justify-center gap-ds-03 rounded-ds-lg",
166
- "border-2 border-dashed p-ds-08",
167
- "cursor-pointer",
168
- "border-surface-border-strong bg-surface-raised-hover",
169
- b && "border-accent-7 bg-accent-2",
170
- n && "opacity-action-disabled cursor-not-allowed"
171
- ),
172
- animate: {
173
- scale: b ? 1.02 : 1
174
- },
175
- transition: w.snappy,
176
- children: [
177
- /* @__PURE__ */ t(M, { mode: "wait", children: o ? /* @__PURE__ */ t(
178
- c.div,
179
- {
180
- initial: { opacity: 0, scale: 0.5 },
181
- animate: { opacity: 1, scale: 1 },
182
- exit: { opacity: 0, scale: 0.5 },
183
- transition: N.fade,
184
- children: /* @__PURE__ */ t(B, { size: "md" })
185
- },
186
- "spinner"
187
- ) : x === 100 && !F ? /* @__PURE__ */ t(
188
- c.div,
189
- {
190
- initial: { opacity: 0, scale: 0.5 },
191
- animate: { opacity: 1, scale: 1 },
192
- exit: { opacity: 0, scale: 0.5 },
193
- transition: w.bouncy,
194
- children: /* @__PURE__ */ t(I, { icon: q, size: "2xl", className: "text-success-11" })
195
- },
196
- "complete"
197
- ) : /* @__PURE__ */ t(
198
- c.div,
199
- {
200
- initial: { opacity: 0 },
201
- animate: { opacity: 1 },
202
- exit: { opacity: 0 },
203
- transition: N.fade,
204
- children: /* @__PURE__ */ t(I, { icon: G, size: "2xl", className: "text-surface-fg-subtle" })
205
- },
206
- "upload"
207
- ) }),
208
- /* @__PURE__ */ t("span", { id: D + "-label", className: "text-ds-sm text-surface-fg-muted", children: O }),
209
- o ? /* @__PURE__ */ t("div", { className: "w-full max-w-xs", children: /* @__PURE__ */ t(
210
- "div",
211
- {
212
- role: "progressbar",
213
- "aria-valuenow": x,
214
- "aria-valuemin": 0,
215
- "aria-valuemax": 100,
216
- className: "h-2 w-full overflow-hidden rounded-ds-full bg-surface-raised-hover",
217
- children: /* @__PURE__ */ t(
218
- c.div,
219
- {
220
- className: "h-full rounded-ds-full bg-accent-9",
221
- animate: { width: `${x}%` },
222
- transition: w.smooth
223
- }
224
- )
225
- }
226
- ) }) : /* @__PURE__ */ t("span", { className: "text-ds-xs text-surface-fg-subtle", children: X })
227
- ]
228
- }
229
- ),
230
- /* @__PURE__ */ t(
231
- "input",
232
- {
233
- ref: y,
234
- id: D,
235
- type: "file",
236
- className: "sr-only",
237
- style: { visibility: "hidden" },
238
- "aria-hidden": "true",
239
- "aria-label": O,
240
- accept: a,
241
- multiple: s,
242
- disabled: n,
243
- onChange: $,
244
- onClick: P,
245
- onFocus: z,
246
- tabIndex: -1
247
- }
248
- ),
249
- /* @__PURE__ */ t(M, { children: u && /* @__PURE__ */ t(
250
- c.p,
251
- {
252
- role: "alert",
253
- className: "mt-ds-02 text-ds-xs text-error-11",
254
- initial: { opacity: 0, x: 0 },
255
- animate: { opacity: 1, x: [0, -4, 4, -4, 4, 0] },
256
- exit: { opacity: 0 },
257
- transition: { opacity: N.fade, x: { type: "tween", duration: 0.4, ease: "easeOut" } },
258
- children: u
259
- }
260
- ) })
261
- ]
262
- }
263
- );
264
- }
265
- );
266
- Q.displayName = "FileUpload";
267
- export {
268
- Q as FileUpload
269
- };
18
+ var g = s.forwardRef(({ accept: g, maxSize: _ = p, multiple: v = !1, uploading: y = !1, progress: b = 0, onFiles: x, error: S, compact: C = !1, disabled: w = !1, className: T, label: E, sublabel: D, ...O }, k) => {
19
+ let A = s.useRef(null), [j, M] = s.useState(!1), [N, P] = s.useState(null), F = s.useRef(!1), I = s.useRef(!1), L = S || N, R = s.useCallback(() => {
20
+ w || y || A.current?.click();
21
+ }, [w, y]), z = s.useCallback((e) => {
22
+ P(null);
23
+ for (let t of e) {
24
+ if (t.size > _) {
25
+ P(`File "${t.name}" exceeds the maximum size of ${h(_)}`);
26
+ return;
27
+ }
28
+ if (g && !m(t, g)) {
29
+ P(`File "${t.name}" is not an accepted file type`);
30
+ return;
31
+ }
32
+ }
33
+ x(e);
34
+ }, [
35
+ _,
36
+ g,
37
+ x
38
+ ]), B = s.useCallback((e) => {
39
+ I.current = !0;
40
+ let t = e.target.files;
41
+ !t || t.length === 0 || (z(Array.from(t)), e.target.value = "");
42
+ }, [z]), V = s.useCallback(() => {
43
+ F.current = !0, I.current = !1;
44
+ }, []), H = s.useCallback(() => {
45
+ F.current && !I.current && g && P("File type is not accepted"), F.current = !1;
46
+ }, [g]), U = s.useCallback((e) => {
47
+ e.preventDefault(), e.stopPropagation(), !w && !y && M(!0);
48
+ }, [w, y]), W = s.useCallback((e) => {
49
+ e.preventDefault(), e.stopPropagation(), !w && !y && M(!0);
50
+ }, [w, y]), G = s.useCallback((e) => {
51
+ e.preventDefault(), e.stopPropagation(), M(!1);
52
+ }, []), K = s.useCallback((e) => {
53
+ if (e.preventDefault(), e.stopPropagation(), M(!1), w || y) return;
54
+ let t = e.dataTransfer.files;
55
+ !t || t.length === 0 || z(Array.from(t));
56
+ }, [
57
+ w,
58
+ y,
59
+ z
60
+ ]), q = E ?? "Drop files here or click to browse", J = D ?? `Max file size: ${h(_)}`, Y = s.useId();
61
+ return C ? /* @__PURE__ */ l("div", {
62
+ ref: k,
63
+ className: i("inline-flex flex-col", T),
64
+ ...O,
65
+ children: [
66
+ /* @__PURE__ */ l("button", {
67
+ type: "button",
68
+ onClick: R,
69
+ disabled: w,
70
+ className: i("inline-flex items-center gap-ds-02 rounded-ds-md px-ds-03 py-ds-02", "text-ds-sm font-medium", "border border-surface-border-strong", "bg-surface-raised-hover text-surface-fg-muted", "hover:bg-accent-2", "disabled:opacity-action-disabled disabled:cursor-not-allowed", "transition-colors"),
71
+ children: [y ? /* @__PURE__ */ c(a, { size: "sm" }) : /* @__PURE__ */ c(o, {
72
+ icon: d,
73
+ size: "sm"
74
+ }), E ?? "Attach files"]
75
+ }),
76
+ /* @__PURE__ */ c("input", {
77
+ ref: A,
78
+ id: Y,
79
+ type: "file",
80
+ className: "sr-only",
81
+ style: { visibility: "hidden" },
82
+ "aria-hidden": "true",
83
+ "aria-label": E ?? "Attach files",
84
+ accept: g,
85
+ multiple: v,
86
+ disabled: w,
87
+ onChange: B,
88
+ onClick: V,
89
+ onFocus: H,
90
+ tabIndex: -1
91
+ }),
92
+ L && /* @__PURE__ */ c("p", {
93
+ role: "alert",
94
+ "aria-live": "polite",
95
+ className: "mt-ds-02 text-ds-xs text-error-11",
96
+ children: L
97
+ })
98
+ ]
99
+ }) : /* @__PURE__ */ l("div", {
100
+ ref: k,
101
+ ...O,
102
+ role: "presentation",
103
+ className: i("flex flex-col", T),
104
+ "data-drag-active": j ? "true" : void 0,
105
+ onDragEnter: U,
106
+ onDragOver: W,
107
+ onDragLeave: G,
108
+ onDrop: K,
109
+ children: [
110
+ /* @__PURE__ */ l(e.div, {
111
+ role: "button",
112
+ tabIndex: 0,
113
+ "aria-disabled": w || void 0,
114
+ onClick: w ? void 0 : R,
115
+ onKeyDown: (e) => {
116
+ !w && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), R());
117
+ },
118
+ className: i("flex flex-col items-center justify-center gap-ds-03 rounded-ds-lg", "border-2 border-dashed p-ds-08", "cursor-pointer", "border-surface-border-strong bg-surface-raised-hover", j && "border-accent-7 bg-accent-2", w && "opacity-action-disabled cursor-not-allowed"),
119
+ animate: { scale: j ? 1.02 : 1 },
120
+ transition: n.snappy,
121
+ children: [
122
+ /* @__PURE__ */ c(t, {
123
+ mode: "wait",
124
+ children: y ? /* @__PURE__ */ c(e.div, {
125
+ initial: {
126
+ opacity: 0,
127
+ scale: .5
128
+ },
129
+ animate: {
130
+ opacity: 1,
131
+ scale: 1
132
+ },
133
+ exit: {
134
+ opacity: 0,
135
+ scale: .5
136
+ },
137
+ transition: r.fade,
138
+ children: /* @__PURE__ */ c(a, { size: "md" })
139
+ }, "spinner") : b === 100 && !S ? /* @__PURE__ */ c(e.div, {
140
+ initial: {
141
+ opacity: 0,
142
+ scale: .5
143
+ },
144
+ animate: {
145
+ opacity: 1,
146
+ scale: 1
147
+ },
148
+ exit: {
149
+ opacity: 0,
150
+ scale: .5
151
+ },
152
+ transition: n.bouncy,
153
+ children: /* @__PURE__ */ c(o, {
154
+ icon: u,
155
+ size: "2xl",
156
+ className: "text-success-11"
157
+ })
158
+ }, "complete") : /* @__PURE__ */ c(e.div, {
159
+ initial: { opacity: 0 },
160
+ animate: { opacity: 1 },
161
+ exit: { opacity: 0 },
162
+ transition: r.fade,
163
+ children: /* @__PURE__ */ c(o, {
164
+ icon: f,
165
+ size: "2xl",
166
+ className: "text-surface-fg-subtle"
167
+ })
168
+ }, "upload")
169
+ }),
170
+ /* @__PURE__ */ c("span", {
171
+ id: Y + "-label",
172
+ className: "text-ds-sm text-surface-fg-muted",
173
+ children: q
174
+ }),
175
+ y ? /* @__PURE__ */ c("div", {
176
+ className: "w-full max-w-xs",
177
+ children: /* @__PURE__ */ c("div", {
178
+ role: "progressbar",
179
+ "aria-valuenow": b,
180
+ "aria-valuemin": 0,
181
+ "aria-valuemax": 100,
182
+ className: "h-2 w-full overflow-hidden rounded-ds-full bg-surface-raised-hover",
183
+ children: /* @__PURE__ */ c(e.div, {
184
+ className: "h-full rounded-ds-full bg-accent-9",
185
+ animate: { width: `${b}%` },
186
+ transition: n.smooth
187
+ })
188
+ })
189
+ }) : /* @__PURE__ */ c("span", {
190
+ className: "text-ds-xs text-surface-fg-subtle",
191
+ children: J
192
+ })
193
+ ]
194
+ }),
195
+ /* @__PURE__ */ c("input", {
196
+ ref: A,
197
+ id: Y,
198
+ type: "file",
199
+ className: "sr-only",
200
+ style: { visibility: "hidden" },
201
+ "aria-hidden": "true",
202
+ "aria-label": q,
203
+ accept: g,
204
+ multiple: v,
205
+ disabled: w,
206
+ onChange: B,
207
+ onClick: V,
208
+ onFocus: H,
209
+ tabIndex: -1
210
+ }),
211
+ /* @__PURE__ */ c(t, { children: L && /* @__PURE__ */ c(e.p, {
212
+ role: "alert",
213
+ className: "mt-ds-02 text-ds-xs text-error-11",
214
+ initial: {
215
+ opacity: 0,
216
+ x: 0
217
+ },
218
+ animate: {
219
+ opacity: 1,
220
+ x: [
221
+ 0,
222
+ -4,
223
+ 4,
224
+ -4,
225
+ 4,
226
+ 0
227
+ ]
228
+ },
229
+ exit: { opacity: 0 },
230
+ transition: {
231
+ opacity: r.fade,
232
+ x: {
233
+ type: "tween",
234
+ duration: .4,
235
+ ease: "easeOut"
236
+ }
237
+ },
238
+ children: L
239
+ }) })
240
+ ]
241
+ });
242
+ });
243
+ g.displayName = "FileUpload";
244
+ //#endregion
245
+ export { g as FileUpload };
package/dist/ui/form.js CHANGED
@@ -1,58 +1,62 @@
1
1
  "use client";
2
- import { jsx as c } from "react/jsx-runtime";
3
- import * as e from "react";
4
- import { tweens as f, motionProps as u } from "./lib/motion.js";
5
- import { cn as d } from "./lib/utils.js";
6
- import { m as F } from "../_chunks/framer.js";
7
- const m = e.createContext({}), h = e.forwardRef(
8
- ({ className: a, helperTextId: n, state: t = "helper", required: o, children: i, ...r }, s) => {
9
- const l = e.useId(), p = n || `${l}-helper`, x = e.useMemo(
10
- () => ({ state: t, helperTextId: p, required: o }),
11
- [t, p, o]
12
- );
13
- return /* @__PURE__ */ c(m.Provider, { value: x, children: /* @__PURE__ */ c(
14
- "div",
15
- {
16
- ref: s,
17
- className: d("flex flex-col gap-ds-02", a),
18
- ...r,
19
- children: i
20
- }
21
- ) });
22
- }
23
- );
24
- h.displayName = "FormField";
25
- const y = {
26
- helper: "text-surface-fg-subtle",
27
- error: "text-error-11",
28
- warning: "text-warning-11",
29
- success: "text-success-11"
30
- }, v = e.forwardRef(
31
- ({ className: a, id: n, state: t, ...o }, i) => {
32
- const r = e.useContext(m), s = t ?? r.state ?? "helper", l = n ?? r.helperTextId;
33
- return /* @__PURE__ */ c(
34
- F.p,
35
- {
36
- ref: i,
37
- id: l,
38
- role: s === "error" ? "alert" : void 0,
39
- className: d("text-ds-sm", y[s], a),
40
- initial: { opacity: 0, y: -4 },
41
- animate: { opacity: 1, y: 0 },
42
- exit: { opacity: 0, y: -4 },
43
- transition: f.fade,
44
- ...u(o)
45
- }
46
- );
47
- }
48
- );
49
- v.displayName = "FormHelperText";
50
- function N() {
51
- return e.useContext(m);
2
+ import { a as e } from "../_chunks/framer.js";
3
+ import { motionProps as t, tweens as n } from "./lib/motion.js";
4
+ import { cn as r } from "./lib/utils.js";
5
+ import * as i from "react";
6
+ import { jsx as a } from "react/jsx-runtime";
7
+ //#region src/ui/form.tsx
8
+ var o = i.createContext({}), s = i.forwardRef(({ className: e, helperTextId: t, state: n = "helper", required: s, children: c, ...l }, u) => {
9
+ let d = i.useId(), f = t || `${d}-helper`, p = i.useMemo(() => ({
10
+ state: n,
11
+ helperTextId: f,
12
+ required: s
13
+ }), [
14
+ n,
15
+ f,
16
+ s
17
+ ]);
18
+ return /* @__PURE__ */ a(o.Provider, {
19
+ value: p,
20
+ children: /* @__PURE__ */ a("div", {
21
+ ref: u,
22
+ className: r("flex flex-col gap-ds-02", e),
23
+ ...l,
24
+ children: c
25
+ })
26
+ });
27
+ });
28
+ s.displayName = "FormField";
29
+ var c = {
30
+ helper: "text-surface-fg-subtle",
31
+ error: "text-error-11",
32
+ warning: "text-warning-11",
33
+ success: "text-success-11"
34
+ }, l = i.forwardRef(({ className: s, id: l, state: u, ...d }, f) => {
35
+ let p = i.useContext(o), m = u ?? p.state ?? "helper", h = l ?? p.helperTextId;
36
+ return /* @__PURE__ */ a(e.p, {
37
+ ref: f,
38
+ id: h,
39
+ role: m === "error" ? "alert" : void 0,
40
+ className: r("text-ds-sm", c[m], s),
41
+ initial: {
42
+ opacity: 0,
43
+ y: -4
44
+ },
45
+ animate: {
46
+ opacity: 1,
47
+ y: 0
48
+ },
49
+ exit: {
50
+ opacity: 0,
51
+ y: -4
52
+ },
53
+ transition: n.fade,
54
+ ...t(d)
55
+ });
56
+ });
57
+ l.displayName = "FormHelperText";
58
+ function u() {
59
+ return i.useContext(o);
52
60
  }
53
- export {
54
- h as FormField,
55
- m as FormFieldContext,
56
- v as FormHelperText,
57
- N as useFormField
58
- };
61
+ //#endregion
62
+ export { s as FormField, o as FormFieldContext, l as FormHelperText, u as useFormField };