@mirror-physics/fractal-ui 0.2.0-next.43 → 0.2.0-next.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -413,11 +413,61 @@ function NumberInput({
413
413
  ] });
414
414
  }
415
415
 
416
- // src/components/Label/Label.tsx
416
+ // src/components/PasswordInput/PasswordInput.tsx
417
417
  import * as React6 from "react";
418
- import { jsx as jsx6 } from "react/jsx-runtime";
419
- var Label = React6.forwardRef(
420
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx6(
418
+ import { Eye, EyeSlash } from "@mirror-physics/fractal-icons";
419
+ import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
420
+ var PasswordInput = React6.forwardRef(
421
+ ({
422
+ className,
423
+ disabled,
424
+ showPasswordLabel = "Show password",
425
+ hidePasswordLabel = "Hide password",
426
+ ...props
427
+ }, ref) => {
428
+ const [passwordVisible, setPasswordVisible] = React6.useState(false);
429
+ const toggleLabel = passwordVisible ? hidePasswordLabel : showPasswordLabel;
430
+ return /* @__PURE__ */ jsxs6(
431
+ "div",
432
+ {
433
+ className: cn("fractal-password-input", className),
434
+ "data-password-visible": passwordVisible ? "" : void 0,
435
+ children: [
436
+ /* @__PURE__ */ jsx6(
437
+ Input,
438
+ {
439
+ ...props,
440
+ ref,
441
+ className: "fractal-password-input-field",
442
+ disabled,
443
+ type: passwordVisible ? "text" : "password"
444
+ }
445
+ ),
446
+ /* @__PURE__ */ jsx6(
447
+ "button",
448
+ {
449
+ type: "button",
450
+ className: "fractal-password-input-toggle",
451
+ "aria-label": toggleLabel,
452
+ "aria-pressed": passwordVisible,
453
+ disabled,
454
+ title: toggleLabel,
455
+ onClick: () => setPasswordVisible((visible) => !visible),
456
+ children: passwordVisible ? /* @__PURE__ */ jsx6(EyeSlash, { "aria-hidden": "true", size: 18 }) : /* @__PURE__ */ jsx6(Eye, { "aria-hidden": "true", size: 18 })
457
+ }
458
+ )
459
+ ]
460
+ }
461
+ );
462
+ }
463
+ );
464
+ PasswordInput.displayName = "PasswordInput";
465
+
466
+ // src/components/Label/Label.tsx
467
+ import * as React7 from "react";
468
+ import { jsx as jsx7 } from "react/jsx-runtime";
469
+ var Label = React7.forwardRef(
470
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx7(
421
471
  "label",
422
472
  {
423
473
  ref,
@@ -429,9 +479,9 @@ var Label = React6.forwardRef(
429
479
  Label.displayName = "Label";
430
480
 
431
481
  // src/components/Alert/Alert.tsx
432
- import * as React7 from "react";
482
+ import * as React8 from "react";
433
483
  import { CircleCheck, CircleClose, CircleInfo, Warning } from "@mirror-physics/fractal-icons";
434
- import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
484
+ import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
435
485
  var defaultIcons = {
436
486
  default: CircleInfo,
437
487
  info: CircleInfo,
@@ -439,10 +489,10 @@ var defaultIcons = {
439
489
  warning: Warning,
440
490
  error: CircleClose
441
491
  };
442
- var Alert = React7.forwardRef(
492
+ var Alert = React8.forwardRef(
443
493
  ({ className, variant = "default", icon, children, ...props }, ref) => {
444
494
  const DefaultIcon = defaultIcons[variant];
445
- return /* @__PURE__ */ jsxs6(
495
+ return /* @__PURE__ */ jsxs7(
446
496
  "div",
447
497
  {
448
498
  ref,
@@ -450,27 +500,27 @@ var Alert = React7.forwardRef(
450
500
  className: cn("fractal-alert", `fractal-alert--${variant}`, className),
451
501
  ...props,
452
502
  children: [
453
- /* @__PURE__ */ jsx7("span", { className: "fractal-alert-icon", "aria-hidden": true, children: icon ?? /* @__PURE__ */ jsx7(DefaultIcon, { size: 18 }) }),
454
- /* @__PURE__ */ jsx7("div", { className: "fractal-alert-content", children })
503
+ /* @__PURE__ */ jsx8("span", { className: "fractal-alert-icon", "aria-hidden": true, children: icon ?? /* @__PURE__ */ jsx8(DefaultIcon, { size: 18 }) }),
504
+ /* @__PURE__ */ jsx8("div", { className: "fractal-alert-content", children })
455
505
  ]
456
506
  }
457
507
  );
458
508
  }
459
509
  );
460
510
  Alert.displayName = "Alert";
461
- var AlertTitle = React7.forwardRef(
462
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx7("h5", { ref, className: cn("fractal-alert-title", className), ...props })
511
+ var AlertTitle = React8.forwardRef(
512
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx8("h5", { ref, className: cn("fractal-alert-title", className), ...props })
463
513
  );
464
514
  AlertTitle.displayName = "AlertTitle";
465
- var AlertDescription = React7.forwardRef(
466
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx7("div", { ref, className: cn("fractal-alert-description", className), ...props })
515
+ var AlertDescription = React8.forwardRef(
516
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx8("div", { ref, className: cn("fractal-alert-description", className), ...props })
467
517
  );
468
518
  AlertDescription.displayName = "AlertDescription";
469
519
 
470
520
  // src/components/Toggle/Toggle.tsx
471
- import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
521
+ import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
472
522
  function Toggle({ checked, onChange, label, className }) {
473
- return /* @__PURE__ */ jsxs7(
523
+ return /* @__PURE__ */ jsxs8(
474
524
  "button",
475
525
  {
476
526
  type: "button",
@@ -479,8 +529,8 @@ function Toggle({ checked, onChange, label, className }) {
479
529
  className: cn("fractal-toggle", className),
480
530
  onClick: () => onChange(!checked),
481
531
  children: [
482
- /* @__PURE__ */ jsx8("span", { className: cn("fractal-toggle-track", checked && "fractal-toggle-track--checked"), children: /* @__PURE__ */ jsx8("span", { className: cn("fractal-toggle-thumb", checked && "fractal-toggle-thumb--checked") }) }),
483
- label && /* @__PURE__ */ jsx8("span", { className: "fractal-toggle-label", children: label })
532
+ /* @__PURE__ */ jsx9("span", { className: cn("fractal-toggle-track", checked && "fractal-toggle-track--checked"), children: /* @__PURE__ */ jsx9("span", { className: cn("fractal-toggle-thumb", checked && "fractal-toggle-thumb--checked") }) }),
533
+ label && /* @__PURE__ */ jsx9("span", { className: "fractal-toggle-label", children: label })
484
534
  ]
485
535
  }
486
536
  );
@@ -541,7 +591,7 @@ function useEscapeDismiss(priority, handler, enabled = true) {
541
591
 
542
592
  // src/components/UILoader/UILoader.tsx
543
593
  import { useId } from "react";
544
- import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
594
+ import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
545
595
  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";
546
596
  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";
547
597
  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";
@@ -550,7 +600,7 @@ function UILoader({ size = 48, tone = "neutral", className, style, label = "Load
550
600
  const clipId = `fractal-ui-loader-clip-${rawId}`;
551
601
  const gradientId = `fractal-ui-loader-gradient-${rawId}`;
552
602
  const height = typeof size === "number" ? `${size}px` : size;
553
- return /* @__PURE__ */ jsx9(
603
+ return /* @__PURE__ */ jsx10(
554
604
  "span",
555
605
  {
556
606
  "aria-hidden": ariaHidden || void 0,
@@ -558,52 +608,52 @@ function UILoader({ size = 48, tone = "neutral", className, style, label = "Load
558
608
  className: cn("fractal-ui-loader", `fractal-ui-loader--${tone}`, className),
559
609
  role: ariaHidden ? void 0 : "status",
560
610
  style,
561
- children: /* @__PURE__ */ jsxs8("svg", { "aria-hidden": "true", fill: "none", viewBox: "0 0 144 92", style: { height, width: "auto" }, children: [
562
- /* @__PURE__ */ jsxs8("defs", { children: [
563
- /* @__PURE__ */ jsxs8("linearGradient", { id: gradientId, x1: "59", x2: "94.3", y1: "0", y2: "89.1", gradientUnits: "userSpaceOnUse", children: [
564
- /* @__PURE__ */ jsx9("stop", { className: "fractal-ui-loader__stop-start", offset: "0" }),
565
- /* @__PURE__ */ jsx9("stop", { className: "fractal-ui-loader__stop-end", offset: "1" })
611
+ children: /* @__PURE__ */ jsxs9("svg", { "aria-hidden": "true", fill: "none", viewBox: "0 0 144 92", style: { height, width: "auto" }, children: [
612
+ /* @__PURE__ */ jsxs9("defs", { children: [
613
+ /* @__PURE__ */ jsxs9("linearGradient", { id: gradientId, x1: "59", x2: "94.3", y1: "0", y2: "89.1", gradientUnits: "userSpaceOnUse", children: [
614
+ /* @__PURE__ */ jsx10("stop", { className: "fractal-ui-loader__stop-start", offset: "0" }),
615
+ /* @__PURE__ */ jsx10("stop", { className: "fractal-ui-loader__stop-end", offset: "1" })
566
616
  ] }),
567
- /* @__PURE__ */ jsxs8("linearGradient", { id: `${gradientId}-shine`, x1: "0", x2: "1", y1: "0", y2: "0", children: [
568
- /* @__PURE__ */ jsx9("stop", { offset: "0.4", stopColor: "white", stopOpacity: "0" }),
569
- /* @__PURE__ */ jsx9("stop", { offset: "0.5", stopColor: "white", stopOpacity: "0.62" }),
570
- /* @__PURE__ */ jsx9("stop", { offset: "0.6", stopColor: "white", stopOpacity: "0" })
617
+ /* @__PURE__ */ jsxs9("linearGradient", { id: `${gradientId}-shine`, x1: "0", x2: "1", y1: "0", y2: "0", children: [
618
+ /* @__PURE__ */ jsx10("stop", { offset: "0.4", stopColor: "white", stopOpacity: "0" }),
619
+ /* @__PURE__ */ jsx10("stop", { offset: "0.5", stopColor: "white", stopOpacity: "0.62" }),
620
+ /* @__PURE__ */ jsx10("stop", { offset: "0.6", stopColor: "white", stopOpacity: "0" })
571
621
  ] }),
572
- /* @__PURE__ */ jsxs8("clipPath", { id: clipId, children: [
573
- /* @__PURE__ */ jsx9("path", { d: LEFT }),
574
- /* @__PURE__ */ jsx9("path", { d: CENTER }),
575
- /* @__PURE__ */ jsx9("path", { d: RIGHT })
622
+ /* @__PURE__ */ jsxs9("clipPath", { id: clipId, children: [
623
+ /* @__PURE__ */ jsx10("path", { d: LEFT }),
624
+ /* @__PURE__ */ jsx10("path", { d: CENTER }),
625
+ /* @__PURE__ */ jsx10("path", { d: RIGHT })
576
626
  ] })
577
627
  ] }),
578
- /* @__PURE__ */ jsx9("path", { d: CENTER, fill: `url(#${gradientId})` }),
579
- /* @__PURE__ */ jsx9("path", { d: RIGHT, fill: `url(#${gradientId})` }),
580
- /* @__PURE__ */ jsx9("path", { d: LEFT, fill: `url(#${gradientId})` }),
581
- /* @__PURE__ */ jsx9("g", { clipPath: `url(#${clipId})`, children: /* @__PURE__ */ jsx9("g", { className: "fractal-ui-loader__shine-axis", transform: "translate(72 46) rotate(68.4)", children: /* @__PURE__ */ jsx9("rect", { className: "fractal-ui-loader__shine", x: "-160", y: "-100", width: "320", height: "200", fill: `url(#${gradientId}-shine)` }) }) })
628
+ /* @__PURE__ */ jsx10("path", { d: CENTER, fill: `url(#${gradientId})` }),
629
+ /* @__PURE__ */ jsx10("path", { d: RIGHT, fill: `url(#${gradientId})` }),
630
+ /* @__PURE__ */ jsx10("path", { d: LEFT, fill: `url(#${gradientId})` }),
631
+ /* @__PURE__ */ jsx10("g", { clipPath: `url(#${clipId})`, children: /* @__PURE__ */ jsx10("g", { className: "fractal-ui-loader__shine-axis", transform: "translate(72 46) rotate(68.4)", children: /* @__PURE__ */ jsx10("rect", { className: "fractal-ui-loader__shine", x: "-160", y: "-100", width: "320", height: "200", fill: `url(#${gradientId}-shine)` }) }) })
582
632
  ] })
583
633
  }
584
634
  );
585
635
  }
586
636
 
587
637
  // src/components/Modal/Modal.tsx
588
- import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
589
- var CloseIcon = () => /* @__PURE__ */ jsx10("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx10("path", { d: "M12 4L4 12M4 4L12 12", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
638
+ import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
639
+ var CloseIcon = () => /* @__PURE__ */ jsx11("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx11("path", { d: "M12 4L4 12M4 4L12 12", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
590
640
  function Modal({ open, onClose, title, children, danger, warn, footer, noClose, closeDisabled = false, size = "sm", loading = false, loadingLabel = "Loading", scrollable = false, className }) {
591
641
  useEscapeDismiss(80, onClose, open && !noClose && !closeDisabled);
592
642
  if (!open) return null;
593
643
  const sizeClass = `fractal-modal-panel--${size}`;
594
644
  const accentClass = danger ? "fractal-modal-panel--danger" : warn ? "fractal-modal-panel--warn" : "";
595
645
  return createPortal(
596
- /* @__PURE__ */ jsx10("div", { className: "fractal-modal-overlay", onClick: noClose || closeDisabled ? void 0 : onClose, children: /* @__PURE__ */ jsxs9(
646
+ /* @__PURE__ */ jsx11("div", { className: "fractal-modal-overlay", onClick: noClose || closeDisabled ? void 0 : onClose, children: /* @__PURE__ */ jsxs10(
597
647
  "div",
598
648
  {
599
649
  className: cn("fractal-modal-panel", sizeClass, accentClass, scrollable && "fractal-modal-panel--scrollable", className),
600
650
  onClick: (e) => e.stopPropagation(),
601
651
  children: [
602
- /* @__PURE__ */ jsxs9("div", { className: "fractal-modal-title-row", children: [
603
- /* @__PURE__ */ jsx10("h3", { className: cn("fractal-modal-title", danger && "fractal-modal-title--danger", warn && "fractal-modal-title--warn"), children: title }),
604
- !noClose && /* @__PURE__ */ jsx10("button", { type: "button", onClick: onClose, title: "Close", disabled: closeDisabled, className: "fractal-modal-close", children: /* @__PURE__ */ jsx10(CloseIcon, {}) })
652
+ /* @__PURE__ */ jsxs10("div", { className: "fractal-modal-title-row", children: [
653
+ /* @__PURE__ */ jsx11("h3", { className: cn("fractal-modal-title", danger && "fractal-modal-title--danger", warn && "fractal-modal-title--warn"), children: title }),
654
+ !noClose && /* @__PURE__ */ jsx11("button", { type: "button", onClick: onClose, title: "Close", disabled: closeDisabled, className: "fractal-modal-close", children: /* @__PURE__ */ jsx11(CloseIcon, {}) })
605
655
  ] }),
606
- /* @__PURE__ */ jsx10(
656
+ /* @__PURE__ */ jsx11(
607
657
  "div",
608
658
  {
609
659
  "aria-busy": loading || void 0,
@@ -613,10 +663,10 @@ function Modal({ open, onClose, title, children, danger, warn, footer, noClose,
613
663
  loading && "fractal-modal-body--loading",
614
664
  scrollable && "fractal-modal-body--scrollable"
615
665
  ),
616
- children: loading ? /* @__PURE__ */ jsx10(UILoader, { label: loadingLabel }) : children
666
+ children: loading ? /* @__PURE__ */ jsx11(UILoader, { label: loadingLabel }) : children
617
667
  }
618
668
  ),
619
- footer && /* @__PURE__ */ jsx10("div", { className: cn("fractal-modal-footer", scrollable && "fractal-modal-footer--divided"), children: footer })
669
+ footer && /* @__PURE__ */ jsx11("div", { className: cn("fractal-modal-footer", scrollable && "fractal-modal-footer--divided"), children: footer })
620
670
  ]
621
671
  }
622
672
  ) }),
@@ -625,17 +675,17 @@ function Modal({ open, onClose, title, children, danger, warn, footer, noClose,
625
675
  }
626
676
 
627
677
  // src/components/DataTable/DataTable.tsx
628
- import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
678
+ import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
629
679
  function DataTable({ columns, data, emptyMessage, header, size = "md", className }) {
630
- return /* @__PURE__ */ jsx11("div", { className: cn("fractal-datatable", `fractal-datatable--${size}`, className), children: /* @__PURE__ */ jsxs10("div", { className: "fractal-datatable-surface", children: [
631
- header && /* @__PURE__ */ jsx11("div", { className: "fractal-datatable-header", children: header }),
632
- data.length === 0 ? /* @__PURE__ */ jsx11("div", { className: "fractal-datatable-empty", children: emptyMessage || "No data" }) : /* @__PURE__ */ jsxs10("table", { className: "fractal-datatable-table", children: [
633
- /* @__PURE__ */ jsx11("thead", { children: /* @__PURE__ */ jsx11("tr", { className: "fractal-datatable-thead-row", children: columns.map((col) => /* @__PURE__ */ jsx11("th", { className: "fractal-datatable-th", style: { width: col.width }, children: col.header }, col.key)) }) }),
634
- /* @__PURE__ */ jsx11("tbody", { children: data.map((row, rowIndex) => /* @__PURE__ */ jsx11(
680
+ return /* @__PURE__ */ jsx12("div", { className: cn("fractal-datatable", `fractal-datatable--${size}`, className), children: /* @__PURE__ */ jsxs11("div", { className: "fractal-datatable-surface", children: [
681
+ header && /* @__PURE__ */ jsx12("div", { className: "fractal-datatable-header", children: header }),
682
+ data.length === 0 ? /* @__PURE__ */ jsx12("div", { className: "fractal-datatable-empty", children: emptyMessage || "No data" }) : /* @__PURE__ */ jsxs11("table", { className: "fractal-datatable-table", children: [
683
+ /* @__PURE__ */ jsx12("thead", { children: /* @__PURE__ */ jsx12("tr", { className: "fractal-datatable-thead-row", children: columns.map((col) => /* @__PURE__ */ jsx12("th", { className: "fractal-datatable-th", style: { width: col.width }, children: col.header }, col.key)) }) }),
684
+ /* @__PURE__ */ jsx12("tbody", { children: data.map((row, rowIndex) => /* @__PURE__ */ jsx12(
635
685
  "tr",
636
686
  {
637
687
  className: "fractal-datatable-row",
638
- children: columns.map((col) => /* @__PURE__ */ jsx11("td", { className: "fractal-datatable-td", style: { width: col.width }, children: col.render(row, rowIndex) }, col.key))
688
+ children: columns.map((col) => /* @__PURE__ */ jsx12("td", { className: "fractal-datatable-td", style: { width: col.width }, children: col.render(row, rowIndex) }, col.key))
639
689
  },
640
690
  rowIndex
641
691
  )) })
@@ -644,9 +694,9 @@ function DataTable({ columns, data, emptyMessage, header, size = "md", className
644
694
  }
645
695
 
646
696
  // src/components/Dropdown/Dropdown.tsx
647
- import * as React8 from "react";
697
+ import * as React9 from "react";
648
698
  import { ChevronDown, ChevronUp } from "@mirror-physics/fractal-icons";
649
- import { Fragment as Fragment2, jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
699
+ import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
650
700
  var MARGIN = 4;
651
701
  function Dropdown({
652
702
  items,
@@ -667,10 +717,10 @@ function Dropdown({
667
717
  closeOnSelect = true,
668
718
  disabled = false
669
719
  }) {
670
- const [open, setOpen] = React8.useState(false);
671
- const triggerRef = React8.useRef(null);
672
- const panelRef = React8.useRef(null);
673
- const [panelStyle, setPanelStyle] = React8.useState({});
720
+ const [open, setOpen] = React9.useState(false);
721
+ const triggerRef = React9.useRef(null);
722
+ const panelRef = React9.useRef(null);
723
+ const [panelStyle, setPanelStyle] = React9.useState({});
674
724
  const visibleItems = items.filter(
675
725
  (item) => item.icon != null || item.description != null && (typeof item.description === "string" ? item.description !== "" : true)
676
726
  );
@@ -679,7 +729,7 @@ function Dropdown({
679
729
  const selected = items.find((i) => i.value === selectedValue && i.kind !== "header") ?? selectableItems[0] ?? visibleItems[0];
680
730
  const isUp = direction === "up";
681
731
  const ChevronIcon = isUp ? ChevronUp : ChevronDown;
682
- React8.useLayoutEffect(() => {
732
+ React9.useLayoutEffect(() => {
683
733
  if (!open || !triggerRef.current || !panelRef.current) return;
684
734
  const triggerRect = triggerRef.current.getBoundingClientRect();
685
735
  const panelRect = panelRef.current.getBoundingClientRect();
@@ -713,7 +763,7 @@ function Dropdown({
713
763
  }
714
764
  setPanelStyle({ top, left, right });
715
765
  }, [open, isUp, align]);
716
- React8.useEffect(() => {
766
+ React9.useEffect(() => {
717
767
  if (!open) return;
718
768
  const handleClickOutside = (e) => {
719
769
  const target = e.target;
@@ -723,8 +773,8 @@ function Dropdown({
723
773
  document.addEventListener("mousedown", handleClickOutside);
724
774
  return () => document.removeEventListener("mousedown", handleClickOutside);
725
775
  }, [open]);
726
- return /* @__PURE__ */ jsxs11("div", { className: cn("fractal-dropdown", className), children: [
727
- /* @__PURE__ */ jsxs11(
776
+ return /* @__PURE__ */ jsxs12("div", { className: cn("fractal-dropdown", className), children: [
777
+ /* @__PURE__ */ jsxs12(
728
778
  "button",
729
779
  {
730
780
  ref: triggerRef,
@@ -742,15 +792,15 @@ function Dropdown({
742
792
  triggerClassName
743
793
  ),
744
794
  children: [
745
- triggerContent != null ? triggerContent : /* @__PURE__ */ jsxs11(Fragment2, { children: [
746
- selected.icon != null && /* @__PURE__ */ jsx12("span", { className: "fractal-dropdown-icon fractal-dropdown-icon--trigger", children: selected.icon }),
747
- selected.description != null && (typeof selected.description !== "string" || selected.description !== "") && /* @__PURE__ */ jsx12("span", { className: "fractal-dropdown-selected-text", children: selected.description })
795
+ triggerContent != null ? triggerContent : /* @__PURE__ */ jsxs12(Fragment2, { children: [
796
+ selected.icon != null && /* @__PURE__ */ jsx13("span", { className: "fractal-dropdown-icon fractal-dropdown-icon--trigger", children: selected.icon }),
797
+ selected.description != null && (typeof selected.description !== "string" || selected.description !== "") && /* @__PURE__ */ jsx13("span", { className: "fractal-dropdown-selected-text", children: selected.description })
748
798
  ] }),
749
- !noChevron && !iconOnly && /* @__PURE__ */ jsx12("span", { className: "fractal-dropdown-chevron", "aria-hidden": true, children: /* @__PURE__ */ jsx12(ChevronIcon, { size: size === "sm" ? 14 : 16 }) })
799
+ !noChevron && !iconOnly && /* @__PURE__ */ jsx13("span", { className: "fractal-dropdown-chevron", "aria-hidden": true, children: /* @__PURE__ */ jsx13(ChevronIcon, { size: size === "sm" ? 14 : 16 }) })
750
800
  ]
751
801
  }
752
802
  ),
753
- open && /* @__PURE__ */ jsxs11(
803
+ open && /* @__PURE__ */ jsxs12(
754
804
  "div",
755
805
  {
756
806
  ref: panelRef,
@@ -759,21 +809,21 @@ function Dropdown({
759
809
  className: cn("fractal-dropdown-panel", `fractal-dropdown-panel--${size}`, panelClassName),
760
810
  style: panelStyle,
761
811
  children: [
762
- label != null && /* @__PURE__ */ jsx12("div", { className: "fractal-dropdown-label", children: label }),
812
+ label != null && /* @__PURE__ */ jsx13("div", { className: "fractal-dropdown-label", children: label }),
763
813
  visibleItems.map((item, index) => {
764
- const topDivider = item.border === "top" ? /* @__PURE__ */ jsx12("div", { className: "fractal-dropdown-separator" }) : null;
765
- const bottomDivider = item.border === "bottom" ? /* @__PURE__ */ jsx12("div", { className: "fractal-dropdown-separator" }) : null;
814
+ const topDivider = item.border === "top" ? /* @__PURE__ */ jsx13("div", { className: "fractal-dropdown-separator" }) : null;
815
+ const bottomDivider = item.border === "bottom" ? /* @__PURE__ */ jsx13("div", { className: "fractal-dropdown-separator" }) : null;
766
816
  if (item.kind === "header") {
767
- return /* @__PURE__ */ jsxs11(React8.Fragment, { children: [
817
+ return /* @__PURE__ */ jsxs12(React9.Fragment, { children: [
768
818
  topDivider,
769
- /* @__PURE__ */ jsx12("div", { role: "presentation", className: "fractal-dropdown-label", children: item.description }),
819
+ /* @__PURE__ */ jsx13("div", { role: "presentation", className: "fractal-dropdown-label", children: item.description }),
770
820
  bottomDivider
771
821
  ] }, `header-${index}`);
772
822
  }
773
823
  const isSelected = item.value === selectedValue;
774
- return /* @__PURE__ */ jsxs11(React8.Fragment, { children: [
824
+ return /* @__PURE__ */ jsxs12(React9.Fragment, { children: [
775
825
  topDivider,
776
- /* @__PURE__ */ jsxs11(
826
+ /* @__PURE__ */ jsxs12(
777
827
  "button",
778
828
  {
779
829
  type: "button",
@@ -785,9 +835,9 @@ function Dropdown({
785
835
  },
786
836
  className: "fractal-dropdown-option",
787
837
  children: [
788
- item.icon != null && /* @__PURE__ */ jsx12("span", { className: "fractal-dropdown-icon", children: item.icon }),
789
- item.description != null && (typeof item.description !== "string" || item.description !== "") && /* @__PURE__ */ jsx12("span", { className: "fractal-dropdown-option-text", children: item.description }),
790
- item.trailing != null && /* @__PURE__ */ jsx12("span", { className: "fractal-dropdown-trailing", children: item.trailing })
838
+ item.icon != null && /* @__PURE__ */ jsx13("span", { className: "fractal-dropdown-icon", children: item.icon }),
839
+ item.description != null && (typeof item.description !== "string" || item.description !== "") && /* @__PURE__ */ jsx13("span", { className: "fractal-dropdown-option-text", children: item.description }),
840
+ item.trailing != null && /* @__PURE__ */ jsx13("span", { className: "fractal-dropdown-trailing", children: item.trailing })
791
841
  ]
792
842
  }
793
843
  ),
@@ -801,10 +851,10 @@ function Dropdown({
801
851
  }
802
852
 
803
853
  // src/components/Link/Link.tsx
804
- import * as React9 from "react";
805
- import { jsx as jsx13 } from "react/jsx-runtime";
806
- var Link = React9.forwardRef(
807
- ({ className, theme = "default", size = "md", ...props }, ref) => /* @__PURE__ */ jsx13(
854
+ import * as React10 from "react";
855
+ import { jsx as jsx14 } from "react/jsx-runtime";
856
+ var Link = React10.forwardRef(
857
+ ({ className, theme = "default", size = "md", ...props }, ref) => /* @__PURE__ */ jsx14(
808
858
  "a",
809
859
  {
810
860
  ref,
@@ -816,10 +866,10 @@ var Link = React9.forwardRef(
816
866
  Link.displayName = "Link";
817
867
 
818
868
  // src/components/Chip/Chip.tsx
819
- import * as React10 from "react";
820
- import { jsx as jsx14 } from "react/jsx-runtime";
821
- var Chip = React10.forwardRef(
822
- ({ className, tone = "neutral", ...props }, ref) => /* @__PURE__ */ jsx14(
869
+ import * as React11 from "react";
870
+ import { jsx as jsx15 } from "react/jsx-runtime";
871
+ var Chip = React11.forwardRef(
872
+ ({ className, tone = "neutral", ...props }, ref) => /* @__PURE__ */ jsx15(
823
873
  "span",
824
874
  {
825
875
  ref,
@@ -832,7 +882,7 @@ Chip.displayName = "Chip";
832
882
 
833
883
  // src/components/Checkbox/Checkbox.tsx
834
884
  import { Checkbox as CheckboxIcon, CheckboxChecked, Minus as Minus2 } from "@mirror-physics/fractal-icons";
835
- import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
885
+ import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
836
886
  function Checkbox({
837
887
  checked,
838
888
  indeterminate = false,
@@ -843,7 +893,7 @@ function Checkbox({
843
893
  onKeyDown,
844
894
  ...props
845
895
  }) {
846
- return /* @__PURE__ */ jsx15(
896
+ return /* @__PURE__ */ jsx16(
847
897
  "button",
848
898
  {
849
899
  ...props,
@@ -865,18 +915,18 @@ function Checkbox({
865
915
  onKeyDown?.(event);
866
916
  if (event.key === " " || event.key === "Enter") event.stopPropagation();
867
917
  },
868
- children: indeterminate ? /* @__PURE__ */ jsxs12("span", { className: "fractal-checkbox__indeterminate-icon", "aria-hidden": "true", children: [
869
- /* @__PURE__ */ jsx15(CheckboxIcon, { size: 18 }),
870
- /* @__PURE__ */ jsx15(Minus2, { className: "fractal-checkbox__indeterminate-mark", size: 12 })
871
- ] }) : checked ? /* @__PURE__ */ jsx15(CheckboxChecked, { "aria-hidden": "true", size: 18 }) : /* @__PURE__ */ jsx15(CheckboxIcon, { "aria-hidden": "true", size: 18 })
918
+ children: indeterminate ? /* @__PURE__ */ jsxs13("span", { className: "fractal-checkbox__indeterminate-icon", "aria-hidden": "true", children: [
919
+ /* @__PURE__ */ jsx16(CheckboxIcon, { size: 18 }),
920
+ /* @__PURE__ */ jsx16(Minus2, { className: "fractal-checkbox__indeterminate-mark", size: 12 })
921
+ ] }) : checked ? /* @__PURE__ */ jsx16(CheckboxChecked, { "aria-hidden": "true", size: 18 }) : /* @__PURE__ */ jsx16(CheckboxIcon, { "aria-hidden": "true", size: 18 })
872
922
  }
873
923
  );
874
924
  }
875
925
 
876
926
  // src/components/SortableTable/SortableTable.tsx
877
- import { useMemo, useState as useState3 } from "react";
927
+ import { useMemo, useState as useState4 } from "react";
878
928
  import { ArrowUp, ArrowDown, ArrowsUpDown } from "@mirror-physics/fractal-icons";
879
- import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
929
+ import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
880
930
  function SortableTable({
881
931
  columns,
882
932
  data,
@@ -895,8 +945,8 @@ function SortableTable({
895
945
  onRowClick,
896
946
  rowAction
897
947
  }) {
898
- const [internalKey, setInternalKey] = useState3(defaultSortKey ?? null);
899
- const [internalDirection, setInternalDirection] = useState3(defaultSortDirection);
948
+ const [internalKey, setInternalKey] = useState4(defaultSortKey ?? null);
949
+ const [internalDirection, setInternalDirection] = useState4(defaultSortDirection);
900
950
  const isControlled = controlledKey !== void 0 && controlledDirection !== void 0;
901
951
  const activeKey = isControlled ? controlledKey : internalKey;
902
952
  const activeDirection = isControlled ? controlledDirection : internalDirection;
@@ -952,13 +1002,13 @@ function SortableTable({
952
1002
  onSortChange?.(nextKey, nextDirection);
953
1003
  }
954
1004
  };
955
- return /* @__PURE__ */ jsx16("div", { className: cn("fractal-sortable-table", `fractal-sortable-table--${size}`, embedded && "fractal-sortable-table--embedded", className), children: /* @__PURE__ */ jsxs13("div", { className: "fractal-sortable-table-surface", children: [
956
- header && /* @__PURE__ */ jsx16("div", { className: "fractal-sortable-table-header", children: header }),
957
- sorted.length === 0 ? /* @__PURE__ */ jsx16("div", { className: "fractal-sortable-table-empty", children: emptyMessage || "No data" }) : /* @__PURE__ */ jsxs13("table", { className: "fractal-sortable-table-table", children: [
958
- /* @__PURE__ */ jsx16("thead", { children: /* @__PURE__ */ jsx16("tr", { className: "fractal-sortable-table-thead-row", children: columns.map((col) => {
1005
+ return /* @__PURE__ */ jsx17("div", { className: cn("fractal-sortable-table", `fractal-sortable-table--${size}`, embedded && "fractal-sortable-table--embedded", className), children: /* @__PURE__ */ jsxs14("div", { className: "fractal-sortable-table-surface", children: [
1006
+ header && /* @__PURE__ */ jsx17("div", { className: "fractal-sortable-table-header", children: header }),
1007
+ sorted.length === 0 ? /* @__PURE__ */ jsx17("div", { className: "fractal-sortable-table-empty", children: emptyMessage || "No data" }) : /* @__PURE__ */ jsxs14("table", { className: "fractal-sortable-table-table", children: [
1008
+ /* @__PURE__ */ jsx17("thead", { children: /* @__PURE__ */ jsx17("tr", { className: "fractal-sortable-table-thead-row", children: columns.map((col) => {
959
1009
  const isActive = activeKey === col.key && activeDirection !== null;
960
1010
  if (!col.sortable) {
961
- return /* @__PURE__ */ jsx16(
1011
+ return /* @__PURE__ */ jsx17(
962
1012
  "th",
963
1013
  {
964
1014
  className: "fractal-sortable-table-th",
@@ -968,12 +1018,12 @@ function SortableTable({
968
1018
  col.key
969
1019
  );
970
1020
  }
971
- return /* @__PURE__ */ jsx16(
1021
+ return /* @__PURE__ */ jsx17(
972
1022
  "th",
973
1023
  {
974
1024
  className: "fractal-sortable-table-th fractal-sortable-table-th--sortable",
975
1025
  style: { width: col.width },
976
- children: /* @__PURE__ */ jsxs13(
1026
+ children: /* @__PURE__ */ jsxs14(
977
1027
  "button",
978
1028
  {
979
1029
  type: "button",
@@ -984,8 +1034,8 @@ function SortableTable({
984
1034
  onClick: () => handleSortClick(col.key),
985
1035
  "aria-sort": isActive ? activeDirection === "asc" ? "ascending" : "descending" : "none",
986
1036
  children: [
987
- /* @__PURE__ */ jsx16("span", { children: col.header }),
988
- /* @__PURE__ */ jsx16("span", { className: "fractal-sortable-table-sort-icon", "aria-hidden": "true", children: isActive && activeDirection === "asc" ? /* @__PURE__ */ jsx16(ArrowUp, { size: 14 }) : isActive && activeDirection === "desc" ? /* @__PURE__ */ jsx16(ArrowDown, { size: 14 }) : /* @__PURE__ */ jsx16(ArrowsUpDown, { size: 14 }) })
1037
+ /* @__PURE__ */ jsx17("span", { children: col.header }),
1038
+ /* @__PURE__ */ jsx17("span", { className: "fractal-sortable-table-sort-icon", "aria-hidden": "true", children: isActive && activeDirection === "asc" ? /* @__PURE__ */ jsx17(ArrowUp, { size: 14 }) : isActive && activeDirection === "desc" ? /* @__PURE__ */ jsx17(ArrowDown, { size: 14 }) : /* @__PURE__ */ jsx17(ArrowsUpDown, { size: 14 }) })
989
1039
  ]
990
1040
  }
991
1041
  )
@@ -993,13 +1043,13 @@ function SortableTable({
993
1043
  col.key
994
1044
  );
995
1045
  }) }) }),
996
- /* @__PURE__ */ jsx16("tbody", { children: sorted.map((row, rowIndex) => {
1046
+ /* @__PURE__ */ jsx17("tbody", { children: sorted.map((row, rowIndex) => {
997
1047
  const highlighted = highlightRow?.(row, rowIndex) ?? false;
998
1048
  const action = rowAction ? {
999
1049
  label: rowAction.label(row, rowIndex),
1000
1050
  icon: rowAction.icon(row, rowIndex)
1001
1051
  } : null;
1002
- return /* @__PURE__ */ jsx16(
1052
+ return /* @__PURE__ */ jsx17(
1003
1053
  "tr",
1004
1054
  {
1005
1055
  className: cn(
@@ -1017,7 +1067,7 @@ function SortableTable({
1017
1067
  "aria-label": action?.label,
1018
1068
  role: onRowClick ? "button" : void 0,
1019
1069
  tabIndex: onRowClick ? 0 : void 0,
1020
- children: columns.map((col, columnIndex) => /* @__PURE__ */ jsxs13(
1070
+ children: columns.map((col, columnIndex) => /* @__PURE__ */ jsxs14(
1021
1071
  "td",
1022
1072
  {
1023
1073
  className: cn(
@@ -1027,7 +1077,7 @@ function SortableTable({
1027
1077
  style: { width: col.width, textAlign: col.align ?? "left" },
1028
1078
  children: [
1029
1079
  col.render(row, rowIndex),
1030
- action && columnIndex === columns.length - 1 && /* @__PURE__ */ jsx16("span", { className: "fractal-sortable-table-row-action", "aria-hidden": "true", children: /* @__PURE__ */ jsx16("span", { className: "fractal-sortable-table-row-action__icon", children: action.icon }) })
1080
+ action && columnIndex === columns.length - 1 && /* @__PURE__ */ jsx17("span", { className: "fractal-sortable-table-row-action", "aria-hidden": "true", children: /* @__PURE__ */ jsx17("span", { className: "fractal-sortable-table-row-action__icon", children: action.icon }) })
1031
1081
  ]
1032
1082
  },
1033
1083
  col.key
@@ -1041,8 +1091,8 @@ function SortableTable({
1041
1091
  }
1042
1092
 
1043
1093
  // src/components/Tabs/Tabs.tsx
1044
- import { useId as useId2, useLayoutEffect as useLayoutEffect2, useRef as useRef4, useState as useState4 } from "react";
1045
- import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
1094
+ import { useId as useId2, useLayoutEffect as useLayoutEffect2, useRef as useRef4, useState as useState5 } from "react";
1095
+ import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
1046
1096
  function Tabs({
1047
1097
  items,
1048
1098
  defaultValue,
@@ -1054,14 +1104,14 @@ function Tabs({
1054
1104
  variant = "line"
1055
1105
  }) {
1056
1106
  const reactId = useId2();
1057
- const [internalValue, setInternalValue] = useState4(
1107
+ const [internalValue, setInternalValue] = useState5(
1058
1108
  defaultValue ?? items.find((i) => !i.disabled)?.id ?? items[0]?.id ?? ""
1059
1109
  );
1060
1110
  const isControlled = controlledValue !== void 0;
1061
1111
  const activeId = isControlled ? controlledValue : internalValue;
1062
1112
  const tabListRef = useRef4(null);
1063
1113
  const tabRefs = useRef4({});
1064
- const [indicator, setIndicator] = useState4(null);
1114
+ const [indicator, setIndicator] = useState5(null);
1065
1115
  useLayoutEffect2(() => {
1066
1116
  const updateIndicator = () => {
1067
1117
  const activeTab = tabRefs.current[activeId];
@@ -1113,8 +1163,8 @@ function Tabs({
1113
1163
  selectTab(nextId2);
1114
1164
  requestAnimationFrame(() => tabRefs.current[nextId2]?.focus());
1115
1165
  };
1116
- return /* @__PURE__ */ jsxs14("div", { className: cn("fractal-tabs", `fractal-tabs--${variant}`, divider && "fractal-tabs--divider", className), children: [
1117
- /* @__PURE__ */ jsx17(
1166
+ return /* @__PURE__ */ jsxs15("div", { className: cn("fractal-tabs", `fractal-tabs--${variant}`, divider && "fractal-tabs--divider", className), children: [
1167
+ /* @__PURE__ */ jsx18(
1118
1168
  "div",
1119
1169
  {
1120
1170
  ref: tabListRef,
@@ -1127,7 +1177,7 @@ function Tabs({
1127
1177
  const isActive = item.id === activeId;
1128
1178
  const tabId = `${reactId}-tab-${item.id}`;
1129
1179
  const panelId = `${reactId}-panel-${item.id}`;
1130
- return /* @__PURE__ */ jsx17(
1180
+ return /* @__PURE__ */ jsx18(
1131
1181
  "button",
1132
1182
  {
1133
1183
  ref: (el) => {
@@ -1158,7 +1208,7 @@ function Tabs({
1158
1208
  const tabId = `${reactId}-tab-${item.id}`;
1159
1209
  const panelId = `${reactId}-panel-${item.id}`;
1160
1210
  const isActive = item.id === activeId;
1161
- return /* @__PURE__ */ jsx17(
1211
+ return /* @__PURE__ */ jsx18(
1162
1212
  "div",
1163
1213
  {
1164
1214
  id: panelId,
@@ -1175,14 +1225,14 @@ function Tabs({
1175
1225
  }
1176
1226
 
1177
1227
  // src/components/ContentSwitcher/ContentSwitcher.tsx
1178
- import * as React11 from "react";
1179
- import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
1228
+ import * as React12 from "react";
1229
+ import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
1180
1230
  function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = false, className }) {
1181
- const switcherRef = React11.useRef(null);
1182
- const buttonRefs = React11.useRef([]);
1183
- const indicatorMotionReadyRef = React11.useRef(false);
1231
+ const switcherRef = React12.useRef(null);
1232
+ const buttonRefs = React12.useRef([]);
1233
+ const indicatorMotionReadyRef = React12.useRef(false);
1184
1234
  const activeIndex = items.findIndex((item) => item.value === value);
1185
- React11.useLayoutEffect(() => {
1235
+ React12.useLayoutEffect(() => {
1186
1236
  const switcher = switcherRef.current;
1187
1237
  const activeButton = buttonRefs.current[activeIndex];
1188
1238
  let motionFrame = 0;
@@ -1234,7 +1284,7 @@ function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = f
1234
1284
  onValueChange(items[nextIndex].value);
1235
1285
  }
1236
1286
  };
1237
- return /* @__PURE__ */ jsxs15(
1287
+ return /* @__PURE__ */ jsxs16(
1238
1288
  "div",
1239
1289
  {
1240
1290
  className: cn("fractal-content-switcher", fullWidth && "fractal-content-switcher--full-width", className),
@@ -1242,10 +1292,10 @@ function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = f
1242
1292
  "aria-label": ariaLabel,
1243
1293
  ref: switcherRef,
1244
1294
  children: [
1245
- /* @__PURE__ */ jsx18("span", { className: "fractal-content-switcher__indicator", "aria-hidden": true }),
1295
+ /* @__PURE__ */ jsx19("span", { className: "fractal-content-switcher__indicator", "aria-hidden": true }),
1246
1296
  items.map((item, index) => {
1247
1297
  const active = item.value === value;
1248
- return /* @__PURE__ */ jsx18(
1298
+ return /* @__PURE__ */ jsx19(
1249
1299
  "button",
1250
1300
  {
1251
1301
  className: cn("fractal-content-switcher__item", active && "fractal-content-switcher__item--active"),
@@ -1277,9 +1327,9 @@ function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = f
1277
1327
  }
1278
1328
 
1279
1329
  // src/components/Disclosure/Disclosure.tsx
1280
- import { useId as useId3, useState as useState5 } from "react";
1330
+ import { useId as useId3, useState as useState6 } from "react";
1281
1331
  import { ChevronRight as ChevronRight2, ChevronDown as ChevronDown2 } from "@mirror-physics/fractal-icons";
1282
- import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
1332
+ import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
1283
1333
  function Disclosure({
1284
1334
  title,
1285
1335
  meta,
@@ -1294,7 +1344,7 @@ function Disclosure({
1294
1344
  const reactId = useId3();
1295
1345
  const headerId = `${reactId}-header`;
1296
1346
  const panelId = `${reactId}-panel`;
1297
- const [internalOpen, setInternalOpen] = useState5(defaultOpen);
1347
+ const [internalOpen, setInternalOpen] = useState6(defaultOpen);
1298
1348
  const isControlled = controlledOpen !== void 0;
1299
1349
  const isOpen = isControlled ? controlledOpen : internalOpen;
1300
1350
  const toggle = () => {
@@ -1307,7 +1357,7 @@ function Disclosure({
1307
1357
  onOpenChange?.(next);
1308
1358
  }
1309
1359
  };
1310
- return /* @__PURE__ */ jsxs16(
1360
+ return /* @__PURE__ */ jsxs17(
1311
1361
  "div",
1312
1362
  {
1313
1363
  className: cn(
@@ -1318,7 +1368,7 @@ function Disclosure({
1318
1368
  className
1319
1369
  ),
1320
1370
  children: [
1321
- /* @__PURE__ */ jsxs16(
1371
+ /* @__PURE__ */ jsxs17(
1322
1372
  "button",
1323
1373
  {
1324
1374
  type: "button",
@@ -1329,13 +1379,13 @@ function Disclosure({
1329
1379
  disabled,
1330
1380
  onClick: toggle,
1331
1381
  children: [
1332
- /* @__PURE__ */ jsx19("span", { className: "fractal-disclosure-icon", "aria-hidden": "true", children: isOpen ? /* @__PURE__ */ jsx19(ChevronDown2, { size: 16 }) : /* @__PURE__ */ jsx19(ChevronRight2, { size: 16 }) }),
1333
- /* @__PURE__ */ jsx19("span", { className: "fractal-disclosure-title", children: title }),
1334
- meta && /* @__PURE__ */ jsx19("span", { className: "fractal-disclosure-meta", children: meta })
1382
+ /* @__PURE__ */ jsx20("span", { className: "fractal-disclosure-icon", "aria-hidden": "true", children: isOpen ? /* @__PURE__ */ jsx20(ChevronDown2, { size: 16 }) : /* @__PURE__ */ jsx20(ChevronRight2, { size: 16 }) }),
1383
+ /* @__PURE__ */ jsx20("span", { className: "fractal-disclosure-title", children: title }),
1384
+ meta && /* @__PURE__ */ jsx20("span", { className: "fractal-disclosure-meta", children: meta })
1335
1385
  ]
1336
1386
  }
1337
1387
  ),
1338
- /* @__PURE__ */ jsx19(
1388
+ /* @__PURE__ */ jsx20(
1339
1389
  "div",
1340
1390
  {
1341
1391
  id: panelId,
@@ -1343,7 +1393,7 @@ function Disclosure({
1343
1393
  "aria-labelledby": headerId,
1344
1394
  className: "fractal-disclosure-panel",
1345
1395
  hidden: !isOpen,
1346
- children: /* @__PURE__ */ jsx19("div", { className: "fractal-disclosure-panel-inner", children })
1396
+ children: /* @__PURE__ */ jsx20("div", { className: "fractal-disclosure-panel-inner", children })
1347
1397
  }
1348
1398
  )
1349
1399
  ]
@@ -1352,18 +1402,18 @@ function Disclosure({
1352
1402
  }
1353
1403
 
1354
1404
  // src/components/LatticeLoader/LatticeLoader.tsx
1355
- import { jsx as jsx20 } from "react/jsx-runtime";
1405
+ import { jsx as jsx21 } from "react/jsx-runtime";
1356
1406
  var LATTICE_COUNT = 160;
1357
1407
  var WAVE_PERIOD = 80;
1358
1408
  function LatticeLoader({ className, label = "Loading", ...props }) {
1359
- return /* @__PURE__ */ jsx20(
1409
+ return /* @__PURE__ */ jsx21(
1360
1410
  "span",
1361
1411
  {
1362
1412
  "aria-label": label,
1363
1413
  className: cn("fractal-lattice-loader", className),
1364
1414
  role: "progressbar",
1365
1415
  ...props,
1366
- children: Array.from({ length: LATTICE_COUNT }, (_, index) => /* @__PURE__ */ jsx20(
1416
+ children: Array.from({ length: LATTICE_COUNT }, (_, index) => /* @__PURE__ */ jsx21(
1367
1417
  "span",
1368
1418
  {
1369
1419
  "aria-hidden": "true",
@@ -1377,10 +1427,10 @@ function LatticeLoader({ className, label = "Loading", ...props }) {
1377
1427
  }
1378
1428
 
1379
1429
  // src/components/Ghost/Ghost.tsx
1380
- import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
1430
+ import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
1381
1431
  var toCssLength = (value) => typeof value === "number" ? `${value}px` : value;
1382
1432
  function Ghost({ className, width, height, radius, style, ...props }) {
1383
- return /* @__PURE__ */ jsx21(
1433
+ return /* @__PURE__ */ jsx22(
1384
1434
  "div",
1385
1435
  {
1386
1436
  "aria-hidden": "true",
@@ -1396,15 +1446,15 @@ function Ghost({ className, width, height, radius, style, ...props }) {
1396
1446
  );
1397
1447
  }
1398
1448
  function GhostLine({ className, size = "md", width = "100%", ...props }) {
1399
- return /* @__PURE__ */ jsx21(Ghost, { className: cn("fractal-ghost-line", `fractal-ghost-line--${size}`, className), width, ...props });
1449
+ return /* @__PURE__ */ jsx22(Ghost, { className: cn("fractal-ghost-line", `fractal-ghost-line--${size}`, className), width, ...props });
1400
1450
  }
1401
1451
  function ButtonGhost({ className, size = "md", iconOnly = false, width, ...props }) {
1402
- return /* @__PURE__ */ jsx21(Ghost, { className: cn("fractal-ghost-button", `fractal-ghost-button--${size}`, iconOnly && "fractal-ghost-button--icon-only", className), width, ...props });
1452
+ return /* @__PURE__ */ jsx22(Ghost, { className: cn("fractal-ghost-button", `fractal-ghost-button--${size}`, iconOnly && "fractal-ghost-button--icon-only", className), width, ...props });
1403
1453
  }
1404
1454
  function CardGhost({ className, lines = 3, showHeader = true, ...props }) {
1405
- return /* @__PURE__ */ jsxs17("div", { "aria-hidden": "true", className: cn("fractal-ghost-card", className), ...props, children: [
1406
- showHeader && /* @__PURE__ */ jsx21(GhostLine, { width: "38%" }),
1407
- /* @__PURE__ */ jsx21("div", { className: "fractal-ghost-stack", children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ jsx21(GhostLine, { width: index === lines - 1 ? "62%" : "100%" }, index)) })
1455
+ return /* @__PURE__ */ jsxs18("div", { "aria-hidden": "true", className: cn("fractal-ghost-card", className), ...props, children: [
1456
+ showHeader && /* @__PURE__ */ jsx22(GhostLine, { width: "38%" }),
1457
+ /* @__PURE__ */ jsx22("div", { className: "fractal-ghost-stack", children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ jsx22(GhostLine, { width: index === lines - 1 ? "62%" : "100%" }, index)) })
1408
1458
  ] });
1409
1459
  }
1410
1460
  function DataTableGhost({
@@ -1418,109 +1468,142 @@ function DataTableGhost({
1418
1468
  ...props
1419
1469
  }) {
1420
1470
  const cells = Array.from({ length: columns }, (_, index) => index);
1421
- return /* @__PURE__ */ jsx21("div", { "aria-busy": "true", "aria-label": "Loading table", className: cn("fractal-ghost-table", `fractal-ghost-table--${size}`, className), role: "status", ...props, children: /* @__PURE__ */ jsxs17("table", { className: "fractal-ghost-table__table", children: [
1422
- (showHeader || headers) && /* @__PURE__ */ jsx21("thead", { children: /* @__PURE__ */ jsx21("tr", { className: "fractal-ghost-table__head-row", children: cells.map((index) => /* @__PURE__ */ jsx21("th", { style: { width: columnWidths?.[index] }, children: headers?.[index] ?? /* @__PURE__ */ jsx21(GhostLine, { size: "sm", width: index === columns - 1 ? "62%" : "76%" }) }, index)) }) }),
1423
- /* @__PURE__ */ jsx21("tbody", { children: Array.from({ length: rows }, (_, rowIndex) => /* @__PURE__ */ jsx21("tr", { className: "fractal-ghost-table__row", children: cells.map((columnIndex) => /* @__PURE__ */ jsx21("td", { style: { width: columnWidths?.[columnIndex] }, children: /* @__PURE__ */ jsx21(GhostLine, { width: `${[72, 54, 82, 63, 46][(rowIndex + columnIndex) % 5]}%` }) }, columnIndex)) }, rowIndex)) })
1471
+ return /* @__PURE__ */ jsx22("div", { "aria-busy": "true", "aria-label": "Loading table", className: cn("fractal-ghost-table", `fractal-ghost-table--${size}`, className), role: "status", ...props, children: /* @__PURE__ */ jsxs18("table", { className: "fractal-ghost-table__table", children: [
1472
+ (showHeader || headers) && /* @__PURE__ */ jsx22("thead", { children: /* @__PURE__ */ jsx22("tr", { className: "fractal-ghost-table__head-row", children: cells.map((index) => /* @__PURE__ */ jsx22("th", { style: { width: columnWidths?.[index] }, children: headers?.[index] ?? /* @__PURE__ */ jsx22(GhostLine, { size: "sm", width: index === columns - 1 ? "62%" : "76%" }) }, index)) }) }),
1473
+ /* @__PURE__ */ jsx22("tbody", { children: Array.from({ length: rows }, (_, rowIndex) => /* @__PURE__ */ jsx22("tr", { className: "fractal-ghost-table__row", children: cells.map((columnIndex) => /* @__PURE__ */ jsx22("td", { style: { width: columnWidths?.[columnIndex] }, children: /* @__PURE__ */ jsx22(GhostLine, { width: `${[72, 54, 82, 63, 46][(rowIndex + columnIndex) % 5]}%` }) }, columnIndex)) }, rowIndex)) })
1424
1474
  ] }) });
1425
1475
  }
1426
1476
  function InputGhost({ className, labelWidth = "26%", ...props }) {
1427
- return /* @__PURE__ */ jsx21(FormFieldGhost, { className, labelWidth, ...props });
1477
+ return /* @__PURE__ */ jsx22(FormFieldGhost, { className, labelWidth, ...props });
1428
1478
  }
1429
1479
  function TextareaGhost({ className, labelWidth = "26%", ...props }) {
1430
- return /* @__PURE__ */ jsx21(FormFieldGhost, { className, labelWidth, multiline: true, ...props });
1480
+ return /* @__PURE__ */ jsx22(FormFieldGhost, { className, labelWidth, multiline: true, ...props });
1431
1481
  }
1432
1482
  function LabelGhost({ className, width = "26%", ...props }) {
1433
- return /* @__PURE__ */ jsx21(GhostLine, { className: cn("fractal-ghost-label", className), size: "sm", width, ...props });
1483
+ return /* @__PURE__ */ jsx22(GhostLine, { className: cn("fractal-ghost-label", className), size: "sm", width, ...props });
1434
1484
  }
1435
1485
  function FormFieldGhost({ className, labelWidth = "26%", multiline = false, ...props }) {
1436
- return /* @__PURE__ */ jsxs17("div", { "aria-hidden": "true", className: cn("fractal-ghost-field", className), ...props, children: [
1437
- /* @__PURE__ */ jsx21(LabelGhost, { width: labelWidth }),
1438
- /* @__PURE__ */ jsx21(Ghost, { className: cn("fractal-ghost-field__control", multiline && "fractal-ghost-field__control--multiline") })
1486
+ return /* @__PURE__ */ jsxs18("div", { "aria-hidden": "true", className: cn("fractal-ghost-field", className), ...props, children: [
1487
+ /* @__PURE__ */ jsx22(LabelGhost, { width: labelWidth }),
1488
+ /* @__PURE__ */ jsx22(Ghost, { className: cn("fractal-ghost-field__control", multiline && "fractal-ghost-field__control--multiline") })
1439
1489
  ] });
1440
1490
  }
1441
1491
  function AlertGhost({ className, ...props }) {
1442
- return /* @__PURE__ */ jsxs17("div", { "aria-hidden": "true", className: cn("fractal-ghost-alert", className), ...props, children: [
1443
- /* @__PURE__ */ jsx21(GhostLine, { width: "30%" }),
1444
- /* @__PURE__ */ jsx21(GhostLine, { size: "sm", width: "78%" })
1492
+ return /* @__PURE__ */ jsxs18("div", { "aria-hidden": "true", className: cn("fractal-ghost-alert", className), ...props, children: [
1493
+ /* @__PURE__ */ jsx22(GhostLine, { width: "30%" }),
1494
+ /* @__PURE__ */ jsx22(GhostLine, { size: "sm", width: "78%" })
1445
1495
  ] });
1446
1496
  }
1447
1497
  function CheckboxGhost({ className, ...props }) {
1448
- return /* @__PURE__ */ jsxs17("div", { "aria-hidden": "true", className: cn("fractal-ghost-choice", className), ...props, children: [
1449
- /* @__PURE__ */ jsx21(Ghost, { className: "fractal-ghost-choice__control" }),
1450
- /* @__PURE__ */ jsx21(GhostLine, { width: "42%" })
1498
+ return /* @__PURE__ */ jsxs18("div", { "aria-hidden": "true", className: cn("fractal-ghost-choice", className), ...props, children: [
1499
+ /* @__PURE__ */ jsx22(Ghost, { className: "fractal-ghost-choice__control" }),
1500
+ /* @__PURE__ */ jsx22(GhostLine, { width: "42%" })
1451
1501
  ] });
1452
1502
  }
1453
1503
  var ToggleGhost = CheckboxGhost;
1454
1504
  function ChipGhost({ className, width = 74, ...props }) {
1455
- return /* @__PURE__ */ jsx21(Ghost, { className: cn("fractal-ghost-chip", className), height: 24, width, ...props });
1505
+ return /* @__PURE__ */ jsx22(Ghost, { className: cn("fractal-ghost-chip", className), height: 24, width, ...props });
1456
1506
  }
1457
1507
  function LinkGhost({ className, width = 96, ...props }) {
1458
- return /* @__PURE__ */ jsx21(GhostLine, { className: cn("fractal-ghost-link", className), size: "sm", width, ...props });
1508
+ return /* @__PURE__ */ jsx22(GhostLine, { className: cn("fractal-ghost-link", className), size: "sm", width, ...props });
1459
1509
  }
1460
1510
  var TextButtonGhost = LinkGhost;
1461
1511
  function DropdownGhost({ className, ...props }) {
1462
- return /* @__PURE__ */ jsxs17("div", { "aria-hidden": "true", className: cn("fractal-ghost-dropdown", className), ...props, children: [
1463
- /* @__PURE__ */ jsx21(GhostLine, { width: "38%" }),
1464
- /* @__PURE__ */ jsx21(Ghost, { className: "fractal-ghost-dropdown__chevron" })
1512
+ return /* @__PURE__ */ jsxs18("div", { "aria-hidden": "true", className: cn("fractal-ghost-dropdown", className), ...props, children: [
1513
+ /* @__PURE__ */ jsx22(GhostLine, { width: "38%" }),
1514
+ /* @__PURE__ */ jsx22(Ghost, { className: "fractal-ghost-dropdown__chevron" })
1465
1515
  ] });
1466
1516
  }
1467
1517
  function ContentSwitcherGhost({ className, options = 3, ...props }) {
1468
- return /* @__PURE__ */ jsx21("div", { "aria-hidden": "true", className: cn("fractal-ghost-switcher", className), ...props, children: Array.from({ length: options }, (_, index) => /* @__PURE__ */ jsx21(Ghost, {}, index)) });
1518
+ return /* @__PURE__ */ jsx22("div", { "aria-hidden": "true", className: cn("fractal-ghost-switcher", className), ...props, children: Array.from({ length: options }, (_, index) => /* @__PURE__ */ jsx22(Ghost, {}, index)) });
1469
1519
  }
1470
1520
  var TabsGhost = ContentSwitcherGhost;
1471
1521
  function DisclosureGhost({ className, ...props }) {
1472
- return /* @__PURE__ */ jsxs17("div", { "aria-hidden": "true", className: cn("fractal-ghost-disclosure", className), ...props, children: [
1473
- /* @__PURE__ */ jsx21(Ghost, { className: "fractal-ghost-disclosure__icon" }),
1474
- /* @__PURE__ */ jsx21(GhostLine, { width: "42%" })
1522
+ return /* @__PURE__ */ jsxs18("div", { "aria-hidden": "true", className: cn("fractal-ghost-disclosure", className), ...props, children: [
1523
+ /* @__PURE__ */ jsx22(Ghost, { className: "fractal-ghost-disclosure__icon" }),
1524
+ /* @__PURE__ */ jsx22(GhostLine, { width: "42%" })
1475
1525
  ] });
1476
1526
  }
1477
1527
  function PaginationGhost({ className, pages = 5, ...props }) {
1478
- return /* @__PURE__ */ jsx21("div", { "aria-hidden": "true", className: cn("fractal-ghost-pagination", className), ...props, children: Array.from({ length: pages }, (_, index) => /* @__PURE__ */ jsx21(Ghost, {}, index)) });
1528
+ return /* @__PURE__ */ jsx22("div", { "aria-hidden": "true", className: cn("fractal-ghost-pagination", className), ...props, children: Array.from({ length: pages }, (_, index) => /* @__PURE__ */ jsx22(Ghost, {}, index)) });
1479
1529
  }
1480
1530
  function FileDropzoneGhost({ className, ...props }) {
1481
- return /* @__PURE__ */ jsxs17("div", { "aria-hidden": "true", className: cn("fractal-ghost-dropzone", className), ...props, children: [
1482
- /* @__PURE__ */ jsx21(Ghost, { className: "fractal-ghost-dropzone__icon" }),
1483
- /* @__PURE__ */ jsx21(GhostLine, { width: "26%" }),
1484
- /* @__PURE__ */ jsx21(GhostLine, { size: "sm", width: "46%" })
1531
+ return /* @__PURE__ */ jsxs18("div", { "aria-hidden": "true", className: cn("fractal-ghost-dropzone", className), ...props, children: [
1532
+ /* @__PURE__ */ jsx22(Ghost, { className: "fractal-ghost-dropzone__icon" }),
1533
+ /* @__PURE__ */ jsx22(GhostLine, { width: "26%" }),
1534
+ /* @__PURE__ */ jsx22(GhostLine, { size: "sm", width: "46%" })
1485
1535
  ] });
1486
1536
  }
1487
1537
  function PromptCardGhost({ className, ...props }) {
1488
- return /* @__PURE__ */ jsx21(CardGhost, { className: cn("fractal-ghost-prompt-card", className), lines: 4, ...props });
1538
+ return /* @__PURE__ */ jsx22(CardGhost, { className: cn("fractal-ghost-prompt-card", className), lines: 4, ...props });
1539
+ }
1540
+ function ConversationGhost({
1541
+ className,
1542
+ "aria-label": ariaLabel = "Loading conversation",
1543
+ ...props
1544
+ }) {
1545
+ return /* @__PURE__ */ jsxs18(
1546
+ "div",
1547
+ {
1548
+ "aria-busy": "true",
1549
+ "aria-label": ariaLabel,
1550
+ className: cn("fractal-ghost-conversation", className),
1551
+ role: "status",
1552
+ ...props,
1553
+ children: [
1554
+ /* @__PURE__ */ jsxs18("div", { "aria-hidden": "true", className: "fractal-ghost-conversation__message fractal-ghost-conversation__message--assistant", children: [
1555
+ /* @__PURE__ */ jsx22(GhostLine, { width: "92%" }),
1556
+ /* @__PURE__ */ jsx22(GhostLine, { width: "78%" }),
1557
+ /* @__PURE__ */ jsx22(GhostLine, { width: "58%" })
1558
+ ] }),
1559
+ /* @__PURE__ */ jsx22("div", { "aria-hidden": "true", className: "fractal-ghost-conversation__message fractal-ghost-conversation__message--user", children: /* @__PURE__ */ jsxs18("div", { className: "fractal-ghost-conversation__bubble", children: [
1560
+ /* @__PURE__ */ jsx22(GhostLine, { width: "100%" }),
1561
+ /* @__PURE__ */ jsx22(GhostLine, { width: "86%" }),
1562
+ /* @__PURE__ */ jsx22(GhostLine, { width: "64%" })
1563
+ ] }) }),
1564
+ /* @__PURE__ */ jsxs18("div", { "aria-hidden": "true", className: "fractal-ghost-conversation__message fractal-ghost-conversation__message--assistant", children: [
1565
+ /* @__PURE__ */ jsx22(GhostLine, { width: "84%" }),
1566
+ /* @__PURE__ */ jsx22(GhostLine, { width: "96%" }),
1567
+ /* @__PURE__ */ jsx22(GhostLine, { width: "46%" })
1568
+ ] })
1569
+ ]
1570
+ }
1571
+ );
1489
1572
  }
1490
1573
  function SortableTableGhost(props) {
1491
- return /* @__PURE__ */ jsx21(DataTableGhost, { ...props });
1574
+ return /* @__PURE__ */ jsx22(DataTableGhost, { ...props });
1492
1575
  }
1493
1576
  function SidebarGhost({ className, items = 6, ...props }) {
1494
- return /* @__PURE__ */ jsxs17("aside", { "aria-hidden": "true", className: cn("fractal-ghost-sidebar", className), ...props, children: [
1495
- /* @__PURE__ */ jsx21(Ghost, { className: "fractal-ghost-sidebar__brand" }),
1496
- /* @__PURE__ */ jsx21("div", { className: "fractal-ghost-sidebar__items", children: Array.from({ length: items }, (_, index) => /* @__PURE__ */ jsxs17("div", { className: "fractal-ghost-sidebar__item", children: [
1497
- /* @__PURE__ */ jsx21(Ghost, {}),
1498
- /* @__PURE__ */ jsx21(GhostLine, { width: `${[54, 68, 44, 61][index % 4]}%` })
1577
+ return /* @__PURE__ */ jsxs18("aside", { "aria-hidden": "true", className: cn("fractal-ghost-sidebar", className), ...props, children: [
1578
+ /* @__PURE__ */ jsx22(Ghost, { className: "fractal-ghost-sidebar__brand" }),
1579
+ /* @__PURE__ */ jsx22("div", { className: "fractal-ghost-sidebar__items", children: Array.from({ length: items }, (_, index) => /* @__PURE__ */ jsxs18("div", { className: "fractal-ghost-sidebar__item", children: [
1580
+ /* @__PURE__ */ jsx22(Ghost, {}),
1581
+ /* @__PURE__ */ jsx22(GhostLine, { width: `${[54, 68, 44, 61][index % 4]}%` })
1499
1582
  ] }, index)) })
1500
1583
  ] });
1501
1584
  }
1502
1585
  function ModalGhost({ className, title, lines = 3, ...props }) {
1503
- return /* @__PURE__ */ jsx21(SurfaceGhost, { className: cn("fractal-ghost-modal", className), title, lines, ...props });
1586
+ return /* @__PURE__ */ jsx22(SurfaceGhost, { className: cn("fractal-ghost-modal", className), title, lines, ...props });
1504
1587
  }
1505
1588
  function SidePanelGhost({ className, title, lines = 5, ...props }) {
1506
- return /* @__PURE__ */ jsx21(SurfaceGhost, { className: cn("fractal-ghost-side-panel", className), title, lines, ...props });
1589
+ return /* @__PURE__ */ jsx22(SurfaceGhost, { className: cn("fractal-ghost-side-panel", className), title, lines, ...props });
1507
1590
  }
1508
1591
  function SurfaceGhost({ className, title, lines = 3, ...props }) {
1509
- return /* @__PURE__ */ jsxs17("div", { "aria-hidden": "true", className: cn("fractal-ghost-surface", className), ...props, children: [
1510
- /* @__PURE__ */ jsxs17("div", { className: "fractal-ghost-surface__header", children: [
1511
- /* @__PURE__ */ jsx21(GhostLine, { width: "42%" }),
1512
- /* @__PURE__ */ jsx21(Ghost, { className: "fractal-ghost-surface__close" })
1592
+ return /* @__PURE__ */ jsxs18("div", { "aria-hidden": "true", className: cn("fractal-ghost-surface", className), ...props, children: [
1593
+ /* @__PURE__ */ jsxs18("div", { className: "fractal-ghost-surface__header", children: [
1594
+ /* @__PURE__ */ jsx22(GhostLine, { width: "42%" }),
1595
+ /* @__PURE__ */ jsx22(Ghost, { className: "fractal-ghost-surface__close" })
1513
1596
  ] }),
1514
- title && /* @__PURE__ */ jsx21("div", { className: "fractal-ghost-surface__title", children: title }),
1515
- /* @__PURE__ */ jsx21("div", { className: "fractal-ghost-stack", children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ jsx21(GhostLine, { width: index === lines - 1 ? "64%" : "100%" }, index)) })
1597
+ title && /* @__PURE__ */ jsx22("div", { className: "fractal-ghost-surface__title", children: title }),
1598
+ /* @__PURE__ */ jsx22("div", { className: "fractal-ghost-stack", children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ jsx22(GhostLine, { width: index === lines - 1 ? "64%" : "100%" }, index)) })
1516
1599
  ] });
1517
1600
  }
1518
1601
 
1519
1602
  // src/components/Sidebar/Sidebar.tsx
1520
- import * as React12 from "react";
1521
- import { Fragment as Fragment3, jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
1522
- var Sidebar = React12.forwardRef(
1523
- ({ className, width, compact = false, style, ...props }, ref) => /* @__PURE__ */ jsx22(
1603
+ import * as React13 from "react";
1604
+ import { Fragment as Fragment3, jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
1605
+ var Sidebar = React13.forwardRef(
1606
+ ({ className, width, compact = false, style, ...props }, ref) => /* @__PURE__ */ jsx23(
1524
1607
  "aside",
1525
1608
  {
1526
1609
  ref,
@@ -1532,12 +1615,12 @@ var Sidebar = React12.forwardRef(
1532
1615
  )
1533
1616
  );
1534
1617
  Sidebar.displayName = "Sidebar";
1535
- var SidebarHeader = React12.forwardRef(
1536
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx22("div", { ref, className: cn("fractal-sidebar__header", className), ...props })
1618
+ var SidebarHeader = React13.forwardRef(
1619
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx23("div", { ref, className: cn("fractal-sidebar__header", className), ...props })
1537
1620
  );
1538
1621
  SidebarHeader.displayName = "SidebarHeader";
1539
- var SidebarBrand = React12.forwardRef(
1540
- ({ className, type = "button", ...props }, ref) => /* @__PURE__ */ jsx22("button", { ref, type, className: cn("fractal-sidebar__brand", className), ...props })
1622
+ var SidebarBrand = React13.forwardRef(
1623
+ ({ className, type = "button", ...props }, ref) => /* @__PURE__ */ jsx23("button", { ref, type, className: cn("fractal-sidebar__brand", className), ...props })
1541
1624
  );
1542
1625
  SidebarBrand.displayName = "SidebarBrand";
1543
1626
  function SidebarAccountMenu({
@@ -1548,7 +1631,7 @@ function SidebarAccountMenu({
1548
1631
  icon,
1549
1632
  className
1550
1633
  }) {
1551
- return /* @__PURE__ */ jsx22(
1634
+ return /* @__PURE__ */ jsx23(
1552
1635
  Dropdown,
1553
1636
  {
1554
1637
  align: "left",
@@ -1558,25 +1641,25 @@ function SidebarAccountMenu({
1558
1641
  panelClassName: "fractal-sidebar__account-panel",
1559
1642
  selectedValue: "",
1560
1643
  triggerClassName: "fractal-sidebar__account-trigger",
1561
- triggerContent: /* @__PURE__ */ jsxs18(Fragment3, { children: [
1562
- icon && /* @__PURE__ */ jsx22("span", { className: "fractal-sidebar__account-icon", "aria-hidden": "true", children: icon }),
1563
- /* @__PURE__ */ jsx22("span", { className: "fractal-sidebar__account-name", children: name })
1644
+ triggerContent: /* @__PURE__ */ jsxs19(Fragment3, { children: [
1645
+ icon && /* @__PURE__ */ jsx23("span", { className: "fractal-sidebar__account-icon", "aria-hidden": "true", children: icon }),
1646
+ /* @__PURE__ */ jsx23("span", { className: "fractal-sidebar__account-name", children: name })
1564
1647
  ] }),
1565
1648
  triggerLabel,
1566
1649
  triggerVariant: "tertiary"
1567
1650
  }
1568
1651
  );
1569
1652
  }
1570
- var SidebarNav = React12.forwardRef(
1571
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx22("nav", { ref, className: cn("fractal-sidebar__nav", className), ...props })
1653
+ var SidebarNav = React13.forwardRef(
1654
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx23("nav", { ref, className: cn("fractal-sidebar__nav", className), ...props })
1572
1655
  );
1573
1656
  SidebarNav.displayName = "SidebarNav";
1574
- var SidebarSection = React12.forwardRef(
1575
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx22("div", { ref, className: cn("fractal-sidebar__section", className), ...props })
1657
+ var SidebarSection = React13.forwardRef(
1658
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx23("div", { ref, className: cn("fractal-sidebar__section", className), ...props })
1576
1659
  );
1577
1660
  SidebarSection.displayName = "SidebarSection";
1578
- var SidebarNavItem = React12.forwardRef(
1579
- ({ active = false, icon, endAdornment, className, type = "button", children, ...props }, ref) => /* @__PURE__ */ jsxs18(
1661
+ var SidebarNavItem = React13.forwardRef(
1662
+ ({ active = false, icon, endAdornment, className, type = "button", children, ...props }, ref) => /* @__PURE__ */ jsxs19(
1580
1663
  "button",
1581
1664
  {
1582
1665
  ref,
@@ -1586,28 +1669,28 @@ var SidebarNavItem = React12.forwardRef(
1586
1669
  "aria-current": active ? "page" : void 0,
1587
1670
  ...props,
1588
1671
  children: [
1589
- icon && /* @__PURE__ */ jsx22("span", { className: "fractal-sidebar__nav-item-icon", "aria-hidden": "true", children: icon }),
1590
- /* @__PURE__ */ jsx22("span", { className: "fractal-sidebar__nav-item-label", children }),
1591
- endAdornment && /* @__PURE__ */ jsx22("span", { className: "fractal-sidebar__nav-item-end", children: endAdornment })
1672
+ icon && /* @__PURE__ */ jsx23("span", { className: "fractal-sidebar__nav-item-icon", "aria-hidden": "true", children: icon }),
1673
+ /* @__PURE__ */ jsx23("span", { className: "fractal-sidebar__nav-item-label", children }),
1674
+ endAdornment && /* @__PURE__ */ jsx23("span", { className: "fractal-sidebar__nav-item-end", children: endAdornment })
1592
1675
  ]
1593
1676
  }
1594
1677
  )
1595
1678
  );
1596
1679
  SidebarNavItem.displayName = "SidebarNavItem";
1597
- var SidebarFooter = React12.forwardRef(
1598
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx22("div", { ref, className: cn("fractal-sidebar__footer", className), ...props })
1680
+ var SidebarFooter = React13.forwardRef(
1681
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx23("div", { ref, className: cn("fractal-sidebar__footer", className), ...props })
1599
1682
  );
1600
1683
  SidebarFooter.displayName = "SidebarFooter";
1601
1684
 
1602
1685
  // src/components/SidePanel/SidePanel.tsx
1603
1686
  import { createPortal as createPortal2 } from "react-dom";
1604
1687
  import { Close } from "@mirror-physics/fractal-icons";
1605
- import { jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
1688
+ import { jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
1606
1689
  function SidePanel({ open, onClose, title, description, children, footer, size = "md", loading = false, loadingLabel = "Loading", className }) {
1607
1690
  useEscapeDismiss(80, onClose, open);
1608
1691
  if (!open) return null;
1609
1692
  return createPortal2(
1610
- /* @__PURE__ */ jsx23("div", { className: "fractal-side-panel-overlay", onMouseDown: onClose, children: /* @__PURE__ */ jsxs19(
1693
+ /* @__PURE__ */ jsx24("div", { className: "fractal-side-panel-overlay", onMouseDown: onClose, children: /* @__PURE__ */ jsxs20(
1611
1694
  "aside",
1612
1695
  {
1613
1696
  className: cn("fractal-side-panel", `fractal-side-panel--${size}`, className),
@@ -1616,15 +1699,15 @@ function SidePanel({ open, onClose, title, description, children, footer, size =
1616
1699
  role: "dialog",
1617
1700
  onMouseDown: (event) => event.stopPropagation(),
1618
1701
  children: [
1619
- /* @__PURE__ */ jsxs19("header", { className: "fractal-side-panel__header", children: [
1620
- /* @__PURE__ */ jsxs19("div", { className: "fractal-side-panel__heading", children: [
1621
- typeof title === "string" ? /* @__PURE__ */ jsx23("h2", { className: "fractal-side-panel__title", children: title }) : /* @__PURE__ */ jsx23("div", { className: "fractal-side-panel__title", children: title }),
1622
- description && /* @__PURE__ */ jsx23("p", { className: "fractal-side-panel__description", children: description })
1702
+ /* @__PURE__ */ jsxs20("header", { className: "fractal-side-panel__header", children: [
1703
+ /* @__PURE__ */ jsxs20("div", { className: "fractal-side-panel__heading", children: [
1704
+ typeof title === "string" ? /* @__PURE__ */ jsx24("h2", { className: "fractal-side-panel__title", children: title }) : /* @__PURE__ */ jsx24("div", { className: "fractal-side-panel__title", children: title }),
1705
+ description && /* @__PURE__ */ jsx24("p", { className: "fractal-side-panel__description", children: description })
1623
1706
  ] }),
1624
- /* @__PURE__ */ jsx23("button", { type: "button", className: "fractal-side-panel__close", "aria-label": "Close panel", onClick: onClose, children: /* @__PURE__ */ jsx23(Close, { size: 18 }) })
1707
+ /* @__PURE__ */ jsx24("button", { type: "button", className: "fractal-side-panel__close", "aria-label": "Close panel", onClick: onClose, children: /* @__PURE__ */ jsx24(Close, { size: 18 }) })
1625
1708
  ] }),
1626
- /* @__PURE__ */ jsx23("div", { "aria-busy": loading || void 0, className: cn("fractal-side-panel__body", loading && "fractal-side-panel__body--loading"), children: loading ? /* @__PURE__ */ jsx23(UILoader, { label: loadingLabel }) : children }),
1627
- footer && /* @__PURE__ */ jsx23("footer", { className: "fractal-side-panel__footer", children: footer })
1709
+ /* @__PURE__ */ jsx24("div", { "aria-busy": loading || void 0, className: cn("fractal-side-panel__body", loading && "fractal-side-panel__body--loading"), children: loading ? /* @__PURE__ */ jsx24(UILoader, { label: loadingLabel }) : children }),
1710
+ footer && /* @__PURE__ */ jsx24("footer", { className: "fractal-side-panel__footer", children: footer })
1628
1711
  ]
1629
1712
  }
1630
1713
  ) }),
@@ -1633,18 +1716,18 @@ function SidePanel({ open, onClose, title, description, children, footer, size =
1633
1716
  }
1634
1717
 
1635
1718
  // src/components/Textarea/Textarea.tsx
1636
- import * as React13 from "react";
1637
- import { jsx as jsx24 } from "react/jsx-runtime";
1638
- var Textarea = React13.forwardRef(
1639
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx24("textarea", { ref, className: cn("fractal-textarea", className), ...props })
1719
+ import * as React14 from "react";
1720
+ import { jsx as jsx25 } from "react/jsx-runtime";
1721
+ var Textarea = React14.forwardRef(
1722
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx25("textarea", { ref, className: cn("fractal-textarea", className), ...props })
1640
1723
  );
1641
1724
  Textarea.displayName = "Textarea";
1642
1725
 
1643
1726
  // src/components/TextButton/TextButton.tsx
1644
- import * as React14 from "react";
1645
- import { jsx as jsx25, jsxs as jsxs20 } from "react/jsx-runtime";
1646
- var TextButton = React14.forwardRef(
1647
- ({ className, icon, iconPosition = "start", size = "md", tone = "primary", children, ...props }, ref) => /* @__PURE__ */ jsxs20(
1727
+ import * as React15 from "react";
1728
+ import { jsx as jsx26, jsxs as jsxs21 } from "react/jsx-runtime";
1729
+ var TextButton = React15.forwardRef(
1730
+ ({ className, icon, iconPosition = "start", size = "md", tone = "primary", children, ...props }, ref) => /* @__PURE__ */ jsxs21(
1648
1731
  "button",
1649
1732
  {
1650
1733
  ref,
@@ -1652,9 +1735,9 @@ var TextButton = React14.forwardRef(
1652
1735
  type: "button",
1653
1736
  ...props,
1654
1737
  children: [
1655
- icon && iconPosition === "start" && /* @__PURE__ */ jsx25("span", { className: "fractal-text-button__icon", "aria-hidden": "true", children: icon }),
1656
- /* @__PURE__ */ jsx25("span", { children }),
1657
- icon && iconPosition === "end" && /* @__PURE__ */ jsx25("span", { className: "fractal-text-button__icon", "aria-hidden": "true", children: icon })
1738
+ icon && iconPosition === "start" && /* @__PURE__ */ jsx26("span", { className: "fractal-text-button__icon", "aria-hidden": "true", children: icon }),
1739
+ /* @__PURE__ */ jsx26("span", { children }),
1740
+ icon && iconPosition === "end" && /* @__PURE__ */ jsx26("span", { className: "fractal-text-button__icon", "aria-hidden": "true", children: icon })
1658
1741
  ]
1659
1742
  }
1660
1743
  )
@@ -1662,9 +1745,9 @@ var TextButton = React14.forwardRef(
1662
1745
  TextButton.displayName = "TextButton";
1663
1746
 
1664
1747
  // src/components/FileDropzone/FileDropzone.tsx
1665
- import * as React15 from "react";
1748
+ import * as React16 from "react";
1666
1749
  import { Close as Close2, FileArrowUp } from "@mirror-physics/fractal-icons";
1667
- import { jsx as jsx26, jsxs as jsxs21 } from "react/jsx-runtime";
1750
+ import { jsx as jsx27, jsxs as jsxs22 } from "react/jsx-runtime";
1668
1751
  function FileDropzone({
1669
1752
  files,
1670
1753
  onFilesChange,
@@ -1675,17 +1758,17 @@ function FileDropzone({
1675
1758
  description = "Files stay attached to this record.",
1676
1759
  className
1677
1760
  }) {
1678
- const inputId = React15.useId();
1679
- const inputRef = React15.useRef(null);
1680
- const [isDragging, setIsDragging] = React15.useState(false);
1761
+ const inputId = React16.useId();
1762
+ const inputRef = React16.useRef(null);
1763
+ const [isDragging, setIsDragging] = React16.useState(false);
1681
1764
  const addFiles = (nextFiles) => {
1682
1765
  if (disabled) return;
1683
1766
  const additions = Array.from(nextFiles);
1684
1767
  if (additions.length === 0) return;
1685
1768
  onFilesChange(multiple ? [...files, ...additions] : additions.slice(0, 1));
1686
1769
  };
1687
- return /* @__PURE__ */ jsxs21("div", { className: cn("fractal-file-dropzone", className), children: [
1688
- /* @__PURE__ */ jsx26(
1770
+ return /* @__PURE__ */ jsxs22("div", { className: cn("fractal-file-dropzone", className), children: [
1771
+ /* @__PURE__ */ jsx27(
1689
1772
  "input",
1690
1773
  {
1691
1774
  ref: inputRef,
@@ -1701,7 +1784,7 @@ function FileDropzone({
1701
1784
  }
1702
1785
  }
1703
1786
  ),
1704
- /* @__PURE__ */ jsxs21(
1787
+ /* @__PURE__ */ jsxs22(
1705
1788
  "button",
1706
1789
  {
1707
1790
  className: "fractal-file-dropzone__target",
@@ -1724,18 +1807,18 @@ function FileDropzone({
1724
1807
  addFiles(event.dataTransfer.files);
1725
1808
  },
1726
1809
  children: [
1727
- /* @__PURE__ */ jsx26(FileArrowUp, { "aria-hidden": "true", size: 20 }),
1728
- /* @__PURE__ */ jsxs21("span", { className: "fractal-file-dropzone__copy", children: [
1729
- /* @__PURE__ */ jsx26("span", { className: "fractal-file-dropzone__title", children: title }),
1730
- description && /* @__PURE__ */ jsx26("span", { className: "fractal-file-dropzone__description", children: description })
1810
+ /* @__PURE__ */ jsx27(FileArrowUp, { "aria-hidden": "true", size: 20 }),
1811
+ /* @__PURE__ */ jsxs22("span", { className: "fractal-file-dropzone__copy", children: [
1812
+ /* @__PURE__ */ jsx27("span", { className: "fractal-file-dropzone__title", children: title }),
1813
+ description && /* @__PURE__ */ jsx27("span", { className: "fractal-file-dropzone__description", children: description })
1731
1814
  ] })
1732
1815
  ]
1733
1816
  }
1734
1817
  ),
1735
- files.length > 0 && /* @__PURE__ */ jsx26("ul", { className: "fractal-file-dropzone__files", "aria-label": "Attached files", children: files.map((file, index) => /* @__PURE__ */ jsxs21("li", { className: "fractal-file-dropzone__file", children: [
1736
- /* @__PURE__ */ jsx26("span", { className: "fractal-file-dropzone__file-name", children: file.name }),
1737
- /* @__PURE__ */ jsx26("span", { className: "fractal-file-dropzone__file-meta", children: formatFileSize(file.size) }),
1738
- /* @__PURE__ */ jsx26(
1818
+ files.length > 0 && /* @__PURE__ */ jsx27("ul", { className: "fractal-file-dropzone__files", "aria-label": "Attached files", children: files.map((file, index) => /* @__PURE__ */ jsxs22("li", { className: "fractal-file-dropzone__file", children: [
1819
+ /* @__PURE__ */ jsx27("span", { className: "fractal-file-dropzone__file-name", children: file.name }),
1820
+ /* @__PURE__ */ jsx27("span", { className: "fractal-file-dropzone__file-meta", children: formatFileSize(file.size) }),
1821
+ /* @__PURE__ */ jsx27(
1739
1822
  "button",
1740
1823
  {
1741
1824
  className: "fractal-file-dropzone__remove",
@@ -1743,7 +1826,7 @@ function FileDropzone({
1743
1826
  "aria-label": `Remove ${file.name}`,
1744
1827
  disabled,
1745
1828
  onClick: () => onFilesChange(files.filter((_, fileIndex) => fileIndex !== index)),
1746
- children: /* @__PURE__ */ jsx26(Close2, { "aria-hidden": "true", size: 14 })
1829
+ children: /* @__PURE__ */ jsx27(Close2, { "aria-hidden": "true", size: 14 })
1747
1830
  }
1748
1831
  )
1749
1832
  ] }, `${file.name}-${file.size}-${index}`)) })
@@ -1757,7 +1840,7 @@ function formatFileSize(bytes) {
1757
1840
 
1758
1841
  // src/components/Pagination/Pagination.tsx
1759
1842
  import { ArrowLeft, ArrowRight } from "@mirror-physics/fractal-icons";
1760
- import { jsx as jsx27, jsxs as jsxs22 } from "react/jsx-runtime";
1843
+ import { jsx as jsx28, jsxs as jsxs23 } from "react/jsx-runtime";
1761
1844
  function Pagination({
1762
1845
  page,
1763
1846
  pageSize,
@@ -1773,10 +1856,10 @@ function Pagination({
1773
1856
  const start = totalItems === 0 ? 0 : (currentPage - 1) * pageSize + 1;
1774
1857
  const end = Math.min(currentPage * pageSize, totalItems);
1775
1858
  const canChangePageSize = pageSizeOptions != null && pageSizeOptions.length > 0 && onPageSizeChange != null;
1776
- return /* @__PURE__ */ jsxs22("nav", { className: cn("fractal-pagination", className), "aria-label": ariaLabel, children: [
1777
- /* @__PURE__ */ jsx27("span", { className: "fractal-pagination__summary", children: totalItems === 0 ? "No results" : `${start}-${end} of ${totalItems}` }),
1778
- /* @__PURE__ */ jsxs22("div", { className: "fractal-pagination__controls", children: [
1779
- canChangePageSize && /* @__PURE__ */ jsx27(
1859
+ return /* @__PURE__ */ jsxs23("nav", { className: cn("fractal-pagination", className), "aria-label": ariaLabel, children: [
1860
+ /* @__PURE__ */ jsx28("span", { className: "fractal-pagination__summary", children: totalItems === 0 ? "No results" : `${start}-${end} of ${totalItems}` }),
1861
+ /* @__PURE__ */ jsxs23("div", { className: "fractal-pagination__controls", children: [
1862
+ canChangePageSize && /* @__PURE__ */ jsx28(
1780
1863
  Dropdown,
1781
1864
  {
1782
1865
  align: "right",
@@ -1793,7 +1876,7 @@ function Pagination({
1793
1876
  triggerVariant: "tertiary"
1794
1877
  }
1795
1878
  ),
1796
- /* @__PURE__ */ jsx27(
1879
+ /* @__PURE__ */ jsx28(
1797
1880
  "button",
1798
1881
  {
1799
1882
  className: "fractal-pagination__button",
@@ -1802,15 +1885,15 @@ function Pagination({
1802
1885
  title: "Previous page",
1803
1886
  disabled: currentPage === 1 || totalItems === 0,
1804
1887
  onClick: () => onPageChange(currentPage - 1),
1805
- children: /* @__PURE__ */ jsx27(ArrowLeft, { "aria-hidden": "true", size: 16 })
1888
+ children: /* @__PURE__ */ jsx28(ArrowLeft, { "aria-hidden": "true", size: 16 })
1806
1889
  }
1807
1890
  ),
1808
- /* @__PURE__ */ jsxs22("span", { className: "fractal-pagination__page", "aria-current": "page", children: [
1891
+ /* @__PURE__ */ jsxs23("span", { className: "fractal-pagination__page", "aria-current": "page", children: [
1809
1892
  currentPage,
1810
1893
  " of ",
1811
1894
  totalPages
1812
1895
  ] }),
1813
- /* @__PURE__ */ jsx27(
1896
+ /* @__PURE__ */ jsx28(
1814
1897
  "button",
1815
1898
  {
1816
1899
  className: "fractal-pagination__button",
@@ -1819,7 +1902,7 @@ function Pagination({
1819
1902
  title: "Next page",
1820
1903
  disabled: currentPage === totalPages || totalItems === 0,
1821
1904
  onClick: () => onPageChange(currentPage + 1),
1822
- children: /* @__PURE__ */ jsx27(ArrowRight, { "aria-hidden": "true", size: 16 })
1905
+ children: /* @__PURE__ */ jsx28(ArrowRight, { "aria-hidden": "true", size: 16 })
1823
1906
  }
1824
1907
  )
1825
1908
  ] })
@@ -1846,6 +1929,7 @@ export {
1846
1929
  ChipGhost,
1847
1930
  ContentSwitcher,
1848
1931
  ContentSwitcherGhost,
1932
+ ConversationGhost,
1849
1933
  DataTable,
1850
1934
  DataTableGhost,
1851
1935
  Disclosure,
@@ -1870,6 +1954,7 @@ export {
1870
1954
  NumberInput,
1871
1955
  Pagination,
1872
1956
  PaginationGhost,
1957
+ PasswordInput,
1873
1958
  PromptCard,
1874
1959
  PromptCardGhost,
1875
1960
  PromptGrid,