@mirror-physics/fractal-ui 0.2.0-next.30 → 0.2.0-next.32

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.cjs CHANGED
@@ -34,6 +34,7 @@ __export(index_exports, {
34
34
  AlertDescription: () => AlertDescription,
35
35
  AlertGhost: () => AlertGhost,
36
36
  AlertTitle: () => AlertTitle,
37
+ Breadcrumbs: () => Breadcrumbs,
37
38
  Button: () => Button,
38
39
  ButtonGhost: () => ButtonGhost,
39
40
  Card: () => Card,
@@ -269,44 +270,65 @@ var Button = React.forwardRef(
269
270
  );
270
271
  Button.displayName = "Button";
271
272
 
272
- // src/components/Card/Card.tsx
273
- var React2 = __toESM(require("react"), 1);
273
+ // src/components/Breadcrumbs/Breadcrumbs.tsx
274
274
  var import_fractal_icons = require("@mirror-physics/fractal-icons");
275
275
  var import_jsx_runtime2 = require("react/jsx-runtime");
276
+ function Breadcrumbs({
277
+ items,
278
+ ariaLabel = "Breadcrumbs",
279
+ separator = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_fractal_icons.ChevronRight, { "aria-hidden": "true", size: 14 }),
280
+ className,
281
+ ...props
282
+ }) {
283
+ if (items.length === 0) return null;
284
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("nav", { "aria-label": ariaLabel, className: cn("fractal-breadcrumbs", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("ol", { className: "fractal-breadcrumbs__list", children: items.map((item, index) => {
285
+ const isCurrent = index === items.length - 1;
286
+ const content = isCurrent ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { "aria-current": "page", className: "fractal-breadcrumbs__current", children: item.label }) : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("a", { className: "fractal-breadcrumbs__link", href: item.href ?? "#", onClick: item.onClick, children: item.label });
287
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("li", { className: "fractal-breadcrumbs__item", children: [
288
+ index > 0 && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { "aria-hidden": "true", className: "fractal-breadcrumbs__separator", children: separator }),
289
+ content
290
+ ] }, index);
291
+ }) }) });
292
+ }
293
+
294
+ // src/components/Card/Card.tsx
295
+ var React2 = __toESM(require("react"), 1);
296
+ var import_fractal_icons2 = require("@mirror-physics/fractal-icons");
297
+ var import_jsx_runtime3 = require("react/jsx-runtime");
276
298
  var Card = React2.forwardRef(
277
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { ref, className: cn("fractal-card", className), ...props })
299
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { ref, className: cn("fractal-card", className), ...props })
278
300
  );
279
301
  Card.displayName = "Card";
280
302
  var CardHeader = React2.forwardRef(
281
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { ref, className: cn("fractal-card-header", className), ...props })
303
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { ref, className: cn("fractal-card-header", className), ...props })
282
304
  );
283
305
  CardHeader.displayName = "CardHeader";
284
306
  var CardTitle = React2.forwardRef(
285
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("h3", { ref, className: cn("fractal-card-title", className), ...props })
307
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h3", { ref, className: cn("fractal-card-title", className), ...props })
286
308
  );
287
309
  CardTitle.displayName = "CardTitle";
288
310
  var CardDescription = React2.forwardRef(
289
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { ref, className: cn("fractal-card-description", className), ...props })
311
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { ref, className: cn("fractal-card-description", className), ...props })
290
312
  );
291
313
  CardDescription.displayName = "CardDescription";
292
314
  var CardContent = React2.forwardRef(
293
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { ref, className: cn("fractal-card-content", className), ...props })
315
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { ref, className: cn("fractal-card-content", className), ...props })
294
316
  );
295
317
  CardContent.displayName = "CardContent";
296
318
  var CardFooter = React2.forwardRef(
297
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { ref, className: cn("fractal-card-footer", className), ...props })
319
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { ref, className: cn("fractal-card-footer", className), ...props })
298
320
  );
299
321
  CardFooter.displayName = "CardFooter";
300
322
  var FeatureCard = React2.forwardRef(
301
- ({ icon, title, description, className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { ref, className: cn("fractal-feature-card", className), ...props, children: [
302
- icon && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "fractal-feature-card__icon", children: icon }),
303
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("h3", { className: "fractal-feature-card__title", children: title }),
304
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "fractal-feature-card__description", children: description })
323
+ ({ icon, title, description, className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { ref, className: cn("fractal-feature-card", className), ...props, children: [
324
+ icon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "fractal-feature-card__icon", children: icon }),
325
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h3", { className: "fractal-feature-card__title", children: title }),
326
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "fractal-feature-card__description", children: description })
305
327
  ] })
306
328
  );
307
329
  FeatureCard.displayName = "FeatureCard";
308
330
  var FolderCard = React2.forwardRef(
309
- ({ name, sessionCount, selected, className, onClick, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
331
+ ({ name, sessionCount, selected, className, onClick, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
310
332
  "div",
311
333
  {
312
334
  ref,
@@ -322,11 +344,11 @@ var FolderCard = React2.forwardRef(
322
344
  className: cn("fractal-folder-card", selected && "fractal-folder-card--selected", className),
323
345
  ...props,
324
346
  children: [
325
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "fractal-folder-card__header", children: [
326
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_fractal_icons.Folder, { size: 16, className: "fractal-folder-card__icon", "aria-hidden": true }),
327
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "fractal-folder-card__name", children: name })
347
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "fractal-folder-card__header", children: [
348
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_fractal_icons2.Folder, { size: 16, className: "fractal-folder-card__icon", "aria-hidden": true }),
349
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "fractal-folder-card__name", children: name })
328
350
  ] }),
329
- sessionCount !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "fractal-folder-card__footer", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("span", { className: "fractal-folder-card__sessions", children: [
351
+ sessionCount !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "fractal-folder-card__footer", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "fractal-folder-card__sessions", children: [
330
352
  sessionCount,
331
353
  " ",
332
354
  sessionCount === 1 ? "session" : "sessions"
@@ -339,7 +361,7 @@ FolderCard.displayName = "FolderCard";
339
361
 
340
362
  // src/components/PromptCard/PromptCard.tsx
341
363
  var React3 = __toESM(require("react"), 1);
342
- var import_jsx_runtime3 = require("react/jsx-runtime");
364
+ var import_jsx_runtime4 = require("react/jsx-runtime");
343
365
  var titleToPrompt = (title) => typeof title === "string" || typeof title === "number" ? String(title) : "";
344
366
  var PromptCard = React3.forwardRef(
345
367
  ({
@@ -360,7 +382,7 @@ var PromptCard = React3.forwardRef(
360
382
  onPromptSelect?.(prompt ?? titleToPrompt(title));
361
383
  }
362
384
  };
363
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
385
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
364
386
  "button",
365
387
  {
366
388
  ref,
@@ -375,8 +397,8 @@ var PromptCard = React3.forwardRef(
375
397
  onClick: handleClick,
376
398
  ...props,
377
399
  children: [
378
- icon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "fractal-prompt-card__icon", "aria-hidden": "true", children: icon }),
379
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "fractal-prompt-card__title", children: title })
400
+ icon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "fractal-prompt-card__icon", "aria-hidden": "true", children: icon }),
401
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "fractal-prompt-card__title", children: title })
380
402
  ]
381
403
  }
382
404
  );
@@ -384,7 +406,7 @@ var PromptCard = React3.forwardRef(
384
406
  );
385
407
  PromptCard.displayName = "PromptCard";
