@efiche/design 0.1.6 → 0.1.8

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
@@ -143,72 +143,145 @@ var Accordion_default = Accordion;
143
143
 
144
144
  // src/components/Alert/Alert.tsx
145
145
  import { Info, CheckCircle2, AlertTriangle, AlertCircle } from "lucide-react";
146
-
147
- // src/components/Alert/Alert.module.css
148
- var Alert_default = {};
149
-
150
- // src/components/Alert/Alert.tsx
151
146
  import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
147
+ var variantMap = {
148
+ 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
+ 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)" },
150
+ warning: { bg: "var(--ds-warning-bg, #fffbeb)", border: "var(--ds-warning, #f59e0b)", icon: "var(--ds-warning, #f59e0b)", title: "var(--ds-warning-title, #78350f)", desc: "var(--ds-warning-desc, #92400e)" },
151
+ 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
+ };
152
153
  var icons = {
153
154
  info: /* @__PURE__ */ jsx3(Info, { size: 16 }),
154
155
  success: /* @__PURE__ */ jsx3(CheckCircle2, { size: 16 }),
155
156
  warning: /* @__PURE__ */ jsx3(AlertTriangle, { size: 16 }),
156
157
  danger: /* @__PURE__ */ jsx3(AlertCircle, { size: 16 })
157
158
  };
158
- var Alert = ({ variant = "info", title, description }) => /* @__PURE__ */ jsxs2("div", { className: `${Alert_default.alert} ${Alert_default[variant]}`, role: "alert", children: [
159
- /* @__PURE__ */ jsx3("span", { className: Alert_default.icon, children: icons[variant] }),
160
- /* @__PURE__ */ jsxs2("div", { className: Alert_default.content, children: [
161
- /* @__PURE__ */ jsx3("p", { className: Alert_default.title, children: title }),
162
- /* @__PURE__ */ jsx3("p", { className: Alert_default.description, children: description })
163
- ] })
164
- ] });
165
- var Alert_default2 = Alert;
166
-
167
- // src/components/Avatar/Avatar.module.css
168
- var Avatar_default = {};
159
+ var Alert = ({ variant = "info", title, description }) => {
160
+ const v = variantMap[variant];
161
+ return /* @__PURE__ */ jsxs2("div", { role: "alert", style: {
162
+ display: "flex",
163
+ gap: "0.75rem",
164
+ padding: "1rem",
165
+ borderRadius: "0.5rem",
166
+ borderLeft: `4px solid ${v.border}`,
167
+ backgroundColor: v.bg
168
+ }, 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 })
173
+ ] })
174
+ ] });
175
+ };
176
+ var Alert_default = Alert;
169
177
 
170
178
  // src/components/Avatar/Avatar.tsx
171
179
  import { jsx as jsx4 } from "react/jsx-runtime";
180
+ var sizeMap = {
181
+ sm: { width: "2rem", height: "2rem", fontSize: "0.625rem" },
182
+ md: { width: "2.5rem", height: "2.5rem", fontSize: "0.875rem" },
183
+ lg: { width: "4rem", height: "4rem", fontSize: "1.25rem" }
184
+ };
172
185
  var Avatar = ({ fallback, size = "md", style, className }) => /* @__PURE__ */ jsx4(
173
186
  "div",
174
187
  {
175
- className: `${Avatar_default.avatar} ${Avatar_default[size]}${className ? ` ${className}` : ""}`,
176
- style,
188
+ className,
177
189
  "aria-label": fallback,
190
+ style: __spreadValues(__spreadValues({
191
+ display: "inline-flex",
192
+ alignItems: "center",
193
+ justifyContent: "center",
194
+ borderRadius: "9999px",
195
+ backgroundColor: "var(--ds-accent, #f1f5f9)",
196
+ color: "var(--ds-text-primary, #0f172a)",
197
+ fontWeight: 600,
198
+ flexShrink: 0,
199
+ userSelect: "none"
200
+ }, sizeMap[size]), style),
178
201
  children: fallback
179
202
  }
180
203
  );
181
- var Avatar_default2 = Avatar;
182
-
183
- // src/components/Badge/Badge.module.css
184
- var Badge_default = {};
204
+ var Avatar_default = Avatar;
185
205
 
186
206
  // src/components/Badge/Badge.tsx
187
207
  import { jsx as jsx5 } from "react/jsx-runtime";
188
- var Badge = ({ variant = "default", size = "md", children, style }) => /* @__PURE__ */ jsx5("span", { className: `${Badge_default.badge} ${Badge_default[variant]} ${Badge_default[size]}`, style, children });
189
- var Badge_default2 = Badge;
208
+ var variantMap2 = {
209
+ default: { backgroundColor: "var(--ds-primary, #3b82f6)", color: "#fff" },
210
+ secondary: { backgroundColor: "var(--ds-muted, #f1f5f9)", color: "var(--ds-text-secondary, #64748b)" },
211
+ outline: { backgroundColor: "transparent", border: "1px solid var(--ds-border, #e2e8f0)", color: "var(--ds-text-primary, #0f172a)" },
212
+ danger: { backgroundColor: "var(--ds-danger, #ef4444)", color: "#fff" },
213
+ success: { backgroundColor: "var(--ds-success, #22c55e)", color: "#fff" },
214
+ warning: { backgroundColor: "var(--ds-warning, #f59e0b)", color: "#fff" },
215
+ info: { backgroundColor: "var(--ds-info, #3b82f6)", color: "#fff" }
216
+ };
217
+ var sizeMap2 = {
218
+ sm: { padding: "0.125rem 0.5rem", fontSize: "0.625rem" },
219
+ md: { padding: "0.25rem 0.625rem", fontSize: "0.75rem" },
220
+ lg: { padding: "0.375rem 0.875rem", fontSize: "0.875rem" }
221
+ };
222
+ var Badge = ({ variant = "default", size = "md", children, style }) => /* @__PURE__ */ jsx5("span", { style: __spreadValues(__spreadValues(__spreadValues({
223
+ display: "inline-flex",
224
+ alignItems: "center",
225
+ gap: "0.25rem",
226
+ borderRadius: "9999px",
227
+ fontWeight: 500,
228
+ whiteSpace: "nowrap"
229
+ }, variantMap2[variant]), sizeMap2[size]), style), children });
230
+ var Badge_default = Badge;
190
231
 
191
232
  // src/components/Breadcrumb/Breadcrumb.tsx
233
+ import { useState as useState3 } from "react";
192
234
  import { ChevronRight } from "lucide-react";
193
-
194
- // src/components/Breadcrumb/Breadcrumb.module.css
195
- var Breadcrumb_default = {};
196
-
197
- // src/components/Breadcrumb/Breadcrumb.tsx
198
235
  import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
199
- var Breadcrumb = ({ items }) => /* @__PURE__ */ jsx6("nav", { "aria-label": "Breadcrumb", children: /* @__PURE__ */ jsx6("ol", { className: Breadcrumb_default.list, children: items.map((item, i) => {
200
- const isLast = i === items.length - 1;
201
- return /* @__PURE__ */ jsxs3("li", { className: Breadcrumb_default.item, children: [
202
- i > 0 && /* @__PURE__ */ jsx6(ChevronRight, { size: 14, className: Breadcrumb_default.separator, "aria-hidden": true }),
203
- isLast || !item.href ? /* @__PURE__ */ jsx6("span", { className: `${Breadcrumb_default.link} ${isLast ? Breadcrumb_default.current : ""}`, children: item.label }) : /* @__PURE__ */ jsx6("a", { href: item.href, className: Breadcrumb_default.link, children: item.label })
204
- ] }, item.label);
205
- }) }) });
206
- var Breadcrumb_default2 = Breadcrumb;
236
+ var Breadcrumb = ({ items }) => {
237
+ const [hovered, setHovered] = useState3(null);
238
+ return /* @__PURE__ */ jsx6("nav", { "aria-label": "Breadcrumb", children: /* @__PURE__ */ jsx6("ol", { style: {
239
+ display: "flex",
240
+ flexWrap: "wrap",
241
+ alignItems: "center",
242
+ listStyle: "none",
243
+ padding: 0,
244
+ margin: 0,
245
+ fontSize: "0.875rem"
246
+ }, children: items.map((item, i) => {
247
+ const isLast = i === items.length - 1;
248
+ const isHovered = hovered === item.label;
249
+ return /* @__PURE__ */ jsxs3("li", { style: { display: "flex", alignItems: "center" }, children: [
250
+ i > 0 && /* @__PURE__ */ jsx6(
251
+ ChevronRight,
252
+ {
253
+ size: 14,
254
+ "aria-hidden": true,
255
+ style: { color: "var(--ds-text-secondary, #64748b)", margin: "0 0.25rem", flexShrink: 0 }
256
+ }
257
+ ),
258
+ isLast || !item.href ? /* @__PURE__ */ jsx6("span", { style: {
259
+ color: isLast ? "var(--ds-text-primary, #0f172a)" : "var(--ds-text-secondary, #64748b)",
260
+ fontWeight: isLast ? 500 : void 0,
261
+ cursor: isLast ? "default" : void 0
262
+ }, children: item.label }) : /* @__PURE__ */ jsx6(
263
+ "a",
264
+ {
265
+ href: item.href,
266
+ onMouseEnter: () => setHovered(item.label),
267
+ onMouseLeave: () => setHovered(null),
268
+ style: {
269
+ color: "var(--ds-text-secondary, #64748b)",
270
+ textDecoration: isHovered ? "underline" : "none",
271
+ transition: "color 0.15s"
272
+ },
273
+ children: item.label
274
+ }
275
+ )
276
+ ] }, item.label);
277
+ }) }) });
278
+ };
279
+ var Breadcrumb_default = Breadcrumb;
207
280
 
