@efiche/design 0.1.9 → 0.2.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.
package/dist/index.js CHANGED
@@ -47,10 +47,242 @@ var useTheme = () => {
47
47
  return ctx;
48
48
  };
49
49
 
50
+ // src/components/Charts/LineChart.tsx
51
+ import {
52
+ LineChart as RechartsLineChart,
53
+ Line,
54
+ XAxis,
55
+ YAxis,
56
+ CartesianGrid,
57
+ Tooltip,
58
+ Legend,
59
+ ResponsiveContainer
60
+ } from "recharts";
61
+
62
+ // src/components/Charts/chartUtils.ts
63
+ var CHART_COLORS = [
64
+ "#3b82f6",
65
+ // blue
66
+ "#22c55e",
67
+ // green
68
+ "#f59e0b",
69
+ // amber
70
+ "#ef4444",
71
+ // red
72
+ "#8b5cf6",
73
+ // violet
74
+ "#06b6d4",
75
+ // cyan
76
+ "#f97316",
77
+ // orange
78
+ "#ec4899"
79
+ // pink
80
+ ];
81
+ function getChartTheme(theme) {
82
+ const isDark = theme === "dark";
83
+ return {
84
+ gridColor: isDark ? "#334155" : "#e2e8f0",
85
+ axisStroke: isDark ? "#94a3b8" : "#64748b",
86
+ axisTick: { fill: isDark ? "#94a3b8" : "#64748b", fontSize: 12 },
87
+ primaryColor: isDark ? "#60a5fa" : "#3b82f6",
88
+ tooltipStyle: {
89
+ backgroundColor: isDark ? "#1e293b" : "#ffffff",
90
+ border: `1px solid ${isDark ? "#334155" : "#e2e8f0"}`,
91
+ borderRadius: "6px",
92
+ color: isDark ? "#f1f5f9" : "#0f172a",
93
+ fontSize: "0.8125rem"
94
+ }
95
+ };
96
+ }
97
+
98
+ // src/components/Charts/LineChart.tsx
99
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
100
+ var LineChart = ({
101
+ data,
102
+ xKey,
103
+ lines,
104
+ height = 250,
105
+ legend = false,
106
+ grid = true,
107
+ theme = "light"
108
+ }) => {
109
+ const { gridColor, axisStroke, axisTick, tooltipStyle } = getChartTheme(theme);
110
+ return /* @__PURE__ */ jsx2(ResponsiveContainer, { width: "100%", height, children: /* @__PURE__ */ jsxs(RechartsLineChart, { data, children: [
111
+ grid && /* @__PURE__ */ jsx2(CartesianGrid, { strokeDasharray: "3 3", stroke: gridColor }),
112
+ /* @__PURE__ */ jsx2(XAxis, { dataKey: xKey, stroke: axisStroke, tick: axisTick }),
113
+ /* @__PURE__ */ jsx2(YAxis, { stroke: axisStroke, tick: axisTick }),
114
+ /* @__PURE__ */ jsx2(Tooltip, { contentStyle: tooltipStyle }),
115
+ legend && /* @__PURE__ */ jsx2(Legend, {}),
116
+ lines.map((line, i) => {
117
+ var _a, _b;
118
+ const color = (_a = line.color) != null ? _a : CHART_COLORS[i % CHART_COLORS.length];
119
+ return /* @__PURE__ */ jsx2(
120
+ Line,
121
+ {
122
+ type: "monotone",
123
+ dataKey: line.dataKey,
124
+ name: (_b = line.label) != null ? _b : line.dataKey,
125
+ stroke: color,
126
+ strokeWidth: 2,
127
+ dot: { fill: color, r: 4 },
128
+ activeDot: { r: 6 }
129
+ },
130
+ line.dataKey
131
+ );
132
+ })
133
+ ] }) });
134
+ };
135
+ var LineChart_default = LineChart;
136
+
137
+ // src/components/Charts/BarChart.tsx
138
+ import {
139
+ BarChart as RechartsBarChart,
140
+ Bar,
141
+ XAxis as XAxis2,
142
+ YAxis as YAxis2,
143
+ CartesianGrid as CartesianGrid2,
144
+ Tooltip as Tooltip2,
145
+ Legend as Legend2,
146
+ ResponsiveContainer as ResponsiveContainer2
147
+ } from "recharts";
148
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
149
+ var BarChart = ({
150
+ data,
151
+ xKey,
152
+ bars,
153
+ height = 250,
154
+ legend = false,
155
+ grid = true,
156
+ theme = "light"
157
+ }) => {
158
+ const { gridColor, axisStroke, axisTick, tooltipStyle } = getChartTheme(theme);
159
+ return /* @__PURE__ */ jsx3(ResponsiveContainer2, { width: "100%", height, children: /* @__PURE__ */ jsxs2(RechartsBarChart, { data, children: [
160
+ grid && /* @__PURE__ */ jsx3(CartesianGrid2, { strokeDasharray: "3 3", stroke: gridColor }),
161
+ /* @__PURE__ */ jsx3(XAxis2, { dataKey: xKey, stroke: axisStroke, tick: axisTick }),
162
+ /* @__PURE__ */ jsx3(YAxis2, { stroke: axisStroke, tick: axisTick }),
163
+ /* @__PURE__ */ jsx3(Tooltip2, { contentStyle: tooltipStyle }),
164
+ legend && /* @__PURE__ */ jsx3(Legend2, {}),
165
+ bars.map((bar, i) => {
166
+ var _a, _b;
167
+ const color = (_a = bar.color) != null ? _a : CHART_COLORS[i % CHART_COLORS.length];
168
+ const isLast = i === bars.length - 1;
169
+ return /* @__PURE__ */ jsx3(
170
+ Bar,
171
+ {
172
+ dataKey: bar.dataKey,
173
+ name: (_b = bar.label) != null ? _b : bar.dataKey,
174
+ fill: color,
175
+ stackId: bar.stackId,
176
+ radius: bar.stackId && !isLast ? [0, 0, 0, 0] : [4, 4, 0, 0]
177
+ },
178
+ bar.dataKey
179
+ );
180
+ })
181
+ ] }) });
182
+ };
183
+ var BarChart_default = BarChart;
184
+
185
+ // src/components/Charts/AreaChart.tsx
186
+ import {
187
+ AreaChart as RechartsAreaChart,
188
+ Area,
189
+ XAxis as XAxis3,
190
+ YAxis as YAxis3,
191
+ CartesianGrid as CartesianGrid3,
192
+ Tooltip as Tooltip3,
193
+ Legend as Legend3,
194
+ ResponsiveContainer as ResponsiveContainer3
195
+ } from "recharts";
196
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
197
+ var AreaChart = ({
198
+ data,
199
+ xKey,
200
+ areas,
201
+ height = 250,
202
+ legend = false,
203
+ grid = true,
204
+ theme = "light"
205
+ }) => {
206
+ const { gridColor, axisStroke, axisTick, tooltipStyle } = getChartTheme(theme);
207
+ return /* @__PURE__ */ jsx4(ResponsiveContainer3, { width: "100%", height, children: /* @__PURE__ */ jsxs3(RechartsAreaChart, { data, children: [
208
+ grid && /* @__PURE__ */ jsx4(CartesianGrid3, { strokeDasharray: "3 3", stroke: gridColor }),
209
+ /* @__PURE__ */ jsx4(XAxis3, { dataKey: xKey, stroke: axisStroke, tick: axisTick }),
210
+ /* @__PURE__ */ jsx4(YAxis3, { stroke: axisStroke, tick: axisTick }),
211
+ /* @__PURE__ */ jsx4(Tooltip3, { contentStyle: tooltipStyle }),
212
+ legend && /* @__PURE__ */ jsx4(Legend3, {}),
213
+ areas.map((area, i) => {
214
+ var _a, _b, _c;
215
+ const color = (_a = area.color) != null ? _a : CHART_COLORS[i % CHART_COLORS.length];
216
+ const opacity = (_b = area.fillOpacity) != null ? _b : area.stackId ? 0.4 : 0.15;
217
+ return /* @__PURE__ */ jsx4(
218
+ Area,
219
+ {
220
+ type: "monotone",
221
+ dataKey: area.dataKey,
222
+ name: (_c = area.label) != null ? _c : area.dataKey,
223
+ stroke: color,
224
+ fill: color,
225
+ fillOpacity: opacity,
226
+ strokeWidth: 2,
227
+ stackId: area.stackId
228
+ },
229
+ area.dataKey
230
+ );
231
+ })
232
+ ] }) });
233
+ };
234
+ var AreaChart_default = AreaChart;
235
+
236
+ // src/components/Charts/PieChart.tsx
237
+ import {
238
+ PieChart as RechartsPieChart,
239
+ Pie,
240
+ Tooltip as Tooltip4,
241
+ Legend as Legend4,
242
+ ResponsiveContainer as ResponsiveContainer4
243
+ } from "recharts";
244
+ import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
245
+ var PieChart = ({
246
+ data,
247
+ height = 250,
248
+ donut = false,
249
+ legend = false,
250
+ label = false,
251
+ theme = "light"
252
+ }) => {
253
+ const { tooltipStyle } = getChartTheme(theme);
254
+ const dataWithColors = data.map((item, i) => {
255
+ var _a;
256
+ return __spreadProps(__spreadValues({}, item), {
257
+ fill: (_a = item.fill) != null ? _a : CHART_COLORS[i % CHART_COLORS.length]
258
+ });
259
+ });
260
+ const outerRadius = 90;
261
+ const innerRadius = donut ? 55 : 0;
262
+ return /* @__PURE__ */ jsx5(ResponsiveContainer4, { width: "100%", height, children: /* @__PURE__ */ jsxs4(RechartsPieChart, { children: [
263
+ /* @__PURE__ */ jsx5(
264
+ Pie,
265
+ {
266
+ data: dataWithColors,
267
+ cx: "50%",
268
+ cy: "50%",
269
+ outerRadius,
270
+ innerRadius,
271
+ dataKey: "value",
272
+ label: label ? ({ name, percent }) => `${name} ${((percent != null ? percent : 0) * 100).toFixed(0)}%` : void 0,
273
+ labelLine: label
274
+ }
275
+ ),
276
+ /* @__PURE__ */ jsx5(Tooltip4, { contentStyle: tooltipStyle }),
277
+ legend && /* @__PURE__ */ jsx5(Legend4, {})
278
+ ] }) });
279
+ };
280
+ var PieChart_default = PieChart;
281
+
50
282
  // src/components/Accordion/Accordion.tsx