386
408
  var PromptGrid = React3.forwardRef(
387
- ({ compact, padded, className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
409
+ ({ compact, padded, className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
388
410
  "div",
389
411
  {
390
412
  ref,
@@ -402,9 +424,9 @@ PromptGrid.displayName = "PromptGrid";
402
424
 
403
425
  // src/components/Input/Input.tsx
404
426
  var React4 = __toESM(require("react"), 1);
405
- var import_jsx_runtime4 = require("react/jsx-runtime");
427
+ var import_jsx_runtime5 = require("react/jsx-runtime");
406
428
  var Input = React4.forwardRef(
407
- ({ className, type, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
429
+ ({ className, type, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
408
430
  "input",
409
431
  {
410
432
  type,
@@ -418,9 +440,9 @@ Input.displayName = "Input";
418
440
 
419
441
  // src/components/Label/Label.tsx
420
442
  var React5 = __toESM(require("react"), 1);
421
- var import_jsx_runtime5 = require("react/jsx-runtime");
443
+ var import_jsx_runtime6 = require("react/jsx-runtime");
422
444
  var Label = React5.forwardRef(
423
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
445
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
424
446
  "label",
425
447
  {
426
448
  ref,
@@ -433,19 +455,19 @@ Label.displayName = "Label";
433
455
 
434
456
  // src/components/Alert/Alert.tsx
435
457
  var React6 = __toESM(require("react"), 1);
436
- var import_fractal_icons2 = require("@mirror-physics/fractal-icons");
437
- var import_jsx_runtime6 = require("react/jsx-runtime");
458
+ var import_fractal_icons3 = require("@mirror-physics/fractal-icons");
459
+ var import_jsx_runtime7 = require("react/jsx-runtime");
438
460
  var defaultIcons = {
439
- default: import_fractal_icons2.CircleInfo,
440
- info: import_fractal_icons2.CircleInfo,
441
- success: import_fractal_icons2.CircleCheck,
442
- warning: import_fractal_icons2.Warning,
443
- error: import_fractal_icons2.CircleClose
461
+ default: import_fractal_icons3.CircleInfo,
462
+ info: import_fractal_icons3.CircleInfo,
463
+ success: import_fractal_icons3.CircleCheck,
464
+ warning: import_fractal_icons3.Warning,
465
+ error: import_fractal_icons3.CircleClose
444
466
  };
445
467
  var Alert = React6.forwardRef(
446
468
  ({ className, variant = "default", icon, children, ...props }, ref) => {
447
469
  const DefaultIcon = defaultIcons[variant];
448
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
470
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
449
471
  "div",
450
472
  {
451
473
  ref,
@@ -453,8 +475,8 @@ var Alert = React6.forwardRef(
453
475
  className: cn("fractal-alert", `fractal-alert--${variant}`, className),
454
476
  ...props,
455
477
  children: [
456
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "fractal-alert-icon", "aria-hidden": true, children: icon ?? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DefaultIcon, { size: 18 }) }),
457
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "fractal-alert-content", children })
478
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "fractal-alert-icon", "aria-hidden": true, children: icon ?? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(DefaultIcon, { size: 18 }) }),
479
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "fractal-alert-content", children })
458
480
  ]
459
481
  }
460
482
  );
@@ -462,18 +484,18 @@ var Alert = React6.forwardRef(
462
484
  );
463
485
  Alert.displayName = "Alert";
464
486
  var AlertTitle = React6.forwardRef(
465
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h5", { ref, className: cn("fractal-alert-title", className), ...props })
487
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h5", { ref, className: cn("fractal-alert-title", className), ...props })
466
488
  );
467
489
  AlertTitle.displayName = "AlertTitle";
468
490
  var AlertDescription = React6.forwardRef(
469
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { ref, className: cn("fractal-alert-description", className), ...props })
491
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { ref, className: cn("fractal-alert-description", className), ...props })
470
492
  );
471
493
  AlertDescription.displayName = "AlertDescription";
472
494
 
473
495
  // src/components/Toggle/Toggle.tsx
474
- var import_jsx_runtime7 = require("react/jsx-runtime");
496
+ var import_jsx_runtime8 = require("react/jsx-runtime");
475
497
  function Toggle({ checked, onChange, label, className }) {
476
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
498
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
477
499
  "button",
478
500
  {
479
501
  type: "button",
@@ -482,8 +504,8 @@ function Toggle({ checked, onChange, label, className }) {
482
504
  className: cn("fractal-toggle", className),
483
505
  onClick: () => onChange(!checked),
484
506
  children: [
485
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: cn("fractal-toggle-track", checked && "fractal-toggle-track--checked"), children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: cn("fractal-toggle-thumb", checked && "fractal-toggle-thumb--checked") }) }),
486
- label && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "fractal-toggle-label", children: label })
507
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: cn("fractal-toggle-track", checked && "fractal-toggle-track--checked"), children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: cn("fractal-toggle-thumb", checked && "fractal-toggle-thumb--checked") }) }),
508
+ label && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "fractal-toggle-label", children: label })
487
509
  ]
488
510
  }
489
511
  );
@@ -544,7 +566,7 @@ function useEscapeDismiss(priority, handler, enabled = true) {
544
566
 
545
567
  // src/components/UILoader/UILoader.tsx
546
568
  var import_react2 = require("react");
547
- var import_jsx_runtime8 = require("react/jsx-runtime");
569
+ var import_jsx_runtime9 = require("react/jsx-runtime");
548
570
  var LEFT = "M0 53C0 51 1.6 49.5 3.6 49.5h16.5c1 0 1.9.4 2.5 1L42.1 69.6c.7.7 1.1 1.6 1.1 2.5v16.2c0 2-1.6 3.5-3.6 3.5H23.1c-1 0-1.9-.4-2.5-1L1.1 71.7C.4 71 0 70.1 0 69.2V53Z";
549
571
  var CENTER = "M0 3.5C0 1.6 1.6 0 3.6 0h16.5c1 0 1.9.4 2.5 1L92.5 69.6c.7.7 1 1.6 1 2.5v16.2c0 2-1.6 3.5-3.6 3.5H73.4c-1 0-1.9-.4-2.5-1L1.1 22.2C.4 21.6 0 20.7 0 19.7V3.5Z";
550
572
  var RIGHT = "M50.4 3.5C50.4 1.6 52 0 54 0h16.5c1 0 1.9.4 2.5 1l69.8 68.6c.7.7 1.1 1.6 1.1 2.5v16.2c0 2-1.6 3.5-3.6 3.5h-16.5c-1 0-1.9-.4-2.5-1L51.4 22.2c-.7-.6-1-1.5-1-2.5V3.5Z";
@@ -553,7 +575,7 @@ function UILoader({ size = 48, tone = "neutral", className, style, label = "Load
553
575
  const clipId = `fractal-ui-loader-clip-${rawId}`;
554
576
  const gradientId = `fractal-ui-loader-gradient-${rawId}`;
555
577
  const height = typeof size === "number" ? `${size}px` : size;
556
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
578
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
557
579
  "span",
558
580
  {
559
581
  "aria-hidden": ariaHidden || void 0,
@@ -561,53 +583,53 @@ function UILoader({ size = 48, tone = "neutral", className, style, label = "Load
561
583
  className: cn("fractal-ui-loader", `fractal-ui-loader--${tone}`, className),
562
584
  role: ariaHidden ? void 0 : "status",
563
585
  style,
564
- children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("svg", { "aria-hidden": "true", fill: "none", viewBox: "0 0 144 92", style: { height, width: "auto" }, children: [
565
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("defs", { children: [
566
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("linearGradient", { id: gradientId, x1: "59", x2: "94.3", y1: "0", y2: "89.1", gradientUnits: "userSpaceOnUse", children: [
567
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("stop", { className: "fractal-ui-loader__stop-start", offset: "0" }),
568
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("stop", { className: "fractal-ui-loader__stop-end", offset: "1" })
586
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("svg", { "aria-hidden": "true", fill: "none", viewBox: "0 0 144 92", style: { height, width: "auto" }, children: [
587
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("defs", { children: [
588
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("linearGradient", { id: gradientId, x1: "59", x2: "94.3", y1: "0", y2: "89.1", gradientUnits: "userSpaceOnUse", children: [
589
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("stop", { className: "fractal-ui-loader__stop-start", offset: "0" }),
590
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("stop", { className: "fractal-ui-loader__stop-end", offset: "1" })
569
591
  ] }),
570
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("linearGradient", { id: `${gradientId}-shine`, x1: "0", x2: "1", y1: "0", y2: "0", children: [
571
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("stop", { offset: "0.4", stopColor: "white", stopOpacity: "0" }),
572
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("stop", { offset: "0.5", stopColor: "white", stopOpacity: "0.62" }),
573
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("stop", { offset: "0.6", stopColor: "white", stopOpacity: "0" })
592
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("linearGradient", { id: `${gradientId}-shine`, x1: "0", x2: "1", y1: "0", y2: "0", children: [
593
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("stop", { offset: "0.4", stopColor: "white", stopOpacity: "0" }),
594
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("stop", { offset: "0.5", stopColor: "white", stopOpacity: "0.62" }),
595
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("stop", { offset: "0.6", stopColor: "white", stopOpacity: "0" })
574
596
  ] }),
575
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("clipPath", { id: clipId, children: [
576
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("path", { d: LEFT }),
577
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("path", { d: CENTER }),
578
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("path", { d: RIGHT })
597
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("clipPath", { id: clipId, children: [
598
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: LEFT }),
599
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: CENTER }),
600
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: RIGHT })
579
601
  ] })
580
602
  ] }),
581
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("path", { d: CENTER, fill: `url(#${gradientId})` }),
582
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("path", { d: RIGHT, fill: `url(#${gradientId})` }),
583
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("path", { d: LEFT, fill: `url(#${gradientId})` }),
584
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("g", { clipPath: `url(#${clipId})`, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("g", { className: "fractal-ui-loader__shine-axis", transform: "translate(72 46) rotate(68.4)", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("rect", { className: "fractal-ui-loader__shine", x: "-160", y: "-100", width: "320", height: "200", fill: `url(#${gradientId}-shine)` }) }) })
603
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: CENTER, fill: `url(#${gradientId})` }),
604
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: RIGHT, fill: `url(#${gradientId})` }),
605
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: LEFT, fill: `url(#${gradientId})` }),
606
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("g", { clipPath: `url(#${clipId})`, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("g", { className: "fractal-ui-loader__shine-axis", transform: "translate(72 46) rotate(68.4)", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("rect", { className: "fractal-ui-loader__shine", x: "-160", y: "-100", width: "320", height: "200", fill: `url(#${gradientId}-shine)` }) }) })
585
607
  ] })
586
608
  }
587
609
  );
588
610
  }
589
611
 
590
612
  // src/components/Modal/Modal.tsx
591
- var import_jsx_runtime9 = require("react/jsx-runtime");
592
- var CloseIcon = () => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: "M12 4L4 12M4 4L12 12", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
613
+ var import_jsx_runtime10 = require("react/jsx-runtime");
614
+ var CloseIcon = () => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M12 4L4 12M4 4L12 12", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
593
615
  function Modal({ open, onClose, title, children, danger, warn, footer, noClose, closeDisabled = false, size = "sm", loading = false, loadingLabel = "Loading", className }) {
594
616
  useEscapeDismiss(80, onClose, open && !noClose && !closeDisabled);
595
617
  if (!open) return null;
596
618
  const sizeClass = `fractal-modal-panel--${size}`;
597
619
  const accentClass = danger ? "fractal-modal-panel--danger" : warn ? "fractal-modal-panel--warn" : "";
598
620
  return (0, import_react_dom.createPortal)(
599
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "fractal-modal-overlay", onClick: noClose || closeDisabled ? void 0 : onClose, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
621
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "fractal-modal-overlay", onClick: noClose || closeDisabled ? void 0 : onClose, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
600
622
  "div",
601
623
  {
602
624
  className: cn("fractal-modal-panel", sizeClass, accentClass, className),
603
625
  onClick: (e) => e.stopPropagation(),
604
626
  children: [
605
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "fractal-modal-title-row", children: [
606
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h3", { className: cn("fractal-modal-title", danger && "fractal-modal-title--danger", warn && "fractal-modal-title--warn"), children: title }),
607
- !noClose && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("button", { type: "button", onClick: onClose, title: "Close", disabled: closeDisabled, className: "fractal-modal-close", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CloseIcon, {}) })
627
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "fractal-modal-title-row", children: [
628
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h3", { className: cn("fractal-modal-title", danger && "fractal-modal-title--danger", warn && "fractal-modal-title--warn"), children: title }),
629
+ !noClose && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("button", { type: "button", onClick: onClose, title: "Close", disabled: closeDisabled, className: "fractal-modal-close", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CloseIcon, {}) })
608
630
  ] }),
609
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { "aria-busy": loading || void 0, className: cn("fractal-modal-body", size === "lg" && "fractal-modal-body--lg", loading && "fractal-modal-body--loading"), children: loading ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(UILoader, { label: loadingLabel }) : children }),
610
- footer && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "fractal-modal-footer", children: footer })
631
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { "aria-busy": loading || void 0, className: cn("fractal-modal-body", size === "lg" && "fractal-modal-body--lg", loading && "fractal-modal-body--loading"), children: loading ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(UILoader, { label: loadingLabel }) : children }),
632
+ footer && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "fractal-modal-footer", children: footer })
611
633
  ]