208
281
  // src/components/Button/Button.tsx
209
282
  import { LoaderCircle } from "lucide-react";
210
- import { useEffect, useState as useState3 } from "react";
211
- import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
283
+ import { useState as useState4 } from "react";
284
+ import { Fragment, jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
212
285
  var variantStyles = {
213
286
  solid: { backgroundColor: "var(--ds-primary, #3b82f6)", color: "#fff", borderColor: "transparent" },
214
287
  outline: { backgroundColor: "transparent", color: "var(--ds-primary, #3b82f6)", borderColor: "var(--ds-primary, #3b82f6)" },
@@ -232,14 +305,6 @@ var sizeStyles = {
232
305
  md: { padding: "0.5rem 1rem", fontSize: "0.875rem" },
233
306
  lg: { padding: "0.75rem 1.5rem", fontSize: "1rem" }
234
307
  };
235
- function injectSpinKeyframe() {
236
- if (typeof document === "undefined") return;
237
- if (document.getElementById("ds-spin-keyframe")) return;
238
- const style = document.createElement("style");
239
- style.id = "ds-spin-keyframe";
240
- style.textContent = "@keyframes ds-spin { to { transform: rotate(360deg); } }";
241
- document.head.appendChild(style);
242
- }
243
308
  var Button = (_a) => {
244
309
  var _b = _a, {
245
310
  text,
@@ -278,10 +343,7 @@ var Button = (_a) => {
278
343
  "size",
279
344
  "style"
280
345
  ]);
281
- const [hovered, setHovered] = useState3(false);
282
- useEffect(() => {
283
- injectSpinKeyframe();
284
- }, []);
346
+ const [hovered, setHovered] = useState4(false);
285
347
  const resolvedVariant = variant != null ? variant : danger ? "danger" : warning ? "warning" : info ? "info" : success ? "success" : ghost ? "ghost" : outline ? "outline" : "solid";
286
348
  const resolvedSize = size != null ? size : small ? "sm" : large ? "lg" : "md";
287
349
  const isDisabled = disabled || loading;
@@ -299,68 +361,86 @@ var Button = (_a) => {
299
361
  opacity: isDisabled ? 0.5 : 1,
300
362
  pointerEvents: loading ? "none" : void 0
301
363
  }, variantStyles[resolvedVariant]), sizeStyles[resolvedSize]), hovered && !isDisabled ? variantHoverStyles[resolvedVariant] : {}), styleProp);
302
- return /* @__PURE__ */ jsxs4(
303
- "button",
304
- __spreadProps(__spreadValues({
305
- disabled: isDisabled,
306
- style: computedStyle,
307
- onMouseEnter: () => setHovered(true),
308
- onMouseLeave: () => setHovered(false)
309
- }, props), {
310
- children: [
311
- loading ? /* @__PURE__ */ jsx7(
312
- LoaderCircle,
313
- {
314
- "aria-hidden": true,
315
- style: { width: "1em", height: "1em", animation: "ds-spin 0.75s linear infinite" }
316
- }
317
- ) : null,
318
- showIcon && iconPosition === "left" ? icon : null,
319
- content,
320
- showIcon && iconPosition === "right" ? icon : null
321
- ]
322
- })
323
- );
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(
367
+ "button",
368
+ __spreadProps(__spreadValues({
369
+ disabled: isDisabled,
370
+ style: computedStyle,
371
+ onMouseEnter: () => setHovered(true),
372
+ onMouseLeave: () => setHovered(false)
373
+ }, props), {
374
+ children: [
375
+ loading ? /* @__PURE__ */ jsx7(
376
+ LoaderCircle,
377
+ {
378
+ "aria-hidden": true,
379
+ style: { width: "1em", height: "1em", animation: "ds-spin 0.75s linear infinite" }
380
+ }
381
+ ) : null,
382
+ showIcon && iconPosition === "left" ? icon : null,
383
+ content,
384
+ showIcon && iconPosition === "right" ? icon : null
385
+ ]
386
+ })
387
+ )
388
+ ] });
324
389
  };
325
390
  var Button_default = Button;
326
391
 
327
- // src/components/Card/Card.module.css
328
- var Card_default = {};
329
-
330
392
  // src/components/Card/Card.tsx
331
393
  import { jsx as jsx8 } from "react/jsx-runtime";
332
394
  var Card = (_a) => {
333
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
334
- return /* @__PURE__ */ jsx8("div", __spreadValues({ className: `${Card_default.card}${className ? ` ${className}` : ""}` }, props));
395
+ var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
396
+ return /* @__PURE__ */ jsx8("div", __spreadValues({ style: __spreadValues({
397
+ border: "1px solid var(--ds-border, #e2e8f0)",
398
+ borderRadius: "0.5rem",
399
+ backgroundColor: "var(--ds-card, #ffffff)"
400
+ }, style) }, props));
335
401
  };
336
402
  var CardHeader = (_a) => {
337
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
338
- return /* @__PURE__ */ jsx8("div", __spreadValues({ className: `${Card_default.header}${className ? ` ${className}` : ""}` }, props));
403
+ var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
404
+ return /* @__PURE__ */ jsx8("div", __spreadValues({ style: __spreadValues({
405
+ display: "flex",
406
+ flexDirection: "column",
407
+ gap: "0.375rem",
408
+ padding: "1.5rem 1.5rem 0"
409
+ }, style) }, props));
339
410
  };
340
411
  var CardTitle = (_a) => {
341
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
342
- return /* @__PURE__ */ jsx8("h3", __spreadValues({ className: `${Card_default.title}${className ? ` ${className}` : ""}` }, props));
412
+ var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
413
+ return /* @__PURE__ */ jsx8("h3", __spreadValues({ style: __spreadValues({
414
+ fontSize: "1rem",
415
+ fontWeight: 600,
416
+ color: "var(--ds-text-primary, #0f172a)",
417
+ margin: 0,
418
+ lineHeight: 1.4
419
+ }, style) }, props));
343
420
  };
344
421
  var CardDescription = (_a) => {
345
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
346
- return /* @__PURE__ */ jsx8("p", __spreadValues({ className: `${Card_default.description}${className ? ` ${className}` : ""}` }, props));
422
+ var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
423
+ return /* @__PURE__ */ jsx8("p", __spreadValues({ style: __spreadValues({
424
+ fontSize: "0.875rem",
425
+ color: "var(--ds-text-secondary, #64748b)",
426
+ margin: 0
427
+ }, style) }, props));
347
428
  };
348
429
  var CardContent = (_a) => {
349
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
350
- return /* @__PURE__ */ jsx8("div", __spreadValues({ className: `${Card_default.content}${className ? ` ${className}` : ""}` }, props));
430
+ var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
431
+ return /* @__PURE__ */ jsx8("div", __spreadValues({ style: __spreadValues({ padding: "1.5rem" }, style) }, props));
351
432
  };
352
433
  var CardFooter = (_a) => {
353
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
354
- return /* @__PURE__ */ jsx8("div", __spreadValues({ className: `${Card_default.footer}${className ? ` ${className}` : ""}` }, props));
434
+ var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
435
+ return /* @__PURE__ */ jsx8("div", __spreadValues({ style: __spreadValues({
436
+ display: "flex",
437
+ alignItems: "center",
438
+ padding: "0 1.5rem 1.5rem"
439
+ }, style) }, props));
355
440
  };
356
441
 
357
442
  // src/components/Checkbox/Checkbox.tsx
358
- import { useState as useState4 } from "react";
359
-
360
- // src/components/Checkbox/Checkbox.module.css
361
- var Checkbox_default = {};
362
-
363
- // src/components/Checkbox/Checkbox.tsx
443
+ import { useState as useState5 } from "react";
364
444
  import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
