@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
package/dist/ui/button.js CHANGED
@@ -1,281 +1,395 @@
1
1
  "use client";
2
- import { jsx as e, jsxs as T, Fragment as pe } from "react/jsx-runtime";
3
- import { a as be } from "../_chunks/vendor-utils.js";
4
- import { IconCheck as he, IconX as xe } from "@tabler/icons-react";
5
- import { S as we, i as Ne } from "../_chunks/primitives.js";
6
- import * as t from "react";
7
- import { useButtonGroup as ye, useButtonGroupItem as ke, getGroupPositionStyle as Se } from "./button-group.js";
8
- import { Icon as Re } from "./icon.js";
9
- import { IconProvider as ze } from "./icon-context.js";
10
- import { motionProps as Ce } from "./lib/motion.js";
11
- import { ProcessingOverlay as Ee } from "./button-processing.js";
2
+ import { Ln as e, Rn as t } from "../_chunks/primitives.js";
3
+ import { a as n, n as ee } from "../_chunks/framer.js";
4
+ import { motionProps as te } from "./lib/motion.js";
5
+ import { t as r } from "../_chunks/vendor-utils.js";
12
6
  import { cn as i } from "./lib/utils.js";
13
- import { Spinner as B } from "./spinner.js";
14
- import { u as je, m as Ie } from "../_chunks/framer.js";
15
- const H = be(
16
- "relative inline-flex items-center justify-center whitespace-nowrap font-sans select-none overflow-hidden isolate focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-9 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-action-disabled disabled:cursor-not-allowed disabled:saturate-[0.3] [&>span:not([data-grain])]:relative [&>span:not([data-grain])]:z-[2]",
17
- {
18
- variants: {
19
- variant: {
20
- solid: "",
21
- soft: "",
22
- outline: "border",
23
- ghost: "",
24
- link: "underline-offset-4 hover:underline active:opacity-80"
25
- },
26
- color: {
27
- accent: "",
28
- error: "",
29
- success: "",
30
- warning: "",
31
- neutral: ""
32
- },
33
- weight: {
34
- semibold: "font-semibold",
35
- normal: "font-normal"
36
- },
37
- size: {
38
- xs: "h-ds-xs-plus rounded-ds-md px-ds-03 text-ds-sm gap-1",
39
- sm: "h-ds-sm rounded-ds-md px-ds-04 text-ds-sm gap-1.5",
40
- md: "h-ds-md rounded-ds-lg px-ds-05 text-ds-md gap-2",
41
- lg: "h-ds-lg rounded-ds-xl px-ds-06 text-ds-base gap-2.5",
42
- "compact-xs": "rounded-ds-md px-ds-02 py-[3px] text-ds-sm gap-1",
43
- "compact-sm": "rounded-ds-md px-ds-03 py-[5px] text-ds-sm gap-1.5",
44
- "compact-md": "rounded-ds-lg px-ds-04 py-ds-03 text-ds-md gap-2",
45
- icon: "h-ds-md w-ds-md rounded-ds-md",
46
- "icon-xs": "h-ds-xs-plus w-ds-xs-plus rounded-ds-sm",
47
- "icon-sm": "h-ds-sm w-ds-sm rounded-ds-md",
48
- "icon-md": "h-ds-md w-ds-md rounded-ds-md",
49
- "icon-lg": "h-ds-lg w-ds-lg rounded-ds-lg"
50
- }
51
- },
52
- compoundVariants: [
53
- // ============ SOLID ============ (colored hover shadows — shadow tints with the button's own hue)
54
- { variant: "solid", color: "accent", className: "bg-accent-9 text-accent-fg hover:bg-accent-10 shadow-raised hover:shadow-brand" },
55
- { variant: "solid", color: "error", className: "bg-error-9 text-error-fg hover:bg-error-10 shadow-raised hover:shadow-error" },
56
- { variant: "solid", color: "success", className: "bg-success-9 text-success-fg hover:bg-success-10 shadow-raised hover:shadow-success" },
57
- { variant: "solid", color: "warning", className: "bg-warning-9 text-warning-fg hover:bg-warning-10 shadow-raised hover:shadow-warning" },
58
- { variant: "solid", color: "neutral", className: "bg-neutral-5 text-surface-fg hover:bg-neutral-7 shadow-raised" },
59
- // ============ SOFT ============
60
- { variant: "soft", color: "accent", className: "bg-accent-3 text-accent-11 hover:bg-accent-4 active:bg-accent-5" },
61
- { variant: "soft", color: "error", className: "bg-error-3 text-error-11 hover:bg-error-4 active:bg-error-5" },
62
- { variant: "soft", color: "success", className: "bg-success-3 text-success-11 hover:bg-success-4 active:bg-success-5" },
63
- { variant: "soft", color: "warning", className: "bg-warning-3 text-warning-11 hover:bg-warning-4 active:bg-warning-5" },
64
- { variant: "soft", color: "neutral", className: "bg-surface-raised-hover text-surface-fg-muted hover:bg-surface-raised-active active:bg-neutral-5" },
65
- // ============ OUTLINE ============
66
- { variant: "outline", color: "accent", className: "bg-transparent text-accent-11 border-accent-7 hover:bg-accent-3 active:bg-accent-4" },
67
- { variant: "outline", color: "error", className: "bg-transparent text-error-11 border-error-7 hover:bg-error-3 active:bg-error-4" },
68
- { variant: "outline", color: "success", className: "bg-transparent text-success-11 border-success-7 hover:bg-success-3 active:bg-success-4" },
69
- { variant: "outline", color: "warning", className: "bg-transparent text-warning-11 border-warning-7 hover:bg-warning-3 active:bg-warning-4" },
70
- { variant: "outline", color: "neutral", className: "bg-transparent text-surface-fg border-surface-border-strong hover:bg-surface-raised-hover active:bg-surface-raised-active" },
71
- // ============ GHOST ============
72
- // ghost+accent uses neutral look for backward compat (most common ghost is toolbar/icon ghost)
73
- { variant: "ghost", color: "accent", className: "bg-transparent text-surface-fg-muted hover:bg-surface-raised-hover hover:text-surface-fg active:bg-surface-raised-active" },
74
- { variant: "ghost", color: "error", className: "bg-transparent text-error-11 hover:bg-error-3 active:bg-error-4" },
75
- { variant: "ghost", color: "success", className: "bg-transparent text-success-11 hover:bg-success-3 active:bg-success-4" },
76
- { variant: "ghost", color: "warning", className: "bg-transparent text-warning-11 hover:bg-warning-3 active:bg-warning-4" },
77
- { variant: "ghost", color: "neutral", className: "bg-transparent text-surface-fg-muted hover:bg-surface-raised-hover hover:text-surface-fg active:bg-surface-raised-active" },
78
- // ============ LINK ============
79
- { variant: "link", color: "accent", className: "text-accent-11" },
80
- { variant: "link", color: "error", className: "text-error-11" },
81
- { variant: "link", color: "success", className: "text-success-11" },
82
- { variant: "link", color: "warning", className: "text-warning-11" },
83
- { variant: "link", color: "neutral", className: "text-surface-fg-muted" }
84
- ],
85
- defaultVariants: {
86
- variant: "solid",
87
- color: "accent",
88
- weight: "semibold",
89
- size: "md"
90
- }
91
- }
92
- ), J = {
93
- xs: "px-ds-04",
94
- sm: "px-ds-05",
95
- md: "px-ds-06",
96
- lg: "px-ds-07",
97
- "compact-xs": "px-ds-03",
98
- "compact-sm": "px-ds-04",
99
- "compact-md": "px-ds-05"
100
- }, Te = {
101
- xs: { start: "-ml-0.5", end: "-mr-0.5" },
102
- sm: { start: "-ml-1", end: "-mr-1" },
103
- md: { start: "-ml-1.5", end: "-mr-1.5" },
104
- lg: { start: "-ml-2", end: "-mr-2" },
105
- "compact-xs": { start: "-ml-0.5", end: "-mr-0.5" },
106
- "compact-sm": { start: "-ml-0.5", end: "-mr-0.5" },
107
- "compact-md": { start: "-ml-1", end: "-mr-1" },
108
- icon: { start: "", end: "" },
109
- "icon-xs": { start: "", end: "" },
110
- "icon-sm": { start: "", end: "" },
111
- "icon-md": { start: "", end: "" },
112
- "icon-lg": { start: "", end: "" }
113
- }, _ = {
114
- xs: "sm",
115
- sm: "sm",
116
- md: "sm",
117
- lg: "md",
118
- "compact-xs": "sm",
119
- "compact-sm": "sm",
120
- "compact-md": "sm",
121
- icon: "sm",
122
- "icon-xs": "sm",
123
- "icon-sm": "sm",
124
- "icon-md": "sm",
125
- "icon-lg": "md"
126
- }, Be = {
127
- xs: "xs",
128
- sm: "sm",
129
- md: "md",
130
- lg: "lg",
131
- "compact-xs": "xs",
132
- "compact-sm": "sm",
133
- "compact-md": "md",
134
- icon: "md",
135
- "icon-xs": "xs",
136
- "icon-sm": "sm",
137
- "icon-md": "md",
138
- "icon-lg": "lg"
139
- }, _e = t.forwardRef(
140
- ({
141
- className: A,
142
- variant: K,
143
- color: L,
144
- weight: Q,
145
- size: Y,
146
- asChild: W = !1,
147
- shape: ee,
148
- startIcon: b,
149
- endIcon: y,
150
- loading: se = !1,
151
- loadingPosition: k = "start",
152
- fullWidth: m = !1,
153
- disabled: re,
154
- onClick: te,
155
- onClickAsync: S,
156
- asyncFeedbackDuration: ae = 1500,
157
- processing: u,
158
- processingColor: ne,
159
- processingDisabled: R = !0,
160
- children: O,
161
- ...z
162
- }, g) => {
163
- const n = ye(), F = ke(), c = K ?? n.variant, C = L ?? n.color, P = Q ?? n.weight ?? "semibold", h = ee ?? n.shape ?? "default", o = Y ?? n.size ?? "md", V = re ?? n.disabled, G = F && n.attached !== !1 ? Se(F.position, n.orientation ?? "horizontal") : void 0, x = n._stretch ?? !1, M = je(), U = t.useRef(null), Z = t.useRef(null), E = t.useRef(void 0);
164
- t.useEffect(() => {
165
- const s = Z.current, N = U.current;
166
- if (!(!s || !N || m || x || M))
167
- return E.current = requestAnimationFrame(() => {
168
- N.style.width = "auto";
169
- const D = s.offsetWidth;
170
- D > 0 && (N.getBoundingClientRect(), N.style.width = `${D}px`);
171
- }), () => {
172
- E.current && cancelAnimationFrame(E.current);
173
- };
174
- });
175
- const [d, w] = t.useState("idle"), q = t.useRef(void 0), f = t.useRef(!0);
176
- t.useEffect(() => () => {
177
- f.current = !1, clearTimeout(q.current);
178
- }, []);
179
- const oe = (s) => {
180
- !S || d !== "idle" || (w("loading"), S(s).then(() => {
181
- f.current && w("success");
182
- }).catch(() => {
183
- f.current && w("error");
184
- }).finally(() => {
185
- f.current && (q.current = setTimeout(() => {
186
- f.current && w("idle");
187
- }, ae));
188
- }));
189
- }, j = !!S, a = j ? d === "loading" : se, r = d === "success" || d === "error", X = r ? void 0 : u === !0 ? "working" : u === !1 || !u ? j && d === "loading" && !u ? "working" : void 0 : u, l = !!X, ce = ne ?? C ?? "accent";
190
- if (W) {
191
- const s = {
192
- className: i(
193
- H({ variant: c, color: C, weight: P, size: o }),
194
- h === "pill" && "rounded-full",
195
- h === "pill" && J[o],
196
- (m || x) && "w-full",
197
- A
198
- ),
199
- ref: g,
200
- disabled: V || a,
201
- "aria-busy": a || void 0,
202
- ...z
203
- };
204
- return /* @__PURE__ */ e(we, { ...s, children: /* @__PURE__ */ e(Ne, { children: O }) });
205
- }
206
- const v = Te[o] ?? { start: "", end: "" }, $ = c === "solid" || c === "soft" || c === "outline", ie = () => a && k === "start" ? /* @__PURE__ */ e("span", { className: i("inline-flex shrink-0 items-center justify-center", b && v.start), children: /* @__PURE__ */ e(B, { size: _[o], variant: "bare" }) }) : b ? /* @__PURE__ */ e("span", { className: i("inline-flex shrink-0 items-center justify-center pointer-events-none", v.start, $ && "opacity-90"), children: b }) : null, de = () => a && k === "end" ? /* @__PURE__ */ e("span", { className: i("inline-flex shrink-0 items-center justify-center", y && v.end), children: /* @__PURE__ */ e(B, { size: _[o], variant: "bare" }) }) : y ? /* @__PURE__ */ e("span", { className: i("inline-flex shrink-0 items-center justify-center pointer-events-none", v.end, $ && "opacity-90"), children: y }) : null, le = t.Children.toArray(O), I = [], p = [];
207
- le.forEach((s) => {
208
- t.isValidElement(s) && s.type?.displayName === "DevalokGrain" ? I.push(s) : p.push(s);
209
- });
210
- const me = () => a && k === "center" ? /* @__PURE__ */ T("span", { className: "relative inline-flex items-center justify-center", children: [
211
- /* @__PURE__ */ e("span", { className: "invisible", children: p }),
212
- /* @__PURE__ */ e("span", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ e(B, { size: _[o], variant: "bare" }) })
213
- ] }) : I.length > 0 ? /* @__PURE__ */ e("span", { children: p }) : /* @__PURE__ */ e(pe, { children: p }), ue = r ? d === "success" ? "bg-success-9 text-accent-fg border-transparent hover:bg-success-9" : "bg-error-9 text-accent-fg border-transparent hover:bg-error-9" : void 0, ge = r ? /* @__PURE__ */ e("span", { className: i("inline-flex shrink-0 items-center justify-center pointer-events-none", b && v.start), children: /* @__PURE__ */ e(Re, { icon: d === "success" ? he : xe, animate: "draw" }) }) : null, fe = Be[o] ?? "md", ve = /* @__PURE__ */ T(
214
- Ie.button,
215
- {
216
- ...Ce(z),
217
- style: { ...z.style, ...G },
218
- className: i(
219
- H({
220
- // When processing (and not showing async feedback), force soft variant so ants pop
221
- variant: l && !r && c !== "ghost" && c !== "outline" && c !== "link" ? "soft" : c,
222
- color: C,
223
- weight: P,
224
- size: o
225
- }),
226
- h === "pill" && "rounded-full",
227
- h === "pill" && J[o],
228
- (m || x) && "w-full",
229
- // Asymmetric timing: hover-out is slow+relaxed, hover-in is fast+snappy (applied via hover: override)
230
- !a && !r && "transition-[color,background-color,border-color,box-shadow,transform,filter] duration-moderate-01 ease-productive-exit",
231
- !a && !r && "hover:duration-fast-02 hover:ease-productive-entrance",
232
- !a && !r && "active:scale-[0.95] active:brightness-[0.92] active:saturate-[1.1] active:duration-[0ms]",
233
- ue,
234
- r && "transition-colors duration-moderate-01 ease-productive-standard",
235
- l && R && "pointer-events-none cursor-default",
236
- A
237
- ),
238
- ref: (s) => {
239
- Z.current = s, typeof g == "function" ? g(s) : g && (g.current = s);
240
- },
241
- disabled: V || a && !l,
242
- "aria-busy": a || l || void 0,
243
- "aria-disabled": l && R || void 0,
244
- onClick: j ? oe : l && R ? void 0 : te,
245
- children: [
246
- I,
247
- r ? ge : ie(),
248
- r ? p : me(),
249
- r ? null : de()
250
- ]
251
- }
252
- );
253
- return /* @__PURE__ */ e(ze, { size: fe, children: /* @__PURE__ */ T(
254
- "span",
255
- {
256
- ref: U,
257
- className: i("relative inline-flex", m && "w-full"),
258
- style: {
259
- ...m || x || M ? void 0 : { transition: "width 0.2s cubic-bezier(0.25, 0.1, 0.25, 1)" },
260
- ...G
261
- },
262
- children: [
263
- ve,
264
- /* @__PURE__ */ e(
265
- Ee,
266
- {
267
- active: l,
268
- speed: X ?? "working",
269
- color: ce
270
- }
271
- )
272
- ]
273
- }
274
- ) });
275
- }
276
- );
277
- _e.displayName = "Button";
278
- export {
279
- _e as Button,
280
- H as buttonVariants
281
- };
7
+ import { Spinner as a } from "./spinner.js";
8
+ import { IconProvider as o } from "./icon-context.js";
9
+ import { Icon as ne } from "./icon.js";
10
+ import { getGroupPositionStyle as re, useButtonGroup as ie, useButtonGroupItem as ae } from "./button-group.js";
11
+ import { ProcessingOverlay as s } from "./button-processing.js";
12
+ import * as c from "react";
13
+ import { Fragment as oe, jsx as l, jsxs as u } from "react/jsx-runtime";
14
+ import { IconCheck as se, IconX as ce } from "@tabler/icons-react";
15
+ //#region src/ui/button.tsx
16
+ var d = r("relative inline-flex items-center justify-center whitespace-nowrap font-sans select-none overflow-hidden isolate focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-action-disabled disabled:cursor-not-allowed disabled:saturate-[0.3] [&>span:not([data-grain])]:relative [&>span:not([data-grain])]:z-[2]", {
17
+ variants: {
18
+ variant: {
19
+ solid: "",
20
+ soft: "",
21
+ outline: "border",
22
+ ghost: "",
23
+ link: "underline-offset-4 hover:underline active:opacity-80"
24
+ },
25
+ color: {
26
+ accent: "",
27
+ error: "",
28
+ success: "",
29
+ warning: "",
30
+ neutral: ""
31
+ },
32
+ weight: {
33
+ semibold: "font-semibold",
34
+ normal: "font-normal"
35
+ },
36
+ size: {
37
+ xs: "h-ds-xs-plus rounded-ds-md px-ds-03 text-ds-sm gap-1",
38
+ sm: "h-ds-sm rounded-ds-md px-ds-04 text-ds-sm gap-1.5",
39
+ md: "h-ds-md rounded-ds-lg px-ds-05 text-ds-md gap-2",
40
+ lg: "h-ds-lg rounded-ds-xl px-ds-06 text-ds-base gap-2.5",
41
+ "compact-xs": "rounded-ds-md px-ds-02 py-[3px] text-ds-sm gap-1",
42
+ "compact-sm": "rounded-ds-md px-ds-03 py-[5px] text-ds-sm gap-1.5",
43
+ "compact-md": "rounded-ds-lg px-ds-04 py-ds-03 text-ds-md gap-2",
44
+ icon: "h-ds-md w-ds-md rounded-ds-md",
45
+ "icon-xs": "h-ds-xs-plus w-ds-xs-plus rounded-ds-sm",
46
+ "icon-sm": "h-ds-sm w-ds-sm rounded-ds-md",
47
+ "icon-md": "h-ds-md w-ds-md rounded-ds-md",
48
+ "icon-lg": "h-ds-lg w-ds-lg rounded-ds-lg"
49
+ }
50
+ },
51
+ compoundVariants: [
52
+ {
53
+ variant: "solid",
54
+ color: "accent",
55
+ className: "bg-accent-9 text-accent-fg hover:bg-accent-10 shadow-raised hover:shadow-brand"
56
+ },
57
+ {
58
+ variant: "solid",
59
+ color: "error",
60
+ className: "bg-error-9 text-error-fg hover:bg-error-10 shadow-raised hover:shadow-error"
61
+ },
62
+ {
63
+ variant: "solid",
64
+ color: "success",
65
+ className: "bg-success-9 text-success-fg hover:bg-success-10 shadow-raised hover:shadow-success"
66
+ },
67
+ {
68
+ variant: "solid",
69
+ color: "warning",
70
+ className: "bg-warning-9 text-warning-fg hover:bg-warning-10 shadow-raised hover:shadow-warning"
71
+ },
72
+ {
73
+ variant: "solid",
74
+ color: "neutral",
75
+ className: "bg-neutral-5 text-surface-fg hover:bg-neutral-7 shadow-raised"
76
+ },
77
+ {
78
+ variant: "soft",
79
+ color: "accent",
80
+ className: "bg-accent-3 text-accent-11 hover:bg-accent-4 active:bg-accent-5"
81
+ },
82
+ {
83
+ variant: "soft",
84
+ color: "error",
85
+ className: "bg-error-3 text-error-11 hover:bg-error-4 active:bg-error-5"
86
+ },
87
+ {
88
+ variant: "soft",
89
+ color: "success",
90
+ className: "bg-success-3 text-success-11 hover:bg-success-4 active:bg-success-5"
91
+ },
92
+ {
93
+ variant: "soft",
94
+ color: "warning",
95
+ className: "bg-warning-3 text-warning-11 hover:bg-warning-4 active:bg-warning-5"
96
+ },
97
+ {
98
+ variant: "soft",
99
+ color: "neutral",
100
+ className: "bg-surface-raised-hover text-surface-fg-muted hover:bg-surface-raised-active active:bg-neutral-5"
101
+ },
102
+ {
103
+ variant: "outline",
104
+ color: "accent",
105
+ className: "bg-transparent text-accent-11 border-accent-7 hover:bg-accent-3 active:bg-accent-4"
106
+ },
107
+ {
108
+ variant: "outline",
109
+ color: "error",
110
+ className: "bg-transparent text-error-11 border-error-7 hover:bg-error-3 active:bg-error-4"
111
+ },
112
+ {
113
+ variant: "outline",
114
+ color: "success",
115
+ className: "bg-transparent text-success-11 border-success-7 hover:bg-success-3 active:bg-success-4"
116
+ },
117
+ {
118
+ variant: "outline",
119
+ color: "warning",
120
+ className: "bg-transparent text-warning-11 border-warning-7 hover:bg-warning-3 active:bg-warning-4"
121
+ },
122
+ {
123
+ variant: "outline",
124
+ color: "neutral",
125
+ className: "bg-transparent text-surface-fg border-surface-border-strong hover:bg-surface-raised-hover active:bg-surface-raised-active"
126
+ },
127
+ {
128
+ variant: "ghost",
129
+ color: "accent",
130
+ className: "bg-transparent text-surface-fg-muted hover:bg-surface-raised-hover hover:text-surface-fg active:bg-surface-raised-active"
131
+ },
132
+ {
133
+ variant: "ghost",
134
+ color: "error",
135
+ className: "bg-transparent text-error-11 hover:bg-error-3 active:bg-error-4"
136
+ },
137
+ {
138
+ variant: "ghost",
139
+ color: "success",
140
+ className: "bg-transparent text-success-11 hover:bg-success-3 active:bg-success-4"
141
+ },
142
+ {
143
+ variant: "ghost",
144
+ color: "warning",
145
+ className: "bg-transparent text-warning-11 hover:bg-warning-3 active:bg-warning-4"
146
+ },
147
+ {
148
+ variant: "ghost",
149
+ color: "neutral",
150
+ className: "bg-transparent text-surface-fg-muted hover:bg-surface-raised-hover hover:text-surface-fg active:bg-surface-raised-active"
151
+ },
152
+ {
153
+ variant: "link",
154
+ color: "accent",
155
+ className: "text-accent-11"
156
+ },
157
+ {
158
+ variant: "link",
159
+ color: "error",
160
+ className: "text-error-11"
161
+ },
162
+ {
163
+ variant: "link",
164
+ color: "success",
165
+ className: "text-success-11"
166
+ },
167
+ {
168
+ variant: "link",
169
+ color: "warning",
170
+ className: "text-warning-11"
171
+ },
172
+ {
173
+ variant: "link",
174
+ color: "neutral",
175
+ className: "text-surface-fg-muted"
176
+ }
177
+ ],
178
+ defaultVariants: {
179
+ variant: "solid",
180
+ color: "accent",
181
+ weight: "semibold",
182
+ size: "md"
183
+ }
184
+ }), f = {
185
+ xs: "px-ds-04",
186
+ sm: "px-ds-05",
187
+ md: "px-ds-06",
188
+ lg: "px-ds-07",
189
+ "compact-xs": "px-ds-03",
190
+ "compact-sm": "px-ds-04",
191
+ "compact-md": "px-ds-05"
192
+ }, le = {
193
+ xs: {
194
+ start: "-ml-0.5",
195
+ end: "-mr-0.5"
196
+ },
197
+ sm: {
198
+ start: "-ml-1",
199
+ end: "-mr-1"
200
+ },
201
+ md: {
202
+ start: "-ml-1.5",
203
+ end: "-mr-1.5"
204
+ },
205
+ lg: {
206
+ start: "-ml-2",
207
+ end: "-mr-2"
208
+ },
209
+ "compact-xs": {
210
+ start: "-ml-0.5",
211
+ end: "-mr-0.5"
212
+ },
213
+ "compact-sm": {
214
+ start: "-ml-0.5",
215
+ end: "-mr-0.5"
216
+ },
217
+ "compact-md": {
218
+ start: "-ml-1",
219
+ end: "-mr-1"
220
+ },
221
+ icon: {
222
+ start: "",
223
+ end: ""
224
+ },
225
+ "icon-xs": {
226
+ start: "",
227
+ end: ""
228
+ },
229
+ "icon-sm": {
230
+ start: "",
231
+ end: ""
232
+ },
233
+ "icon-md": {
234
+ start: "",
235
+ end: ""
236
+ },
237
+ "icon-lg": {
238
+ start: "",
239
+ end: ""
240
+ }
241
+ }, p = {
242
+ xs: "sm",
243
+ sm: "sm",
244
+ md: "sm",
245
+ lg: "md",
246
+ "compact-xs": "sm",
247
+ "compact-sm": "sm",
248
+ "compact-md": "sm",
249
+ icon: "sm",
250
+ "icon-xs": "sm",
251
+ "icon-sm": "sm",
252
+ "icon-md": "sm",
253
+ "icon-lg": "md"
254
+ }, ue = {
255
+ xs: "xs",
256
+ sm: "sm",
257
+ md: "md",
258
+ lg: "lg",
259
+ "compact-xs": "xs",
260
+ "compact-sm": "sm",
261
+ "compact-md": "md",
262
+ icon: "md",
263
+ "icon-xs": "xs",
264
+ "icon-sm": "sm",
265
+ "icon-md": "md",
266
+ "icon-lg": "lg"
267
+ }, m = c.forwardRef(({ className: r, variant: m, color: h, weight: de, size: fe, asChild: pe = !1, shape: me, startIcon: g, endIcon: _, loading: v = !1, loadingPosition: y = "start", fullWidth: b = !1, disabled: he, onClick: ge, onClickAsync: x, asyncFeedbackDuration: _e = 1500, processing: S, processingColor: ve, processingDisabled: C = !0, children: w, ...T }, E) => {
268
+ let D = ie(), O = ae(), k = m ?? D.variant, A = h ?? D.color, j = de ?? D.weight ?? "semibold", M = me ?? D.shape ?? "default", N = fe ?? D.size ?? "md", P = he ?? D.disabled, F = O && D.attached !== !1 ? re(O.position, D.orientation ?? "horizontal") : void 0, I = D._stretch ?? !1, L = ee(), R = c.useRef(null), z = c.useRef(null), B = c.useRef(void 0);
269
+ c.useEffect(() => {
270
+ let e = z.current, t = R.current;
271
+ if (!(!e || !t || b || I || L)) return B.current = requestAnimationFrame(() => {
272
+ t.style.width = "auto";
273
+ let n = e.offsetWidth;
274
+ n > 0 && (t.getBoundingClientRect(), t.style.width = `${n}px`);
275
+ }), () => {
276
+ B.current && cancelAnimationFrame(B.current);
277
+ };
278
+ });
279
+ let [V, H] = c.useState("idle"), U = c.useRef(void 0), W = c.useRef(!0);
280
+ c.useEffect(() => () => {
281
+ W.current = !1, clearTimeout(U.current);
282
+ }, []);
283
+ let ye = (e) => {
284
+ !x || V !== "idle" || (H("loading"), x(e).then(() => {
285
+ W.current && H("success");
286
+ }).catch(() => {
287
+ W.current && H("error");
288
+ }).finally(() => {
289
+ W.current && (U.current = setTimeout(() => {
290
+ W.current && H("idle");
291
+ }, _e));
292
+ }));
293
+ }, G = !!x, K = G ? V === "loading" : v, q = V === "success" || V === "error", J = q ? void 0 : S === !0 ? "working" : S === !1 || !S ? G && V === "loading" && !S ? "working" : void 0 : S, Y = !!J, be = ve ?? A ?? "accent";
294
+ if (pe) return /* @__PURE__ */ l(e, {
295
+ className: i(d({
296
+ variant: k,
297
+ color: A,
298
+ weight: j,
299
+ size: N
300
+ }), M === "pill" && "rounded-full", M === "pill" && f[N], (b || I) && "w-full", r),
301
+ ref: E,
302
+ disabled: P || K,
303
+ "aria-busy": K || void 0,
304
+ ...T,
305
+ children: /* @__PURE__ */ l(t, { children: w })
306
+ });
307
+ let X = le[N] ?? {
308
+ start: "",
309
+ end: ""
310
+ }, Z = k === "solid" || k === "soft" || k === "outline", xe = () => K && y === "start" ? /* @__PURE__ */ l("span", {
311
+ className: i("inline-flex shrink-0 items-center justify-center", g && X.start),
312
+ children: /* @__PURE__ */ l(a, {
313
+ size: p[N],
314
+ variant: "bare"
315
+ })
316
+ }) : g ? /* @__PURE__ */ l("span", {
317
+ className: i("inline-flex shrink-0 items-center justify-center pointer-events-none", X.start, Z && "opacity-90"),
318
+ children: g
319
+ }) : null, Se = () => K && y === "end" ? /* @__PURE__ */ l("span", {
320
+ className: i("inline-flex shrink-0 items-center justify-center", _ && X.end),
321
+ children: /* @__PURE__ */ l(a, {
322
+ size: p[N],
323
+ variant: "bare"
324
+ })
325
+ }) : _ ? /* @__PURE__ */ l("span", {
326
+ className: i("inline-flex shrink-0 items-center justify-center pointer-events-none", X.end, Z && "opacity-90"),
327
+ children: _
328
+ }) : null, Ce = c.Children.toArray(w), Q = [], $ = [];
329
+ Ce.forEach((e) => {
330
+ c.isValidElement(e) && e.type?.displayName === "DevalokGrain" ? Q.push(e) : $.push(e);
331
+ });
332
+ let we = () => K && y === "center" ? /* @__PURE__ */ u("span", {
333
+ className: "relative inline-flex items-center justify-center",
334
+ children: [/* @__PURE__ */ l("span", {
335
+ className: "invisible",
336
+ children: $
337
+ }), /* @__PURE__ */ l("span", {
338
+ className: "absolute inset-0 flex items-center justify-center",
339
+ children: /* @__PURE__ */ l(a, {
340
+ size: p[N],
341
+ variant: "bare"
342
+ })
343
+ })]
344
+ }) : Q.length > 0 ? /* @__PURE__ */ l("span", { children: $ }) : /* @__PURE__ */ l(oe, { children: $ }), Te = q ? V === "success" ? "bg-success-9 text-accent-fg border-transparent hover:bg-success-9" : "bg-error-9 text-accent-fg border-transparent hover:bg-error-9" : void 0, Ee = q ? /* @__PURE__ */ l("span", {
345
+ className: i("inline-flex shrink-0 items-center justify-center pointer-events-none", g && X.start),
346
+ children: /* @__PURE__ */ l(ne, {
347
+ icon: V === "success" ? se : ce,
348
+ animate: "draw"
349
+ })
350
+ }) : null, De = ue[N] ?? "md", Oe = /* @__PURE__ */ u(n.button, {
351
+ ...te(T),
352
+ style: {
353
+ ...T.style,
354
+ ...F
355
+ },
356
+ className: i(d({
357
+ variant: Y && !q && k !== "ghost" && k !== "outline" && k !== "link" ? "soft" : k,
358
+ color: A,
359
+ weight: j,
360
+ size: N
361
+ }), M === "pill" && "rounded-full", M === "pill" && f[N], (b || I) && "w-full", !K && !q && "transition-[color,background-color,border-color,box-shadow,transform,filter] duration-moderate-01 ease-productive-exit", !K && !q && "hover:duration-fast-02 hover:ease-productive-entrance", !K && !q && "active:scale-[0.95] active:brightness-[0.92] active:saturate-[1.1] active:duration-[0ms]", Te, q && "transition-colors duration-moderate-01 ease-productive-standard", Y && C && "pointer-events-none cursor-default", r),
362
+ ref: (e) => {
363
+ z.current = e, typeof E == "function" ? E(e) : E && (E.current = e);
364
+ },
365
+ disabled: P || K && !Y,
366
+ "aria-busy": K || Y || void 0,
367
+ "aria-disabled": Y && C || void 0,
368
+ onClick: G ? ye : Y && C ? void 0 : ge,
369
+ children: [
370
+ Q,
371
+ q ? Ee : xe(),
372
+ q ? $ : we(),
373
+ q ? null : Se()
374
+ ]
375
+ });
376
+ return /* @__PURE__ */ l(o, {
377
+ size: De,
378
+ children: /* @__PURE__ */ u("span", {
379
+ ref: R,
380
+ className: i("relative inline-flex", b && "w-full"),
381
+ style: {
382
+ ...b || I || L ? void 0 : { transition: "width 0.2s cubic-bezier(0.25, 0.1, 0.25, 1)" },
383
+ ...F
384
+ },
385
+ children: [Oe, /* @__PURE__ */ l(s, {
386
+ active: Y,
387
+ speed: J ?? "working",
388
+ color: be
389
+ })]
390
+ })
391
+ });
392
+ });
393
+ m.displayName = "Button";
394
+ //#endregion
395
+ export { m as Button, d as buttonVariants };