612
634
  }
613
635
  ) }),
@@ -616,17 +638,17 @@ function Modal({ open, onClose, title, children, danger, warn, footer, noClose,
616
638
  }
617
639
 
618
640
  // src/components/DataTable/DataTable.tsx
619
- var import_jsx_runtime10 = require("react/jsx-runtime");
641
+ var import_jsx_runtime11 = require("react/jsx-runtime");
620
642
  function DataTable({ columns, data, emptyMessage, header, size = "md", className }) {
621
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: cn("fractal-datatable", `fractal-datatable--${size}`, className), children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "fractal-datatable-surface", children: [
622
- header && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "fractal-datatable-header", children: header }),
623
- data.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "fractal-datatable-empty", children: emptyMessage || "No data" }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("table", { className: "fractal-datatable-table", children: [
624
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("tr", { className: "fractal-datatable-thead-row", children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("th", { className: "fractal-datatable-th", style: { width: col.width }, children: col.header }, col.key)) }) }),
625
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("tbody", { children: data.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
643
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: cn("fractal-datatable", `fractal-datatable--${size}`, className), children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "fractal-datatable-surface", children: [
644
+ header && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "fractal-datatable-header", children: header }),
645
+ data.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "fractal-datatable-empty", children: emptyMessage || "No data" }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("table", { className: "fractal-datatable-table", children: [
646
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("tr", { className: "fractal-datatable-thead-row", children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("th", { className: "fractal-datatable-th", style: { width: col.width }, children: col.header }, col.key)) }) }),
647
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("tbody", { children: data.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
626
648
  "tr",
627
649
  {
628
650
  className: "fractal-datatable-row",
629
- children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("td", { className: "fractal-datatable-td", style: { width: col.width }, children: col.render(row, rowIndex) }, col.key))
651
+ children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("td", { className: "fractal-datatable-td", style: { width: col.width }, children: col.render(row, rowIndex) }, col.key))
630
652
  },
631
653
  rowIndex
632
654
  )) })
@@ -636,8 +658,8 @@ function DataTable({ columns, data, emptyMessage, header, size = "md", className
636
658
 
637
659
  // src/components/Dropdown/Dropdown.tsx
638
660
  var React7 = __toESM(require("react"), 1);
639
- var import_fractal_icons3 = require("@mirror-physics/fractal-icons");
640
- var import_jsx_runtime11 = require("react/jsx-runtime");
661
+ var import_fractal_icons4 = require("@mirror-physics/fractal-icons");
662
+ var import_jsx_runtime12 = require("react/jsx-runtime");
641
663
  var MARGIN = 4;
642
664
  function Dropdown({
643
665
  items,
@@ -669,7 +691,7 @@ function Dropdown({
669
691
  const selectableItems = visibleItems.filter((i) => i.kind !== "header");
670
692
  const selected = items.find((i) => i.value === selectedValue && i.kind !== "header") ?? selectableItems[0] ?? visibleItems[0];
671
693
  const isUp = direction === "up";
672
- const ChevronIcon = isUp ? import_fractal_icons3.ChevronUp : import_fractal_icons3.ChevronDown;
694
+ const ChevronIcon = isUp ? import_fractal_icons4.ChevronUp : import_fractal_icons4.ChevronDown;
673
695
  React7.useLayoutEffect(() => {
674
696
  if (!open || !triggerRef.current || !panelRef.current) return;
675
697
  const triggerRect = triggerRef.current.getBoundingClientRect();
@@ -714,8 +736,8 @@ function Dropdown({
714
736
  document.addEventListener("mousedown", handleClickOutside);
715
737
  return () => document.removeEventListener("mousedown", handleClickOutside);
716
738
  }, [open]);
717
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: cn("fractal-dropdown", className), children: [
718
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
739
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: cn("fractal-dropdown", className), children: [
740
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
719
741
  "button",
720
742
  {
721
743
  ref: triggerRef,
@@ -733,15 +755,15 @@ function Dropdown({
733
755
  triggerClassName
734
756
  ),
735
757
  children: [
736
- triggerContent != null ? triggerContent : /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
737
- selected.icon != null && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "fractal-dropdown-icon fractal-dropdown-icon--trigger", children: selected.icon }),
738
- selected.description != null && (typeof selected.description !== "string" || selected.description !== "") && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "fractal-dropdown-selected-text", children: selected.description })
758
+ triggerContent != null ? triggerContent : /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
759
+ selected.icon != null && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "fractal-dropdown-icon fractal-dropdown-icon--trigger", children: selected.icon }),
760
+ selected.description != null && (typeof selected.description !== "string" || selected.description !== "") && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "fractal-dropdown-selected-text", children: selected.description })
739
761
  ] }),
740
- !noChevron && !iconOnly && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "fractal-dropdown-chevron", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ChevronIcon, { size: size === "sm" ? 14 : 16 }) })
762
+ !noChevron && !iconOnly && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "fractal-dropdown-chevron", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ChevronIcon, { size: size === "sm" ? 14 : 16 }) })
741
763
  ]
742
764
  }
743
765
  ),
744
- open && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
766
+ open && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
745
767
  "div",