51
283
  import { useState as useState2 } from "react";
52
284
  import { ChevronDown } from "lucide-react";
53
- import { jsx as jsx2, jsxs } from "react/jsx-runtime";
285
+ import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
54
286
  var Accordion = ({ items, defaultValue, multiple = false }) => {
55
287
  const [open, setOpen] = useState2(() => {
56
288
  if (!defaultValue) return /* @__PURE__ */ new Set();
@@ -70,7 +302,7 @@ var Accordion = ({ items, defaultValue, multiple = false }) => {
70
302
  return next;
71
303
  });
72
304
  };
73
- return /* @__PURE__ */ jsx2("div", { style: {
305
+ return /* @__PURE__ */ jsx6("div", { style: {
74
306
  border: "1px solid var(--ds-border, #e2e8f0)",
75
307
  borderRadius: "0.5rem",
76
308
  overflow: "hidden"
@@ -78,14 +310,14 @@ var Accordion = ({ items, defaultValue, multiple = false }) => {
78
310
  const isOpen = open.has(item.value);
79
311
  const isHovered = hovered === item.value;
80
312
  const isLast = index === items.length - 1;
81
- return /* @__PURE__ */ jsxs(
313
+ return /* @__PURE__ */ jsxs5(
82
314
  "div",
83
315
  {
84
316
  style: {
85
317
  borderBottom: isLast ? "none" : "1px solid var(--ds-border, #e2e8f0)"
86
318
  },
87
319
  children: [
88
- /* @__PURE__ */ jsxs(
320
+ /* @__PURE__ */ jsxs5(
89
321
  "button",
90
322
  {
91
323
  style: {
@@ -108,8 +340,8 @@ var Accordion = ({ items, defaultValue, multiple = false }) => {
108
340
  onMouseLeave: () => setHovered(null),
109
341
  "aria-expanded": isOpen,
110
342
  children: [
111
- /* @__PURE__ */ jsx2("span", { children: item.trigger }),
112
- /* @__PURE__ */ jsx2(
343
+ /* @__PURE__ */ jsx6("span", { children: item.trigger }),
344
+ /* @__PURE__ */ jsx6(
113
345
  ChevronDown,
114
346
  {
115
347
  size: 16,
@@ -124,11 +356,11 @@ var Accordion = ({ items, defaultValue, multiple = false }) => {
124
356
  ]
125
357
  }
126
358
  ),
127
- /* @__PURE__ */ jsx2("div", { style: {
359
+ /* @__PURE__ */ jsx6("div", { style: {
128
360
  maxHeight: isOpen ? "300px" : "0",
129
361
  overflow: "hidden",
130
362
  transition: "max-height 0.25s ease"
131
- }, children: /* @__PURE__ */ jsx2("div", { style: {
363
+ }, children: /* @__PURE__ */ jsx6("div", { style: {
132
364
  padding: "0 1rem 1rem",
133
365
  fontSize: "0.875rem",
134
366
  color: "var(--ds-text-secondary, #64748b)"
@@ -143,7 +375,7 @@ var Accordion_default = Accordion;
143
375
 
144
376
  // src/components/Alert/Alert.tsx
145
377
  import { Info, CheckCircle2, AlertTriangle, AlertCircle } from "lucide-react";
146
- import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
378
+ import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
147
379
  var variantMap = {
148
380
  info: { bg: "var(--ds-info-bg, #eff6ff)", border: "var(--ds-info, #3b82f6)", icon: "var(--ds-info, #3b82f6)", title: "var(--ds-info-title, #1e3a8a)", desc: "var(--ds-info-desc, #1e40af)" },
149
381
  success: { bg: "var(--ds-success-bg, #f0fdf4)", border: "var(--ds-success, #22c55e)", icon: "var(--ds-success, #22c55e)", title: "var(--ds-success-title, #14532d)", desc: "var(--ds-success-desc, #166534)" },
@@ -151,14 +383,14 @@ var variantMap = {
151
383
  danger: { bg: "var(--ds-danger-bg, #fef2f2)", border: "var(--ds-danger, #ef4444)", icon: "var(--ds-danger, #ef4444)", title: "var(--ds-danger-title, #7f1d1d)", desc: "var(--ds-danger-desc, #991b1b)" }
152
384
  };
153
385
  var icons = {
154
- info: /* @__PURE__ */ jsx3(Info, { size: 16 }),
155
- success: /* @__PURE__ */ jsx3(CheckCircle2, { size: 16 }),
156
- warning: /* @__PURE__ */ jsx3(AlertTriangle, { size: 16 }),
157
- danger: /* @__PURE__ */ jsx3(AlertCircle, { size: 16 })
386
+ info: /* @__PURE__ */ jsx7(Info, { size: 16 }),
387
+ success: /* @__PURE__ */ jsx7(CheckCircle2, { size: 16 }),
388
+ warning: /* @__PURE__ */ jsx7(AlertTriangle, { size: 16 }),
389
+ danger: /* @__PURE__ */ jsx7(AlertCircle, { size: 16 })
158
390
  };
159
391
  var Alert = ({ variant = "info", title, description }) => {
160
392
  const v = variantMap[variant];
161
- return /* @__PURE__ */ jsxs2("div", { role: "alert", style: {
393
+ return /* @__PURE__ */ jsxs6("div", { role: "alert", style: {
162
394
  display: "flex",
163
395
  gap: "0.75rem",
164
396
  padding: "1rem",
@@ -166,23 +398,23 @@ var Alert = ({ variant = "info", title, description }) => {
166
398
  borderLeft: `4px solid ${v.border}`,
167
399
  backgroundColor: v.bg
168
400
  }, children: [
169
- /* @__PURE__ */ jsx3("span", { style: { flexShrink: 0, marginTop: "0.125rem", color: v.icon }, children: icons[variant] }),
170
- /* @__PURE__ */ jsxs2("div", { style: { flex: 1 }, children: [
171
- /* @__PURE__ */ jsx3("p", { style: { fontWeight: 600, fontSize: "0.875rem", marginBottom: "0.25rem", marginTop: 0, color: v.title }, children: title }),
172
- /* @__PURE__ */ jsx3("p", { style: { fontSize: "0.875rem", margin: 0, color: v.desc }, children: description })
401
+ /* @__PURE__ */ jsx7("span", { style: { flexShrink: 0, marginTop: "0.125rem", color: v.icon }, children: icons[variant] }),
402
+ /* @__PURE__ */ jsxs6("div", { style: { flex: 1 }, children: [
403
+ /* @__PURE__ */ jsx7("p", { style: { fontWeight: 600, fontSize: "0.875rem", marginBottom: "0.25rem", marginTop: 0, color: v.title }, children: title }),
404
+ /* @__PURE__ */ jsx7("p", { style: { fontSize: "0.875rem", margin: 0, color: v.desc }, children: description })
173
405
  ] })
174
406
  ] });
175
407
  };
176
408
  var Alert_default = Alert;
177
409
 
178
410
  // src/components/Avatar/Avatar.tsx
179
- import { jsx as jsx4 } from "react/jsx-runtime";
411
+ import { jsx as jsx8 } from "react/jsx-runtime";
180
412
  var sizeMap = {
181
413
  sm: { width: "2rem", height: "2rem", fontSize: "0.625rem" },
182
414
  md: { width: "2.5rem", height: "2.5rem", fontSize: "0.875rem" },
183
415
  lg: { width: "4rem", height: "4rem", fontSize: "1.25rem" }
184
416
  };
185
- var Avatar = ({ fallback, size = "md", style, className }) => /* @__PURE__ */ jsx4(
417
+ var Avatar = ({ fallback, size = "md", style, className }) => /* @__PURE__ */ jsx8(
186
418
  "div",
187
419
  {
188
420
  className,
@@ -204,7 +436,7 @@ var Avatar = ({ fallback, size = "md", style, className }) => /* @__PURE__ */ js
204
436
  var Avatar_default = Avatar;
205
437
 
206
438
  // src/components/Badge/Badge.tsx
207
- import { jsx as jsx5 } from "react/jsx-runtime";
439
+ import { jsx as jsx9 } from "react/jsx-runtime";
208
440
  var variantMap2 = {
209
441
  default: { backgroundColor: "var(--ds-primary, #3b82f6)", color: "#fff" },
210
442
  secondary: { backgroundColor: "var(--ds-muted, #f1f5f9)", color: "var(--ds-text-secondary, #64748b)" },
@@ -219,7 +451,7 @@ var sizeMap2 = {
219
451
  md: { padding: "0.25rem 0.625rem", fontSize: "0.75rem" },
220
452
  lg: { padding: "0.375rem 0.875rem", fontSize: "0.875rem" }
221
453
  };
222
- var Badge = ({ variant = "default", size = "md", children, style }) => /* @__PURE__ */ jsx5("span", { style: __spreadValues(__spreadValues(__spreadValues({
454
+ var Badge = ({ variant = "default", size = "md", children, style }) => /* @__PURE__ */ jsx9("span", { style: __spreadValues(__spreadValues(__spreadValues({
223
455
  display: "inline-flex",
224
456
  alignItems: "center",
225
457
  gap: "0.25rem",
@@ -232,10 +464,10 @@ var Badge_default = Badge;
232
464
  // src/components/Breadcrumb/Breadcrumb.tsx
233
465
  import { useState as useState3 } from "react";
234
466
  import { ChevronRight } from "lucide-react";
235
- import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
467
+ import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
236
468
  var Breadcrumb = ({ items }) => {
237
469
  const [hovered, setHovered] = useState3(null);
238
- return /* @__PURE__ */ jsx6("nav", { "aria-label": "Breadcrumb", children: /* @__PURE__ */ jsx6("ol", { style: {
470
+ return /* @__PURE__ */ jsx10("nav", { "aria-label": "Breadcrumb", children: /* @__PURE__ */ jsx10("ol", { style: {
239
471
  display: "flex",
240
472
  flexWrap: "wrap",
241
473
  alignItems: "center",
@@ -246,8 +478,8 @@ var Breadcrumb = ({ items }) => {
246
478
  }, children: items.map((item, i) => {
247
479
  const isLast = i === items.length - 1;
248
480
  const isHovered = hovered === item.label;
249
- return /* @__PURE__ */ jsxs3("li", { style: { display: "flex", alignItems: "center" }, children: [
250
- i > 0 && /* @__PURE__ */ jsx6(
481
+ return /* @__PURE__ */ jsxs7("li", { style: { display: "flex", alignItems: "center" }, children: [
482
+ i > 0 && /* @__PURE__ */ jsx10(
251
483
  ChevronRight,
252
484
  {
253
485
  size: 14,
@@ -255,11 +487,11 @@ var Breadcrumb = ({ items }) => {
255
487
  style: { color: "var(--ds-text-secondary, #64748b)", margin: "0 0.25rem", flexShrink: 0 }
256
488
  }
257
489
  ),
258
- isLast || !item.href ? /* @__PURE__ */ jsx6("span", { style: {
490
+ isLast || !item.href ? /* @__PURE__ */ jsx10("span", { style: {
259
491
  color: isLast ? "var(--ds-text-primary, #0f172a)" : "var(--ds-text-secondary, #64748b)",
260
492
  fontWeight: isLast ? 500 : void 0,
261
493
  cursor: isLast ? "default" : void 0
262
- }, children: item.label }) : /* @__PURE__ */ jsx6(
494
+ }, children: item.label }) : /* @__PURE__ */ jsx10(
263
495
  "a",
264
496
  {
265
497
  href: item.href,
@@ -281,7 +513,7 @@ var Breadcrumb_default = Breadcrumb;
281
513
  // src/components/Button/Button.tsx
282
514
  import { LoaderCircle } from "lucide-react";
283
515
  import { useState as useState4 } from "react";
284
- import { Fragment, jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
516
+ import { Fragment, jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
285
517
  var variantStyles = {
286
518
  solid: { backgroundColor: "var(--ds-primary, #3b82f6)", color: "#fff", borderColor: "transparent" },
287
519
  outline: { backgroundColor: "transparent", color: "var(--ds-primary, #3b82f6)", borderColor: "var(--ds-primary, #3b82f6)" },
@@ -361,9 +593,9 @@ var Button = (_a) => {
361
593
  opacity: isDisabled ? 0.5 : 1,
362
594
  pointerEvents: loading ? "none" : void 0
363
595
  }, variantStyles[resolvedVariant]), sizeStyles[resolvedSize]), hovered && !isDisabled ? variantHoverStyles[resolvedVariant] : {}), styleProp);
364
- return /* @__PURE__ */ jsxs4(Fragment, { children: [
365
- /* @__PURE__ */ jsx7("style", { href: "ds-spin", precedence: "low", children: `@keyframes ds-spin { to { transform: rotate(360deg); } }` }),
366
- /* @__PURE__ */ jsxs4(
596
+ return /* @__PURE__ */ jsxs8(Fragment, { children: [
597
+ /* @__PURE__ */ jsx11("style", { href: "ds-spin", precedence: "low", children: `@keyframes ds-spin { to { transform: rotate(360deg); } }` }),
598
+ /* @__PURE__ */ jsxs8(
367
599
  "button",
368
600
  __spreadProps(__spreadValues({
369
601
  disabled: isDisabled,
@@ -372,7 +604,7 @@ var Button = (_a) => {
372
604
  onMouseLeave: () => setHovered(false)
373
605
  }, props), {
374
606
  children: [
375
- loading ? /* @__PURE__ */ jsx7(
607
+ loading ? /* @__PURE__ */ jsx11(
376
608
  LoaderCircle,
377
609
  {
378
610
  "aria-hidden": true,
@@ -390,10 +622,10 @@ var Button = (_a) => {
390
622
  var Button_default = Button;
391
623
 
392
624
  // src/components/Card/Card.tsx
393
- import { jsx as jsx8 } from "react/jsx-runtime";
625
+ import { jsx as jsx12 } from "react/jsx-runtime";
394
626
  var Card = (_a) => {
395
627
  var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
396
- return /* @__PURE__ */ jsx8("div", __spreadValues({ style: __spreadValues({
628
+ return /* @__PURE__ */ jsx12("div", __spreadValues({ style: __spreadValues({
397
629
  border: "1px solid var(--ds-border, #e2e8f0)",
398
630
  borderRadius: "0.5rem",
399
631
  backgroundColor: "var(--ds-card, #ffffff)"
@@ -401,7 +633,7 @@ var Card = (_a) => {
401
633
  };
402
634
  var CardHeader = (_a) => {
403
635
  var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
404
- return /* @__PURE__ */ jsx8("div", __spreadValues({ style: __spreadValues({
636
+ return /* @__PURE__ */ jsx12("div", __spreadValues({ style: __spreadValues({
405
637
  display: "flex",
406
638
  flexDirection: "column",
407
639
  gap: "0.375rem",
@@ -410,7 +642,7 @@ var CardHeader = (_a) => {
410
642
  };
411
643
  var CardTitle = (_a) => {
412
644
  var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
413
- return /* @__PURE__ */ jsx8("h3", __spreadValues({ style: __spreadValues({
645
+ return /* @__PURE__ */ jsx12("h3", __spreadValues({ style: __spreadValues({
414
646
  fontSize: "1rem",
415
647
  fontWeight: 600,
416
648
  color: "var(--ds-text-primary, #0f172a)",
@@ -420,7 +652,7 @@ var CardTitle = (_a) => {
420
652
  };
421
653
  var CardDescription = (_a) => {
422
654
  var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
423
- return /* @__PURE__ */ jsx8("p", __spreadValues({ style: __spreadValues({
655
+ return /* @__PURE__ */ jsx12("p", __spreadValues({ style: __spreadValues({
424
656
  fontSize: "0.875rem",
425
657
  color: "var(--ds-text-secondary, #64748b)",
426
658
  margin: 0
@@ -428,11 +660,11 @@ var CardDescription = (_a) => {
428
660
  };
429
661
  var CardContent = (_a) => {
430
662
  var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
431
- return /* @__PURE__ */ jsx8("div", __spreadValues({ style: __spreadValues({ padding: "1.5rem" }, style) }, props));
663
+ return /* @__PURE__ */ jsx12("div", __spreadValues({ style: __spreadValues({ padding: "1.5rem" }, style) }, props));
432
664
  };
433
665
  var CardFooter = (_a) => {
434
666
  var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
435
- return /* @__PURE__ */ jsx8("div", __spreadValues({ style: __spreadValues({
667
+ return /* @__PURE__ */ jsx12("div", __spreadValues({ style: __spreadValues({
436
668
  display: "flex",
437
669
  alignItems: "center",
438
670
  padding: "0 1.5rem 1.5rem"
@@ -441,7 +673,7 @@ var CardFooter = (_a) => {
441
673
 
442
674
  // src/components/Checkbox/Checkbox.tsx
443
675
  import { useState as useState5 } from "react";
444
- import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
676
+ import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
445
677
  var Checkbox = ({
446
678
  label,
447
679
  checked,
@@ -458,7 +690,7 @@ var Checkbox = ({
458
690
  setInternal(next);
459
691
  onChange == null ? void 0 : onChange(next);
460
692
  };
461
- return /* @__PURE__ */ jsxs5("label", { htmlFor: id, style: {
693
+ return /* @__PURE__ */ jsxs9("label", { htmlFor: id, style: {
462
694
  display: "inline-flex",
463
695
  alignItems: "center",
464
696
  gap: "0.5rem",
@@ -466,7 +698,7 @@ var Checkbox = ({
466
698
  userSelect: "none",
467
699
  opacity: disabled ? 0.5 : 1
468
700
  }, children: [
469
- /* @__PURE__ */ jsx9(
701
+ /* @__PURE__ */ jsx13(
470
702
  "input",
471
703
  {
472
704
  type: "checkbox",
@@ -477,7 +709,7 @@ var Checkbox = ({
477
709
  style: { position: "absolute", opacity: 0, width: 0, height: 0 }
478
710
  }
479
711
  ),
480
- /* @__PURE__ */ jsx9("span", { style: {
712
+ /* @__PURE__ */ jsx13("span", { style: {
481
713
  width: "1.125rem",
482
714
  height: "1.125rem",
483
715
  border: `2px solid ${isChecked ? "var(--ds-primary, #3b82f6)" : "var(--ds-border, #e2e8f0)"}`,
@@ -488,8 +720,8 @@ var Checkbox = ({
488
720
  flexShrink: 0,
489
721
  transition: "background-color 0.15s, border-color 0.15s",
490
722
  backgroundColor: isChecked ? "var(--ds-primary, #3b82f6)" : "var(--ds-card, #fff)"
491
- }, children: isChecked && /* @__PURE__ */ jsx9("svg", { viewBox: "0 0 12 10", fill: "none", style: { width: "0.625rem", height: "0.625rem" }, children: /* @__PURE__ */ jsx9("path", { d: "M1 5l3.5 3.5L11 1", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }),
492
- label && /* @__PURE__ */ jsx9("span", { style: { fontSize: "0.875rem", color: "var(--ds-text-primary, #0f172a)" }, children: label })
723
+ }, children: isChecked && /* @__PURE__ */ jsx13("svg", { viewBox: "0 0 12 10", fill: "none", style: { width: "0.625rem", height: "0.625rem" }, children: /* @__PURE__ */ jsx13("path", { d: "M1 5l3.5 3.5L11 1", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }),
724
+ label && /* @__PURE__ */ jsx13("span", { style: { fontSize: "0.875rem", color: "var(--ds-text-primary, #0f172a)" }, children: label })
493
725
  ] });
494
726
  };
495
727
  var Checkbox_default = Checkbox;
@@ -497,7 +729,7 @@ var Checkbox_default = Checkbox;
497
729
  // src/components/CopyButton/CopyButton.tsx
498
730
  import { Check, Copy } from "lucide-react";
499
731
  import { useState as useState6 } from "react";
500
- import { jsx as jsx10 } from "react/jsx-runtime";
732
+ import { jsx as jsx14 } from "react/jsx-runtime";
501
733
  var CopyButton = ({ text }) => {
502
734
  const [copied, setCopied] = useState6(false);
503
735
  const [hovered, setHovered] = useState6(false);
@@ -506,7 +738,7 @@ var CopyButton = ({ text }) => {
506
738
  setCopied(true);
507
739
  setTimeout(() => setCopied(false), 2e3);
508
740
  };
509
- return /* @__PURE__ */ jsx10(
741
+ return /* @__PURE__ */ jsx14(
510
742
  "button",
511
743
  {
512
744
  onClick: handleCopy,
@@ -525,7 +757,7 @@ var CopyButton = ({ text }) => {
525
757
  cursor: "pointer",
526
758
  transition: "background-color 0.15s, color 0.15s"
527
759
  },
528
- children: copied ? /* @__PURE__ */ jsx10(Check, { style: { width: "1rem", height: "1rem" } }) : /* @__PURE__ */ jsx10(Copy, { style: { width: "1rem", height: "1rem" } })
760
+ children: copied ? /* @__PURE__ */ jsx14(Check, { style: { width: "1rem", height: "1rem" } }) : /* @__PURE__ */ jsx14(Copy, { style: { width: "1rem", height: "1rem" } })
529
761
  }
530
762
  );
531
763
  };
@@ -534,7 +766,7 @@ var CopyButton_default = CopyButton;
534
766
  // src/components/FileUpload/FileUpload.tsx
535
767
  import { Upload } from "lucide-react";
536
768
  import { useRef, useState as useState7 } from "react";
537
- import { jsx as jsx11, jsxs as jsxs6 } from "react/jsx-runtime";
769
+ import { jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
538
770
  var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
539
771
  const [isDragging, setIsDragging] = useState7(false);
540
772
  const [isHovered, setIsHovered] = useState7(false);
@@ -545,7 +777,7 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
545
777
  onFileSelect == null ? void 0 : onFileSelect(list);
546
778
  };
547
779
  const isActive = isDragging || isHovered;
548
- return /* @__PURE__ */ jsxs6(
780
+ return /* @__PURE__ */ jsxs10(
549
781
  "div",
550
782
  {
551
783
  onClick: () => {
@@ -579,7 +811,7 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
579
811
  opacity: disabled ? 0.5 : 1
580
812
  },
581
813
  children: [
582
- /* @__PURE__ */ jsx11(
814
+ /* @__PURE__ */ jsx15(
583
815
  "input",
584
816
  {
585
817
  ref: inputRef,
@@ -591,9 +823,9 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
591
823
  onChange: (e) => e.target.files && handleFiles(e.target.files)
592
824
  }
593
825
  ),
594
- /* @__PURE__ */ jsx11(Upload, { size: 32, style: { color: "var(--ds-text-secondary, #64748b)" } }),
595
- fileNames.length > 0 ? /* @__PURE__ */ jsx11("p", { style: { fontSize: "0.875rem", color: "var(--ds-primary, #3b82f6)", fontWeight: 500, margin: 0 }, children: fileNames.join(", ") }) : /* @__PURE__ */ jsxs6("p", { style: { fontSize: "0.875rem", color: "var(--ds-text-secondary, #64748b)", margin: 0 }, children: [
596
- /* @__PURE__ */ jsx11("strong", { children: "Click to upload" }),
826
+ /* @__PURE__ */ jsx15(Upload, { size: 32, style: { color: "var(--ds-text-secondary, #64748b)" } }),
827
+ fileNames.length > 0 ? /* @__PURE__ */ jsx15("p", { style: { fontSize: "0.875rem", color: "var(--ds-primary, #3b82f6)", fontWeight: 500, margin: 0 }, children: fileNames.join(", ") }) : /* @__PURE__ */ jsxs10("p", { style: { fontSize: "0.875rem", color: "var(--ds-text-secondary, #64748b)", margin: 0 }, children: [
828
+ /* @__PURE__ */ jsx15("strong", { children: "Click to upload" }),
597
829
  " or drag and drop"
598
830
  ] })
599
831
  ]
@@ -603,7 +835,7 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
603
835
  var FileUpload_default = FileUpload;
604
836
 
605
837
  // src/components/Input/Input.tsx
606
- import { Fragment as Fragment2, jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
838
+ import { Fragment as Fragment2, jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
607
839
  var inputCSS = `
608
840
  [data-ds-input]::placeholder { color: var(--ds-text-secondary, #64748b); }
609
841
  [data-ds-input]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }
@@ -613,10 +845,10 @@ var inputCSS = `
613
845
  `;
614
846
  var Input = (_a) => {
615
847
  var _b = _a, { error, success, leftIcon, rightIcon, style } = _b, props = __objRest(_b, ["error", "success", "leftIcon", "rightIcon", "style"]);
616
- return /* @__PURE__ */ jsxs7(Fragment2, { children: [
617
- /* @__PURE__ */ jsx12("style", { href: "ds-input", precedence: "low", children: inputCSS }),
618
- /* @__PURE__ */ jsxs7("div", { style: { position: "relative", display: "flex", alignItems: "center", width: "100%" }, children: [
619
- leftIcon && /* @__PURE__ */ jsx12("span", { style: {
848
+ return /* @__PURE__ */ jsxs11(Fragment2, { children: [
849
+ /* @__PURE__ */ jsx16("style", { href: "ds-input", precedence: "low", children: inputCSS }),
850
+ /* @__PURE__ */ jsxs11("div", { style: { position: "relative", display: "flex", alignItems: "center", width: "100%" }, children: [
851
+ leftIcon && /* @__PURE__ */ jsx16("span", { style: {
620
852
  position: "absolute",
621
853
  left: "0.625rem",
622
854
  display: "flex",
@@ -624,7 +856,7 @@ var Input = (_a) => {
624
856
  color: "var(--ds-text-secondary, #64748b)",
625
857
  pointerEvents: "none"
626
858
  }, children: leftIcon }),
627
- /* @__PURE__ */ jsx12(
859
+ /* @__PURE__ */ jsx16(
628
860
  "input",
629
861
  __spreadValues({
630
862
  "data-ds-input": "",
@@ -647,7 +879,7 @@ var Input = (_a) => {
647
879
  }, style)
648
880
  }, props)
649
881
  ),
650
- rightIcon && /* @__PURE__ */ jsx12("span", { style: {
882
+ rightIcon && /* @__PURE__ */ jsx16("span", { style: {
651
883
  position: "absolute",
652
884
  right: "0.625rem",
653
885
  display: "flex",
@@ -661,10 +893,10 @@ var Input = (_a) => {
661
893
  var Input_default = Input;
662
894
 
663
895
  // src/components/Label/Label.tsx
664
- import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
896
+ import { jsx as jsx17, jsxs as jsxs12 } from "react/jsx-runtime";
665
897
  var Label = (_a) => {
666
898
  var _b = _a, { children, required, style } = _b, props = __objRest(_b, ["children", "required", "style"]);
667
- return /* @__PURE__ */ jsxs8("label", __spreadProps(__spreadValues({ style: __spreadValues({
899
+ return /* @__PURE__ */ jsxs12("label", __spreadProps(__spreadValues({ style: __spreadValues({
668
900
  display: "block",
669
901
  fontSize: "0.875rem",
670
902
  fontWeight: 500,
@@ -672,7 +904,7 @@ var Label = (_a) => {
672
904
  marginBottom: "0.375rem"
673
905
  }, style) }, props), { children: [
674
906
  children,
675
- required && /* @__PURE__ */ jsx13("span", { style: { color: "var(--ds-danger, #ef4444)", marginLeft: "0.25rem" }, children: "*" })
907
+ required && /* @__PURE__ */ jsx17("span", { style: { color: "var(--ds-danger, #ef4444)", marginLeft: "0.25rem" }, children: "*" })
676
908
  ] }));
677
909
  };
678
910
  var Label_default = Label;
@@ -680,21 +912,21 @@ var Label_default = Label;
680
912
  // src/components/PasswordInput/PasswordInput.tsx
681
913
  import { Eye, EyeOff } from "lucide-react";
682
914
  import { useState as useState8 } from "react";
683
- import { jsx as jsx14 } from "react/jsx-runtime";
915
+ import { jsx as jsx18 } from "react/jsx-runtime";
684
916
  var PasswordInput = (props) => {
685
917
  const [visible, setVisible] = useState8(false);
686
- return /* @__PURE__ */ jsx14(
918
+ return /* @__PURE__ */ jsx18(
687
919
  Input_default,
688
920
  __spreadProps(__spreadValues({}, props), {
689
921
  type: visible ? "text" : "password",
690
- rightIcon: /* @__PURE__ */ jsx14(
922
+ rightIcon: /* @__PURE__ */ jsx18(
691
923
  "button",
692
924
  {
693
925
  type: "button",
694
926
  onClick: () => setVisible((v) => !v),
695
927
  style: { background: "none", border: "none", cursor: "pointer", padding: 0, display: "flex", pointerEvents: "all" },
696
928
  tabIndex: -1,
697
- children: visible ? /* @__PURE__ */ jsx14(EyeOff, { size: 16 }) : /* @__PURE__ */ jsx14(Eye, { size: 16 })
929
+ children: visible ? /* @__PURE__ */ jsx18(EyeOff, { size: 16 }) : /* @__PURE__ */ jsx18(Eye, { size: 16 })
698
930
  }
699
931
  )
700
932
  })
@@ -703,10 +935,10 @@ var PasswordInput = (props) => {
703
935
  var PasswordInput_default = PasswordInput;
704
936
 
705
937
  // src/components/Progress/Progress.tsx
706
- import { jsx as jsx15 } from "react/jsx-runtime";
938
+ import { jsx as jsx19 } from "react/jsx-runtime";
707
939
  var Progress = ({ value = 0 }) => {
708
940
  const pct = Math.min(100, Math.max(0, value));
709
- return /* @__PURE__ */ jsx15(
941
+ return /* @__PURE__ */ jsx19(
710
942
  "div",
711
943
  {
712
944
  role: "progressbar",
@@ -720,7 +952,7 @@ var Progress = ({ value = 0 }) => {
720
952
  borderRadius: "9999px",
721
953
  overflow: "hidden"
722
954
  },
723
- children: /* @__PURE__ */ jsx15("div", { style: {
955
+ children: /* @__PURE__ */ jsx19("div", { style: {
724
956
  height: "100%",
725
957
  width: `${pct}%`,
726
958
  backgroundColor: "var(--ds-primary, #3b82f6)",
@@ -734,7 +966,7 @@ var Progress_default = Progress;
734
966
 
735
967
  // src/components/RadioGroup/RadioGroup.tsx
736
968
  import { useState as useState9 } from "react";
737
- import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
969
+ import { jsx as jsx20, jsxs as jsxs13 } from "react/jsx-runtime";
738
970
  var RadioGroup = ({
739
971
  options,
740
972
  name,
@@ -750,9 +982,9 @@ var RadioGroup = ({
750
982
  setInternal(val);
751
983
  onChange == null ? void 0 : onChange(val);
752
984
  };
753
- return /* @__PURE__ */ jsx16("div", { style: { display: "flex", flexDirection: "column", gap: "0.5rem" }, children: options.map((option) => {
985
+ return /* @__PURE__ */ jsx20("div", { style: { display: "flex", flexDirection: "column", gap: "0.5rem" }, children: options.map((option) => {
754
986
  const isSelected = selected === option.value;
755
- return /* @__PURE__ */ jsxs9("label", { style: {
987
+ return /* @__PURE__ */ jsxs13("label", { style: {
756
988
  display: "inline-flex",
757
989
  alignItems: "center",
758
990
  gap: "0.5rem",
@@ -760,7 +992,7 @@ var RadioGroup = ({
760
992
  userSelect: "none",
761
993
  opacity: disabled ? 0.5 : 1
762
994
  }, children: [
763
- /* @__PURE__ */ jsx16(
995
+ /* @__PURE__ */ jsx20(
764
996
  "input",
765
997
  {
766
998
  type: "radio",
@@ -772,7 +1004,7 @@ var RadioGroup = ({
772
1004
  style: { position: "absolute", opacity: 0, width: 0, height: 0 }
773
1005
  }
774
1006
  ),
775
- /* @__PURE__ */ jsx16("span", { style: {
1007
+ /* @__PURE__ */ jsx20("span", { style: {
776
1008
  width: "1.125rem",
777
1009
  height: "1.125rem",
778
1010
  borderRadius: "9999px",
@@ -783,13 +1015,13 @@ var RadioGroup = ({
783
1015
  flexShrink: 0,
784
1016
  backgroundColor: "var(--ds-card, #fff)",
785
1017
  transition: "border-color 0.15s"
786
- }, children: isSelected && /* @__PURE__ */ jsx16("span", { style: {
1018
+ }, children: isSelected && /* @__PURE__ */ jsx20("span", { style: {
787
1019
  width: "0.5rem",
788
1020
  height: "0.5rem",
789
1021
  borderRadius: "9999px",
790
1022
  backgroundColor: "var(--ds-primary, #3b82f6)"
791
1023
  } }) }),
792
- /* @__PURE__ */ jsx16("span", { style: { fontSize: "0.875rem", color: "var(--ds-text-primary, #0f172a)" }, children: option.label })
1024
+ /* @__PURE__ */ jsx20("span", { style: { fontSize: "0.875rem", color: "var(--ds-text-primary, #0f172a)" }, children: option.label })
793
1025
  ] }, option.value);
794
1026
  }) });
795
1027
  };
@@ -798,7 +1030,7 @@ var RadioGroup_default = RadioGroup;
798
1030
  // src/components/Select/Select.tsx
799
1031
  import { Check as Check2, ChevronDown as ChevronDown2 } from "lucide-react";
800
1032
  import { useEffect, useRef as useRef2, useState as useState10 } from "react";
801
- import { Fragment as Fragment3, jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
1033
+ import { Fragment as Fragment3, jsx as jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
802
1034
  var selectCSS = `
803
1035
  [data-ds-select-trigger]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }
804
1036
  `;
@@ -829,15 +1061,15 @@ var Select = ({
829
1061
  document.addEventListener("mousedown", handleOutside);
830
1062
  return () => document.removeEventListener("mousedown", handleOutside);
831
1063
  }, []);
832
- return /* @__PURE__ */ jsxs10(Fragment3, { children: [
833
- /* @__PURE__ */ jsx17("style", { href: "ds-select", precedence: "low", children: selectCSS }),
834
- /* @__PURE__ */ jsxs10("div", { ref, style: {
1064
+ return /* @__PURE__ */ jsxs14(Fragment3, { children: [
1065
+ /* @__PURE__ */ jsx21("style", { href: "ds-select", precedence: "low", children: selectCSS }),
1066
+ /* @__PURE__ */ jsxs14("div", { ref, style: {
835
1067
  position: "relative",
836
1068
  width: "100%",
837
1069
  opacity: disabled ? 0.5 : 1,
838
1070
  pointerEvents: disabled ? "none" : void 0
839
1071
  }, children: [
840
- /* @__PURE__ */ jsxs10(
1072
+ /* @__PURE__ */ jsxs14(
841
1073
  "button",
842
1074
  {
843
1075
  type: "button",
@@ -863,8 +1095,8 @@ var Select = ({
863
1095
  fontFamily: "inherit"
864
1096
  },
865
1097
  children: [
866
- /* @__PURE__ */ jsx17("span", { style: { color: selectedLabel ? "var(--ds-text-primary, #0f172a)" : "var(--ds-text-secondary, #64748b)" }, children: selectedLabel != null ? selectedLabel : placeholder }),
867
- /* @__PURE__ */ jsx17(
1098
+ /* @__PURE__ */ jsx21("span", { style: { color: selectedLabel ? "var(--ds-text-primary, #0f172a)" : "var(--ds-text-secondary, #64748b)" }, children: selectedLabel != null ? selectedLabel : placeholder }),
1099
+ /* @__PURE__ */ jsx21(
868
1100
  ChevronDown2,
869
1101
  {
870
1102
  size: 16,
@@ -879,7 +1111,7 @@ var Select = ({
879
1111
  ]
880
1112
  }
881
1113
  ),
882
- open && /* @__PURE__ */ jsx17("div", { style: {
1114
+ open && /* @__PURE__ */ jsx21("div", { style: {
883
1115
  position: "absolute",
884
1116
  top: "calc(100% + 0.25rem)",
885
1117
  left: 0,
@@ -893,7 +1125,7 @@ var Select = ({
893
1125
  }, children: options.map((option) => {
894
1126
  const isSelected = selected === option.value;
895
1127
  const isHovered = hoveredOption === option.value;
896
- return /* @__PURE__ */ jsxs10(
1128
+ return /* @__PURE__ */ jsxs14(
897
1129
  "div",
898
1130
  {
899
1131
  onClick: () => handleSelect(option.value),
@@ -912,7 +1144,7 @@ var Select = ({
912
1144
  transition: "background-color 0.1s"
913
1145
  },
914
1146
  children: [
915
- isSelected ? /* @__PURE__ */ jsx17(Check2, { size: 14, style: { color: "var(--ds-primary, #3b82f6)", flexShrink: 0 } }) : /* @__PURE__ */ jsx17("span", { style: { width: 14, flexShrink: 0 } }),
1147
+ isSelected ? /* @__PURE__ */ jsx21(Check2, { size: 14, style: { color: "var(--ds-primary, #3b82f6)", flexShrink: 0 } }) : /* @__PURE__ */ jsx21("span", { style: { width: 14, flexShrink: 0 } }),
916
1148
  option.label
917
1149
  ]
918
1150
  },
@@ -925,13 +1157,13 @@ var Select = ({
925
1157
  var Select_default = Select;
926
1158
 
927
1159
  // src/components/Skeleton/Skeleton.tsx
928
- import { Fragment as Fragment4, jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
929
- var Skeleton = ({ height = "1rem", width = "100%", circle = false }) => /* @__PURE__ */ jsxs11(Fragment4, { children: [
930
- /* @__PURE__ */ jsx18("style", { href: "ds-skeleton", precedence: "low", children: `
1160
+ import { Fragment as Fragment4, jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
1161
+ var Skeleton = ({ height = "1rem", width = "100%", circle = false }) => /* @__PURE__ */ jsxs15(Fragment4, { children: [
1162
+ /* @__PURE__ */ jsx22("style", { href: "ds-skeleton", precedence: "low", children: `
931
1163
  @keyframes ds-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
932
1164
  [data-ds-skeleton] { animation: ds-pulse 1.5s ease-in-out infinite; }
933
1165
  ` }),
934
- /* @__PURE__ */ jsx18(
1166
+ /* @__PURE__ */ jsx22(
935
1167
  "div",
936
1168
  {
937
1169
  "data-ds-skeleton": "",
@@ -949,7 +1181,7 @@ var Skeleton_default = Skeleton;
949
1181
 
950
1182
  // src/components/Slider/Slider.tsx
951
1183
  import { useState as useState11 } from "react";
952
- import { Fragment as Fragment5, jsx as jsx19, jsxs as jsxs12 } from "react/jsx-runtime";
1184
+ import { Fragment as Fragment5, jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
953
1185
  var sliderCSS = `
954
1186
  [data-ds-slider] {
955
1187
  -webkit-appearance: none;
@@ -1008,13 +1240,13 @@ var Slider = ({
1008
1240
  setInternal(val);
1009
1241
  onChange == null ? void 0 : onChange(val);
1010
1242
  };
1011
- return /* @__PURE__ */ jsxs12(Fragment5, { children: [
1012
- /* @__PURE__ */ jsx19("style", { href: "ds-slider", precedence: "low", children: sliderCSS }),
1013
- /* @__PURE__ */ jsx19("div", { style: {
1243
+ return /* @__PURE__ */ jsxs16(Fragment5, { children: [
1244
+ /* @__PURE__ */ jsx23("style", { href: "ds-slider", precedence: "low", children: sliderCSS }),
1245
+ /* @__PURE__ */ jsx23("div", { style: {
1014
1246
  width: "100%",
1015
1247
  padding: "0.25rem 0",
1016
1248
  opacity: disabled ? 0.5 : 1
1017
- }, children: /* @__PURE__ */ jsx19(
1249
+ }, children: /* @__PURE__ */ jsx23(
1018
1250
  "input",
1019
1251
  {
1020
1252
  type: "range",
@@ -1034,11 +1266,11 @@ var Slider_default = Slider;
1034
1266
 
1035
1267
  // src/components/Spinner/Spinner.tsx
1036
1268
  import { Loader2 } from "lucide-react";
1037
- import { Fragment as Fragment6, jsx as jsx20, jsxs as jsxs13 } from "react/jsx-runtime";
1269
+ import { Fragment as Fragment6, jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
1038
1270
  var sizePx = { sm: 16, md: 24, lg: 32 };
1039
- var Spinner = ({ size = "md" }) => /* @__PURE__ */ jsxs13(Fragment6, { children: [
1040
- /* @__PURE__ */ jsx20("style", { href: "ds-spin", precedence: "low", children: `@keyframes ds-spin { to { transform: rotate(360deg); } }` }),
1041
- /* @__PURE__ */ jsx20(
1271
+ var Spinner = ({ size = "md" }) => /* @__PURE__ */ jsxs17(Fragment6, { children: [
1272
+ /* @__PURE__ */ jsx24("style", { href: "ds-spin", precedence: "low", children: `@keyframes ds-spin { to { transform: rotate(360deg); } }` }),
1273
+ /* @__PURE__ */ jsx24(
1042
1274
  Loader2,
1043
1275
  {
1044
1276
  size: sizePx[size],
@@ -1051,7 +1283,7 @@ var Spinner_default = Spinner;
1051
1283
 
1052
1284
  // src/components/Switch/Switch.tsx
1053
1285
  import { useState as useState12 } from "react";
1054
- import { jsx as jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
1286
+ import { jsx as jsx25, jsxs as jsxs18 } from "react/jsx-runtime";
1055
1287
  var Switch = ({
1056
1288
  label,
1057
1289
  checked,
@@ -1068,7 +1300,7 @@ var Switch = ({
1068
1300
  setInternal(next);
1069
1301
  onChange == null ? void 0 : onChange(next);
1070
1302
  };
1071
- return /* @__PURE__ */ jsxs14("label", { htmlFor: id, style: {
1303
+ return /* @__PURE__ */ jsxs18("label", { htmlFor: id, style: {
1072
1304
  display: "inline-flex",
1073
1305
  alignItems: "center",
1074
1306
  gap: "0.625rem",
@@ -1076,7 +1308,7 @@ var Switch = ({
1076
1308
  userSelect: "none",
1077
1309
  opacity: disabled ? 0.5 : 1
1078
1310
  }, children: [
1079
- /* @__PURE__ */ jsx21(
1311
+ /* @__PURE__ */ jsx25(
1080
1312
  "input",
1081
1313
  {
1082
1314
  type: "checkbox",
@@ -1087,7 +1319,7 @@ var Switch = ({
1087
1319
  style: { position: "absolute", opacity: 0, width: 0, height: 0 }
1088
1320
  }
1089
1321
  ),
1090
- /* @__PURE__ */ jsx21("span", { style: {
1322
+ /* @__PURE__ */ jsx25("span", { style: {
1091
1323
  width: "2.75rem",
1092
1324
  height: "1.5rem",
1093
1325
  borderRadius: "9999px",
@@ -1095,7 +1327,7 @@ var Switch = ({
1095
1327
  position: "relative",
1096
1328
  transition: "background-color 0.2s",
1097
1329
  flexShrink: 0
1098
- }, children: /* @__PURE__ */ jsx21("span", { style: {
1330
+ }, children: /* @__PURE__ */ jsx25("span", { style: {
1099
1331
  position: "absolute",
1100
1332
  top: "0.175rem",
1101
1333
  left: "0.175rem",
@@ -1107,41 +1339,41 @@ var Switch = ({
1107
1339
  transition: "transform 0.2s",
1108
1340
  transform: isOn ? "translateX(1.25rem)" : "translateX(0)"
1109
1341
  } }) }),
1110
- label && /* @__PURE__ */ jsx21("span", { style: { fontSize: "0.875rem", color: "var(--ds-text-primary, #0f172a)" }, children: label })
1342
+ label && /* @__PURE__ */ jsx25("span", { style: { fontSize: "0.875rem", color: "var(--ds-text-primary, #0f172a)" }, children: label })
1111
1343
  ] });
1112
1344
  };
1113
1345
  var Switch_default = Switch;
1114
1346
 
1115
1347
  // src/components/Table/Table.tsx
1116
- import { Fragment as Fragment7, jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
1348
+ import { Fragment as Fragment7, jsx as jsx26, jsxs as jsxs19 } from "react/jsx-runtime";
1117
1349
  var tableCSS = `
1118
1350
  [data-ds-table-row]:hover [data-ds-table-cell] { background-color: var(--ds-muted, #f1f5f9); }
1119
1351
  `;
1120
1352
  var Table = (_a) => {
1121
1353
  var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
1122
- return /* @__PURE__ */ jsxs15(Fragment7, { children: [
1123
- /* @__PURE__ */ jsx22("style", { href: "ds-table", precedence: "low", children: tableCSS }),
1124
- /* @__PURE__ */ jsx22("div", { style: {
1354
+ return /* @__PURE__ */ jsxs19(Fragment7, { children: [
1355
+ /* @__PURE__ */ jsx26("style", { href: "ds-table", precedence: "low", children: tableCSS }),
1356
+ /* @__PURE__ */ jsx26("div", { style: {
1125
1357
  width: "100%",
1126
1358
  overflowX: "auto",
1127
1359
  border: "1px solid var(--ds-border, #e2e8f0)",
1128
1360
  borderRadius: "0.5rem"
1129
- }, children: /* @__PURE__ */ jsx22("table", __spreadValues({ style: __spreadValues({
1361
+ }, children: /* @__PURE__ */ jsx26("table", __spreadValues({ style: __spreadValues({
1130
1362
  width: "100%",
1131
1363
  borderCollapse: "collapse",
1132
1364
  fontSize: "0.875rem"
1133
1365
  }, style) }, props)) })
1134
1366
  ] });
1135
1367
  };
1136
- var TableHead = (props) => /* @__PURE__ */ jsx22("thead", __spreadValues({}, props));
1137
- var TableBody = (props) => /* @__PURE__ */ jsx22("tbody", __spreadValues({}, props));
1368
+ var TableHead = (props) => /* @__PURE__ */ jsx26("thead", __spreadValues({}, props));
1369
+ var TableBody = (props) => /* @__PURE__ */ jsx26("tbody", __spreadValues({}, props));
1138
1370
  var TableRow = (_a) => {
1139
1371
  var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
1140
- return /* @__PURE__ */ jsx22("tr", __spreadValues({ "data-ds-table-row": "", style }, props));
1372
+ return /* @__PURE__ */ jsx26("tr", __spreadValues({ "data-ds-table-row": "", style }, props));
1141
1373
  };
1142
1374
  var TableHeader = (_a) => {
1143
1375
  var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
1144
- return /* @__PURE__ */ jsx22("th", __spreadValues({ style: __spreadValues({
1376
+ return /* @__PURE__ */ jsx26("th", __spreadValues({ style: __spreadValues({
1145
1377
  padding: "0.75rem 1rem",
1146
1378
  textAlign: "left",
1147
1379
  fontWeight: 500,
@@ -1153,7 +1385,7 @@ var TableHeader = (_a) => {
1153
1385
  };
1154
1386
  var TableCell = (_a) => {
1155
1387
  var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
1156
- return /* @__PURE__ */ jsx22(
1388
+ return /* @__PURE__ */ jsx26(
1157
1389
  "td",
1158
1390
  __spreadValues({
1159
1391
  "data-ds-table-cell": "",
@@ -1169,14 +1401,14 @@ var TableCell = (_a) => {
1169
1401
 
1170
1402
  // src/components/Tabs/Tabs.tsx
1171
1403
  import { useState as useState13 } from "react";
1172
- import { jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
1404
+ import { jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
1173
1405
  var Tabs = ({ tabs, defaultValue }) => {
1174
1406
  var _a, _b;
1175
1407
  const [active, setActive] = useState13((_b = defaultValue != null ? defaultValue : (_a = tabs[0]) == null ? void 0 : _a.value) != null ? _b : "");
1176
1408
  const [hovered, setHovered] = useState13(null);
1177
1409
  const activeTab = tabs.find((t) => t.value === active);
1178
- return /* @__PURE__ */ jsxs16("div", { style: { display: "flex", flexDirection: "column" }, children: [
1179
- /* @__PURE__ */ jsx23("div", { role: "tablist", style: {
1410
+ return /* @__PURE__ */ jsxs20("div", { style: { display: "flex", flexDirection: "column" }, children: [
1411
+ /* @__PURE__ */ jsx27("div", { role: "tablist", style: {
1180
1412
  display: "inline-flex",
1181
1413
  backgroundColor: "var(--ds-muted, #f1f5f9)",
1182
1414
  borderRadius: "0.5rem",
@@ -1185,7 +1417,7 @@ var Tabs = ({ tabs, defaultValue }) => {
1185
1417
  }, children: tabs.map((tab) => {
1186
1418
  const isActive = active === tab.value;
1187
1419
  const isHovered = hovered === tab.value;
1188
- return /* @__PURE__ */ jsxs16(
1420
+ return /* @__PURE__ */ jsxs20(
1189
1421
  "button",
1190
1422
  {
1191
1423
  role: "tab",
@@ -1210,14 +1442,14 @@ var Tabs = ({ tabs, defaultValue }) => {
1210
1442
  whiteSpace: "nowrap"
1211
1443
  },
1212
1444
  children: [
1213
- tab.icon && /* @__PURE__ */ jsx23("span", { style: { display: "flex", alignItems: "center" }, children: tab.icon }),
1445
+ tab.icon && /* @__PURE__ */ jsx27("span", { style: { display: "flex", alignItems: "center" }, children: tab.icon }),
1214
1446
  tab.label
1215
1447
  ]
1216
1448
  },
1217
1449
  tab.value
1218
1450
  );
1219
1451
  }) }),
1220
- /* @__PURE__ */ jsx23("div", { role: "tabpanel", style: {
1452
+ /* @__PURE__ */ jsx27("div", { role: "tabpanel", style: {
1221
1453
  paddingTop: "1rem",
1222
1454
  fontSize: "0.875rem",
1223
1455
  color: "var(--ds-text-secondary, #64748b)"
@@ -1227,7 +1459,7 @@ var Tabs = ({ tabs, defaultValue }) => {
1227
1459
  var Tabs_default = Tabs;
1228
1460
 
1229
1461
  // src/components/Textarea/Textarea.tsx
1230
- import { Fragment as Fragment8, jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
1462
+ import { Fragment as Fragment8, jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
1231
1463
  var textareaCSS = `
1232
1464
  [data-ds-textarea]::placeholder { color: var(--ds-text-secondary, #64748b); }
1233
1465
  [data-ds-textarea]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }
@@ -1237,9 +1469,9 @@ var textareaCSS = `
1237
1469
  `;
1238
1470
  var Textarea = (_a) => {
1239
1471
  var _b = _a, { error, style } = _b, props = __objRest(_b, ["error", "style"]);
1240
- return /* @__PURE__ */ jsxs17(Fragment8, { children: [
1241
- /* @__PURE__ */ jsx24("style", { href: "ds-textarea", precedence: "low", children: textareaCSS }),
1242
- /* @__PURE__ */ jsx24(
1472
+ return /* @__PURE__ */ jsxs21(Fragment8, { children: [
1473
+ /* @__PURE__ */ jsx28("style", { href: "ds-textarea", precedence: "low", children: textareaCSS }),
1474
+ /* @__PURE__ */ jsx28(
1243
1475
  "textarea",
1244
1476
  __spreadValues({
1245
1477
  "data-ds-textarea": "",
@@ -1266,7 +1498,7 @@ var Textarea_default = Textarea;
1266
1498
 
1267
1499
  // src/components/Tooltip/Tooltip.tsx
1268
1500
  import { useState as useState14 } from "react";
1269
- import { Fragment as Fragment9, jsx as jsx25, jsxs as jsxs18 } from "react/jsx-runtime";
1501
+ import { Fragment as Fragment9, jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
1270
1502
  var positionStyle = {
1271
1503
  top: { bottom: "calc(100% + 8px)", left: "50%", transform: "translateX(-50%)" },
1272
1504
  bottom: { top: "calc(100% + 8px)", left: "50%", transform: "translateX(-50%)" },
@@ -1284,11 +1516,11 @@ var tooltipCSS = `
1284
1516
  [data-ds-tt="left"]::before { left: 100%; top: 50%; transform: translateY(-50%); border-left-color: var(--ds-tooltip-bg, #0f172a); }
1285
1517
  [data-ds-tt="right"]::before { right: 100%; top: 50%; transform: translateY(-50%); border-right-color: var(--ds-tooltip-bg, #0f172a); }
1286
1518
  `;
1287
- var Tooltip = ({ content, children, position = "top" }) => {
1519
+ var Tooltip5 = ({ content, children, position = "top" }) => {
1288
1520
  const [visible, setVisible] = useState14(false);
1289
- return /* @__PURE__ */ jsxs18(Fragment9, { children: [
1290
- /* @__PURE__ */ jsx25("style", { href: "ds-tooltip", precedence: "low", children: tooltipCSS }),
1291
- /* @__PURE__ */ jsxs18(
1521
+ return /* @__PURE__ */ jsxs22(Fragment9, { children: [
1522
+ /* @__PURE__ */ jsx29("style", { href: "ds-tooltip", precedence: "low", children: tooltipCSS }),
1523
+ /* @__PURE__ */ jsxs22(
1292
1524
  "span",
1293
1525
  {
1294
1526
  style: { position: "relative", display: "inline-flex" },
@@ -1298,7 +1530,7 @@ var Tooltip = ({ content, children, position = "top" }) => {
1298
1530
  onBlur: () => setVisible(false),
1299
1531
  children: [
1300
1532
  children,
1301
- /* @__PURE__ */ jsx25(
1533
+ /* @__PURE__ */ jsx29(
1302
1534
  "span",
1303
1535
  {
1304
1536
  role: "tooltip",
@@ -1325,12 +1557,14 @@ var Tooltip = ({ content, children, position = "top" }) => {
1325
1557
  )
1326
1558
  ] });
1327
1559
  };
1328
- var Tooltip_default = Tooltip;
1560
+ var Tooltip_default = Tooltip5;
1329
1561
  export {
1330
1562
  Accordion_default as Accordion,
1331
1563
  Alert_default as Alert,
1564
+ AreaChart_default as AreaChart,
1332
1565
  Avatar_default as Avatar,
1333
1566
  Badge_default as Badge,
1567
+ BarChart_default as BarChart,
1334
1568
  Breadcrumb_default as Breadcrumb,
1335
1569
  Button_default as Button,
1336
1570
  Card,
@@ -1344,7 +1578,9 @@ export {
1344
1578
  FileUpload_default as FileUpload,
1345
1579
  Input_default as Input,
1346
1580
  Label_default as Label,
1581
+ LineChart_default as LineChart,
1347
1582
  PasswordInput_default as PasswordInput,
1583
+ PieChart_default as PieChart,
1348
1584
  Progress_default as Progress,
1349
1585
  RadioGroup_default as RadioGroup,
1350
1586
  Select_default as Select,