365
445
  var Checkbox = ({
366
446
  label,
@@ -370,7 +450,7 @@ var Checkbox = ({
370
450
  id,
371
451
  onChange
372
452
  }) => {
373
- const [internal, setInternal] = useState4(defaultChecked);
453
+ const [internal, setInternal] = useState5(defaultChecked);
374
454
  const isChecked = checked !== void 0 ? checked : internal;
375
455
  const handleChange = () => {
376
456
  if (disabled) return;
@@ -378,7 +458,14 @@ var Checkbox = ({
378
458
  setInternal(next);
379
459
  onChange == null ? void 0 : onChange(next);
380
460
  };
381
- return /* @__PURE__ */ jsxs5("label", { className: `${Checkbox_default.container} ${disabled ? Checkbox_default.disabled : ""}`, htmlFor: id, children: [
461
+ return /* @__PURE__ */ jsxs5("label", { htmlFor: id, style: {
462
+ display: "inline-flex",
463
+ alignItems: "center",
464
+ gap: "0.5rem",
465
+ cursor: disabled ? "not-allowed" : "pointer",
466
+ userSelect: "none",
467
+ opacity: disabled ? 0.5 : 1
468
+ }, children: [
382
469
  /* @__PURE__ */ jsx9(
383
470
  "input",
384
471
  {
@@ -387,26 +474,33 @@ var Checkbox = ({
387
474
  checked: isChecked,
388
475
  disabled,
389
476
  onChange: handleChange,
390
- className: Checkbox_default.input
477
+ style: { position: "absolute", opacity: 0, width: 0, height: 0 }
391
478
  }
392
479
  ),
393
- /* @__PURE__ */ jsx9("span", { className: `${Checkbox_default.box} ${isChecked ? Checkbox_default.checked : ""}`, children: isChecked && /* @__PURE__ */ jsx9("svg", { viewBox: "0 0 12 10", fill: "none", className: Checkbox_default.checkmark, children: /* @__PURE__ */ jsx9("path", { d: "M1 5l3.5 3.5L11 1", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }),
394
- label && /* @__PURE__ */ jsx9("span", { className: Checkbox_default.label, children: label })
480
+ /* @__PURE__ */ jsx9("span", { style: {
481
+ width: "1.125rem",
482
+ height: "1.125rem",
483
+ border: `2px solid ${isChecked ? "var(--ds-primary, #3b82f6)" : "var(--ds-border, #e2e8f0)"}`,
484
+ borderRadius: "0.25rem",
485
+ display: "flex",
486
+ alignItems: "center",
487
+ justifyContent: "center",
488
+ flexShrink: 0,
489
+ transition: "background-color 0.15s, border-color 0.15s",
490
+ 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 })
395
493
  ] });
396
494
  };
397
- var Checkbox_default2 = Checkbox;
495
+ var Checkbox_default = Checkbox;
398
496
 
399
497
  // src/components/CopyButton/CopyButton.tsx
400
498
  import { Check, Copy } from "lucide-react";
401
- import { useState as useState5 } from "react";
402
-
403
- // src/components/CopyButton/CopyButton.module.css
404
- var CopyButton_default = {};
405
-
406
- // src/components/CopyButton/CopyButton.tsx
499
+ import { useState as useState6 } from "react";
407
500
  import { jsx as jsx10 } from "react/jsx-runtime";
408
501
  var CopyButton = ({ text }) => {
409
- const [copied, setCopied] = useState5(false);
502
+ const [copied, setCopied] = useState6(false);
503
+ const [hovered, setHovered] = useState6(false);
410
504
  const handleCopy = () => {
411
505
  navigator.clipboard.writeText(text);
412
506
  setCopied(true);
@@ -415,40 +509,51 @@ var CopyButton = ({ text }) => {
415
509
  return /* @__PURE__ */ jsx10(
416
510
  "button",
417
511
  {
418
- className: CopyButton_default.copyButton,
419
512
  onClick: handleCopy,
513
+ onMouseEnter: () => setHovered(true),
514
+ onMouseLeave: () => setHovered(false),
420
515
  "aria-label": copied ? "Copied" : `Copy ${text}`,
421
- children: copied ? /* @__PURE__ */ jsx10(Check, { className: CopyButton_default.icon }) : /* @__PURE__ */ jsx10(Copy, { className: CopyButton_default.icon })
516
+ style: {
517
+ display: "inline-flex",
518
+ alignItems: "center",
519
+ justifyContent: "center",
520
+ padding: "0.25rem",
521
+ border: "none",
522
+ borderRadius: "0.25rem",
523
+ backgroundColor: hovered ? "var(--ds-accent, #f1f5f9)" : "transparent",
524
+ color: hovered ? "var(--ds-text-primary, #0f172a)" : "var(--ds-text-secondary, #64748b)",
525
+ cursor: "pointer",
526
+ transition: "background-color 0.15s, color 0.15s"
527
+ },
528
+ children: copied ? /* @__PURE__ */ jsx10(Check, { style: { width: "1rem", height: "1rem" } }) : /* @__PURE__ */ jsx10(Copy, { style: { width: "1rem", height: "1rem" } })
422
529
  }
423
530
  );
424
531
  };
425
- var CopyButton_default2 = CopyButton;
532
+ var CopyButton_default = CopyButton;
426
533
 
427
534
  // src/components/FileUpload/FileUpload.tsx
428
535
  import { Upload } from "lucide-react";
429
- import { useRef, useState as useState6 } from "react";
430
-
431
- // src/components/FileUpload/FileUpload.module.css
432
- var FileUpload_default = {};
433
-
434
- // src/components/FileUpload/FileUpload.tsx
536
+ import { useRef, useState as useState7 } from "react";
435
537
  import { jsx as jsx11, jsxs as jsxs6 } from "react/jsx-runtime";
436
538
  var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
437
- const [isDragging, setIsDragging] = useState6(false);
438
- const [fileNames, setFileNames] = useState6([]);
539
+ const [isDragging, setIsDragging] = useState7(false);
540
+ const [isHovered, setIsHovered] = useState7(false);
541
+ const [fileNames, setFileNames] = useState7([]);
439
542
  const inputRef = useRef(null);
440
543
  const handleFiles = (list) => {
441
544
  setFileNames(Array.from(list).map((f) => f.name));
442
545
  onFileSelect == null ? void 0 : onFileSelect(list);
443
546
  };
547
+ const isActive = isDragging || isHovered;
444
548
  return /* @__PURE__ */ jsxs6(
445
549
  "div",
446
550
  {
447
- className: `${FileUpload_default.zone} ${isDragging ? FileUpload_default.dragging : ""} ${disabled ? FileUpload_default.disabled : ""}`,
448
551
  onClick: () => {
449
552
  var _a;
450
553
  return !disabled && ((_a = inputRef.current) == null ? void 0 : _a.click());
451
554
  },
555
+ onMouseEnter: () => !disabled && setIsHovered(true),
556
+ onMouseLeave: () => setIsHovered(false),
452
557
  onDragOver: (e) => {
453
558
  e.preventDefault();
454
559
  setIsDragging(true);
@@ -459,6 +564,20 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
459
564
  setIsDragging(false);
460
565
  if (!disabled && e.dataTransfer.files.length) handleFiles(e.dataTransfer.files);
461
566
  },
567
+ style: {
568
+ border: `2px dashed ${isActive ? "var(--ds-primary, #3b82f6)" : "var(--ds-border, #e2e8f0)"}`,
569
+ borderRadius: "0.5rem",
570
+ padding: "2rem",
571
+ display: "flex",
572
+ flexDirection: "column",
573
+ alignItems: "center",
574
+ gap: "0.5rem",
575
+ cursor: disabled ? "not-allowed" : "pointer",
576
+ backgroundColor: isActive ? "var(--ds-primary-50, #eff6ff)" : "var(--ds-muted, #f1f5f9)",
577
+ transition: "border-color 0.15s, background-color 0.15s",
578
+ textAlign: "center",
579
+ opacity: disabled ? 0.5 : 1
580
+ },
462
581
  children: [
463
582
  /* @__PURE__ */ jsx11(
464
583
  "input",
@@ -468,12 +587,12 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
468
587
  accept,
469
588
  multiple,
470
589
  disabled,
471
- className: FileUpload_default.input,
590
+ style: { display: "none" },
472
591
  onChange: (e) => e.target.files && handleFiles(e.target.files)
473
592
  }
474
593
  ),
475
- /* @__PURE__ */ jsx11(Upload, { size: 32, className: FileUpload_default.icon }),
476
- fileNames.length > 0 ? /* @__PURE__ */ jsx11("p", { className: FileUpload_default.fileName, children: fileNames.join(", ") }) : /* @__PURE__ */ jsxs6("p", { className: FileUpload_default.hint, children: [
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: [
477
596
  /* @__PURE__ */ jsx11("strong", { children: "Click to upload" }),
478
597
  " or drag and drop"
479
598
  ] })
@@ -481,65 +600,91 @@ var FileUpload = ({ accept, multiple, disabled, onFileSelect }) => {
481
600
  }
482
601
  );
483
602
  };
484
- var FileUpload_default2 = FileUpload;
485
-
486
- // src/components/Input/Input.module.css
487
- var Input_default = {};
603
+ var FileUpload_default = FileUpload;
488
604
 
489
605
  // src/components/Input/Input.tsx
490
- import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
606
+ import { Fragment as Fragment2, jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
607
+ var inputCSS = `
608
+ [data-ds-input]::placeholder { color: var(--ds-text-secondary, #64748b); }
609
+ [data-ds-input]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }
610
+ [data-ds-input]:disabled { opacity: 0.5; cursor: not-allowed; background-color: var(--ds-muted, #f1f5f9); }
611
+ [data-ds-input][data-error="true"]:focus { border-color: var(--ds-danger, #ef4444); box-shadow: 0 0 0 3px rgb(239 68 68 / 0.15); }
612
+ [data-ds-input][data-success="true"]:focus { border-color: var(--ds-success, #22c55e); box-shadow: 0 0 0 3px rgb(34 197 94 / 0.15); }
613
+ `;
491
614
  var Input = (_a) => {
492
- var _b = _a, {
493
- error,
494
- success,
495
- leftIcon,
496
- rightIcon,
497
- className
498
- } = _b, props = __objRest(_b, [
499
- "error",
500
- "success",
501
- "leftIcon",
502
- "rightIcon",
503
- "className"
504
- ]);
505
- const wrapperClasses = [
506
- Input_default.wrapper,
507
- error ? Input_default.error : "",
508
- success ? Input_default.success : "",
509
- leftIcon ? Input_default.hasLeft : "",
510
- rightIcon ? Input_default.hasRight : "",
511
- className != null ? className : ""
512
- ].filter(Boolean).join(" ");
513
- return /* @__PURE__ */ jsxs7("div", { className: wrapperClasses, children: [
514
- leftIcon && /* @__PURE__ */ jsx12("span", { className: Input_default.leftIcon, children: leftIcon }),
515
- /* @__PURE__ */ jsx12("input", __spreadValues({ className: Input_default.input }, props)),
516
- rightIcon && /* @__PURE__ */ jsx12("span", { className: Input_default.rightIcon, children: rightIcon })
615
+ 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: {
620
+ position: "absolute",
621
+ left: "0.625rem",
622
+ display: "flex",
623
+ alignItems: "center",
624
+ color: "var(--ds-text-secondary, #64748b)",
625
+ pointerEvents: "none"
626
+ }, children: leftIcon }),
627
+ /* @__PURE__ */ jsx12(
628
+ "input",
629
+ __spreadValues({
630
+ "data-ds-input": "",
631
+ "data-error": error ? "true" : void 0,
632
+ "data-success": success ? "true" : void 0,
633
+ style: __spreadValues({
634
+ width: "100%",
635
+ height: "2.25rem",
636
+ paddingTop: 0,
637
+ paddingBottom: 0,
638
+ paddingLeft: leftIcon ? "2.25rem" : "0.75rem",
639
+ paddingRight: rightIcon ? "2.25rem" : "0.75rem",
640
+ border: `1px solid ${error ? "var(--ds-danger, #ef4444)" : success ? "var(--ds-success, #22c55e)" : "var(--ds-border, #e2e8f0)"}`,
641
+ borderRadius: "0.375rem",
642
+ fontSize: "0.875rem",
643
+ backgroundColor: "var(--ds-card, #fff)",
644
+ color: "var(--ds-text-primary, #0f172a)",
645
+ fontFamily: "inherit",
646
+ transition: "border-color 0.15s, box-shadow 0.15s"
647
+ }, style)
648
+ }, props)
649
+ ),
650
+ rightIcon && /* @__PURE__ */ jsx12("span", { style: {
651
+ position: "absolute",
652
+ right: "0.625rem",
653
+ display: "flex",
654
+ alignItems: "center",
655
+ color: "var(--ds-text-secondary, #64748b)",
656
+ pointerEvents: "none"
657
+ }, children: rightIcon })
658
+ ] })
517
659
  ] });
518
660
  };
519
- var Input_default2 = Input;
520
-
521
- // src/components/Label/Label.module.css
522
- var Label_default = {};
661
+ var Input_default = Input;
523
662
 
524
663
  // src/components/Label/Label.tsx
525
664
  import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
526
665
  var Label = (_a) => {
527
- var _b = _a, { children, required, className } = _b, props = __objRest(_b, ["children", "required", "className"]);
528
- return /* @__PURE__ */ jsxs8("label", __spreadProps(__spreadValues({ className: `${Label_default.label} ${className != null ? className : ""}` }, props), { children: [
666
+ var _b = _a, { children, required, style } = _b, props = __objRest(_b, ["children", "required", "style"]);
667
+ return /* @__PURE__ */ jsxs8("label", __spreadProps(__spreadValues({ style: __spreadValues({
668
+ display: "block",
669
+ fontSize: "0.875rem",
670
+ fontWeight: 500,
671
+ color: "var(--ds-text-primary, #0f172a)",
672
+ marginBottom: "0.375rem"
673
+ }, style) }, props), { children: [
529
674
  children,
530
- required && /* @__PURE__ */ jsx13("span", { className: Label_default.required, children: "*" })
675
+ required && /* @__PURE__ */ jsx13("span", { style: { color: "var(--ds-danger, #ef4444)", marginLeft: "0.25rem" }, children: "*" })
531
676
  ] }));
532
677
  };
533
- var Label_default2 = Label;
678
+ var Label_default = Label;
534
679
 
535
680
  // src/components/PasswordInput/PasswordInput.tsx
536
681
  import { Eye, EyeOff } from "lucide-react";
537
- import { useState as useState7 } from "react";
682
+ import { useState as useState8 } from "react";
538
683
  import { jsx as jsx14 } from "react/jsx-runtime";
539
684
  var PasswordInput = (props) => {
540
- const [visible, setVisible] = useState7(false);
685
+ const [visible, setVisible] = useState8(false);
541
686
  return /* @__PURE__ */ jsx14(
542
- Input_default2,
687
+ Input_default,
543
688
  __spreadProps(__spreadValues({}, props), {
544
689
  type: visible ? "text" : "password",
545
690
  rightIcon: /* @__PURE__ */ jsx14(
@@ -557,9 +702,6 @@ var PasswordInput = (props) => {
557
702
  };
558
703
  var PasswordInput_default = PasswordInput;
559
704
 
560
- // src/components/Progress/Progress.module.css
561
- var Progress_default = {};
562
-
563
705
  // src/components/Progress/Progress.tsx
564
706
  import { jsx as jsx15 } from "react/jsx-runtime";
565
707
  var Progress = ({ value = 0 }) => {
@@ -567,24 +709,31 @@ var Progress = ({ value = 0 }) => {
567
709
  return /* @__PURE__ */ jsx15(
568
710
  "div",
569
711
  {
570
- className: Progress_default.track,
571
712
  role: "progressbar",
572
713
  "aria-valuenow": pct,
573
714
  "aria-valuemin": 0,
574
715
  "aria-valuemax": 100,
575
- children: /* @__PURE__ */ jsx15("div", { className: Progress_default.fill, style: { width: `${pct}%` } })
716
+ style: {
717
+ width: "100%",
718
+ height: "0.5rem",
719
+ backgroundColor: "var(--ds-border, #e2e8f0)",
720
+ borderRadius: "9999px",
721
+ overflow: "hidden"
722
+ },
723
+ children: /* @__PURE__ */ jsx15("div", { style: {
724
+ height: "100%",
725
+ width: `${pct}%`,
726
+ backgroundColor: "var(--ds-primary, #3b82f6)",
727
+ borderRadius: "9999px",
728
+ transition: "width 0.3s ease"
729
+ } })
576
730
  }
577
731
  );
578
732
  };
579
- var Progress_default2 = Progress;
580
-
581
- // src/components/RadioGroup/RadioGroup.tsx
582
- import { useState as useState8 } from "react";
583
-
584
- // src/components/RadioGroup/RadioGroup.module.css
585
- var RadioGroup_default = {};
733
+ var Progress_default = Progress;
586
734
 
587
735
  // src/components/RadioGroup/RadioGroup.tsx
736
+ import { useState as useState9 } from "react";
588
737
  import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
589
738
  var RadioGroup = ({
590
739
  options,
@@ -594,48 +743,65 @@ var RadioGroup = ({
594
743
  disabled,
595
744
  onChange
596
745
  }) => {
597
- const [internal, setInternal] = useState8(defaultValue);
746
+ const [internal, setInternal] = useState9(defaultValue);
598
747
  const selected = value !== void 0 ? value : internal;
599
748
  const handleChange = (val) => {
600
749
  if (disabled) return;
601
750
  setInternal(val);
602
751
  onChange == null ? void 0 : onChange(val);
603
752
  };
604
- return /* @__PURE__ */ jsx16("div", { className: RadioGroup_default.group, children: options.map((option) => /* @__PURE__ */ jsxs9(
605
- "label",
606
- {
607
- className: `${RadioGroup_default.item} ${disabled ? RadioGroup_default.disabled : ""}`,
608
- children: [
609
- /* @__PURE__ */ jsx16(
610
- "input",
611
- {
612
- type: "radio",
613
- name,
614
- value: option.value,
615
- checked: selected === option.value,
616
- disabled,
617
- onChange: () => handleChange(option.value),
618
- className: RadioGroup_default.input
619
- }
620
- ),
621
- /* @__PURE__ */ jsx16("span", { className: `${RadioGroup_default.dot} ${selected === option.value ? RadioGroup_default.checked : ""}`, children: selected === option.value && /* @__PURE__ */ jsx16("span", { className: RadioGroup_default.inner }) }),
622
- /* @__PURE__ */ jsx16("span", { className: RadioGroup_default.label, children: option.label })
623
- ]
624
- },
625
- option.value
626
- )) });
753
+ return /* @__PURE__ */ jsx16("div", { style: { display: "flex", flexDirection: "column", gap: "0.5rem" }, children: options.map((option) => {
754
+ const isSelected = selected === option.value;
755
+ return /* @__PURE__ */ jsxs9("label", { style: {
756
+ display: "inline-flex",
757
+ alignItems: "center",
758
+ gap: "0.5rem",
759
+ cursor: disabled ? "not-allowed" : "pointer",
760
+ userSelect: "none",
761
+ opacity: disabled ? 0.5 : 1
762
+ }, children: [
763
+ /* @__PURE__ */ jsx16(
764
+ "input",
765
+ {
766
+ type: "radio",
767
+ name,
768
+ value: option.value,
769
+ checked: isSelected,
770
+ disabled,
771
+ onChange: () => handleChange(option.value),
772
+ style: { position: "absolute", opacity: 0, width: 0, height: 0 }
773
+ }
774
+ ),
775
+ /* @__PURE__ */ jsx16("span", { style: {
776
+ width: "1.125rem",
777
+ height: "1.125rem",
778
+ borderRadius: "9999px",
779
+ border: `2px solid ${isSelected ? "var(--ds-primary, #3b82f6)" : "var(--ds-border, #e2e8f0)"}`,
780
+ display: "flex",
781
+ alignItems: "center",
782
+ justifyContent: "center",
783
+ flexShrink: 0,
784
+ backgroundColor: "var(--ds-card, #fff)",
785
+ transition: "border-color 0.15s"
786
+ }, children: isSelected && /* @__PURE__ */ jsx16("span", { style: {
787
+ width: "0.5rem",
788
+ height: "0.5rem",
789
+ borderRadius: "9999px",
790
+ backgroundColor: "var(--ds-primary, #3b82f6)"
791
+ } }) }),
792
+ /* @__PURE__ */ jsx16("span", { style: { fontSize: "0.875rem", color: "var(--ds-text-primary, #0f172a)" }, children: option.label })
793
+ ] }, option.value);
794
+ }) });
627
795
  };
628
- var RadioGroup_default2 = RadioGroup;
796
+ var RadioGroup_default = RadioGroup;
629
797
 
630
798
  // src/components/Select/Select.tsx
631
799
  import { Check as Check2, ChevronDown as ChevronDown2 } from "lucide-react";
632
- import { useEffect as useEffect2, useRef as useRef2, useState as useState9 } from "react";
633
-
634
- // src/components/Select/Select.module.css
635
- var Select_default = {};
636
-
637
- // src/components/Select/Select.tsx
638
- import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
800
+ 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";
802
+ var selectCSS = `
803
+ [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
+ `;
639
805
  var Select = ({
640
806
  options,
641
807
  value,
@@ -645,8 +811,9 @@ var Select = ({
645
811
  onChange
646
812
  }) => {
647
813
  var _a;
648
- const [internal, setInternal] = useState9(defaultValue);
649
- const [open, setOpen] = useState9(false);
814
+ const [internal, setInternal] = useState10(defaultValue);
815
+ const [open, setOpen] = useState10(false);
816
+ const [hoveredOption, setHoveredOption] = useState10(null);
650
817
  const ref = useRef2(null);
651
818
  const selected = value !== void 0 ? value : internal;
652
819
  const selectedLabel = (_a = options.find((o) => o.value === selected)) == null ? void 0 : _a.label;
@@ -655,66 +822,175 @@ var Select = ({
655
822
  setOpen(false);
656
823
  onChange == null ? void 0 : onChange(val);
657
824
  };
658
- useEffect2(() => {
825
+ useEffect(() => {
659
826
  const handleOutside = (e) => {
660
827
  if (ref.current && !ref.current.contains(e.target)) setOpen(false);
661
828
  };
662
829
  document.addEventListener("mousedown", handleOutside);
663
830
  return () => document.removeEventListener("mousedown", handleOutside);
664
831
  }, []);
665
- return /* @__PURE__ */ jsxs10("div", { ref, className: `${Select_default.wrapper} ${disabled ? Select_default.disabled : ""}`, children: [
666
- /* @__PURE__ */ jsxs10(
667
- "button",
668
- {
669
- type: "button",
670
- className: `${Select_default.trigger} ${open ? Select_default.open : ""}`,
671
- onClick: () => !disabled && setOpen((o) => !o),
672
- disabled,
673
- children: [
674
- /* @__PURE__ */ jsx17("span", { className: selectedLabel ? Select_default.value : Select_default.placeholder, children: selectedLabel != null ? selectedLabel : placeholder }),
675
- /* @__PURE__ */ jsx17(ChevronDown2, { size: 16, className: `${Select_default.chevron} ${open ? Select_default.chevronOpen : ""}` })
676
- ]
677
- }
678
- ),
679
- open && /* @__PURE__ */ jsx17("div", { className: Select_default.dropdown, children: options.map((option) => /* @__PURE__ */ jsxs10(
680
- "div",
681
- {
682
- className: `${Select_default.option} ${selected === option.value ? Select_default.selected : ""}`,
683
- onClick: () => handleSelect(option.value),
684
- children: [
685
- selected === option.value ? /* @__PURE__ */ jsx17(Check2, { size: 14, className: Select_default.checkIcon }) : /* @__PURE__ */ jsx17("span", { className: Select_default.checkSpacer }),
686
- option.label
687
- ]
688
- },
689
- option.value
690
- )) })
832
+ return /* @__PURE__ */ jsxs10(Fragment3, { children: [
833
+ /* @__PURE__ */ jsx17("style", { href: "ds-select", precedence: "low", children: selectCSS }),
834
+ /* @__PURE__ */ jsxs10("div", { ref, style: {
835
+ position: "relative",
836
+ width: "100%",
837
+ opacity: disabled ? 0.5 : 1,
838
+ pointerEvents: disabled ? "none" : void 0
839
+ }, children: [
840
+ /* @__PURE__ */ jsxs10(
841
+ "button",
842
+ {
843
+ type: "button",
844
+ "data-ds-select-trigger": "",
845
+ onClick: () => !disabled && setOpen((o) => !o),
846
+ disabled,
847
+ style: {
848
+ width: "100%",
849
+ height: "2.25rem",
850
+ padding: "0 0.75rem",
851
+ border: `1px solid ${open ? "var(--ds-primary, #3b82f6)" : "var(--ds-border, #e2e8f0)"}`,
852
+ borderRadius: "0.375rem",
853
+ fontSize: "0.875rem",
854
+ backgroundColor: "var(--ds-card, #fff)",
855
+ cursor: "pointer",
856
+ display: "flex",
857
+ alignItems: "center",
858
+ justifyContent: "space-between",
859
+ gap: "0.5rem",
860
+ boxShadow: open ? "0 0 0 3px rgb(59 130 246 / 0.15)" : "none",
861
+ transition: "border-color 0.15s, box-shadow 0.15s",
862
+ textAlign: "left",
863
+ fontFamily: "inherit"
864
+ },
865
+ 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(
868
+ ChevronDown2,
869
+ {
870
+ size: 16,
871
+ style: {
872
+ flexShrink: 0,
873
+ color: "var(--ds-text-secondary, #64748b)",
874
+ transition: "transform 0.15s",
875
+ transform: open ? "rotate(180deg)" : "rotate(0deg)"
876
+ }
877
+ }
878
+ )
879
+ ]
880
+ }
881
+ ),
882
+ open && /* @__PURE__ */ jsx17("div", { style: {
883
+ position: "absolute",
884
+ top: "calc(100% + 0.25rem)",
885
+ left: 0,
886
+ right: 0,
887
+ zIndex: 50,
888
+ backgroundColor: "var(--ds-card, #fff)",
889
+ border: "1px solid var(--ds-border, #e2e8f0)",
890
+ borderRadius: "0.375rem",
891
+ boxShadow: "0 10px 15px -3px rgb(0 0 0 / 0.1)",
892
+ overflow: "hidden"
893
+ }, children: options.map((option) => {
894
+ const isSelected = selected === option.value;
895
+ const isHovered = hoveredOption === option.value;
896
+ return /* @__PURE__ */ jsxs10(
897
+ "div",
898
+ {
899
+ onClick: () => handleSelect(option.value),
900
+ onMouseEnter: () => setHoveredOption(option.value),
901
+ onMouseLeave: () => setHoveredOption(null),
902
+ style: {
903
+ padding: "0.5rem 0.75rem",
904
+ fontSize: "0.875rem",
905
+ cursor: "pointer",
906
+ display: "flex",
907
+ alignItems: "center",
908
+ gap: "0.5rem",
909
+ color: "var(--ds-text-primary, #0f172a)",
910
+ backgroundColor: isSelected || isHovered ? "var(--ds-muted, #f1f5f9)" : "transparent",
911
+ fontWeight: isSelected ? 500 : void 0,
912
+ transition: "background-color 0.1s"
913
+ },
914
+ children: [
915
+ isSelected ? /* @__PURE__ */ jsx17(Check2, { size: 14, style: { color: "var(--ds-primary, #3b82f6)", flexShrink: 0 } }) : /* @__PURE__ */ jsx17("span", { style: { width: 14, flexShrink: 0 } }),
916
+ option.label
917
+ ]
918
+ },
919
+ option.value
920
+ );
921
+ }) })
922
+ ] })
691
923
  ] });
692
924
  };
693
- var Select_default2 = Select;
694
-
695
- // src/components/Skeleton/Skeleton.module.css
696
- var Skeleton_default = {};
925
+ var Select_default = Select;
697
926
 
698
927
  // src/components/Skeleton/Skeleton.tsx
699
- import { jsx as jsx18 } from "react/jsx-runtime";
700
- var Skeleton = ({ height = "1rem", width = "100%", circle = false }) => /* @__PURE__ */ jsx18(
701
- "div",
702
- {
703
- className: `${Skeleton_default.skeleton} ${circle ? Skeleton_default.circle : ""}`,
704
- style: { height, width },
705
- "aria-hidden": "true"
706
- }
707
- );
708
- var Skeleton_default2 = Skeleton;
709
-
710
- // src/components/Slider/Slider.tsx
711
- import { useState as useState10 } from "react";
712
-
713
- // src/components/Slider/Slider.module.css
714
- var Slider_default = {};
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: `
931
+ @keyframes ds-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
932
+ [data-ds-skeleton] { animation: ds-pulse 1.5s ease-in-out infinite; }
933
+ ` }),
934
+ /* @__PURE__ */ jsx18(
935
+ "div",
936
+ {
937
+ "data-ds-skeleton": "",
938
+ "aria-hidden": "true",
939
+ style: {
940
+ height,
941
+ width,
942
+ backgroundColor: "var(--ds-muted, #f1f5f9)",
943
+ borderRadius: circle ? "9999px" : "0.375rem"
944
+ }
945
+ }
946
+ )
947
+ ] });
948
+ var Skeleton_default = Skeleton;
715
949
 
716
950
  // src/components/Slider/Slider.tsx
717
- import { jsx as jsx19 } from "react/jsx-runtime";
951
+ import { useState as useState11 } from "react";
952
+ import { Fragment as Fragment5, jsx as jsx19, jsxs as jsxs12 } from "react/jsx-runtime";
953
+ var sliderCSS = `
954
+ [data-ds-slider] {
955
+ -webkit-appearance: none;
956
+ appearance: none;
957
+ width: 100%;
958
+ height: 0.375rem;
959
+ border-radius: 9999px;
960
+ outline: none;
961
+ cursor: pointer;
962
+ background: linear-gradient(
963
+ to right,
964
+ var(--ds-primary, #3b82f6) 0%,
965
+ var(--ds-primary, #3b82f6) var(--fill, 50%),
966
+ var(--ds-border, #e2e8f0) var(--fill, 50%),
967
+ var(--ds-border, #e2e8f0) 100%
968
+ );
969
+ }
970
+ [data-ds-slider]::-webkit-slider-thumb {
971
+ -webkit-appearance: none;
972
+ appearance: none;
973
+ width: 1.125rem;
974
+ height: 1.125rem;
975
+ border-radius: 9999px;
976
+ background-color: var(--ds-primary, #3b82f6);
977
+ cursor: pointer;
978
+ border: 2px solid #fff;
979
+ box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.2);
980
+ transition: transform 0.1s;
981
+ }
982
+ [data-ds-slider]::-webkit-slider-thumb:hover { transform: scale(1.2); }
983
+ [data-ds-slider]::-moz-range-thumb {
984
+ width: 1.125rem;
985
+ height: 1.125rem;
986
+ border-radius: 9999px;
987
+ background-color: var(--ds-primary, #3b82f6);
988
+ cursor: pointer;
989
+ border: 2px solid #fff;
990
+ box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.2);
991
+ }
992
+ [data-ds-slider]:disabled { cursor: not-allowed; }
993
+ `;
718
994
  var Slider = ({
719
995
  value,
720
996
  defaultValue = 50,
@@ -724,7 +1000,7 @@ var Slider = ({
724
1000
  disabled,
725
1001
  onChange
726
1002
  }) => {
727
- const [internal, setInternal] = useState10(defaultValue);
1003
+ const [internal, setInternal] = useState11(defaultValue);
728
1004
  const current = value !== void 0 ? value : internal;
729
1005
  const fill = `${(current - min) / (max - min) * 100}%`;
730
1006
  const handleChange = (e) => {
@@ -732,43 +1008,50 @@ var Slider = ({
732
1008
  setInternal(val);
733
1009
  onChange == null ? void 0 : onChange(val);
734
1010
  };
735
- return /* @__PURE__ */ jsx19("div", { className: `${Slider_default.wrapper} ${disabled ? Slider_default.disabled : ""}`, children: /* @__PURE__ */ jsx19(
736
- "input",
737
- {
738
- type: "range",
739
- min,
740
- max,
741
- step,
742
- value: current,
743
- disabled,
744
- onChange: handleChange,
745
- className: Slider_default.range,
746
- style: { "--fill": fill }
747
- }
748
- ) });
1011
+ return /* @__PURE__ */ jsxs12(Fragment5, { children: [
1012
+ /* @__PURE__ */ jsx19("style", { href: "ds-slider", precedence: "low", children: sliderCSS }),
1013
+ /* @__PURE__ */ jsx19("div", { style: {
1014
+ width: "100%",
1015
+ padding: "0.25rem 0",
1016
+ opacity: disabled ? 0.5 : 1
1017
+ }, children: /* @__PURE__ */ jsx19(
1018
+ "input",
1019
+ {
1020
+ type: "range",
1021
+ "data-ds-slider": "",
1022
+ min,
1023
+ max,
1024
+ step,
1025
+ value: current,
1026
+ disabled,
1027
+ onChange: handleChange,
1028
+ style: { "--fill": fill }
1029
+ }
1030
+ ) })
1031
+ ] });
749
1032
  };
750
- var Slider_default2 = Slider;
1033
+ var Slider_default = Slider;
751
1034
 
752
1035
  // src/components/Spinner/Spinner.tsx
753
1036
  import { Loader2 } from "lucide-react";
754
-
755
- // src/components/Spinner/Spinner.module.css
756
- var Spinner_default = {};
757
-
758
- // src/components/Spinner/Spinner.tsx
759
- import { jsx as jsx20 } from "react/jsx-runtime";
1037
+ import { Fragment as Fragment6, jsx as jsx20, jsxs as jsxs13 } from "react/jsx-runtime";
760
1038
  var sizePx = { sm: 16, md: 24, lg: 32 };
761
- var Spinner = ({ size = "md" }) => /* @__PURE__ */ jsx20(Loader2, { size: sizePx[size], className: Spinner_default.spinner, "aria-label": "Loading" });
762
- var Spinner_default2 = Spinner;
763
-
764
- // src/components/Switch/Switch.tsx
765
- import { useState as useState11 } from "react";
766
-
767
- // src/components/Switch/Switch.module.css
768
- var Switch_default = {};
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(
1042
+ Loader2,
1043
+ {
1044
+ size: sizePx[size],
1045
+ "aria-label": "Loading",
1046
+ style: { color: "var(--ds-primary, #3b82f6)", animation: "ds-spin 0.75s linear infinite" }
1047
+ }
1048
+ )
1049
+ ] });
1050
+ var Spinner_default = Spinner;
769
1051
 
770
1052
  // src/components/Switch/Switch.tsx
771
- import { jsx as jsx21, jsxs as jsxs11 } from "react/jsx-runtime";
1053
+ import { useState as useState12 } from "react";
1054
+ import { jsx as jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
772
1055
  var Switch = ({
773
1056
  label,
774
1057
  checked,
@@ -777,7 +1060,7 @@ var Switch = ({
777
1060
  id,
778
1061
  onChange
779
1062
  }) => {
780
- const [internal, setInternal] = useState11(defaultChecked);
1063
+ const [internal, setInternal] = useState12(defaultChecked);
781
1064
  const isOn = checked !== void 0 ? checked : internal;
782
1065
  const handleToggle = () => {
783
1066
  if (disabled) return;
@@ -785,7 +1068,14 @@ var Switch = ({
785
1068
  setInternal(next);
786
1069
  onChange == null ? void 0 : onChange(next);
787
1070
  };
788
- return /* @__PURE__ */ jsxs11("label", { className: `${Switch_default.container} ${disabled ? Switch_default.disabled : ""}`, htmlFor: id, children: [
1071
+ return /* @__PURE__ */ jsxs14("label", { htmlFor: id, style: {
1072
+ display: "inline-flex",
1073
+ alignItems: "center",
1074
+ gap: "0.625rem",
1075
+ cursor: disabled ? "not-allowed" : "pointer",
1076
+ userSelect: "none",
1077
+ opacity: disabled ? 0.5 : 1
1078
+ }, children: [
789
1079
  /* @__PURE__ */ jsx21(
790
1080
  "input",
791
1081
  {
@@ -794,103 +1084,254 @@ var Switch = ({
794
1084
  checked: isOn,
795
1085
  disabled,
796
1086
  onChange: handleToggle,
797
- className: Switch_default.input
1087
+ style: { position: "absolute", opacity: 0, width: 0, height: 0 }
798
1088
  }
799
1089
  ),
800
- /* @__PURE__ */ jsx21("span", { className: `${Switch_default.track} ${isOn ? Switch_default.on : ""}`, children: /* @__PURE__ */ jsx21("span", { className: `${Switch_default.thumb} ${isOn ? Switch_default.thumbOn : ""}` }) }),
801
- label && /* @__PURE__ */ jsx21("span", { className: Switch_default.label, children: label })
1090
+ /* @__PURE__ */ jsx21("span", { style: {
1091
+ width: "2.75rem",
1092
+ height: "1.5rem",
1093
+ borderRadius: "9999px",
1094
+ backgroundColor: isOn ? "var(--ds-primary, #3b82f6)" : "var(--ds-border, #e2e8f0)",
1095
+ position: "relative",
1096
+ transition: "background-color 0.2s",
1097
+ flexShrink: 0
1098
+ }, children: /* @__PURE__ */ jsx21("span", { style: {
1099
+ position: "absolute",
1100
+ top: "0.175rem",
1101
+ left: "0.175rem",
1102
+ width: "1.15rem",
1103
+ height: "1.15rem",
1104
+ borderRadius: "9999px",
1105
+ backgroundColor: "#fff",
1106
+ boxShadow: "0 1px 3px 0 rgb(0 0 0 / 0.15)",
1107
+ transition: "transform 0.2s",
1108
+ transform: isOn ? "translateX(1.25rem)" : "translateX(0)"
1109
+ } }) }),
1110
+ label && /* @__PURE__ */ jsx21("span", { style: { fontSize: "0.875rem", color: "var(--ds-text-primary, #0f172a)" }, children: label })
802
1111
  ] });
803
1112
  };
804
- var Switch_default2 = Switch;
805
-
806
- // src/components/Table/Table.module.css
807
- var Table_default = {};
1113
+ var Switch_default = Switch;
808
1114
 
809
1115
  // src/components/Table/Table.tsx
810
- import { jsx as jsx22 } from "react/jsx-runtime";
1116
+ import { Fragment as Fragment7, jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
1117
+ var tableCSS = `
1118
+ [data-ds-table-row]:hover [data-ds-table-cell] { background-color: var(--ds-muted, #f1f5f9); }
1119
+ `;
811
1120
  var Table = (_a) => {
812
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
813
- return /* @__PURE__ */ jsx22("div", { className: Table_default.wrapper, children: /* @__PURE__ */ jsx22("table", __spreadValues({ className: `${Table_default.table}${className ? ` ${className}` : ""}` }, props)) });
1121
+ 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: {
1125
+ width: "100%",
1126
+ overflowX: "auto",
1127
+ border: "1px solid var(--ds-border, #e2e8f0)",
1128
+ borderRadius: "0.5rem"
1129
+ }, children: /* @__PURE__ */ jsx22("table", __spreadValues({ style: __spreadValues({
1130
+ width: "100%",
1131
+ borderCollapse: "collapse",
1132
+ fontSize: "0.875rem"
1133
+ }, style) }, props)) })
1134
+ ] });
814
1135
  };
815
1136
  var TableHead = (props) => /* @__PURE__ */ jsx22("thead", __spreadValues({}, props));
816
1137
  var TableBody = (props) => /* @__PURE__ */ jsx22("tbody", __spreadValues({}, props));
817
1138
  var TableRow = (_a) => {
818
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
819
- return /* @__PURE__ */ jsx22("tr", __spreadValues({ className: `${Table_default.row}${className ? ` ${className}` : ""}` }, props));
1139
+ var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
1140
+ return /* @__PURE__ */ jsx22("tr", __spreadValues({ "data-ds-table-row": "", style }, props));
820
1141
  };
821
1142
  var TableHeader = (_a) => {
822
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
823
- return /* @__PURE__ */ jsx22("th", __spreadValues({ className: `${Table_default.th}${className ? ` ${className}` : ""}` }, props));
1143
+ var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
1144
+ return /* @__PURE__ */ jsx22("th", __spreadValues({ style: __spreadValues({
1145
+ padding: "0.75rem 1rem",
1146
+ textAlign: "left",
1147
+ fontWeight: 500,
1148
+ color: "var(--ds-text-secondary, #64748b)",
1149
+ backgroundColor: "var(--ds-muted, #f1f5f9)",
1150
+ borderBottom: "1px solid var(--ds-border, #e2e8f0)",
1151
+ whiteSpace: "nowrap"
1152
+ }, style) }, props));
824
1153
  };
825
1154
  var TableCell = (_a) => {
826
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
827
- return /* @__PURE__ */ jsx22("td", __spreadValues({ className: `${Table_default.td}${className ? ` ${className}` : ""}` }, props));
1155
+ var _b = _a, { style } = _b, props = __objRest(_b, ["style"]);
1156
+ return /* @__PURE__ */ jsx22(
1157
+ "td",
1158
+ __spreadValues({
1159
+ "data-ds-table-cell": "",
1160
+ style: __spreadValues({
1161
+ padding: "0.75rem 1rem",
1162
+ borderBottom: "1px solid var(--ds-border, #e2e8f0)",
1163
+ color: "var(--ds-text-primary, #0f172a)",
1164
+ transition: "background-color 0.1s"
1165
+ }, style)
1166
+ }, props)
1167
+ );
828
1168
  };
829
1169
 
830
1170
  // src/components/Tabs/Tabs.tsx
831
- import { useState as useState12 } from "react";
832
-
833
- // src/components/Tabs/Tabs.module.css
834
- var Tabs_default = {};
835
-
836
- // src/components/Tabs/Tabs.tsx
837
- import { jsx as jsx23, jsxs as jsxs12 } from "react/jsx-runtime";
1171
+ import { useState as useState13 } from "react";
1172
+ import { jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
838
1173
  var Tabs = ({ tabs, defaultValue }) => {
839
1174
  var _a, _b;
840
- const [active, setActive] = useState12((_b = defaultValue != null ? defaultValue : (_a = tabs[0]) == null ? void 0 : _a.value) != null ? _b : "");
1175
+ const [active, setActive] = useState13((_b = defaultValue != null ? defaultValue : (_a = tabs[0]) == null ? void 0 : _a.value) != null ? _b : "");
1176
+ const [hovered, setHovered] = useState13(null);
841
1177
  const activeTab = tabs.find((t) => t.value === active);
842
- return /* @__PURE__ */ jsxs12("div", { className: Tabs_default.root, children: [
843
- /* @__PURE__ */ jsx23("div", { className: Tabs_default.list, role: "tablist", children: tabs.map((tab) => /* @__PURE__ */ jsxs12(
844
- "button",
845
- {
846
- role: "tab",
847
- "aria-selected": active === tab.value,
848
- className: `${Tabs_default.trigger} ${active === tab.value ? Tabs_default.active : ""}`,
849
- onClick: () => setActive(tab.value),
850
- children: [
851
- tab.icon && /* @__PURE__ */ jsx23("span", { className: Tabs_default["trigger-icon"], children: tab.icon }),
852
- tab.label
853
- ]
854
- },
855
- tab.value
856
- )) }),
857
- /* @__PURE__ */ jsx23("div", { className: Tabs_default.content, role: "tabpanel", children: activeTab == null ? void 0 : activeTab.content })
1178
+ return /* @__PURE__ */ jsxs16("div", { style: { display: "flex", flexDirection: "column" }, children: [
1179
+ /* @__PURE__ */ jsx23("div", { role: "tablist", style: {
1180
+ display: "inline-flex",
1181
+ backgroundColor: "var(--ds-muted, #f1f5f9)",
1182
+ borderRadius: "0.5rem",
1183
+ padding: "0.25rem",
1184
+ gap: "0.125rem"
1185
+ }, children: tabs.map((tab) => {
1186
+ const isActive = active === tab.value;
1187
+ const isHovered = hovered === tab.value;
1188
+ return /* @__PURE__ */ jsxs16(
1189
+ "button",
1190
+ {
1191
+ role: "tab",
1192
+ "aria-selected": isActive,
1193
+ onClick: () => setActive(tab.value),
1194
+ onMouseEnter: () => setHovered(tab.value),
1195
+ onMouseLeave: () => setHovered(null),
1196
+ style: {
1197
+ display: "inline-flex",
1198
+ alignItems: "center",
1199
+ gap: "0.375rem",
1200
+ padding: "0.375rem 0.75rem",
1201
+ fontSize: "0.875rem",
1202
+ fontWeight: 500,
1203
+ borderRadius: "0.375rem",
1204
+ background: isActive ? "var(--ds-card, #ffffff)" : "transparent",
1205
+ border: "none",
1206
+ cursor: "pointer",
1207
+ color: isActive || isHovered ? "var(--ds-text-primary, #0f172a)" : "var(--ds-text-secondary, #64748b)",
1208
+ boxShadow: isActive ? "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)" : "none",
1209
+ transition: "color 0.15s, background-color 0.15s, box-shadow 0.15s",
1210
+ whiteSpace: "nowrap"
1211
+ },
1212
+ children: [
1213
+ tab.icon && /* @__PURE__ */ jsx23("span", { style: { display: "flex", alignItems: "center" }, children: tab.icon }),
1214
+ tab.label
1215
+ ]
1216
+ },
1217
+ tab.value
1218
+ );
1219
+ }) }),
1220
+ /* @__PURE__ */ jsx23("div", { role: "tabpanel", style: {
1221
+ paddingTop: "1rem",
1222
+ fontSize: "0.875rem",
1223
+ color: "var(--ds-text-secondary, #64748b)"
1224
+ }, children: activeTab == null ? void 0 : activeTab.content })
858
1225
  ] });
859
1226
  };
860
- var Tabs_default2 = Tabs;
861
-
862
- // src/components/Textarea/Textarea.module.css
863
- var Textarea_default = {};
1227
+ var Tabs_default = Tabs;
864
1228
 
865
1229
  // src/components/Textarea/Textarea.tsx
866
- import { jsx as jsx24 } from "react/jsx-runtime";
1230
+ import { Fragment as Fragment8, jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
1231
+ var textareaCSS = `
1232
+ [data-ds-textarea]::placeholder { color: var(--ds-text-secondary, #64748b); }
1233
+ [data-ds-textarea]:focus { outline: none; border-color: var(--ds-primary, #3b82f6); box-shadow: 0 0 0 3px rgb(59 130 246 / 0.15); }
1234
+ [data-ds-textarea]:disabled { opacity: 0.5; cursor: not-allowed; background-color: var(--ds-muted, #f1f5f9); }
1235
+ [data-ds-textarea][data-error="true"] { border-color: var(--ds-danger, #ef4444); }
1236
+ [data-ds-textarea][data-error="true"]:focus { border-color: var(--ds-danger, #ef4444); box-shadow: 0 0 0 3px rgb(239 68 68 / 0.15); }
1237
+ `;
867
1238
  var Textarea = (_a) => {
868
- var _b = _a, { error, className } = _b, props = __objRest(_b, ["error", "className"]);
869
- const classes = [
870
- Textarea_default.textarea,
871
- error ? Textarea_default.error : "",
872
- className != null ? className : ""
873
- ].filter(Boolean).join(" ");
874
- return /* @__PURE__ */ jsx24("textarea", __spreadValues({ className: classes }, props));
875
- };
876
- var Textarea_default2 = Textarea;
877
-
878
- // src/components/Tooltip/Tooltip.module.css
879
- var Tooltip_default = {};
1239
+ 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(
1243
+ "textarea",
1244
+ __spreadValues({
1245
+ "data-ds-textarea": "",
1246
+ "data-error": error ? "true" : void 0,
1247
+ style: __spreadValues({
1248
+ width: "100%",
1249
+ padding: "0.5rem 0.75rem",
1250
+ border: `1px solid ${error ? "var(--ds-danger, #ef4444)" : "var(--ds-border, #e2e8f0)"}`,
1251
+ borderRadius: "0.375rem",
1252
+ fontSize: "0.875rem",
1253
+ backgroundColor: "var(--ds-card, #fff)",
1254
+ color: "var(--ds-text-primary, #0f172a)",
1255
+ fontFamily: "inherit",
1256
+ resize: "vertical",
1257
+ transition: "border-color 0.15s, box-shadow 0.15s",
1258
+ minHeight: "6rem",
1259
+ boxSizing: "border-box"
1260
+ }, style)
1261
+ }, props)
1262
+ )
1263
+ ] });
1264
+ };
1265
+ var Textarea_default = Textarea;
880
1266
 
881
1267
  // src/components/Tooltip/Tooltip.tsx
882
- import { jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
883
- var Tooltip = ({ content, children, position = "top" }) => /* @__PURE__ */ jsxs13("span", { className: Tooltip_default.wrapper, children: [
884
- children,
885
- /* @__PURE__ */ jsx25("span", { className: `${Tooltip_default.tooltip} ${Tooltip_default[position]}`, role: "tooltip", children: content })
886
- ] });
887
- var Tooltip_default2 = Tooltip;
1268
+ import { useState as useState14 } from "react";
1269
+ import { Fragment as Fragment9, jsx as jsx25, jsxs as jsxs18 } from "react/jsx-runtime";
1270
+ var positionStyle = {
1271
+ top: { bottom: "calc(100% + 8px)", left: "50%", transform: "translateX(-50%)" },
1272
+ bottom: { top: "calc(100% + 8px)", left: "50%", transform: "translateX(-50%)" },
1273
+ left: { right: "calc(100% + 8px)", top: "50%", transform: "translateY(-50%)" },
1274
+ right: { left: "calc(100% + 8px)", top: "50%", transform: "translateY(-50%)" }
1275
+ };
1276
+ var tooltipCSS = `
1277
+ [data-ds-tt]::before {
1278
+ content: '';
1279
+ position: absolute;
1280
+ border: 5px solid transparent;
1281
+ }
1282
+ [data-ds-tt="top"]::before { top: 100%; left: 50%; transform: translateX(-50%); border-top-color: var(--ds-tooltip-bg, #0f172a); }
1283
+ [data-ds-tt="bottom"]::before { bottom: 100%; left: 50%; transform: translateX(-50%); border-bottom-color: var(--ds-tooltip-bg, #0f172a); }
1284
+ [data-ds-tt="left"]::before { left: 100%; top: 50%; transform: translateY(-50%); border-left-color: var(--ds-tooltip-bg, #0f172a); }
1285
+ [data-ds-tt="right"]::before { right: 100%; top: 50%; transform: translateY(-50%); border-right-color: var(--ds-tooltip-bg, #0f172a); }
1286
+ `;
1287
+ var Tooltip = ({ content, children, position = "top" }) => {
1288
+ 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(
1292
+ "span",
1293
+ {
1294
+ style: { position: "relative", display: "inline-flex" },
1295
+ onMouseEnter: () => setVisible(true),
1296
+ onMouseLeave: () => setVisible(false),
1297
+ onFocus: () => setVisible(true),
1298
+ onBlur: () => setVisible(false),
1299
+ children: [
1300
+ children,
1301
+ /* @__PURE__ */ jsx25(
1302
+ "span",
1303
+ {
1304
+ role: "tooltip",
1305
+ "data-ds-tt": position,
1306
+ style: __spreadValues({
1307
+ position: "absolute",
1308
+ zIndex: 50,
1309
+ padding: "0.375rem 0.625rem",
1310
+ backgroundColor: "var(--ds-tooltip-bg, #0f172a)",
1311
+ color: "var(--ds-tooltip-text, #ffffff)",
1312
+ fontSize: "0.75rem",
1313
+ lineHeight: 1.4,
1314
+ borderRadius: "0.375rem",
1315
+ whiteSpace: "nowrap",
1316
+ pointerEvents: "none",
1317
+ opacity: visible ? 1 : 0,
1318
+ transition: "opacity 0.15s"
1319
+ }, positionStyle[position]),
1320
+ children: content
1321
+ }
1322
+ )
1323
+ ]
1324
+ }
1325
+ )
1326
+ ] });
1327
+ };
1328
+ var Tooltip_default = Tooltip;
888
1329
  export {
889
1330
  Accordion_default as Accordion,
890
- Alert_default2 as Alert,
891
- Avatar_default2 as Avatar,
892
- Badge_default2 as Badge,
893
- Breadcrumb_default2 as Breadcrumb,
1331
+ Alert_default as Alert,
1332
+ Avatar_default as Avatar,
1333
+ Badge_default as Badge,
1334
+ Breadcrumb_default as Breadcrumb,
894
1335
  Button_default as Button,
895
1336
  Card,
896
1337
  CardContent,
@@ -898,29 +1339,29 @@ export {
898
1339
  CardFooter,
899
1340
  CardHeader,
900
1341
  CardTitle,
901
- Checkbox_default2 as Checkbox,
902
- CopyButton_default2 as CopyButton,
903
- FileUpload_default2 as FileUpload,
904
- Input_default2 as Input,
905
- Label_default2 as Label,
1342
+ Checkbox_default as Checkbox,
1343
+ CopyButton_default as CopyButton,
1344
+ FileUpload_default as FileUpload,
1345
+ Input_default as Input,
1346
+ Label_default as Label,
906
1347
  PasswordInput_default as PasswordInput,
907
- Progress_default2 as Progress,
908
- RadioGroup_default2 as RadioGroup,
909
- Select_default2 as Select,
910
- Skeleton_default2 as Skeleton,
911
- Slider_default2 as Slider,
912
- Spinner_default2 as Spinner,
913
- Switch_default2 as Switch,
1348
+ Progress_default as Progress,
1349
+ RadioGroup_default as RadioGroup,
1350
+ Select_default as Select,
1351
+ Skeleton_default as Skeleton,
1352
+ Slider_default as Slider,
1353
+ Spinner_default as Spinner,
1354
+ Switch_default as Switch,
914
1355
  Table,
915
1356
  TableBody,
916
1357
  TableCell,
917
1358
  TableHead,
918
1359
  TableHeader,
919
1360
  TableRow,
920
- Tabs_default2 as Tabs,
921
- Textarea_default2 as Textarea,
1361
+ Tabs_default as Tabs,
1362
+ Textarea_default as Textarea,
922
1363
  ThemeProvider,
923
- Tooltip_default2 as Tooltip,
1364
+ Tooltip_default as Tooltip,
924
1365
  useTheme
925
1366
  };
926
1367
  //# sourceMappingURL=index.js.map