746
768
  {
747
769
  ref: panelRef,
@@ -750,21 +772,21 @@ function Dropdown({
750
772
  className: cn("fractal-dropdown-panel", `fractal-dropdown-panel--${size}`, panelClassName),
751
773
  style: panelStyle,
752
774
  children: [
753
- label != null && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "fractal-dropdown-label", children: label }),
775
+ label != null && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "fractal-dropdown-label", children: label }),
754
776
  visibleItems.map((item, index) => {
755
- const topDivider = item.border === "top" ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "fractal-dropdown-separator" }) : null;
756
- const bottomDivider = item.border === "bottom" ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "fractal-dropdown-separator" }) : null;
777
+ const topDivider = item.border === "top" ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "fractal-dropdown-separator" }) : null;
778
+ const bottomDivider = item.border === "bottom" ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "fractal-dropdown-separator" }) : null;
757
779
  if (item.kind === "header") {
758
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(React7.Fragment, { children: [
780
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(React7.Fragment, { children: [
759
781
  topDivider,
760
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { role: "presentation", className: "fractal-dropdown-label", children: item.description }),
782
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { role: "presentation", className: "fractal-dropdown-label", children: item.description }),
761
783
  bottomDivider
762
784
  ] }, `header-${index}`);
763
785
  }
764
786
  const isSelected = item.value === selectedValue;
765
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(React7.Fragment, { children: [
787
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(React7.Fragment, { children: [
766
788
  topDivider,
767
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
789
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
768
790
  "button",
769
791
  {
770
792
  type: "button",
@@ -776,9 +798,9 @@ function Dropdown({
776
798
  },
777
799
  className: "fractal-dropdown-option",
778
800
  children: [
779
- item.icon != null && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "fractal-dropdown-icon", children: item.icon }),
780
- item.description != null && (typeof item.description !== "string" || item.description !== "") && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "fractal-dropdown-option-text", children: item.description }),
781
- item.trailing != null && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "fractal-dropdown-trailing", children: item.trailing })
801
+ item.icon != null && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "fractal-dropdown-icon", children: item.icon }),
802
+ item.description != null && (typeof item.description !== "string" || item.description !== "") && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "fractal-dropdown-option-text", children: item.description }),
803
+ item.trailing != null && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "fractal-dropdown-trailing", children: item.trailing })
782
804
  ]
783
805
  }
784
806
  ),
