@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
@@ -1,256 +1,264 @@
1
1
  "use client";
2
- import { jsxs as o, jsx as e, Fragment as A } from "react/jsx-runtime";
3
- import { IconTrendingUp as E, IconTrendingDown as O, IconMinus as W } from "@tabler/icons-react";
4
- import * as b from "react";
5
- import { u as G } from "../_chunks/link-context.js";
6
- import { tweens as v, springs as w } from "./lib/motion.js";
7
- import { cn as f } from "./lib/utils.js";
8
- import { Icon as R } from "./icon.js";
9
- import { m as l } from "../_chunks/framer.js";
10
- const S = {
11
- default: "border-l-accent-9",
12
- success: "border-l-success-9",
13
- warning: "border-l-warning-9",
14
- error: "border-l-error-9",
15
- info: "border-l-info-9"
2
+ import { a as e } from "../_chunks/framer.js";
3
+ import { springs as t, tweens as n } from "./lib/motion.js";
4
+ import { cn as r } from "./lib/utils.js";
5
+ import { Icon as i } from "./icon.js";
6
+ import { n as a } from "../_chunks/link-context.js";
7
+ import * as o from "react";
8
+ import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
9
+ import { IconMinus as u, IconTrendingDown as d, IconTrendingUp as f } from "@tabler/icons-react";
10
+ //#region src/ui/stat-card.tsx
11
+ var p = {
12
+ default: "border-l-accent-9",
13
+ success: "border-l-success-9",
14
+ warning: "border-l-warning-9",
15
+ error: "border-l-error-9",
16
+ info: "border-l-info-9"
16
17
  };
17
- function H(d, c, t) {
18
- const r = d.filter((n) => Number.isFinite(n));
19
- if (r.length < 2) return "";
20
- const s = Math.min(...r), a = Math.max(...r) - s || 1, i = c / (r.length - 1);
21
- return r.map((n, u) => {
22
- const g = u * i, x = t - (n - s) / a * t;
23
- return `${u === 0 ? "M" : "L"}${g.toFixed(1)},${x.toFixed(1)}`;
24
- }).join(" ");
18
+ function m(e, t, n) {
19
+ let r = e.filter((e) => Number.isFinite(e));
20
+ if (r.length < 2) return "";
21
+ let i = Math.min(...r), a = Math.max(...r) - i || 1, o = t / (r.length - 1);
22
+ return r.map((e, t) => {
23
+ let r = t * o, s = n - (e - i) / a * n;
24
+ return `${t === 0 ? "M" : "L"}${r.toFixed(1)},${s.toFixed(1)}`;
25
+ }).join(" ");
25
26
  }
26
- function K({
27
- data: d,
28
- colorClass: c
29
- }) {
30
- const t = b.useId(), r = b.useRef(null), [s, p] = b.useState(0), a = 80, i = 32, n = H(d, a, i);
31
- if (b.useEffect(() => {
32
- r.current && p(r.current.getTotalLength());
33
- }, [n]), !n) return null;
34
- const u = `${n} L${a.toFixed(1)},${i.toFixed(1)} L0,${i.toFixed(1)} Z`;
35
- return /* @__PURE__ */ o("div", { className: f("w-20 h-8", c), "aria-hidden": "true", children: [
36
- /* @__PURE__ */ o(
37
- "svg",
38
- {
39
- viewBox: `0 0 ${a} ${i}`,
40
- className: "w-full h-full overflow-visible",
41
- preserveAspectRatio: "none",
42
- children: [
43
- /* @__PURE__ */ e("defs", { children: /* @__PURE__ */ o("linearGradient", { id: `sparkline-fill-${t}`, x1: "0", y1: "0", x2: "0", y2: "1", children: [
44
- /* @__PURE__ */ e("stop", { offset: "0%", stopColor: "currentColor", stopOpacity: "0.1" }),
45
- /* @__PURE__ */ e("stop", { offset: "100%", stopColor: "currentColor", stopOpacity: "0" })
46
- ] }) }),
47
- /* @__PURE__ */ e("path", { d: u, fill: `url(#sparkline-fill-${t})` }),
48
- /* @__PURE__ */ e(
49
- "path",
50
- {
51
- ref: r,
52
- d: n,
53
- fill: "none",
54
- stroke: "currentColor",
55
- strokeWidth: "1.5",
56
- strokeLinecap: "round",
57
- strokeLinejoin: "round",
58
- style: {
59
- opacity: s === 0 ? 0 : 1,
60
- strokeDasharray: s,
61
- strokeDashoffset: s,
62
- animation: s > 0 ? `sparkline-draw-${t.replace(/:/g, "")} 1s ease-out forwards` : "none"
63
- }
64
- }
65
- )
66
- ]
67
- }
68
- ),
69
- s > 0 && /* @__PURE__ */ e("style", { children: `@keyframes sparkline-draw-${t.replace(/:/g, "")} { to { stroke-dashoffset: 0; } }` })
70
- ] });
27
+ function h({ data: e, colorClass: t }) {
28
+ let n = o.useId(), i = o.useRef(null), [a, s] = o.useState(0), u = m(e, 80, 32);
29
+ if (o.useEffect(() => {
30
+ i.current && s(i.current.getTotalLength());
31
+ }, [u]), !u) return null;
32
+ let d = `${u} L${80 .toFixed(1)},${32 .toFixed(1)} L0,${32 .toFixed(1)} Z`;
33
+ return /* @__PURE__ */ l("div", {
34
+ className: r("w-20 h-8", t),
35
+ "aria-hidden": "true",
36
+ children: [/* @__PURE__ */ l("svg", {
37
+ viewBox: "0 0 80 32",
38
+ className: "w-full h-full overflow-visible",
39
+ preserveAspectRatio: "none",
40
+ children: [
41
+ /* @__PURE__ */ c("defs", { children: /* @__PURE__ */ l("linearGradient", {
42
+ id: `sparkline-fill-${n}`,
43
+ x1: "0",
44
+ y1: "0",
45
+ x2: "0",
46
+ y2: "1",
47
+ children: [/* @__PURE__ */ c("stop", {
48
+ offset: "0%",
49
+ stopColor: "currentColor",
50
+ stopOpacity: "0.1"
51
+ }), /* @__PURE__ */ c("stop", {
52
+ offset: "100%",
53
+ stopColor: "currentColor",
54
+ stopOpacity: "0"
55
+ })]
56
+ }) }),
57
+ /* @__PURE__ */ c("path", {
58
+ d,
59
+ fill: `url(#sparkline-fill-${n})`
60
+ }),
61
+ /* @__PURE__ */ c("path", {
62
+ ref: i,
63
+ d: u,
64
+ fill: "none",
65
+ stroke: "currentColor",
66
+ strokeWidth: "1.5",
67
+ strokeLinecap: "round",
68
+ strokeLinejoin: "round",
69
+ style: {
70
+ opacity: a === 0 ? 0 : 1,
71
+ strokeDasharray: a,
72
+ strokeDashoffset: a,
73
+ animation: a > 0 ? `sparkline-draw-${n.replace(/:/g, "")} 1s ease-out forwards` : "none"
74
+ }
75
+ })
76
+ ]
77
+ }), a > 0 && /* @__PURE__ */ c("style", { children: `@keyframes sparkline-draw-${n.replace(/:/g, "")} { to { stroke-dashoffset: 0; } }` })]
78
+ });
71
79
  }
72
- function U({ progress: d, label: c }) {
73
- const t = Math.max(0, Math.min(100, d)), r = t >= 90 ? "bg-success-9" : t >= 70 ? "bg-warning-9" : "bg-accent-9";
74
- return /* @__PURE__ */ e("div", { className: "h-1 w-full rounded-ds-full bg-surface-raised mt-ds-04", role: "progressbar", "aria-label": `${c} progress`, "aria-valuenow": t, "aria-valuemin": 0, "aria-valuemax": 100, children: /* @__PURE__ */ e(
75
- "div",
76
- {
77
- className: f("h-full rounded-ds-full transition-[width] duration-moderate-02 ease-productive-standard", r),
78
- style: { width: `${t}%` }
79
- }
80
- ) });
80
+ function g({ progress: e, label: t }) {
81
+ let n = Math.max(0, Math.min(100, e)), i = n >= 90 ? "bg-success-9" : n >= 70 ? "bg-warning-9" : "bg-accent-9";
82
+ return /* @__PURE__ */ c("div", {
83
+ className: "h-1 w-full rounded-ds-full bg-surface-raised mt-ds-04",
84
+ role: "progressbar",
85
+ "aria-label": `${t} progress`,
86
+ "aria-valuenow": n,
87
+ "aria-valuemin": 0,
88
+ "aria-valuemax": 100,
89
+ children: /* @__PURE__ */ c("div", {
90
+ className: r("h-full rounded-ds-full transition-[width] duration-moderate-02 ease-productive-standard", i),
91
+ style: { width: `${n}%` }
92
+ })
93
+ });
81
94
  }
82
- const V = b.forwardRef(
83
- ({
84
- className: d,
85
- label: c,
86
- title: t,
87
- value: r,
88
- prefix: s,
89
- suffix: p,
90
- delta: a,
91
- icon: i,
92
- loading: n,
93
- comparisonLabel: u,
94
- secondaryLabel: g,
95
- progress: x,
96
- accent: y,
97
- sparkline: N,
98
- onClick: m,
99
- href: $,
100
- footer: F,
101
- ...h
102
- }, k) => {
103
- const P = G(), L = t ?? c ?? "", I = !!(m || $), M = I && !h["aria-label"] ? `View ${L}` : h["aria-label"];
104
- if (n)
105
- return /* @__PURE__ */ o(
106
- "div",
107
- {
108
- ref: k,
109
- className: f(
110
- "rounded-ds-lg border border-surface-border bg-surface-raised shadow-raised p-ds-05b",
111
- y && `border-l-[3px] ${S[y]}`,
112
- d
113
- ),
114
- ...h,
115
- children: [
116
- /* @__PURE__ */ e("div", { className: "h-ds-04 w-24 rounded-ds-sm bg-skeleton-base animate-pulse mb-ds-05" }),
117
- /* @__PURE__ */ e("div", { className: "h-ds-sm w-32 rounded-ds-md bg-skeleton-base animate-pulse mb-ds-03" }),
118
- /* @__PURE__ */ e("div", { className: "h-3 w-16 rounded-ds-sm bg-skeleton-base animate-pulse" })
119
- ]
120
- }
121
- );
122
- const B = a?.direction === "up" ? E : a?.direction === "down" ? O : W, T = a?.direction === "up" ? "text-success-11" : a?.direction === "down" ? "text-error-11" : "text-surface-fg-muted", z = a?.direction === "up" ? "text-success-11" : a?.direction === "down" ? "text-error-11" : "text-accent-11", D = /* @__PURE__ */ o(A, { children: [
123
- /* @__PURE__ */ o("div", { className: "flex items-center justify-between mb-ds-04", children: [
124
- /* @__PURE__ */ e(
125
- l.p,
126
- {
127
- className: "text-ds-md font-medium text-surface-fg-muted",
128
- initial: { opacity: 0 },
129
- animate: { opacity: 1 },
130
- transition: v.fade,
131
- children: L
132
- }
133
- ),
134
- /* @__PURE__ */ o("div", { className: "flex items-center gap-ds-03", children: [
135
- N && N.length >= 2 && /* @__PURE__ */ e(K, { data: N, colorClass: z }),
136
- i && /* @__PURE__ */ e(
137
- l.span,
138
- {
139
- className: "text-surface-fg-muted",
140
- initial: { opacity: 0, scale: 0.96 },
141
- animate: { opacity: 1, scale: 1 },
142
- transition: w.snappy,
143
- "aria-hidden": "true",
144
- children: typeof i == "function" ? /* @__PURE__ */ e(R, { icon: i, size: "lg" }) : i
145
- }
146
- )
147
- ] })
148
- ] }),
149
- /* @__PURE__ */ e("div", { className: "overflow-hidden", children: /* @__PURE__ */ o(
150
- l.p,
151
- {
152
- className: "inline-block text-ds-3xl font-semibold text-surface-fg",
153
- initial: { opacity: 0, y: "100%" },
154
- animate: { opacity: 1, y: 0 },
155
- transition: w.smooth,
156
- children: [
157
- s && /* @__PURE__ */ e("span", { className: "text-surface-fg-muted text-ds-lg", children: s }),
158
- /* @__PURE__ */ e("span", { className: "tabular-nums", children: r }),
159
- p && /* @__PURE__ */ e("span", { className: "text-surface-fg-muted text-ds-lg", children: p })
160
- ]
161
- }
162
- ) }),
163
- g && /* @__PURE__ */ e(
164
- l.p,
165
- {
166
- className: "text-ds-sm text-surface-fg-subtle mt-ds-01",
167
- initial: { opacity: 0 },
168
- animate: { opacity: 1 },
169
- transition: { ...v.fade, delay: 0.1 },
170
- children: g
171
- }
172
- ),
173
- x != null && /* @__PURE__ */ e(
174
- l.div,
175
- {
176
- initial: { opacity: 0 },
177
- animate: { opacity: 1 },
178
- transition: { ...v.fade, delay: 0.15 },
179
- children: /* @__PURE__ */ e(U, { progress: x, label: L })
180
- }
181
- ),
182
- a && /* @__PURE__ */ o(
183
- l.div,
184
- {
185
- className: f(
186
- "mt-ds-03 flex items-center gap-ds-02 text-ds-sm font-medium",
187
- T
188
- ),
189
- initial: { opacity: 0, y: 8 },
190
- animate: { opacity: 1, y: 0 },
191
- transition: { ...w.smooth, delay: 0.2 },
192
- children: [
193
- /* @__PURE__ */ e(
194
- l.span,
195
- {
196
- className: "inline-flex",
197
- initial: { opacity: 0.5, scale: 1.4 },
198
- animate: { opacity: 1, scale: 1 },
199
- transition: w.bouncy,
200
- children: /* @__PURE__ */ e(R, { icon: B, size: "sm" })
201
- }
202
- ),
203
- /* @__PURE__ */ e("span", { children: a.value }),
204
- u && /* @__PURE__ */ e("span", { className: "text-surface-fg-subtle font-normal", children: u })
205
- ]
206
- }
207
- ),
208
- F && /* @__PURE__ */ e(
209
- l.div,
210
- {
211
- className: "mt-ds-04 pt-ds-04 border-t border-surface-border text-ds-sm",
212
- initial: { opacity: 0 },
213
- animate: { opacity: 1 },
214
- transition: { ...v.fade, delay: 0.25 },
215
- children: F
216
- }
217
- )
218
- ] }), j = f(
219
- "rounded-ds-lg border border-surface-border bg-surface-raised shadow-raised p-ds-05b",
220
- y && `border-l-[3px] ${S[y]}`,
221
- I && "cursor-pointer hover:shadow-raised-hover hover:border-surface-border-strong transition-[box-shadow,border-color] duration-fast-02 ease-productive-standard group",
222
- d
223
- );
224
- return $ ? /* @__PURE__ */ e(
225
- P,
226
- {
227
- ref: k,
228
- href: $,
229
- onClick: m,
230
- className: f(j, "block no-underline"),
231
- "aria-label": M,
232
- ...h,
233
- children: D
234
- }
235
- ) : /* @__PURE__ */ e(
236
- "div",
237
- {
238
- ref: k,
239
- className: j,
240
- onClick: m,
241
- role: m ? "button" : void 0,
242
- tabIndex: m ? 0 : void 0,
243
- "aria-label": M,
244
- onKeyDown: m ? (C) => {
245
- (C.key === "Enter" || C.key === " ") && (C.preventDefault(), m());
246
- } : void 0,
247
- ...h,
248
- children: D
249
- }
250
- );
251
- }
252
- );
253
- V.displayName = "StatCard";
254
- export {
255
- V as StatCard
256
- };
95
+ var _ = o.forwardRef(({ className: o, label: m, title: _, value: v, prefix: y, suffix: b, delta: x, icon: S, loading: C, comparisonLabel: w, secondaryLabel: T, progress: E, accent: D, sparkline: O, onClick: k, href: A, footer: j, ...M }, N) => {
96
+ let P = a(), F = _ ?? m ?? "", I = !!(k || A), L = I && !M["aria-label"] ? `View ${F}` : M["aria-label"];
97
+ if (C) return /* @__PURE__ */ l("div", {
98
+ ref: N,
99
+ className: r("rounded-ds-lg border border-surface-border bg-surface-raised shadow-raised p-ds-05b", D && `border-l-[3px] ${p[D]}`, o),
100
+ ...M,
101
+ children: [
102
+ /* @__PURE__ */ c("div", { className: "h-ds-04 w-24 rounded-ds-sm bg-skeleton-base animate-pulse mb-ds-05" }),
103
+ /* @__PURE__ */ c("div", { className: "h-ds-sm w-32 rounded-ds-md bg-skeleton-base animate-pulse mb-ds-03" }),
104
+ /* @__PURE__ */ c("div", { className: "h-3 w-16 rounded-ds-sm bg-skeleton-base animate-pulse" })
105
+ ]
106
+ });
107
+ let R = x?.direction === "up" ? f : x?.direction === "down" ? d : u, z = x?.direction === "up" ? "text-success-11" : x?.direction === "down" ? "text-error-11" : "text-surface-fg-muted", B = x?.direction === "up" ? "text-success-11" : x?.direction === "down" ? "text-error-11" : "text-accent-11", V = /* @__PURE__ */ l(s, { children: [
108
+ /* @__PURE__ */ l("div", {
109
+ className: "flex items-center justify-between mb-ds-04",
110
+ children: [/* @__PURE__ */ c(e.p, {
111
+ className: "text-ds-md font-medium text-surface-fg-muted",
112
+ initial: { opacity: 0 },
113
+ animate: { opacity: 1 },
114
+ transition: n.fade,
115
+ children: F
116
+ }), /* @__PURE__ */ l("div", {
117
+ className: "flex items-center gap-ds-03",
118
+ children: [O && O.length >= 2 && /* @__PURE__ */ c(h, {
119
+ data: O,
120
+ colorClass: B
121
+ }), S && /* @__PURE__ */ c(e.span, {
122
+ className: "text-surface-fg-muted",
123
+ initial: {
124
+ opacity: 0,
125
+ scale: .96
126
+ },
127
+ animate: {
128
+ opacity: 1,
129
+ scale: 1
130
+ },
131
+ transition: t.snappy,
132
+ "aria-hidden": "true",
133
+ children: typeof S == "function" ? /* @__PURE__ */ c(i, {
134
+ icon: S,
135
+ size: "lg"
136
+ }) : S
137
+ })]
138
+ })]
139
+ }),
140
+ /* @__PURE__ */ c("div", {
141
+ className: "overflow-hidden",
142
+ children: /* @__PURE__ */ l(e.p, {
143
+ className: "inline-block text-ds-3xl font-semibold text-surface-fg",
144
+ initial: {
145
+ opacity: 0,
146
+ y: "100%"
147
+ },
148
+ animate: {
149
+ opacity: 1,
150
+ y: 0
151
+ },
152
+ transition: t.smooth,
153
+ children: [
154
+ y && /* @__PURE__ */ c("span", {
155
+ className: "text-surface-fg-muted text-ds-lg",
156
+ children: y
157
+ }),
158
+ /* @__PURE__ */ c("span", {
159
+ className: "tabular-nums",
160
+ children: v
161
+ }),
162
+ b && /* @__PURE__ */ c("span", {
163
+ className: "text-surface-fg-muted text-ds-lg",
164
+ children: b
165
+ })
166
+ ]
167
+ })
168
+ }),
169
+ T && /* @__PURE__ */ c(e.p, {
170
+ className: "text-ds-sm text-surface-fg-subtle mt-ds-01",
171
+ initial: { opacity: 0 },
172
+ animate: { opacity: 1 },
173
+ transition: {
174
+ ...n.fade,
175
+ delay: .1
176
+ },
177
+ children: T
178
+ }),
179
+ E != null && /* @__PURE__ */ c(e.div, {
180
+ initial: { opacity: 0 },
181
+ animate: { opacity: 1 },
182
+ transition: {
183
+ ...n.fade,
184
+ delay: .15
185
+ },
186
+ children: /* @__PURE__ */ c(g, {
187
+ progress: E,
188
+ label: F
189
+ })
190
+ }),
191
+ x && /* @__PURE__ */ l(e.div, {
192
+ className: r("mt-ds-03 flex items-center gap-ds-02 text-ds-sm font-medium", z),
193
+ initial: {
194
+ opacity: 0,
195
+ y: 8
196
+ },
197
+ animate: {
198
+ opacity: 1,
199
+ y: 0
200
+ },
201
+ transition: {
202
+ ...t.smooth,
203
+ delay: .2
204
+ },
205
+ children: [
206
+ /* @__PURE__ */ c(e.span, {
207
+ className: "inline-flex",
208
+ initial: {
209
+ opacity: .5,
210
+ scale: 1.4
211
+ },
212
+ animate: {
213
+ opacity: 1,
214
+ scale: 1
215
+ },
216
+ transition: t.bouncy,
217
+ children: /* @__PURE__ */ c(i, {
218
+ icon: R,
219
+ size: "sm"
220
+ })
221
+ }),
222
+ /* @__PURE__ */ c("span", { children: x.value }),
223
+ w && /* @__PURE__ */ c("span", {
224
+ className: "text-surface-fg-subtle font-normal",
225
+ children: w
226
+ })
227
+ ]
228
+ }),
229
+ j && /* @__PURE__ */ c(e.div, {
230
+ className: "mt-ds-04 pt-ds-04 border-t border-surface-border text-ds-sm",
231
+ initial: { opacity: 0 },
232
+ animate: { opacity: 1 },
233
+ transition: {
234
+ ...n.fade,
235
+ delay: .25
236
+ },
237
+ children: j
238
+ })
239
+ ] }), H = r("rounded-ds-lg border border-surface-border bg-surface-raised shadow-raised p-ds-05b", D && `border-l-[3px] ${p[D]}`, I && "cursor-pointer hover:shadow-raised-hover hover:border-surface-border-strong transition-[box-shadow,border-color] duration-fast-02 ease-productive-standard group", o);
240
+ return A ? /* @__PURE__ */ c(P, {
241
+ ref: N,
242
+ href: A,
243
+ onClick: k,
244
+ className: r(H, "block no-underline"),
245
+ "aria-label": L,
246
+ ...M,
247
+ children: V
248
+ }) : /* @__PURE__ */ c("div", {
249
+ ref: N,
250
+ className: H,
251
+ onClick: k,
252
+ role: k ? "button" : void 0,
253
+ tabIndex: k ? 0 : void 0,
254
+ "aria-label": L,
255
+ onKeyDown: k ? (e) => {
256
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), k());
257
+ } : void 0,
258
+ ...M,
259
+ children: V
260
+ });
261
+ });
262
+ _.displayName = "StatCard";
263
+ //#endregion
264
+ export { _ as StatCard };