@@ -793,9 +815,9 @@ function Dropdown({
793
815
 
794
816
  // src/components/Link/Link.tsx
795
817
  var React8 = __toESM(require("react"), 1);
796
- var import_jsx_runtime12 = require("react/jsx-runtime");
818
+ var import_jsx_runtime13 = require("react/jsx-runtime");
797
819
  var Link = React8.forwardRef(
798
- ({ className, theme = "default", size = "md", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
820
+ ({ className, theme = "default", size = "md", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
799
821
  "a",
800
822
  {
801
823
  ref,
@@ -808,9 +830,9 @@ Link.displayName = "Link";
808
830
 
809
831
  // src/components/Chip/Chip.tsx
810
832
  var React9 = __toESM(require("react"), 1);
811
- var import_jsx_runtime13 = require("react/jsx-runtime");
833
+ var import_jsx_runtime14 = require("react/jsx-runtime");
812
834
  var Chip = React9.forwardRef(
813
- ({ className, tone = "neutral", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
835
+ ({ className, tone = "neutral", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
814
836
  "span",
815
837
  {
816
838
  ref,
@@ -822,10 +844,10 @@ var Chip = React9.forwardRef(
822
844
  Chip.displayName = "Chip";
823
845
 
824
846
  // src/components/Checkbox/Checkbox.tsx
825
- var import_fractal_icons4 = require("@mirror-physics/fractal-icons");
826
- var import_jsx_runtime14 = require("react/jsx-runtime");
847
+ var import_fractal_icons5 = require("@mirror-physics/fractal-icons");
848
+ var import_jsx_runtime15 = require("react/jsx-runtime");
827
849
  function Checkbox({ checked, onCheckedChange, className, disabled, onClick, onKeyDown, ...props }) {
828
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
850
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
829
851
  "button",
830
852
  {
831
853
  ...props,
@@ -842,15 +864,15 @@ function Checkbox({ checked, onCheckedChange, className, disabled, onClick, onKe
842
864
  onKeyDown?.(event);
843
865
  if (event.key === " " || event.key === "Enter") event.stopPropagation();
844
866
  },
845
- children: checked ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_fractal_icons4.CheckboxChecked, { "aria-hidden": "true", size: 18 }) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_fractal_icons4.Checkbox, { "aria-hidden": "true", size: 18 })
867
+ children: checked ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_fractal_icons5.CheckboxChecked, { "aria-hidden": "true", size: 18 }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_fractal_icons5.Checkbox, { "aria-hidden": "true", size: 18 })
846
868
  }
847
869
  );
848
870
  }
849
871
 
850
872
  // src/components/SortableTable/SortableTable.tsx
851
873
  var import_react3 = require("react");
852
- var import_fractal_icons5 = require("@mirror-physics/fractal-icons");
853
- var import_jsx_runtime15 = require("react/jsx-runtime");
874
+ var import_fractal_icons6 = require("@mirror-physics/fractal-icons");
875
+ var import_jsx_runtime16 = require("react/jsx-runtime");
854
876
  function SortableTable({
855
877
  columns,
856
878
  data,
@@ -926,13 +948,13 @@ function SortableTable({
926
948
  onSortChange?.(nextKey, nextDirection);
927
949
  }
928
950
  };
929
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: cn("fractal-sortable-table", `fractal-sortable-table--${size}`, embedded && "fractal-sortable-table--embedded", className), children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "fractal-sortable-table-surface", children: [
930
- header && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "fractal-sortable-table-header", children: header }),
931
- sorted.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "fractal-sortable-table-empty", children: emptyMessage || "No data" }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("table", { className: "fractal-sortable-table-table", children: [
932
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("tr", { className: "fractal-sortable-table-thead-row", children: columns.map((col) => {
951
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: cn("fractal-sortable-table", `fractal-sortable-table--${size}`, embedded && "fractal-sortable-table--embedded", className), children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "fractal-sortable-table-surface", children: [
952
+ header && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "fractal-sortable-table-header", children: header }),
953
+ sorted.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "fractal-sortable-table-empty", children: emptyMessage || "No data" }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("table", { className: "fractal-sortable-table-table", children: [
954
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("tr", { className: "fractal-sortable-table-thead-row", children: columns.map((col) => {
933
955
  const isActive = activeKey === col.key && activeDirection !== null;
934
956
  if (!col.sortable) {
935
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
957
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
936
958
  "th",
937
959
  {
938
960
  className: "fractal-sortable-table-th",
@@ -942,12 +964,12 @@ function SortableTable({
942
964
  col.key
943
965
  );
944
966
  }
945
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
967
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
946
968
  "th",
947
969
  {
948
970
  className: "fractal-sortable-table-th fractal-sortable-table-th--sortable",
949
971
  style: { width: col.width },
950
- children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
972
+ children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
951
973
  "button",
952
974
  {
953
975
  type: "button",
@@ -958,8 +980,8 @@ function SortableTable({
958
980
  onClick: () => handleSortClick(col.key),
959
981
  "aria-sort": isActive ? activeDirection === "asc" ? "ascending" : "descending" : "none",
960
982
  children: [
961
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { children: col.header }),
962
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "fractal-sortable-table-sort-icon", "aria-hidden": "true", children: isActive && activeDirection === "asc" ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_fractal_icons5.ArrowUp, { size: 14 }) : isActive && activeDirection === "desc" ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_fractal_icons5.ArrowDown, { size: 14 }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_fractal_icons5.ArrowsUpDown, { size: 14 }) })
983
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { children: col.header }),
984
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "fractal-sortable-table-sort-icon", "aria-hidden": "true", children: isActive && activeDirection === "asc" ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_fractal_icons6.ArrowUp, { size: 14 }) : isActive && activeDirection === "desc" ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_fractal_icons6.ArrowDown, { size: 14 }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_fractal_icons6.ArrowsUpDown, { size: 14 }) })
963
985
  ]
964
986
  }
965
987
  )
@@ -967,13 +989,13 @@ function SortableTable({
967
989
  col.key
968
990
  );
969
991
  }) }) }),
970
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("tbody", { children: sorted.map((row, rowIndex) => {
992
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("tbody", { children: sorted.map((row, rowIndex) => {
971
993
  const highlighted = highlightRow?.(row, rowIndex) ?? false;
972
994
  const action = rowAction ? {
973
995
  label: rowAction.label(row, rowIndex),
974
996
  icon: rowAction.icon(row, rowIndex)
975
997
  } : null;
976
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
998
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
977
999
  "tr",
978
1000
  {
979
1001
  className: cn(
@@ -991,7 +1013,7 @@ function SortableTable({
991
1013
  "aria-label": action?.label,
992
1014
  role: onRowClick ? "button" : void 0,
993
1015
  tabIndex: onRowClick ? 0 : void 0,
994
- children: columns.map((col, columnIndex) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
1016
+ children: columns.map((col, columnIndex) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
995
1017
  "td",
996
1018
  {
997
1019
  className: cn(
@@ -1001,7 +1023,7 @@ function SortableTable({
1001
1023
  style: { width: col.width, textAlign: col.align ?? "left" },
1002
1024
  children: [
1003
1025
  col.render(row, rowIndex),
1004
- action && columnIndex === columns.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "fractal-sortable-table-row-action", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "fractal-sortable-table-row-action__icon", children: action.icon }) })
1026
+ action && columnIndex === columns.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "fractal-sortable-table-row-action", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "fractal-sortable-table-row-action__icon", children: action.icon }) })
1005
1027
  ]
1006
1028
  },
1007
1029
  col.key
@@ -1016,7 +1038,7 @@ function SortableTable({
1016
1038
 
1017
1039
  // src/components/Tabs/Tabs.tsx
1018
1040
  var import_react4 = require("react");
1019
- var import_jsx_runtime16 = require("react/jsx-runtime");
1041
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1020
1042
  function Tabs({
1021
1043
  items,
1022
1044
  defaultValue,
@@ -1086,8 +1108,8 @@ function Tabs({
1086
1108
  selectTab(nextId2);
1087
1109
  requestAnimationFrame(() => tabRefs.current[nextId2]?.focus());
1088
1110
  };
1089
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: cn("fractal-tabs", divider && "fractal-tabs--divider", className), children: [
1090
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1111
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: cn("fractal-tabs", divider && "fractal-tabs--divider", className), children: [
1112
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1091
1113
  "div",
1092
1114
  {
1093
1115
  ref: tabListRef,
@@ -1100,7 +1122,7 @@ function Tabs({
1100
1122
  const isActive = item.id === activeId;
1101
1123
  const tabId = `${reactId}-tab-${item.id}`;
1102
1124
  const panelId = `${reactId}-panel-${item.id}`;
1103
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1125
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1104
1126
  "button",
1105
1127
  {
1106
1128
  ref: (el) => {
@@ -1131,7 +1153,7 @@ function Tabs({
1131
1153
  const tabId = `${reactId}-tab-${item.id}`;
1132
1154
  const panelId = `${reactId}-panel-${item.id}`;
1133
1155
  const isActive = item.id === activeId;
1134
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1156
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1135
1157
  "div",
1136
1158
  {
1137
1159
  id: panelId,
@@ -1149,7 +1171,7 @@ function Tabs({
1149
1171
 
1150
1172
  // src/components/ContentSwitcher/ContentSwitcher.tsx
1151
1173
  var React10 = __toESM(require("react"), 1);
1152
- var import_jsx_runtime17 = require("react/jsx-runtime");
1174
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1153
1175
  function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = false, className }) {
1154
1176
  const switcherRef = React10.useRef(null);
1155
1177
  const buttonRefs = React10.useRef([]);
@@ -1189,7 +1211,7 @@ function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = f
1189
1211
  onValueChange(items[nextIndex].value);
1190
1212
  }
1191
1213
  };
1192
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1214
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1193
1215
  "div",
1194
1216
  {
1195
1217
  className: cn("fractal-content-switcher", fullWidth && "fractal-content-switcher--full-width", className),
@@ -1197,10 +1219,10 @@ function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = f
1197
1219
  "aria-label": ariaLabel,
1198
1220
  ref: switcherRef,
1199
1221
  children: [
1200
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "fractal-content-switcher__indicator", "aria-hidden": true }),
1222
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "fractal-content-switcher__indicator", "aria-hidden": true }),
1201
1223
  items.map((item, index) => {
1202
1224
  const active = item.value === value;
1203
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1225
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1204
1226
  "button",
1205
1227
  {
1206
1228
  className: cn("fractal-content-switcher__item", active && "fractal-content-switcher__item--active"),
@@ -1233,8 +1255,8 @@ function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = f
1233
1255
 
1234
1256
  // src/components/Disclosure/Disclosure.tsx
1235
1257
  var import_react5 = require("react");
1236
- var import_fractal_icons6 = require("@mirror-physics/fractal-icons");
1237
- var import_jsx_runtime18 = require("react/jsx-runtime");
1258
+ var import_fractal_icons7 = require("@mirror-physics/fractal-icons");
1259
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1238
1260
  function Disclosure({
1239
1261
  title,
1240
1262
  meta,
@@ -1262,7 +1284,7 @@ function Disclosure({
1262
1284
  onOpenChange?.(next);
1263
1285
  }
1264
1286
  };
1265
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1287
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1266
1288
  "div",
1267
1289
  {
1268
1290
  className: cn(
@@ -1273,7 +1295,7 @@ function Disclosure({
1273
1295
  className
1274
1296
  ),
1275
1297
  children: [
1276
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1298
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1277
1299
  "button",
1278
1300
  {
1279
1301
  type: "button",
@@ -1284,13 +1306,13 @@ function Disclosure({
1284
1306
  disabled,
1285
1307
  onClick: toggle,
1286
1308
  children: [
1287
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "fractal-disclosure-icon", "aria-hidden": "true", children: isOpen ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_fractal_icons6.ChevronDown, { size: 16 }) : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_fractal_icons6.ChevronRight, { size: 16 }) }),
1288
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "fractal-disclosure-title", children: title }),
1289
- meta && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "fractal-disclosure-meta", children: meta })
1309
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "fractal-disclosure-icon", "aria-hidden": "true", children: isOpen ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_fractal_icons7.ChevronDown, { size: 16 }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_fractal_icons7.ChevronRight, { size: 16 }) }),
1310
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "fractal-disclosure-title", children: title }),
1311
+ meta && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "fractal-disclosure-meta", children: meta })
1290
1312
  ]
1291
1313
  }
1292
1314
  ),
1293
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1315
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1294
1316
  "div",
1295
1317
  {
1296
1318
  id: panelId,
@@ -1298,7 +1320,7 @@ function Disclosure({
1298
1320
  "aria-labelledby": headerId,
1299
1321
  className: "fractal-disclosure-panel",
1300
1322
  hidden: !isOpen,
1301
- children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "fractal-disclosure-panel-inner", children })
1323
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "fractal-disclosure-panel-inner", children })
1302
1324
  }
1303
1325
  )
1304
1326
  ]
@@ -1307,18 +1329,18 @@ function Disclosure({
1307
1329
  }
1308
1330
 
1309
1331
  // src/components/LatticeLoader/LatticeLoader.tsx
1310
- var import_jsx_runtime19 = require("react/jsx-runtime");
1332
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1311
1333
  var LATTICE_COUNT = 160;
1312
1334
  var WAVE_PERIOD = 80;
1313
1335
  function LatticeLoader({ className, label = "Loading", ...props }) {
1314
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1336
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1315
1337
  "span",
1316
1338
  {
1317
1339
  "aria-label": label,
1318
1340
  className: cn("fractal-lattice-loader", className),
1319
1341
  role: "progressbar",
1320
1342
  ...props,
1321
- children: Array.from({ length: LATTICE_COUNT }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1343
+ children: Array.from({ length: LATTICE_COUNT }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1322
1344
  "span",
1323
1345
  {
1324
1346
  "aria-hidden": "true",
@@ -1332,10 +1354,10 @@ function LatticeLoader({ className, label = "Loading", ...props }) {
1332
1354
  }
1333
1355
 
1334
1356
  // src/components/Ghost/Ghost.tsx
1335
- var import_jsx_runtime20 = require("react/jsx-runtime");
1357
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1336
1358
  var toCssLength = (value) => typeof value === "number" ? `${value}px` : value;
1337
1359
  function Ghost({ className, width, height, radius, style, ...props }) {
1338
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1360
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1339
1361
  "div",
1340
1362
  {
1341
1363
  "aria-hidden": "true",
@@ -1351,15 +1373,15 @@ function Ghost({ className, width, height, radius, style, ...props }) {
1351
1373
  );
1352
1374
  }
1353
1375
  function GhostLine({ className, size = "md", width = "100%", ...props }) {
1354
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Ghost, { className: cn("fractal-ghost-line", `fractal-ghost-line--${size}`, className), width, ...props });
1376
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Ghost, { className: cn("fractal-ghost-line", `fractal-ghost-line--${size}`, className), width, ...props });
1355
1377
  }
1356
1378
  function ButtonGhost({ className, size = "md", iconOnly = false, width, ...props }) {
1357
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Ghost, { className: cn("fractal-ghost-button", `fractal-ghost-button--${size}`, iconOnly && "fractal-ghost-button--icon-only", className), width, ...props });
1379
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Ghost, { className: cn("fractal-ghost-button", `fractal-ghost-button--${size}`, iconOnly && "fractal-ghost-button--icon-only", className), width, ...props });
1358
1380
  }
1359
1381
  function CardGhost({ className, lines = 3, showHeader = true, ...props }) {
1360
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-card", className), ...props, children: [
1361
- showHeader && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { width: "38%" }),
1362
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "fractal-ghost-stack", children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { width: index === lines - 1 ? "62%" : "100%" }, index)) })
1382
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-card", className), ...props, children: [
1383
+ showHeader && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { width: "38%" }),
1384
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "fractal-ghost-stack", children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { width: index === lines - 1 ? "62%" : "100%" }, index)) })
1363
1385
  ] });
1364
1386
  }
1365
1387
  function DataTableGhost({
@@ -1373,109 +1395,109 @@ function DataTableGhost({
1373
1395
  ...props
1374
1396
  }) {
1375
1397
  const cells = Array.from({ length: columns }, (_, index) => index);
1376
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { "aria-busy": "true", "aria-label": "Loading table", className: cn("fractal-ghost-table", `fractal-ghost-table--${size}`, className), role: "status", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("table", { className: "fractal-ghost-table__table", children: [
1377
- (showHeader || headers) && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("tr", { className: "fractal-ghost-table__head-row", children: cells.map((index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("th", { style: { width: columnWidths?.[index] }, children: headers?.[index] ?? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { size: "sm", width: index === columns - 1 ? "62%" : "76%" }) }, index)) }) }),
1378
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("tbody", { children: Array.from({ length: rows }, (_, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("tr", { className: "fractal-ghost-table__row", children: cells.map((columnIndex) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("td", { style: { width: columnWidths?.[columnIndex] }, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { width: `${[72, 54, 82, 63, 46][(rowIndex + columnIndex) % 5]}%` }) }, columnIndex)) }, rowIndex)) })
1398
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { "aria-busy": "true", "aria-label": "Loading table", className: cn("fractal-ghost-table", `fractal-ghost-table--${size}`, className), role: "status", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("table", { className: "fractal-ghost-table__table", children: [
1399
+ (showHeader || headers) && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("tr", { className: "fractal-ghost-table__head-row", children: cells.map((index) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("th", { style: { width: columnWidths?.[index] }, children: headers?.[index] ?? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { size: "sm", width: index === columns - 1 ? "62%" : "76%" }) }, index)) }) }),
1400
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("tbody", { children: Array.from({ length: rows }, (_, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("tr", { className: "fractal-ghost-table__row", children: cells.map((columnIndex) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("td", { style: { width: columnWidths?.[columnIndex] }, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { width: `${[72, 54, 82, 63, 46][(rowIndex + columnIndex) % 5]}%` }) }, columnIndex)) }, rowIndex)) })
1379
1401
  ] }) });
1380
1402
  }
1381
1403
  function InputGhost({ className, labelWidth = "26%", ...props }) {
1382
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(FormFieldGhost, { className, labelWidth, ...props });
1404
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(FormFieldGhost, { className, labelWidth, ...props });
1383
1405
  }
1384
1406
  function TextareaGhost({ className, labelWidth = "26%", ...props }) {
1385
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(FormFieldGhost, { className, labelWidth, multiline: true, ...props });
1407
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(FormFieldGhost, { className, labelWidth, multiline: true, ...props });
1386
1408
  }
1387
1409
  function LabelGhost({ className, width = "26%", ...props }) {
1388
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { className: cn("fractal-ghost-label", className), size: "sm", width, ...props });
1410
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { className: cn("fractal-ghost-label", className), size: "sm", width, ...props });
1389
1411
  }
1390
1412
  function FormFieldGhost({ className, labelWidth = "26%", multiline = false, ...props }) {
1391
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-field", className), ...props, children: [
1392
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(LabelGhost, { width: labelWidth }),
1393
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Ghost, { className: cn("fractal-ghost-field__control", multiline && "fractal-ghost-field__control--multiline") })
1413
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-field", className), ...props, children: [
1414
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(LabelGhost, { width: labelWidth }),
1415
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Ghost, { className: cn("fractal-ghost-field__control", multiline && "fractal-ghost-field__control--multiline") })
1394
1416
  ] });
1395
1417
  }
1396
1418
  function AlertGhost({ className, ...props }) {
1397
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-alert", className), ...props, children: [
1398
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { width: "30%" }),
1399
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { size: "sm", width: "78%" })
1419
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-alert", className), ...props, children: [
1420
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { width: "30%" }),
1421
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { size: "sm", width: "78%" })
1400
1422
  ] });
1401
1423
  }
1402
1424
  function CheckboxGhost({ className, ...props }) {
1403
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-choice", className), ...props, children: [
1404
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Ghost, { className: "fractal-ghost-choice__control" }),
1405
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { width: "42%" })
1425
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-choice", className), ...props, children: [
1426
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Ghost, { className: "fractal-ghost-choice__control" }),
1427
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { width: "42%" })
1406
1428
  ] });
1407
1429
  }
1408
1430
  var ToggleGhost = CheckboxGhost;
1409
1431
  function ChipGhost({ className, width = 74, ...props }) {
1410
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Ghost, { className: cn("fractal-ghost-chip", className), height: 24, width, ...props });
1432
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Ghost, { className: cn("fractal-ghost-chip", className), height: 24, width, ...props });
1411
1433
  }
1412
1434
  function LinkGhost({ className, width = 96, ...props }) {
1413
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { className: cn("fractal-ghost-link", className), size: "sm", width, ...props });
1435
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { className: cn("fractal-ghost-link", className), size: "sm", width, ...props });
1414
1436
  }
1415
1437
  var TextButtonGhost = LinkGhost;
1416
1438
  function DropdownGhost({ className, ...props }) {
1417
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-dropdown", className), ...props, children: [
1418
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { width: "38%" }),
1419
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Ghost, { className: "fractal-ghost-dropdown__chevron" })
1439
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-dropdown", className), ...props, children: [
1440
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { width: "38%" }),
1441
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Ghost, { className: "fractal-ghost-dropdown__chevron" })
1420
1442
  ] });
1421
1443
  }
1422
1444
  function ContentSwitcherGhost({ className, options = 3, ...props }) {
1423
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { "aria-hidden": "true", className: cn("fractal-ghost-switcher", className), ...props, children: Array.from({ length: options }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Ghost, {}, index)) });
1445
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { "aria-hidden": "true", className: cn("fractal-ghost-switcher", className), ...props, children: Array.from({ length: options }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Ghost, {}, index)) });
1424
1446
  }
1425
1447
  var TabsGhost = ContentSwitcherGhost;
1426
1448
  function DisclosureGhost({ className, ...props }) {
1427
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-disclosure", className), ...props, children: [
1428
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Ghost, { className: "fractal-ghost-disclosure__icon" }),
1429
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { width: "42%" })
1449
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-disclosure", className), ...props, children: [
1450
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Ghost, { className: "fractal-ghost-disclosure__icon" }),
1451
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { width: "42%" })
1430
1452
  ] });
1431
1453
  }
1432
1454
  function PaginationGhost({ className, pages = 5, ...props }) {
1433
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { "aria-hidden": "true", className: cn("fractal-ghost-pagination", className), ...props, children: Array.from({ length: pages }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Ghost, {}, index)) });
1455
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { "aria-hidden": "true", className: cn("fractal-ghost-pagination", className), ...props, children: Array.from({ length: pages }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Ghost, {}, index)) });
1434
1456
  }
1435
1457
  function FileDropzoneGhost({ className, ...props }) {
1436
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-dropzone", className), ...props, children: [
1437
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Ghost, { className: "fractal-ghost-dropzone__icon" }),
1438
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { width: "26%" }),
1439
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { size: "sm", width: "46%" })
1458
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-dropzone", className), ...props, children: [
1459
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Ghost, { className: "fractal-ghost-dropzone__icon" }),
1460
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { width: "26%" }),
1461
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { size: "sm", width: "46%" })
1440
1462
  ] });
1441
1463
  }
1442
1464
  function PromptCardGhost({ className, ...props }) {
1443
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(CardGhost, { className: cn("fractal-ghost-prompt-card", className), lines: 4, ...props });
1465
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(CardGhost, { className: cn("fractal-ghost-prompt-card", className), lines: 4, ...props });
1444
1466
  }
1445
1467
  function SortableTableGhost(props) {
1446
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DataTableGhost, { ...props });
1468
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(DataTableGhost, { ...props });
1447
1469
  }
1448
1470
  function SidebarGhost({ className, items = 6, ...props }) {
1449
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("aside", { "aria-hidden": "true", className: cn("fractal-ghost-sidebar", className), ...props, children: [
1450
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Ghost, { className: "fractal-ghost-sidebar__brand" }),
1451
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "fractal-ghost-sidebar__items", children: Array.from({ length: items }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "fractal-ghost-sidebar__item", children: [
1452
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Ghost, {}),
1453
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { width: `${[54, 68, 44, 61][index % 4]}%` })
1471
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("aside", { "aria-hidden": "true", className: cn("fractal-ghost-sidebar", className), ...props, children: [
1472
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Ghost, { className: "fractal-ghost-sidebar__brand" }),
1473
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "fractal-ghost-sidebar__items", children: Array.from({ length: items }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "fractal-ghost-sidebar__item", children: [
1474
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Ghost, {}),
1475
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { width: `${[54, 68, 44, 61][index % 4]}%` })
1454
1476
  ] }, index)) })
1455
1477
  ] });
1456
1478
  }
1457
1479
  function ModalGhost({ className, title, lines = 3, ...props }) {
1458
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SurfaceGhost, { className: cn("fractal-ghost-modal", className), title, lines, ...props });
1480
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SurfaceGhost, { className: cn("fractal-ghost-modal", className), title, lines, ...props });
1459
1481
  }
1460
1482
  function SidePanelGhost({ className, title, lines = 5, ...props }) {
1461
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SurfaceGhost, { className: cn("fractal-ghost-side-panel", className), title, lines, ...props });
1483
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SurfaceGhost, { className: cn("fractal-ghost-side-panel", className), title, lines, ...props });
1462
1484
  }
1463
1485
  function SurfaceGhost({ className, title, lines = 3, ...props }) {
1464
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-surface", className), ...props, children: [
1465
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "fractal-ghost-surface__header", children: [
1466
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { width: "42%" }),
1467
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Ghost, { className: "fractal-ghost-surface__close" })
1486
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-surface", className), ...props, children: [
1487
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "fractal-ghost-surface__header", children: [
1488
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { width: "42%" }),
1489
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Ghost, { className: "fractal-ghost-surface__close" })
1468
1490
  ] }),
1469
- title && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "fractal-ghost-surface__title", children: title }),
1470
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "fractal-ghost-stack", children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GhostLine, { width: index === lines - 1 ? "64%" : "100%" }, index)) })
1491
+ title && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "fractal-ghost-surface__title", children: title }),
1492
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "fractal-ghost-stack", children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GhostLine, { width: index === lines - 1 ? "64%" : "100%" }, index)) })
1471
1493
  ] });
1472
1494
  }
1473
1495
 
1474
1496
  // src/components/Sidebar/Sidebar.tsx
1475
1497
  var React11 = __toESM(require("react"), 1);
1476
- var import_jsx_runtime21 = require("react/jsx-runtime");
1498
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1477
1499
  var Sidebar = React11.forwardRef(
1478
- ({ className, width, style, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1500
+ ({ className, width, style, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1479
1501
  "aside",
1480
1502
  {
1481
1503
  ref,
@@ -1487,11 +1509,11 @@ var Sidebar = React11.forwardRef(
1487
1509
  );
1488
1510
  Sidebar.displayName = "Sidebar";
1489
1511
  var SidebarHeader = React11.forwardRef(
1490
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { ref, className: cn("fractal-sidebar__header", className), ...props })
1512
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { ref, className: cn("fractal-sidebar__header", className), ...props })
1491
1513
  );
1492
1514
  SidebarHeader.displayName = "SidebarHeader";
1493
1515
  var SidebarBrand = React11.forwardRef(
1494
- ({ className, type = "button", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("button", { ref, type, className: cn("fractal-sidebar__brand", className), ...props })
1516
+ ({ className, type = "button", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("button", { ref, type, className: cn("fractal-sidebar__brand", className), ...props })
1495
1517
  );
1496
1518
  SidebarBrand.displayName = "SidebarBrand";
1497
1519
  function SidebarAccountMenu({
@@ -1501,7 +1523,7 @@ function SidebarAccountMenu({
1501
1523
  triggerLabel = "Account menu",
1502
1524
  className
1503
1525
  }) {
1504
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1526
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1505
1527
  Dropdown,
1506
1528
  {
1507
1529
  align: "left",
@@ -1511,22 +1533,22 @@ function SidebarAccountMenu({
1511
1533
  panelClassName: "fractal-sidebar__account-panel",
1512
1534
  selectedValue: "",
1513
1535
  triggerClassName: "fractal-sidebar__account-trigger",
1514
- triggerContent: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "fractal-sidebar__account-name", children: name }),
1536
+ triggerContent: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "fractal-sidebar__account-name", children: name }),
1515
1537
  triggerLabel,
1516
1538
  triggerVariant: "tertiary"
1517
1539
  }
1518
1540
  );
1519
1541
  }
1520
1542
  var SidebarNav = React11.forwardRef(
1521
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("nav", { ref, className: cn("fractal-sidebar__nav", className), ...props })
1543
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("nav", { ref, className: cn("fractal-sidebar__nav", className), ...props })
1522
1544
  );
1523
1545
  SidebarNav.displayName = "SidebarNav";
1524
1546
  var SidebarSection = React11.forwardRef(
1525
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { ref, className: cn("fractal-sidebar__section", className), ...props })
1547
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { ref, className: cn("fractal-sidebar__section", className), ...props })
1526
1548
  );
1527
1549
  SidebarSection.displayName = "SidebarSection";
1528
1550
  var SidebarNavItem = React11.forwardRef(
1529
- ({ active = false, icon, endAdornment, className, type = "button", children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1551
+ ({ active = false, icon, endAdornment, className, type = "button", children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1530
1552
  "button",
1531
1553
  {
1532
1554
  ref,
@@ -1536,28 +1558,28 @@ var SidebarNavItem = React11.forwardRef(
1536
1558
  "aria-current": active ? "page" : void 0,
1537
1559
  ...props,
1538
1560
  children: [
1539
- icon && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "fractal-sidebar__nav-item-icon", "aria-hidden": "true", children: icon }),
1540
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "fractal-sidebar__nav-item-label", children }),
1541
- endAdornment && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "fractal-sidebar__nav-item-end", children: endAdornment })
1561
+ icon && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "fractal-sidebar__nav-item-icon", "aria-hidden": "true", children: icon }),
1562
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "fractal-sidebar__nav-item-label", children }),
1563
+ endAdornment && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "fractal-sidebar__nav-item-end", children: endAdornment })
1542
1564
  ]
1543
1565
  }
1544
1566
  )
1545
1567
  );
1546
1568
  SidebarNavItem.displayName = "SidebarNavItem";
1547
1569
  var SidebarFooter = React11.forwardRef(
1548
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { ref, className: cn("fractal-sidebar__footer", className), ...props })
1570
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { ref, className: cn("fractal-sidebar__footer", className), ...props })
1549
1571
  );
1550
1572
  SidebarFooter.displayName = "SidebarFooter";
1551
1573
 
1552
1574
  // src/components/SidePanel/SidePanel.tsx
1553
1575
  var import_react_dom2 = require("react-dom");
1554
- var import_fractal_icons7 = require("@mirror-physics/fractal-icons");
1555
- var import_jsx_runtime22 = require("react/jsx-runtime");
1576
+ var import_fractal_icons8 = require("@mirror-physics/fractal-icons");
1577
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1556
1578
  function SidePanel({ open, onClose, title, description, children, footer, size = "md", loading = false, loadingLabel = "Loading", className }) {
1557
1579
  useEscapeDismiss(80, onClose, open);
1558
1580
  if (!open) return null;
1559
1581
  return (0, import_react_dom2.createPortal)(
1560
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "fractal-side-panel-overlay", onMouseDown: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1582
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "fractal-side-panel-overlay", onMouseDown: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1561
1583
  "aside",
1562
1584
  {
1563
1585
  className: cn("fractal-side-panel", `fractal-side-panel--${size}`, className),
@@ -1566,15 +1588,15 @@ function SidePanel({ open, onClose, title, description, children, footer, size =
1566
1588
  role: "dialog",
1567
1589
  onMouseDown: (event) => event.stopPropagation(),
1568
1590
  children: [
1569
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("header", { className: "fractal-side-panel__header", children: [
1570
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "fractal-side-panel__heading", children: [
1571
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h2", { className: "fractal-side-panel__title", children: title }),
1572
- description && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "fractal-side-panel__description", children: description })
1591
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("header", { className: "fractal-side-panel__header", children: [
1592
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "fractal-side-panel__heading", children: [
1593
+ typeof title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("h2", { className: "fractal-side-panel__title", children: title }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "fractal-side-panel__title", children: title }),
1594
+ description && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "fractal-side-panel__description", children: description })
1573
1595
  ] }),
1574
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("button", { type: "button", className: "fractal-side-panel__close", "aria-label": "Close panel", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_fractal_icons7.Close, { size: 18 }) })
1596
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("button", { type: "button", className: "fractal-side-panel__close", "aria-label": "Close panel", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_fractal_icons8.Close, { size: 18 }) })
1575
1597
  ] }),
1576
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { "aria-busy": loading || void 0, className: cn("fractal-side-panel__body", loading && "fractal-side-panel__body--loading"), children: loading ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(UILoader, { label: loadingLabel }) : children }),
1577
- footer && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("footer", { className: "fractal-side-panel__footer", children: footer })
1598
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { "aria-busy": loading || void 0, className: cn("fractal-side-panel__body", loading && "fractal-side-panel__body--loading"), children: loading ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(UILoader, { label: loadingLabel }) : children }),
1599
+ footer && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("footer", { className: "fractal-side-panel__footer", children: footer })
1578
1600
  ]
1579
1601
  }
1580
1602
  ) }),
@@ -1584,17 +1606,17 @@ function SidePanel({ open, onClose, title, description, children, footer, size =
1584
1606
 
1585
1607
  // src/components/Textarea/Textarea.tsx
1586
1608
  var React12 = __toESM(require("react"), 1);
1587
- var import_jsx_runtime23 = require("react/jsx-runtime");
1609
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1588
1610
  var Textarea = React12.forwardRef(
1589
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("textarea", { ref, className: cn("fractal-textarea", className), ...props })
1611
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("textarea", { ref, className: cn("fractal-textarea", className), ...props })
1590
1612
  );
1591
1613
  Textarea.displayName = "Textarea";
1592
1614
 
1593
1615
  // src/components/TextButton/TextButton.tsx
1594
1616
  var React13 = __toESM(require("react"), 1);
1595
- var import_jsx_runtime24 = require("react/jsx-runtime");
1617
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1596
1618
  var TextButton = React13.forwardRef(
1597
- ({ className, icon, iconPosition = "start", size = "md", tone = "primary", children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1619
+ ({ className, icon, iconPosition = "start", size = "md", tone = "primary", children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1598
1620
  "button",
1599
1621
  {
1600
1622
  ref,
@@ -1602,9 +1624,9 @@ var TextButton = React13.forwardRef(
1602
1624
  type: "button",
1603
1625
  ...props,
1604
1626
  children: [
1605
- icon && iconPosition === "start" && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "fractal-text-button__icon", "aria-hidden": "true", children: icon }),
1606
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children }),
1607
- icon && iconPosition === "end" && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "fractal-text-button__icon", "aria-hidden": "true", children: icon })
1627
+ icon && iconPosition === "start" && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "fractal-text-button__icon", "aria-hidden": "true", children: icon }),
1628
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children }),
1629
+ icon && iconPosition === "end" && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "fractal-text-button__icon", "aria-hidden": "true", children: icon })
1608
1630
  ]
1609
1631
  }
1610
1632
  )
@@ -1613,8 +1635,8 @@ TextButton.displayName = "TextButton";
1613
1635
 
1614
1636
  // src/components/FileDropzone/FileDropzone.tsx
1615
1637
  var React14 = __toESM(require("react"), 1);
1616
- var import_fractal_icons8 = require("@mirror-physics/fractal-icons");
1617
- var import_jsx_runtime25 = require("react/jsx-runtime");
1638
+ var import_fractal_icons9 = require("@mirror-physics/fractal-icons");
1639
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1618
1640
  function FileDropzone({
1619
1641
  files,
1620
1642
  onFilesChange,
@@ -1634,8 +1656,8 @@ function FileDropzone({
1634
1656
  if (additions.length === 0) return;
1635
1657
  onFilesChange(multiple ? [...files, ...additions] : additions.slice(0, 1));
1636
1658
  };
1637
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: cn("fractal-file-dropzone", className), children: [
1638
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1659
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: cn("fractal-file-dropzone", className), children: [
1660
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1639
1661
  "input",
1640
1662
  {
1641
1663
  ref: inputRef,
@@ -1651,7 +1673,7 @@ function FileDropzone({
1651
1673
  }
1652
1674
  }
1653
1675
  ),
1654
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1676
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1655
1677
  "button",
1656
1678
  {
1657
1679
  className: "fractal-file-dropzone__target",
@@ -1674,18 +1696,18 @@ function FileDropzone({
1674
1696
  addFiles(event.dataTransfer.files);
1675
1697
  },
1676
1698
  children: [
1677
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_fractal_icons8.FileArrowUp, { "aria-hidden": "true", size: 20 }),
1678
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: "fractal-file-dropzone__copy", children: [
1679
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "fractal-file-dropzone__title", children: title }),
1680
- description && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "fractal-file-dropzone__description", children: description })
1699
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_fractal_icons9.FileArrowUp, { "aria-hidden": "true", size: 20 }),
1700
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("span", { className: "fractal-file-dropzone__copy", children: [
1701
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "fractal-file-dropzone__title", children: title }),
1702
+ description && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "fractal-file-dropzone__description", children: description })
1681
1703
  ] })
1682
1704
  ]
1683
1705
  }
1684
1706
  ),
1685
- files.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("ul", { className: "fractal-file-dropzone__files", "aria-label": "Attached files", children: files.map((file, index) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("li", { className: "fractal-file-dropzone__file", children: [
1686
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "fractal-file-dropzone__file-name", children: file.name }),
1687
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "fractal-file-dropzone__file-meta", children: formatFileSize(file.size) }),
1688
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1707
+ files.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("ul", { className: "fractal-file-dropzone__files", "aria-label": "Attached files", children: files.map((file, index) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("li", { className: "fractal-file-dropzone__file", children: [
1708
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "fractal-file-dropzone__file-name", children: file.name }),
1709
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "fractal-file-dropzone__file-meta", children: formatFileSize(file.size) }),
1710
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1689
1711
  "button",
1690
1712
  {
1691
1713
  className: "fractal-file-dropzone__remove",
@@ -1693,7 +1715,7 @@ function FileDropzone({
1693
1715
  "aria-label": `Remove ${file.name}`,
1694
1716
  disabled,
1695
1717
  onClick: () => onFilesChange(files.filter((_, fileIndex) => fileIndex !== index)),
1696
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_fractal_icons8.Close, { "aria-hidden": "true", size: 14 })
1718
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_fractal_icons9.Close, { "aria-hidden": "true", size: 14 })
1697
1719
  }
1698
1720
  )
1699
1721
  ] }, `${file.name}-${file.size}-${index}`)) })
@@ -1706,8 +1728,8 @@ function formatFileSize(bytes) {
1706
1728
  }
1707
1729
 
1708
1730
  // src/components/Pagination/Pagination.tsx
1709
- var import_fractal_icons9 = require("@mirror-physics/fractal-icons");
1710
- var import_jsx_runtime26 = require("react/jsx-runtime");
1731
+ var import_fractal_icons10 = require("@mirror-physics/fractal-icons");
1732
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1711
1733
  function Pagination({
1712
1734
  page,
1713
1735
  pageSize,
@@ -1723,10 +1745,10 @@ function Pagination({
1723
1745
  const start = totalItems === 0 ? 0 : (currentPage - 1) * pageSize + 1;
1724
1746
  const end = Math.min(currentPage * pageSize, totalItems);
1725
1747
  const canChangePageSize = pageSizeOptions != null && pageSizeOptions.length > 0 && onPageSizeChange != null;
1726
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("nav", { className: cn("fractal-pagination", className), "aria-label": ariaLabel, children: [
1727
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "fractal-pagination__summary", children: totalItems === 0 ? "No results" : `${start}-${end} of ${totalItems}` }),
1728
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "fractal-pagination__controls", children: [
1729
- canChangePageSize && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1748
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("nav", { className: cn("fractal-pagination", className), "aria-label": ariaLabel, children: [
1749
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "fractal-pagination__summary", children: totalItems === 0 ? "No results" : `${start}-${end} of ${totalItems}` }),
1750
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "fractal-pagination__controls", children: [
1751
+ canChangePageSize && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1730
1752
  Dropdown,
1731
1753
  {
1732
1754
  align: "right",
@@ -1743,7 +1765,7 @@ function Pagination({
1743
1765
  triggerVariant: "tertiary"
1744
1766
  }
1745
1767
  ),
1746
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1768
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1747
1769
  "button",
1748
1770
  {
1749
1771
  className: "fractal-pagination__button",
@@ -1752,15 +1774,15 @@ function Pagination({
1752
1774
  title: "Previous page",
1753
1775
  disabled: currentPage === 1 || totalItems === 0,
1754
1776
  onClick: () => onPageChange(currentPage - 1),
1755
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_fractal_icons9.ArrowLeft, { "aria-hidden": "true", size: 16 })
1777
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_fractal_icons10.ArrowLeft, { "aria-hidden": "true", size: 16 })
1756
1778
  }
1757
1779
  ),
1758
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("span", { className: "fractal-pagination__page", "aria-current": "page", children: [
1780
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "fractal-pagination__page", "aria-current": "page", children: [
1759
1781
  currentPage,
1760
1782
  " of ",
1761
1783
  totalPages
1762
1784
  ] }),
1763
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1785
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1764
1786
  "button",
1765
1787
  {
1766
1788
  className: "fractal-pagination__button",
@@ -1769,7 +1791,7 @@ function Pagination({
1769
1791
  title: "Next page",
1770
1792
  disabled: currentPage === totalPages || totalItems === 0,
1771
1793
  onClick: () => onPageChange(currentPage + 1),
1772
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_fractal_icons9.ArrowRight, { "aria-hidden": "true", size: 16 })
1794
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_fractal_icons10.ArrowRight, { "aria-hidden": "true", size: 16 })
1773
1795
  }
1774
1796
  )
1775
1797
  ] })
@@ -1781,6 +1803,7 @@ function Pagination({
1781
1803
  AlertDescription,
1782
1804
  AlertGhost,
1783
1805
  AlertTitle,
1806
+ Breadcrumbs,
1784
1807
  Button,
1785
1808
  ButtonGhost,
1786
1809
  Card,