@mirror-physics/fractal-ui 0.2.0-next.71 → 0.2.0-next.73

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
@@ -91,6 +91,7 @@ __export(index_exports, {
91
91
  SidebarNav: () => SidebarNav,
92
92
  SidebarNavItem: () => SidebarNavItem,
93
93
  SidebarSection: () => SidebarSection,
94
+ Slider: () => Slider,
94
95
  SortableTable: () => SortableTable,
95
96
  SortableTableGhost: () => SortableTableGhost,
96
97
  TableSearch: () => TableSearch,
@@ -907,10 +908,136 @@ function NumberInput({
907
908
  ] });
908
909
  }
909
910
 
911
+ // src/components/Slider/Slider.tsx
912
+ var import_jsx_runtime9 = require("react/jsx-runtime");
913
+ function Slider(props) {
914
+ const {
915
+ min = 0,
916
+ max = 100,
917
+ step = 1,
918
+ disabled = false,
919
+ className,
920
+ showValues = true,
921
+ formatValue = (value) => value,
922
+ knobs = 1
923
+ } = props;
924
+ const span = Math.max(max - min, 1);
925
+ const rawValues = knobs === 2 ? props.value : [props.value];
926
+ const firstValue = clamp(rawValues[0], min, max);
927
+ const secondValue = knobs === 2 ? clamp(rawValues[1], firstValue, max) : firstValue;
928
+ const selectionStart = knobs === 2 ? firstValue : min;
929
+ const selectionEnd = secondValue;
930
+ const selectionStartPercent = (selectionStart - min) / span * 100;
931
+ const selectionEndPercent = (selectionEnd - min) / span * 100;
932
+ const changeSingleValue = (value) => {
933
+ ;
934
+ props.onValueChange(clamp(value, min, max));
935
+ };
936
+ const changeRangeValue = (nextLower, nextUpper) => {
937
+ ;
938
+ props.onValueChange([
939
+ clamp(nextLower, min, nextUpper),
940
+ clamp(nextUpper, nextLower, max)
941
+ ]);
942
+ };
943
+ const getKeyboardValue = (event, value) => {
944
+ const pageStep = step * 10;
945
+ const adjustments = {
946
+ ArrowDown: -step,
947
+ ArrowLeft: -step,
948
+ ArrowRight: step,
949
+ ArrowUp: step,
950
+ PageDown: -pageStep,
951
+ PageUp: pageStep
952
+ };
953
+ if (event.key === "Home") return min;
954
+ if (event.key === "End") return max;
955
+ if (!(event.key in adjustments)) return null;
956
+ return value + adjustments[event.key];
957
+ };
958
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
959
+ "div",
960
+ {
961
+ className: cn("fractal-slider", disabled && "fractal-slider--disabled", className),
962
+ "data-disabled": disabled || void 0,
963
+ "data-knobs": knobs,
964
+ children: [
965
+ showValues && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "fractal-slider-values", "aria-hidden": "true", children: [
966
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("output", { children: formatValue(firstValue) }),
967
+ knobs === 2 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("output", { children: formatValue(secondValue) })
968
+ ] }),
969
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
970
+ "div",
971
+ {
972
+ className: "fractal-slider-control",
973
+ style: {
974
+ "--fractal-slider-selection-start": `${selectionStartPercent}%`,
975
+ "--fractal-slider-selection-end": `${selectionEndPercent}%`
976
+ },
977
+ children: [
978
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "fractal-slider-track", "aria-hidden": "true" }),
979
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "fractal-slider-selection", "aria-hidden": "true" }),
980
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
981
+ "input",
982
+ {
983
+ "aria-label": knobs === 2 ? props.lowerAriaLabel ?? "Lower value" : props.ariaLabel ?? "Slider value",
984
+ disabled,
985
+ max,
986
+ min,
987
+ onChange: (event) => {
988
+ const nextValue = event.currentTarget.valueAsNumber;
989
+ if (knobs === 2) changeRangeValue(Math.min(nextValue, secondValue), secondValue);
990
+ else changeSingleValue(nextValue);
991
+ },
992
+ onKeyDown: (event) => {
993
+ const nextValue = getKeyboardValue(event, firstValue);
994
+ if (nextValue === null) return;
995
+ event.preventDefault();
996
+ if (knobs === 2) changeRangeValue(Math.min(nextValue, secondValue), secondValue);
997
+ else changeSingleValue(nextValue);
998
+ },
999
+ step,
1000
+ type: "range",
1001
+ value: firstValue
1002
+ }
1003
+ ),
1004
+ knobs === 2 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1005
+ "input",
1006
+ {
1007
+ "aria-label": props.upperAriaLabel ?? "Upper value",
1008
+ disabled,
1009
+ max,
1010
+ min,
1011
+ onChange: (event) => {
1012
+ const nextValue = event.currentTarget.valueAsNumber;
1013
+ changeRangeValue(firstValue, Math.max(nextValue, firstValue));
1014
+ },
1015
+ onKeyDown: (event) => {
1016
+ const nextValue = getKeyboardValue(event, secondValue);
1017
+ if (nextValue === null) return;
1018
+ event.preventDefault();
1019
+ changeRangeValue(firstValue, Math.max(nextValue, firstValue));
1020
+ },
1021
+ step,
1022
+ type: "range",
1023
+ value: secondValue
1024
+ }
1025
+ )
1026
+ ]
1027
+ }
1028
+ )
1029
+ ]
1030
+ }
1031
+ );
1032
+ }
1033
+ function clamp(value, minimum, maximum) {
1034
+ return Math.min(maximum, Math.max(minimum, value));
1035
+ }
1036
+
910
1037
  // src/components/PasswordInput/PasswordInput.tsx
911
1038
  var React7 = __toESM(require("react"), 1);
912
1039
  var import_fractal_icons6 = require("@mirror-physics/fractal-icons");
913
- var import_jsx_runtime9 = require("react/jsx-runtime");
1040
+ var import_jsx_runtime10 = require("react/jsx-runtime");
914
1041
  var PasswordInput = React7.forwardRef(
915
1042
  ({
916
1043
  className,
@@ -921,13 +1048,13 @@ var PasswordInput = React7.forwardRef(
921
1048
  }, ref) => {
922
1049
  const [passwordVisible, setPasswordVisible] = React7.useState(false);
923
1050
  const toggleLabel = passwordVisible ? hidePasswordLabel : showPasswordLabel;
924
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
1051
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
925
1052
  "div",
926
1053
  {
927
1054
  className: cn("fractal-password-input", className),
928
1055
  "data-password-visible": passwordVisible ? "" : void 0,
929
1056
  children: [
930
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1057
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
931
1058
  Input,
932
1059
  {
933
1060
  ...props,
@@ -937,7 +1064,7 @@ var PasswordInput = React7.forwardRef(
937
1064
  type: passwordVisible ? "text" : "password"
938
1065
  }
939
1066
  ),
940
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1067
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
941
1068
  "button",
942
1069
  {
943
1070
  type: "button",
@@ -947,7 +1074,7 @@ var PasswordInput = React7.forwardRef(
947
1074
  disabled,
948
1075
  title: toggleLabel,
949
1076
  onClick: () => setPasswordVisible((visible) => !visible),
950
- children: passwordVisible ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_fractal_icons6.EyeSlash, { "aria-hidden": "true", size: 18 }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_fractal_icons6.Eye, { "aria-hidden": "true", size: 18 })
1077
+ children: passwordVisible ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_fractal_icons6.EyeSlash, { "aria-hidden": "true", size: 18 }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_fractal_icons6.Eye, { "aria-hidden": "true", size: 18 })
951
1078
  }
952
1079
  )
953
1080
  ]
@@ -959,9 +1086,9 @@ PasswordInput.displayName = "PasswordInput";
959
1086
 
960
1087
  // src/components/Label/Label.tsx
961
1088
  var React8 = __toESM(require("react"), 1);
962
- var import_jsx_runtime10 = require("react/jsx-runtime");
1089
+ var import_jsx_runtime11 = require("react/jsx-runtime");
963
1090
  var Label = React8.forwardRef(
964
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1091
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
965
1092
  "label",
966
1093
  {
967
1094
  ref,
@@ -975,7 +1102,7 @@ Label.displayName = "Label";
975
1102
  // src/components/Alert/Alert.tsx
976
1103
  var React9 = __toESM(require("react"), 1);
977
1104
  var import_fractal_icons7 = require("@mirror-physics/fractal-icons");
978
- var import_jsx_runtime11 = require("react/jsx-runtime");
1105
+ var import_jsx_runtime12 = require("react/jsx-runtime");
979
1106
  var defaultIcons = {
980
1107
  default: import_fractal_icons7.CircleInfo,
981
1108
  info: import_fractal_icons7.CircleInfo,
@@ -986,7 +1113,7 @@ var defaultIcons = {
986
1113
  var Alert = React9.forwardRef(
987
1114
  ({ className, variant = "default", icon, children, ...props }, ref) => {
988
1115
  const DefaultIcon = defaultIcons[variant];
989
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1116
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
990
1117
  "div",
991
1118
  {
992
1119
  ref,
@@ -994,8 +1121,8 @@ var Alert = React9.forwardRef(
994
1121
  className: cn("fractal-alert", `fractal-alert--${variant}`, className),
995
1122
  ...props,
996
1123
  children: [
997
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "fractal-alert-icon", "aria-hidden": true, children: icon ?? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DefaultIcon, { size: 18 }) }),
998
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "fractal-alert-content", children })
1124
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "fractal-alert-icon", "aria-hidden": true, children: icon ?? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DefaultIcon, { size: 18 }) }),
1125
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "fractal-alert-content", children })
999
1126
  ]
1000
1127
  }
1001
1128
  );
@@ -1003,18 +1130,18 @@ var Alert = React9.forwardRef(
1003
1130
  );
1004
1131
  Alert.displayName = "Alert";
1005
1132
  var AlertTitle = React9.forwardRef(
1006
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("h5", { ref, className: cn("fractal-alert-title", className), ...props })
1133
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h5", { ref, className: cn("fractal-alert-title", className), ...props })
1007
1134
  );
1008
1135
  AlertTitle.displayName = "AlertTitle";
1009
1136
  var AlertDescription = React9.forwardRef(
1010
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { ref, className: cn("fractal-alert-description", className), ...props })
1137
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { ref, className: cn("fractal-alert-description", className), ...props })
1011
1138
  );
1012
1139
  AlertDescription.displayName = "AlertDescription";
1013
1140
 
1014
1141
  // src/components/Toggle/Toggle.tsx
1015
- var import_jsx_runtime12 = require("react/jsx-runtime");
1142
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1016
1143
  function Toggle({ checked, onChange, label, className }) {
1017
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1144
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1018
1145
  "button",
1019
1146
  {
1020
1147
  type: "button",
@@ -1023,8 +1150,8 @@ function Toggle({ checked, onChange, label, className }) {
1023
1150
  className: cn("fractal-toggle", className),
1024
1151
  onClick: () => onChange(!checked),
1025
1152
  children: [
1026
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: cn("fractal-toggle-track", checked && "fractal-toggle-track--checked"), children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: cn("fractal-toggle-thumb", checked && "fractal-toggle-thumb--checked") }) }),
1027
- label && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "fractal-toggle-label", children: label })
1153
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: cn("fractal-toggle-track", checked && "fractal-toggle-track--checked"), children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: cn("fractal-toggle-thumb", checked && "fractal-toggle-thumb--checked") }) }),
1154
+ label && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "fractal-toggle-label", children: label })
1028
1155
  ]
1029
1156
  }
1030
1157
  );
@@ -1086,7 +1213,7 @@ function useEscapeDismiss(priority, handler, enabled = true) {
1086
1213
 
1087
1214
  // src/components/UILoader/UILoader.tsx
1088
1215
  var import_react3 = require("react");
1089
- var import_jsx_runtime13 = require("react/jsx-runtime");
1216
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1090
1217
  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";
1091
1218
  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";
1092
1219
  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";
@@ -1095,7 +1222,7 @@ function UILoader({ size = 48, tone = "neutral", className, style, label = "Load
1095
1222
  const clipId = `fractal-ui-loader-clip-${rawId}`;
1096
1223
  const gradientId = `fractal-ui-loader-gradient-${rawId}`;
1097
1224
  const height = typeof size === "number" ? `${size}px` : size;
1098
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1225
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1099
1226
  "span",
1100
1227
  {
1101
1228
  "aria-hidden": ariaHidden || void 0,
@@ -1103,35 +1230,35 @@ function UILoader({ size = 48, tone = "neutral", className, style, label = "Load
1103
1230
  className: cn("fractal-ui-loader", `fractal-ui-loader--${tone}`, className),
1104
1231
  role: ariaHidden ? void 0 : "status",
1105
1232
  style,
1106
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("svg", { "aria-hidden": "true", fill: "none", viewBox: "0 0 144 92", style: { height, width: "auto" }, children: [
1107
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("defs", { children: [
1108
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("linearGradient", { id: gradientId, x1: "59", x2: "94.3", y1: "0", y2: "89.1", gradientUnits: "userSpaceOnUse", children: [
1109
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("stop", { className: "fractal-ui-loader__stop-start", offset: "0" }),
1110
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("stop", { className: "fractal-ui-loader__stop-end", offset: "1" })
1233
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("svg", { "aria-hidden": "true", fill: "none", viewBox: "0 0 144 92", style: { height, width: "auto" }, children: [
1234
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("defs", { children: [
1235
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("linearGradient", { id: gradientId, x1: "59", x2: "94.3", y1: "0", y2: "89.1", gradientUnits: "userSpaceOnUse", children: [
1236
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("stop", { className: "fractal-ui-loader__stop-start", offset: "0" }),
1237
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("stop", { className: "fractal-ui-loader__stop-end", offset: "1" })
1111
1238
  ] }),
1112
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("linearGradient", { id: `${gradientId}-shine`, x1: "0", x2: "1", y1: "0", y2: "0", children: [
1113
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("stop", { offset: "0.4", stopColor: "white", stopOpacity: "0" }),
1114
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("stop", { offset: "0.5", stopColor: "white", stopOpacity: "0.62" }),
1115
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("stop", { offset: "0.6", stopColor: "white", stopOpacity: "0" })
1239
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("linearGradient", { id: `${gradientId}-shine`, x1: "0", x2: "1", y1: "0", y2: "0", children: [
1240
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("stop", { offset: "0.4", stopColor: "white", stopOpacity: "0" }),
1241
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("stop", { offset: "0.5", stopColor: "white", stopOpacity: "0.62" }),
1242
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("stop", { offset: "0.6", stopColor: "white", stopOpacity: "0" })
1116
1243
  ] }),
1117
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("clipPath", { id: clipId, children: [
1118
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("path", { d: LEFT }),
1119
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("path", { d: CENTER }),
1120
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("path", { d: RIGHT })
1244
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("clipPath", { id: clipId, children: [
1245
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("path", { d: LEFT }),
1246
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("path", { d: CENTER }),
1247
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("path", { d: RIGHT })
1121
1248
  ] })
1122
1249
  ] }),
1123
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("path", { d: CENTER, fill: `url(#${gradientId})` }),
1124
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("path", { d: RIGHT, fill: `url(#${gradientId})` }),
1125
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("path", { d: LEFT, fill: `url(#${gradientId})` }),
1126
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("g", { clipPath: `url(#${clipId})`, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("g", { className: "fractal-ui-loader__shine-axis", transform: "translate(72 46) rotate(68.4)", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("rect", { className: "fractal-ui-loader__shine", x: "-160", y: "-100", width: "320", height: "200", fill: `url(#${gradientId}-shine)` }) }) })
1250
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("path", { d: CENTER, fill: `url(#${gradientId})` }),
1251
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("path", { d: RIGHT, fill: `url(#${gradientId})` }),
1252
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("path", { d: LEFT, fill: `url(#${gradientId})` }),
1253
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("g", { clipPath: `url(#${clipId})`, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("g", { className: "fractal-ui-loader__shine-axis", transform: "translate(72 46) rotate(68.4)", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("rect", { className: "fractal-ui-loader__shine", x: "-160", y: "-100", width: "320", height: "200", fill: `url(#${gradientId}-shine)` }) }) })
1127
1254
  ] })
1128
1255
  }
1129
1256
  );
1130
1257
  }
1131
1258
 
1132
1259
  // src/components/Modal/Modal.tsx
1133
- var import_jsx_runtime14 = require("react/jsx-runtime");
1134
- var CloseIcon = () => /* @__PURE__ */ (0, import_jsx_runtime14.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_runtime14.jsx)("path", { d: "M12 4L4 12M4 4L12 12", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
1260
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1261
+ var CloseIcon = () => /* @__PURE__ */ (0, import_jsx_runtime15.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_runtime15.jsx)("path", { d: "M12 4L4 12M4 4L12 12", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) });
1135
1262
  function Modal({ open, onClose, title, children, danger, warn, footer, noClose, closeDisabled = false, size = "sm", loading = false, loadingLabel = "Loading", scrollable = false, className }) {
1136
1263
  const [bodyScrolled, setBodyScrolled] = React10.useState(false);
1137
1264
  useEscapeDismiss(80, onClose, open && !noClose && !closeDisabled);
@@ -1142,13 +1269,13 @@ function Modal({ open, onClose, title, children, danger, warn, footer, noClose,
1142
1269
  const sizeClass = `fractal-modal-panel--${size}`;
1143
1270
  const accentClass = danger ? "fractal-modal-panel--danger" : warn ? "fractal-modal-panel--warn" : "";
1144
1271
  return (0, import_react_dom.createPortal)(
1145
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "fractal-modal-overlay", onClick: noClose || closeDisabled ? void 0 : onClose, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1272
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "fractal-modal-overlay", onClick: noClose || closeDisabled ? void 0 : onClose, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
1146
1273
  "div",
1147
1274
  {
1148
1275
  className: cn("fractal-modal-panel", sizeClass, accentClass, scrollable && "fractal-modal-panel--scrollable", className),
1149
1276
  onClick: (e) => e.stopPropagation(),
1150
1277
  children: [
1151
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1278
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
1152
1279
  "div",
1153
1280
  {
1154
1281
  className: cn(
@@ -1157,12 +1284,12 @@ function Modal({ open, onClose, title, children, danger, warn, footer, noClose,
1157
1284
  scrollable && bodyScrolled && "fractal-modal-title-row--scrolled"
1158
1285
  ),
1159
1286
  children: [
1160
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("h3", { className: cn("fractal-modal-title", danger && "fractal-modal-title--danger", warn && "fractal-modal-title--warn"), children: title }),
1161
- !noClose && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("button", { type: "button", onClick: onClose, title: "Close", disabled: closeDisabled, className: "fractal-modal-close", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(CloseIcon, {}) })
1287
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("h3", { className: cn("fractal-modal-title", danger && "fractal-modal-title--danger", warn && "fractal-modal-title--warn"), children: title }),
1288
+ !noClose && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("button", { type: "button", onClick: onClose, title: "Close", disabled: closeDisabled, className: "fractal-modal-close", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(CloseIcon, {}) })
1162
1289
  ]
1163
1290
  }
1164
1291
  ),
1165
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1292
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1166
1293
  "div",
1167
1294
  {
1168
1295
  "aria-busy": loading || void 0,
@@ -1173,10 +1300,10 @@ function Modal({ open, onClose, title, children, danger, warn, footer, noClose,
1173
1300
  scrollable && "fractal-modal-body--scrollable"
1174
1301
  ),
1175
1302
  onScroll: scrollable ? (event) => setBodyScrolled(event.currentTarget.scrollTop > 0) : void 0,
1176
- children: loading ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(UILoader, { label: loadingLabel }) : children
1303
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(UILoader, { label: loadingLabel }) : children
1177
1304
  }
1178
1305
  ),
1179
- footer && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: cn("fractal-modal-footer", scrollable && "fractal-modal-footer--divided"), children: footer })
1306
+ footer && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: cn("fractal-modal-footer", scrollable && "fractal-modal-footer--divided"), children: footer })
1180
1307
  ]
1181
1308
  }
1182
1309
  ) }),
@@ -1185,17 +1312,17 @@ function Modal({ open, onClose, title, children, danger, warn, footer, noClose,
1185
1312
  }
1186
1313
 
1187
1314
  // src/components/DataTable/DataTable.tsx
1188
- var import_jsx_runtime15 = require("react/jsx-runtime");
1315
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1189
1316
  function DataTable({ columns, data, emptyMessage, header, size = "md", className }) {
1190
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: cn("fractal-datatable", `fractal-datatable--${size}`, className), children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "fractal-datatable-surface", children: [
1191
- header && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "fractal-datatable-header", children: header }),
1192
- data.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "fractal-datatable-empty", children: emptyMessage || "No data" }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("table", { className: "fractal-datatable-table", children: [
1193
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("tr", { className: "fractal-datatable-thead-row", children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("th", { className: "fractal-datatable-th", style: { width: col.width }, children: col.header }, col.key)) }) }),
1194
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("tbody", { children: data.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1317
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: cn("fractal-datatable", `fractal-datatable--${size}`, className), children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "fractal-datatable-surface", children: [
1318
+ header && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "fractal-datatable-header", children: header }),
1319
+ data.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "fractal-datatable-empty", children: emptyMessage || "No data" }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("table", { className: "fractal-datatable-table", children: [
1320
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("tr", { className: "fractal-datatable-thead-row", children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("th", { className: "fractal-datatable-th", style: { width: col.width }, children: col.header }, col.key)) }) }),
1321
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("tbody", { children: data.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1195
1322
  "tr",
1196
1323
  {
1197
1324
  className: "fractal-datatable-row",
1198
- children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("td", { className: "fractal-datatable-td", style: { width: col.width }, children: col.render(row, rowIndex) }, col.key))
1325
+ children: columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("td", { className: "fractal-datatable-td", style: { width: col.width }, children: col.render(row, rowIndex) }, col.key))
1199
1326
  },
1200
1327
  rowIndex
1201
1328
  )) })
@@ -1206,7 +1333,7 @@ function DataTable({ columns, data, emptyMessage, header, size = "md", className
1206
1333
  // src/components/Dropdown/Dropdown.tsx
1207
1334
  var React11 = __toESM(require("react"), 1);
1208
1335
  var import_fractal_icons8 = require("@mirror-physics/fractal-icons");
1209
- var import_jsx_runtime16 = require("react/jsx-runtime");
1336
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1210
1337
  var MARGIN = 4;
1211
1338
  function Dropdown({
1212
1339
  items,
@@ -1302,8 +1429,8 @@ function Dropdown({
1302
1429
  document.addEventListener("mousedown", handleClickOutside);
1303
1430
  return () => document.removeEventListener("mousedown", handleClickOutside);
1304
1431
  }, [open]);
1305
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: cn("fractal-dropdown", className), children: [
1306
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
1432
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: cn("fractal-dropdown", className), children: [
1433
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1307
1434
  "button",
1308
1435
  {
1309
1436
  ref: triggerRef,
@@ -1322,15 +1449,15 @@ function Dropdown({
1322
1449
  triggerClassName
1323
1450
  ),
1324
1451
  children: [
1325
- triggerContent != null ? triggerContent : /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
1326
- selected.icon != null && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "fractal-dropdown-icon fractal-dropdown-icon--trigger", children: selected.icon }),
1327
- selected.description != null && (typeof selected.description !== "string" || selected.description !== "") && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "fractal-dropdown-selected-text", children: selected.description })
1452
+ triggerContent != null ? triggerContent : /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
1453
+ selected.icon != null && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "fractal-dropdown-icon fractal-dropdown-icon--trigger", children: selected.icon }),
1454
+ selected.description != null && (typeof selected.description !== "string" || selected.description !== "") && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "fractal-dropdown-selected-text", children: selected.description })
1328
1455
  ] }),
1329
- !noChevron && !iconOnly && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "fractal-dropdown-chevron", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ChevronIcon, { size: size === "sm" ? 14 : 16 }) })
1456
+ !noChevron && !iconOnly && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "fractal-dropdown-chevron", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ChevronIcon, { size: size === "sm" ? 14 : 16 }) })
1330
1457
  ]
1331
1458
  }
1332
1459
  ),
1333
- open && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
1460
+ open && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1334
1461
  "div",
1335
1462
  {
1336
1463
  ref: panelRef,
@@ -1339,21 +1466,21 @@ function Dropdown({
1339
1466
  className: cn("fractal-dropdown-panel", `fractal-dropdown-panel--${size}`, panelClassName),
1340
1467
  style: panelStyle,
1341
1468
  children: [
1342
- label != null && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "fractal-dropdown-label", children: label }),
1469
+ label != null && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "fractal-dropdown-label", children: label }),
1343
1470
  visibleItems.map((item, index) => {
1344
- const topDivider = item.border === "top" ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "fractal-dropdown-separator" }) : null;
1345
- const bottomDivider = item.border === "bottom" ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "fractal-dropdown-separator" }) : null;
1471
+ const topDivider = item.border === "top" ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "fractal-dropdown-separator" }) : null;
1472
+ const bottomDivider = item.border === "bottom" ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "fractal-dropdown-separator" }) : null;
1346
1473
  if (item.kind === "header") {
1347
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(React11.Fragment, { children: [
1474
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(React11.Fragment, { children: [
1348
1475
  topDivider,
1349
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { role: "presentation", className: "fractal-dropdown-label", children: item.description }),
1476
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { role: "presentation", className: "fractal-dropdown-label", children: item.description }),
1350
1477
  bottomDivider
1351
1478
  ] }, `header-${index}`);
1352
1479
  }
1353
1480
  const isSelected = item.value === selectedValue;
1354
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(React11.Fragment, { children: [
1481
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(React11.Fragment, { children: [
1355
1482
  topDivider,
1356
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
1483
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1357
1484
  "button",
1358
1485
  {
1359
1486
  type: "button",
@@ -1365,9 +1492,9 @@ function Dropdown({
1365
1492
  },
1366
1493
  className: "fractal-dropdown-option",
1367
1494
  children: [
1368
- item.icon != null && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "fractal-dropdown-icon", children: item.icon }),
1369
- item.description != null && (typeof item.description !== "string" || item.description !== "") && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "fractal-dropdown-option-text", children: item.description }),
1370
- item.trailing != null && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "fractal-dropdown-trailing", children: item.trailing })
1495
+ item.icon != null && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "fractal-dropdown-icon", children: item.icon }),
1496
+ item.description != null && (typeof item.description !== "string" || item.description !== "") && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "fractal-dropdown-option-text", children: item.description }),
1497
+ item.trailing != null && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "fractal-dropdown-trailing", children: item.trailing })
1371
1498
  ]
1372
1499
  }
1373
1500
  ),
@@ -1382,9 +1509,9 @@ function Dropdown({
1382
1509
 
1383
1510
  // src/components/Link/Link.tsx
1384
1511
  var React12 = __toESM(require("react"), 1);
1385
- var import_jsx_runtime17 = require("react/jsx-runtime");
1512
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1386
1513
  var Link = React12.forwardRef(
1387
- ({ className, theme = "default", size = "md", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1514
+ ({ className, theme = "default", size = "md", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1388
1515
  "a",
1389
1516
  {
1390
1517
  ref,
@@ -1397,9 +1524,9 @@ Link.displayName = "Link";
1397
1524
 
1398
1525
  // src/components/Chip/Chip.tsx
1399
1526
  var React13 = __toESM(require("react"), 1);
1400
- var import_jsx_runtime18 = require("react/jsx-runtime");
1527
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1401
1528
  var Chip = React13.forwardRef(
1402
- ({ className, tone = "neutral", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1529
+ ({ className, tone = "neutral", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1403
1530
  "span",
1404
1531
  {
1405
1532
  ref,
@@ -1412,7 +1539,7 @@ Chip.displayName = "Chip";
1412
1539
 
1413
1540
  // src/components/Checkbox/Checkbox.tsx
1414
1541
  var import_fractal_icons9 = require("@mirror-physics/fractal-icons");
1415
- var import_jsx_runtime19 = require("react/jsx-runtime");
1542
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1416
1543
  function Checkbox({
1417
1544
  checked,
1418
1545
  indeterminate = false,
@@ -1423,7 +1550,7 @@ function Checkbox({
1423
1550
  onKeyDown,
1424
1551
  ...props
1425
1552
  }) {
1426
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1553
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1427
1554
  "button",
1428
1555
  {
1429
1556
  ...props,
@@ -1445,10 +1572,10 @@ function Checkbox({
1445
1572
  onKeyDown?.(event);
1446
1573
  if (event.key === " " || event.key === "Enter") event.stopPropagation();
1447
1574
  },
1448
- children: indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { className: "fractal-checkbox__indeterminate-icon", "aria-hidden": "true", children: [
1449
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_fractal_icons9.Checkbox, { size: 18 }),
1450
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_fractal_icons9.Minus, { className: "fractal-checkbox__indeterminate-mark", size: 12 })
1451
- ] }) : checked ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_fractal_icons9.CheckboxChecked, { "aria-hidden": "true", size: 18 }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_fractal_icons9.Checkbox, { "aria-hidden": "true", size: 18 })
1575
+ children: indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("span", { className: "fractal-checkbox__indeterminate-icon", "aria-hidden": "true", children: [
1576
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_fractal_icons9.Checkbox, { size: 18 }),
1577
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_fractal_icons9.Minus, { className: "fractal-checkbox__indeterminate-mark", size: 12 })
1578
+ ] }) : checked ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_fractal_icons9.CheckboxChecked, { "aria-hidden": "true", size: 18 }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_fractal_icons9.Checkbox, { "aria-hidden": "true", size: 18 })
1452
1579
  }
1453
1580
  );
1454
1581
  }
@@ -1456,7 +1583,7 @@ function Checkbox({
1456
1583
  // src/components/SortableTable/SortableTable.tsx
1457
1584
  var import_react4 = require("react");
1458
1585
  var import_fractal_icons10 = require("@mirror-physics/fractal-icons");
1459
- var import_jsx_runtime20 = require("react/jsx-runtime");
1586
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1460
1587
  function SortableTable({
1461
1588
  columns,
1462
1589
  data,
@@ -1551,16 +1678,16 @@ function SortableTable({
1551
1678
  onSortChange?.(nextKey, nextDirection);
1552
1679
  }
1553
1680
  };
1554
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: cn("fractal-sortable-table", `fractal-sortable-table--${size}`, embedded && "fractal-sortable-table--embedded", className), children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "fractal-sortable-table-surface", children: [
1555
- header && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "fractal-sortable-table-header", children: header }),
1556
- visibleRows.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "fractal-sortable-table-empty", children: emptyMessage || "No data" }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("table", { "aria-label": ariaLabel, className: "fractal-sortable-table-table", children: [
1557
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("tr", { className: "fractal-sortable-table-thead-row", children: [
1558
- selection && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1681
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: cn("fractal-sortable-table", `fractal-sortable-table--${size}`, embedded && "fractal-sortable-table--embedded", className), children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "fractal-sortable-table-surface", children: [
1682
+ header && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "fractal-sortable-table-header", children: header }),
1683
+ visibleRows.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "fractal-sortable-table-empty", children: emptyMessage || "No data" }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("table", { "aria-label": ariaLabel, className: "fractal-sortable-table-table", children: [
1684
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("tr", { className: "fractal-sortable-table-thead-row", children: [
1685
+ selection && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1559
1686
  "th",
1560
1687
  {
1561
1688
  className: "fractal-sortable-table-th fractal-sortable-table-selection-cell",
1562
1689
  scope: "col",
1563
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1690
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1564
1691
  Checkbox,
1565
1692
  {
1566
1693
  "aria-label": selection.selectAllLabel ?? "Select all rows",
@@ -1586,7 +1713,7 @@ function SortableTable({
1586
1713
  columns.map((col) => {
1587
1714
  const isActive = activeKey === col.key && activeDirection !== null;
1588
1715
  if (!col.sortable) {
1589
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1716
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1590
1717
  "th",
1591
1718
  {
1592
1719
  className: "fractal-sortable-table-th",
@@ -1597,13 +1724,13 @@ function SortableTable({
1597
1724
  col.key
1598
1725
  );
1599
1726
  }
1600
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1727
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1601
1728
  "th",
1602
1729
  {
1603
1730
  className: "fractal-sortable-table-th fractal-sortable-table-th--sortable",
1604
1731
  scope: "col",
1605
1732
  style: { width: col.width },
1606
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1733
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1607
1734
  "button",
1608
1735
  {
1609
1736
  type: "button",
@@ -1614,8 +1741,8 @@ function SortableTable({
1614
1741
  onClick: () => handleSortClick(col.key),
1615
1742
  "aria-sort": isActive ? activeDirection === "asc" ? "ascending" : "descending" : "none",
1616
1743
  children: [
1617
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { children: col.header }),
1618
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "fractal-sortable-table-sort-icon", "aria-hidden": "true", children: isActive && activeDirection === "asc" ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_fractal_icons10.ArrowUp, { size: 14 }) : isActive && activeDirection === "desc" ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_fractal_icons10.ArrowDown, { size: 14 }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_fractal_icons10.ArrowsUpDown, { size: 14 }) })
1744
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: col.header }),
1745
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "fractal-sortable-table-sort-icon", "aria-hidden": "true", children: isActive && activeDirection === "asc" ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_fractal_icons10.ArrowUp, { size: 14 }) : isActive && activeDirection === "desc" ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_fractal_icons10.ArrowDown, { size: 14 }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_fractal_icons10.ArrowsUpDown, { size: 14 }) })
1619
1746
  ]
1620
1747
  }
1621
1748
  )
@@ -1624,7 +1751,7 @@ function SortableTable({
1624
1751
  );
1625
1752
  })
1626
1753
  ] }) }),
1627
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("tbody", { children: visibleRows.map((row, rowIndex) => {
1754
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("tbody", { children: visibleRows.map((row, rowIndex) => {
1628
1755
  const highlighted = highlightRow?.(row, rowIndex) ?? false;
1629
1756
  const disabled = isRowDisabled?.(row) ?? false;
1630
1757
  const selectionDisabled = disabled || (isRowSelectionDisabled?.(row) ?? false);
@@ -1633,7 +1760,7 @@ function SortableTable({
1633
1760
  label: rowAction.label(row, rowIndex),
1634
1761
  icon: rowAction.icon(row, rowIndex)
1635
1762
  } : null;
1636
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1763
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1637
1764
  "tr",
1638
1765
  {
1639
1766
  className: cn(
@@ -1657,7 +1784,7 @@ function SortableTable({
1657
1784
  role: interactive ? "button" : void 0,
1658
1785
  tabIndex: interactive ? 0 : void 0,
1659
1786
  children: [
1660
- selection && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("td", { className: "fractal-sortable-table-td fractal-sortable-table-selection-cell", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1787
+ selection && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("td", { className: "fractal-sortable-table-td fractal-sortable-table-selection-cell", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1661
1788
  Checkbox,
1662
1789
  {
1663
1790
  "aria-label": selection.getRowLabel(row),
@@ -1669,7 +1796,7 @@ function SortableTable({
1669
1796
  }
1670
1797
  }
1671
1798
  ) }),
1672
- columns.map((col, columnIndex) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1799
+ columns.map((col, columnIndex) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1673
1800
  "td",
1674
1801
  {
1675
1802
  className: cn(
@@ -1679,7 +1806,7 @@ function SortableTable({
1679
1806
  style: { width: col.width, textAlign: col.align ?? "left" },
1680
1807
  children: [
1681
1808
  col.render(row, rowIndex),
1682
- action && columnIndex === columns.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "fractal-sortable-table-row-action", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "fractal-sortable-table-row-action__icon", children: action.icon }) })
1809
+ action && columnIndex === columns.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "fractal-sortable-table-row-action", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "fractal-sortable-table-row-action__icon", children: action.icon }) })
1683
1810
  ]
1684
1811
  },
1685
1812
  col.key
@@ -1695,7 +1822,7 @@ function SortableTable({
1695
1822
 
1696
1823
  // src/components/Tabs/Tabs.tsx
1697
1824
  var import_react5 = require("react");
1698
- var import_jsx_runtime21 = require("react/jsx-runtime");
1825
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1699
1826
  function Tabs({
1700
1827
  items,
1701
1828
  defaultValue,
@@ -1766,8 +1893,8 @@ function Tabs({
1766
1893
  selectTab(nextId2);
1767
1894
  requestAnimationFrame(() => tabRefs.current[nextId2]?.focus());
1768
1895
  };
1769
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: cn("fractal-tabs", `fractal-tabs--${variant}`, divider && "fractal-tabs--divider", className), children: [
1770
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1896
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: cn("fractal-tabs", `fractal-tabs--${variant}`, divider && "fractal-tabs--divider", className), children: [
1897
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1771
1898
  "div",
1772
1899
  {
1773
1900
  ref: tabListRef,
@@ -1780,7 +1907,7 @@ function Tabs({
1780
1907
  const isActive = item.id === activeId;
1781
1908
  const tabId = `${reactId}-tab-${item.id}`;
1782
1909
  const panelId = `${reactId}-panel-${item.id}`;
1783
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1910
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1784
1911
  "button",
1785
1912
  {
1786
1913
  ref: (el) => {
@@ -1811,7 +1938,7 @@ function Tabs({
1811
1938
  const tabId = `${reactId}-tab-${item.id}`;
1812
1939
  const panelId = `${reactId}-panel-${item.id}`;
1813
1940
  const isActive = item.id === activeId;
1814
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1941
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1815
1942
  "div",
1816
1943
  {
1817
1944
  id: panelId,
@@ -1829,7 +1956,7 @@ function Tabs({
1829
1956
 
1830
1957
  // src/components/ContentSwitcher/ContentSwitcher.tsx
1831
1958
  var React14 = __toESM(require("react"), 1);
1832
- var import_jsx_runtime22 = require("react/jsx-runtime");
1959
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1833
1960
  function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = false, className }) {
1834
1961
  const switcherRef = React14.useRef(null);
1835
1962
  const buttonRefs = React14.useRef([]);
@@ -1887,7 +2014,7 @@ function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = f
1887
2014
  onValueChange(items[nextIndex].value);
1888
2015
  }
1889
2016
  };
1890
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
2017
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1891
2018
  "div",
1892
2019
  {
1893
2020
  className: cn("fractal-content-switcher", fullWidth && "fractal-content-switcher--full-width", className),
@@ -1895,10 +2022,10 @@ function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = f
1895
2022
  "aria-label": ariaLabel,
1896
2023
  ref: switcherRef,
1897
2024
  children: [
1898
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "fractal-content-switcher__indicator", "aria-hidden": true }),
2025
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "fractal-content-switcher__indicator", "aria-hidden": true }),
1899
2026
  items.map((item, index) => {
1900
2027
  const active = item.value === value;
1901
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2028
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1902
2029
  "button",
1903
2030
  {
1904
2031
  className: cn("fractal-content-switcher__item", active && "fractal-content-switcher__item--active"),
@@ -1932,7 +2059,7 @@ function ContentSwitcher({ items, value, onValueChange, ariaLabel, fullWidth = f
1932
2059
  // src/components/Disclosure/Disclosure.tsx
1933
2060
  var import_react6 = require("react");
1934
2061
  var import_fractal_icons11 = require("@mirror-physics/fractal-icons");
1935
- var import_jsx_runtime23 = require("react/jsx-runtime");
2062
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1936
2063
  function Disclosure({
1937
2064
  title,
1938
2065
  meta,
@@ -1960,7 +2087,7 @@ function Disclosure({
1960
2087
  onOpenChange?.(next);
1961
2088
  }
1962
2089
  };
1963
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2090
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1964
2091
  "div",
1965
2092
  {
1966
2093
  className: cn(
@@ -1971,7 +2098,7 @@ function Disclosure({
1971
2098
  className
1972
2099
  ),
1973
2100
  children: [
1974
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2101
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1975
2102
  "button",
1976
2103
  {
1977
2104
  type: "button",
@@ -1982,13 +2109,13 @@ function Disclosure({
1982
2109
  disabled,
1983
2110
  onClick: toggle,
1984
2111
  children: [
1985
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "fractal-disclosure-icon", "aria-hidden": "true", children: isOpen ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_fractal_icons11.ChevronDown, { size: 16 }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_fractal_icons11.ChevronRight, { size: 16 }) }),
1986
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "fractal-disclosure-title", children: title }),
1987
- meta && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "fractal-disclosure-meta", children: meta })
2112
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "fractal-disclosure-icon", "aria-hidden": "true", children: isOpen ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_fractal_icons11.ChevronDown, { size: 16 }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_fractal_icons11.ChevronRight, { size: 16 }) }),
2113
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "fractal-disclosure-title", children: title }),
2114
+ meta && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "fractal-disclosure-meta", children: meta })
1988
2115
  ]
1989
2116
  }
1990
2117
  ),
1991
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2118
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1992
2119
  "div",
1993
2120
  {
1994
2121
  id: panelId,
@@ -1996,7 +2123,7 @@ function Disclosure({
1996
2123
  "aria-labelledby": headerId,
1997
2124
  className: "fractal-disclosure-panel",
1998
2125
  hidden: !isOpen,
1999
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "fractal-disclosure-panel-inner", children })
2126
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "fractal-disclosure-panel-inner", children })
2000
2127
  }
2001
2128
  )
2002
2129
  ]
@@ -2005,18 +2132,18 @@ function Disclosure({
2005
2132
  }
2006
2133
 
2007
2134
  // src/components/LatticeLoader/LatticeLoader.tsx
2008
- var import_jsx_runtime24 = require("react/jsx-runtime");
2135
+ var import_jsx_runtime25 = require("react/jsx-runtime");
2009
2136
  var LATTICE_COUNT = 160;
2010
2137
  var WAVE_PERIOD = 80;
2011
2138
  function LatticeLoader({ className, label = "Loading", ...props }) {
2012
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2139
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2013
2140
  "span",
2014
2141
  {
2015
2142
  "aria-label": label,
2016
2143
  className: cn("fractal-lattice-loader", className),
2017
2144
  role: "progressbar",
2018
2145
  ...props,
2019
- children: Array.from({ length: LATTICE_COUNT }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2146
+ children: Array.from({ length: LATTICE_COUNT }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2020
2147
  "span",
2021
2148
  {
2022
2149
  "aria-hidden": "true",
@@ -2030,10 +2157,10 @@ function LatticeLoader({ className, label = "Loading", ...props }) {
2030
2157
  }
2031
2158
 
2032
2159
  // src/components/Ghost/Ghost.tsx
2033
- var import_jsx_runtime25 = require("react/jsx-runtime");
2160
+ var import_jsx_runtime26 = require("react/jsx-runtime");
2034
2161
  var toCssLength = (value) => typeof value === "number" ? `${value}px` : value;
2035
2162
  function Ghost({ className, width, height, radius, style, ...props }) {
2036
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2163
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2037
2164
  "div",
2038
2165
  {
2039
2166
  "aria-hidden": "true",
@@ -2049,15 +2176,15 @@ function Ghost({ className, width, height, radius, style, ...props }) {
2049
2176
  );
2050
2177
  }
2051
2178
  function GhostLine({ className, size = "md", width = "100%", ...props }) {
2052
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Ghost, { className: cn("fractal-ghost-line", `fractal-ghost-line--${size}`, className), width, ...props });
2179
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Ghost, { className: cn("fractal-ghost-line", `fractal-ghost-line--${size}`, className), width, ...props });
2053
2180
  }
2054
2181
  function ButtonGhost({ className, size = "md", iconOnly = false, width, ...props }) {
2055
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Ghost, { className: cn("fractal-ghost-button", `fractal-ghost-button--${size}`, iconOnly && "fractal-ghost-button--icon-only", className), width, ...props });
2182
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Ghost, { className: cn("fractal-ghost-button", `fractal-ghost-button--${size}`, iconOnly && "fractal-ghost-button--icon-only", className), width, ...props });
2056
2183
  }
2057
2184
  function CardGhost({ className, lines = 3, showHeader = true, ...props }) {
2058
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-card", className), ...props, children: [
2059
- showHeader && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: "38%" }),
2060
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "fractal-ghost-stack", children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: index === lines - 1 ? "62%" : "100%" }, index)) })
2185
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-card", className), ...props, children: [
2186
+ showHeader && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: "38%" }),
2187
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "fractal-ghost-stack", children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: index === lines - 1 ? "62%" : "100%" }, index)) })
2061
2188
  ] });
2062
2189
  }
2063
2190
  function DataTableGhost({
@@ -2071,81 +2198,81 @@ function DataTableGhost({
2071
2198
  ...props
2072
2199
  }) {
2073
2200
  const cells = Array.from({ length: columns }, (_, index) => index);
2074
- return /* @__PURE__ */ (0, import_jsx_runtime25.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_runtime25.jsxs)("table", { className: "fractal-ghost-table__table", children: [
2075
- (showHeader || headers) && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("tr", { className: "fractal-ghost-table__head-row", children: cells.map((index) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("th", { style: { width: columnWidths?.[index] }, children: headers?.[index] ?? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { size: "sm", width: index === columns - 1 ? "62%" : "76%" }) }, index)) }) }),
2076
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("tbody", { children: Array.from({ length: rows }, (_, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("tr", { className: "fractal-ghost-table__row", children: cells.map((columnIndex) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("td", { style: { width: columnWidths?.[columnIndex] }, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: `${[72, 54, 82, 63, 46][(rowIndex + columnIndex) % 5]}%` }) }, columnIndex)) }, rowIndex)) })
2201
+ return /* @__PURE__ */ (0, import_jsx_runtime26.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_runtime26.jsxs)("table", { className: "fractal-ghost-table__table", children: [
2202
+ (showHeader || headers) && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("tr", { className: "fractal-ghost-table__head-row", children: cells.map((index) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("th", { style: { width: columnWidths?.[index] }, children: headers?.[index] ?? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { size: "sm", width: index === columns - 1 ? "62%" : "76%" }) }, index)) }) }),
2203
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("tbody", { children: Array.from({ length: rows }, (_, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("tr", { className: "fractal-ghost-table__row", children: cells.map((columnIndex) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("td", { style: { width: columnWidths?.[columnIndex] }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: `${[72, 54, 82, 63, 46][(rowIndex + columnIndex) % 5]}%` }) }, columnIndex)) }, rowIndex)) })
2077
2204
  ] }) });
2078
2205
  }
2079
2206
  function InputGhost({ className, labelWidth = "26%", ...props }) {
2080
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(FormFieldGhost, { className, labelWidth, ...props });
2207
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(FormFieldGhost, { className, labelWidth, ...props });
2081
2208
  }
2082
2209
  function TextareaGhost({ className, labelWidth = "26%", ...props }) {
2083
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(FormFieldGhost, { className, labelWidth, multiline: true, ...props });
2210
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(FormFieldGhost, { className, labelWidth, multiline: true, ...props });
2084
2211
  }
2085
2212
  function LabelGhost({ className, width = "26%", ...props }) {
2086
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { className: cn("fractal-ghost-label", className), size: "sm", width, ...props });
2213
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { className: cn("fractal-ghost-label", className), size: "sm", width, ...props });
2087
2214
  }
2088
2215
  function FormFieldGhost({ className, labelWidth = "26%", multiline = false, ...props }) {
2089
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-field", className), ...props, children: [
2090
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(LabelGhost, { width: labelWidth }),
2091
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Ghost, { className: cn("fractal-ghost-field__control", multiline && "fractal-ghost-field__control--multiline") })
2216
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-field", className), ...props, children: [
2217
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(LabelGhost, { width: labelWidth }),
2218
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Ghost, { className: cn("fractal-ghost-field__control", multiline && "fractal-ghost-field__control--multiline") })
2092
2219
  ] });
2093
2220
  }
2094
2221
  function AlertGhost({ className, ...props }) {
2095
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-alert", className), ...props, children: [
2096
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: "30%" }),
2097
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { size: "sm", width: "78%" })
2222
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-alert", className), ...props, children: [
2223
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: "30%" }),
2224
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { size: "sm", width: "78%" })
2098
2225
  ] });
2099
2226
  }
2100
2227
  function CheckboxGhost({ className, ...props }) {
2101
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-choice", className), ...props, children: [
2102
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Ghost, { className: "fractal-ghost-choice__control" }),
2103
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: "42%" })
2228
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-choice", className), ...props, children: [
2229
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Ghost, { className: "fractal-ghost-choice__control" }),
2230
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: "42%" })
2104
2231
  ] });
2105
2232
  }
2106
2233
  var ToggleGhost = CheckboxGhost;
2107
2234
  function ChipGhost({ className, width = 74, ...props }) {
2108
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Ghost, { className: cn("fractal-ghost-chip", className), height: 24, width, ...props });
2235
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Ghost, { className: cn("fractal-ghost-chip", className), height: 24, width, ...props });
2109
2236
  }
2110
2237
  function LinkGhost({ className, width = 96, ...props }) {
2111
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { className: cn("fractal-ghost-link", className), size: "sm", width, ...props });
2238
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { className: cn("fractal-ghost-link", className), size: "sm", width, ...props });
2112
2239
  }
2113
2240
  var TextButtonGhost = LinkGhost;
2114
2241
  function DropdownGhost({ className, ...props }) {
2115
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-dropdown", className), ...props, children: [
2116
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: "38%" }),
2117
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Ghost, { className: "fractal-ghost-dropdown__chevron" })
2242
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-dropdown", className), ...props, children: [
2243
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: "38%" }),
2244
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Ghost, { className: "fractal-ghost-dropdown__chevron" })
2118
2245
  ] });
2119
2246
  }
2120
2247
  function ContentSwitcherGhost({ className, options = 3, ...props }) {
2121
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { "aria-hidden": "true", className: cn("fractal-ghost-switcher", className), ...props, children: Array.from({ length: options }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Ghost, {}, index)) });
2248
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { "aria-hidden": "true", className: cn("fractal-ghost-switcher", className), ...props, children: Array.from({ length: options }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Ghost, {}, index)) });
2122
2249
  }
2123
2250
  var TabsGhost = ContentSwitcherGhost;
2124
2251
  function DisclosureGhost({ className, ...props }) {
2125
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-disclosure", className), ...props, children: [
2126
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Ghost, { className: "fractal-ghost-disclosure__icon" }),
2127
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: "42%" })
2252
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-disclosure", className), ...props, children: [
2253
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Ghost, { className: "fractal-ghost-disclosure__icon" }),
2254
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: "42%" })
2128
2255
  ] });
2129
2256
  }
2130
2257
  function PaginationGhost({ className, pages = 5, ...props }) {
2131
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { "aria-hidden": "true", className: cn("fractal-ghost-pagination", className), ...props, children: Array.from({ length: pages }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Ghost, {}, index)) });
2258
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { "aria-hidden": "true", className: cn("fractal-ghost-pagination", className), ...props, children: Array.from({ length: pages }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Ghost, {}, index)) });
2132
2259
  }
2133
2260
  function FileDropzoneGhost({ className, ...props }) {
2134
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-dropzone", className), ...props, children: [
2135
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Ghost, { className: "fractal-ghost-dropzone__icon" }),
2136
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: "26%" }),
2137
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { size: "sm", width: "46%" })
2261
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-dropzone", className), ...props, children: [
2262
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Ghost, { className: "fractal-ghost-dropzone__icon" }),
2263
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: "26%" }),
2264
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { size: "sm", width: "46%" })
2138
2265
  ] });
2139
2266
  }
2140
2267
  function PromptCardGhost({ className, ...props }) {
2141
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(CardGhost, { className: cn("fractal-ghost-prompt-card", className), lines: 4, ...props });
2268
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(CardGhost, { className: cn("fractal-ghost-prompt-card", className), lines: 4, ...props });
2142
2269
  }
2143
2270
  function ConversationGhost({
2144
2271
  className,
2145
2272
  "aria-label": ariaLabel = "Loading conversation",
2146
2273
  ...props
2147
2274
  }) {
2148
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
2275
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
2149
2276
  "div",
2150
2277
  {
2151
2278
  "aria-busy": "true",
@@ -2154,54 +2281,54 @@ function ConversationGhost({
2154
2281
  role: "status",
2155
2282
  ...props,
2156
2283
  children: [
2157
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { "aria-hidden": "true", className: "fractal-ghost-conversation__message fractal-ghost-conversation__message--user", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "fractal-ghost-conversation__bubble", children: [
2158
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: "100%" }),
2159
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: "86%" }),
2160
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: "64%" })
2284
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { "aria-hidden": "true", className: "fractal-ghost-conversation__message fractal-ghost-conversation__message--user", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "fractal-ghost-conversation__bubble", children: [
2285
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: "100%" }),
2286
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: "86%" }),
2287
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: "64%" })
2161
2288
  ] }) }),
2162
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { "aria-hidden": "true", className: "fractal-ghost-conversation__message fractal-ghost-conversation__message--assistant", children: [
2163
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: "92%" }),
2164
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: "78%" }),
2165
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: "58%" })
2289
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { "aria-hidden": "true", className: "fractal-ghost-conversation__message fractal-ghost-conversation__message--assistant", children: [
2290
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: "92%" }),
2291
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: "78%" }),
2292
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: "58%" })
2166
2293
  ] })
2167
2294
  ]
2168
2295
  }
2169
2296
  );
2170
2297
  }
2171
2298
  function SortableTableGhost(props) {
2172
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DataTableGhost, { ...props });
2299
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DataTableGhost, { ...props });
2173
2300
  }
2174
2301
  function SidebarGhost({ className, items = 6, ...props }) {
2175
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("aside", { "aria-hidden": "true", className: cn("fractal-ghost-sidebar", className), ...props, children: [
2176
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Ghost, { className: "fractal-ghost-sidebar__brand" }),
2177
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "fractal-ghost-sidebar__items", children: Array.from({ length: items }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "fractal-ghost-sidebar__item", children: [
2178
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Ghost, {}),
2179
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: `${[54, 68, 44, 61][index % 4]}%` })
2302
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("aside", { "aria-hidden": "true", className: cn("fractal-ghost-sidebar", className), ...props, children: [
2303
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Ghost, { className: "fractal-ghost-sidebar__brand" }),
2304
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "fractal-ghost-sidebar__items", children: Array.from({ length: items }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "fractal-ghost-sidebar__item", children: [
2305
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Ghost, {}),
2306
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: `${[54, 68, 44, 61][index % 4]}%` })
2180
2307
  ] }, index)) })
2181
2308
  ] });
2182
2309
  }
2183
2310
  function ModalGhost({ className, title, lines = 3, ...props }) {
2184
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SurfaceGhost, { className: cn("fractal-ghost-modal", className), title, lines, ...props });
2311
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SurfaceGhost, { className: cn("fractal-ghost-modal", className), title, lines, ...props });
2185
2312
  }
2186
2313
  function SidePanelGhost({ className, title, lines = 5, ...props }) {
2187
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SurfaceGhost, { className: cn("fractal-ghost-side-panel", className), title, lines, ...props });
2314
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SurfaceGhost, { className: cn("fractal-ghost-side-panel", className), title, lines, ...props });
2188
2315
  }
2189
2316
  function SurfaceGhost({ className, title, lines = 3, ...props }) {
2190
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-surface", className), ...props, children: [
2191
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "fractal-ghost-surface__header", children: [
2192
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: "42%" }),
2193
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Ghost, { className: "fractal-ghost-surface__close" })
2317
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { "aria-hidden": "true", className: cn("fractal-ghost-surface", className), ...props, children: [
2318
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "fractal-ghost-surface__header", children: [
2319
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: "42%" }),
2320
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Ghost, { className: "fractal-ghost-surface__close" })
2194
2321
  ] }),
2195
- title && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "fractal-ghost-surface__title", children: title }),
2196
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "fractal-ghost-stack", children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GhostLine, { width: index === lines - 1 ? "64%" : "100%" }, index)) })
2322
+ title && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "fractal-ghost-surface__title", children: title }),
2323
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "fractal-ghost-stack", children: Array.from({ length: lines }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(GhostLine, { width: index === lines - 1 ? "64%" : "100%" }, index)) })
2197
2324
  ] });
2198
2325
  }
2199
2326
 
2200
2327
  // src/components/Sidebar/Sidebar.tsx
2201
2328
  var React15 = __toESM(require("react"), 1);
2202
- var import_jsx_runtime26 = require("react/jsx-runtime");
2329
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2203
2330
  var Sidebar = React15.forwardRef(
2204
- ({ className, width, compact = false, style, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2331
+ ({ className, width, compact = false, style, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2205
2332
  "aside",
2206
2333
  {
2207
2334
  ref,
@@ -2214,11 +2341,11 @@ var Sidebar = React15.forwardRef(
2214
2341
  );
2215
2342
  Sidebar.displayName = "Sidebar";
2216
2343
  var SidebarHeader = React15.forwardRef(
2217
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { ref, className: cn("fractal-sidebar__header", className), ...props })
2344
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { ref, className: cn("fractal-sidebar__header", className), ...props })
2218
2345
  );
2219
2346
  SidebarHeader.displayName = "SidebarHeader";
2220
2347
  var SidebarBrand = React15.forwardRef(
2221
- ({ className, type = "button", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("button", { ref, type, className: cn("fractal-sidebar__brand", className), ...props })
2348
+ ({ className, type = "button", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("button", { ref, type, className: cn("fractal-sidebar__brand", className), ...props })
2222
2349
  );
2223
2350
  SidebarBrand.displayName = "SidebarBrand";
2224
2351
  function SidebarAccountMenu({
@@ -2229,7 +2356,7 @@ function SidebarAccountMenu({
2229
2356
  icon,
2230
2357
  className
2231
2358
  }) {
2232
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2359
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2233
2360
  Dropdown,
2234
2361
  {
2235
2362
  align: "left",
@@ -2239,9 +2366,9 @@ function SidebarAccountMenu({
2239
2366
  panelClassName: "fractal-sidebar__account-panel",
2240
2367
  selectedValue: "",
2241
2368
  triggerClassName: "fractal-sidebar__account-trigger",
2242
- triggerContent: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
2243
- icon && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "fractal-sidebar__account-icon", "aria-hidden": "true", children: icon }),
2244
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "fractal-sidebar__account-name", children: name })
2369
+ triggerContent: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
2370
+ icon && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "fractal-sidebar__account-icon", "aria-hidden": "true", children: icon }),
2371
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "fractal-sidebar__account-name", children: name })
2245
2372
  ] }),
2246
2373
  triggerLabel,
2247
2374
  triggerVariant: "tertiary"
@@ -2249,15 +2376,15 @@ function SidebarAccountMenu({
2249
2376
  );
2250
2377
  }
2251
2378
  var SidebarNav = React15.forwardRef(
2252
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("nav", { ref, className: cn("fractal-sidebar__nav", className), ...props })
2379
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("nav", { ref, className: cn("fractal-sidebar__nav", className), ...props })
2253
2380
  );
2254
2381
  SidebarNav.displayName = "SidebarNav";
2255
2382
  var SidebarSection = React15.forwardRef(
2256
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { ref, className: cn("fractal-sidebar__section", className), ...props })
2383
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { ref, className: cn("fractal-sidebar__section", className), ...props })
2257
2384
  );
2258
2385
  SidebarSection.displayName = "SidebarSection";
2259
2386
  var SidebarNavItem = React15.forwardRef(
2260
- ({ active = false, icon, endAdornment, className, type = "button", children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
2387
+ ({ active = false, icon, endAdornment, className, type = "button", children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
2261
2388
  "button",
2262
2389
  {
2263
2390
  ref,
@@ -2267,28 +2394,28 @@ var SidebarNavItem = React15.forwardRef(
2267
2394
  "aria-current": active ? "page" : void 0,
2268
2395
  ...props,
2269
2396
  children: [
2270
- icon && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "fractal-sidebar__nav-item-icon", "aria-hidden": "true", children: icon }),
2271
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "fractal-sidebar__nav-item-label", children }),
2272
- endAdornment && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "fractal-sidebar__nav-item-end", children: endAdornment })
2397
+ icon && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "fractal-sidebar__nav-item-icon", "aria-hidden": "true", children: icon }),
2398
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "fractal-sidebar__nav-item-label", children }),
2399
+ endAdornment && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "fractal-sidebar__nav-item-end", children: endAdornment })
2273
2400
  ]
2274
2401
  }
2275
2402
  )
2276
2403
  );
2277
2404
  SidebarNavItem.displayName = "SidebarNavItem";
2278
2405
  var SidebarFooter = React15.forwardRef(
2279
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { ref, className: cn("fractal-sidebar__footer", className), ...props })
2406
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { ref, className: cn("fractal-sidebar__footer", className), ...props })
2280
2407
  );
2281
2408
  SidebarFooter.displayName = "SidebarFooter";
2282
2409
 
2283
2410
  // src/components/SidePanel/SidePanel.tsx
2284
2411
  var import_react_dom2 = require("react-dom");
2285
2412
  var import_fractal_icons12 = require("@mirror-physics/fractal-icons");
2286
- var import_jsx_runtime27 = require("react/jsx-runtime");
2413
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2287
2414
  function SidePanel({ open, onClose, title, description, children, footer, size = "md", loading = false, loadingLabel = "Loading", className }) {
2288
2415
  useEscapeDismiss(80, onClose, open);
2289
2416
  if (!open) return null;
2290
2417
  return (0, import_react_dom2.createPortal)(
2291
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "fractal-side-panel-overlay", onMouseDown: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
2418
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "fractal-side-panel-overlay", onMouseDown: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2292
2419
  "aside",
2293
2420
  {
2294
2421
  className: cn("fractal-side-panel", `fractal-side-panel--${size}`, className),
@@ -2297,15 +2424,15 @@ function SidePanel({ open, onClose, title, description, children, footer, size =
2297
2424
  role: "dialog",
2298
2425
  onMouseDown: (event) => event.stopPropagation(),
2299
2426
  children: [
2300
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("header", { className: "fractal-side-panel__header", children: [
2301
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "fractal-side-panel__heading", children: [
2302
- typeof title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("h2", { className: "fractal-side-panel__title", children: title }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "fractal-side-panel__title", children: title }),
2303
- description && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "fractal-side-panel__description", children: description })
2427
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("header", { className: "fractal-side-panel__header", children: [
2428
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "fractal-side-panel__heading", children: [
2429
+ typeof title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("h2", { className: "fractal-side-panel__title", children: title }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "fractal-side-panel__title", children: title }),
2430
+ description && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "fractal-side-panel__description", children: description })
2304
2431
  ] }),
2305
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("button", { type: "button", className: "fractal-side-panel__close", "aria-label": "Close panel", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_fractal_icons12.Close, { size: 18 }) })
2432
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("button", { type: "button", className: "fractal-side-panel__close", "aria-label": "Close panel", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_fractal_icons12.Close, { size: 18 }) })
2306
2433
  ] }),
2307
- /* @__PURE__ */ (0, import_jsx_runtime27.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_runtime27.jsx)(UILoader, { label: loadingLabel }) : children }),
2308
- footer && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("footer", { className: "fractal-side-panel__footer", children: footer })
2434
+ /* @__PURE__ */ (0, import_jsx_runtime28.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_runtime28.jsx)(UILoader, { label: loadingLabel }) : children }),
2435
+ footer && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("footer", { className: "fractal-side-panel__footer", children: footer })
2309
2436
  ]
2310
2437
  }
2311
2438
  ) }),
@@ -2315,17 +2442,17 @@ function SidePanel({ open, onClose, title, description, children, footer, size =
2315
2442
 
2316
2443
  // src/components/Textarea/Textarea.tsx
2317
2444
  var React16 = __toESM(require("react"), 1);
2318
- var import_jsx_runtime28 = require("react/jsx-runtime");
2445
+ var import_jsx_runtime29 = require("react/jsx-runtime");
2319
2446
  var Textarea = React16.forwardRef(
2320
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("textarea", { ref, className: cn("fractal-textarea", className), ...props })
2447
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("textarea", { ref, className: cn("fractal-textarea", className), ...props })
2321
2448
  );
2322
2449
  Textarea.displayName = "Textarea";
2323
2450
 
2324
2451
  // src/components/TextButton/TextButton.tsx
2325
2452
  var React17 = __toESM(require("react"), 1);
2326
- var import_jsx_runtime29 = require("react/jsx-runtime");
2453
+ var import_jsx_runtime30 = require("react/jsx-runtime");
2327
2454
  var TextButton = React17.forwardRef(
2328
- ({ className, icon, iconPosition = "start", size = "md", tone = "primary", children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
2455
+ ({ className, icon, iconPosition = "start", size = "md", tone = "primary", children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
2329
2456
  "button",
2330
2457
  {
2331
2458
  ref,
@@ -2333,9 +2460,9 @@ var TextButton = React17.forwardRef(
2333
2460
  type: "button",
2334
2461
  ...props,
2335
2462
  children: [
2336
- icon && iconPosition === "start" && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "fractal-text-button__icon", "aria-hidden": "true", children: icon }),
2337
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children }),
2338
- icon && iconPosition === "end" && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "fractal-text-button__icon", "aria-hidden": "true", children: icon })
2463
+ icon && iconPosition === "start" && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "fractal-text-button__icon", "aria-hidden": "true", children: icon }),
2464
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children }),
2465
+ icon && iconPosition === "end" && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "fractal-text-button__icon", "aria-hidden": "true", children: icon })
2339
2466
  ]
2340
2467
  }
2341
2468
  )
@@ -2345,7 +2472,7 @@ TextButton.displayName = "TextButton";
2345
2472
  // src/components/FileDropzone/FileDropzone.tsx
2346
2473
  var React18 = __toESM(require("react"), 1);
2347
2474
  var import_fractal_icons13 = require("@mirror-physics/fractal-icons");
2348
- var import_jsx_runtime30 = require("react/jsx-runtime");
2475
+ var import_jsx_runtime31 = require("react/jsx-runtime");
2349
2476
  function FileDropzone({
2350
2477
  files,
2351
2478
  onFilesChange,
@@ -2365,8 +2492,8 @@ function FileDropzone({
2365
2492
  if (additions.length === 0) return;
2366
2493
  onFilesChange(multiple ? [...files, ...additions] : additions.slice(0, 1));
2367
2494
  };
2368
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: cn("fractal-file-dropzone", className), children: [
2369
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2495
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: cn("fractal-file-dropzone", className), children: [
2496
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2370
2497
  "input",
2371
2498
  {
2372
2499
  ref: inputRef,
@@ -2382,7 +2509,7 @@ function FileDropzone({
2382
2509
  }
2383
2510
  }
2384
2511
  ),
2385
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
2512
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
2386
2513
  "button",
2387
2514
  {
2388
2515
  className: "fractal-file-dropzone__target",
@@ -2405,18 +2532,18 @@ function FileDropzone({
2405
2532
  addFiles(event.dataTransfer.files);
2406
2533
  },
2407
2534
  children: [
2408
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_fractal_icons13.FileArrowUp, { "aria-hidden": "true", size: 20 }),
2409
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("span", { className: "fractal-file-dropzone__copy", children: [
2410
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "fractal-file-dropzone__title", children: title }),
2411
- description && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "fractal-file-dropzone__description", children: description })
2535
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_fractal_icons13.FileArrowUp, { "aria-hidden": "true", size: 20 }),
2536
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: "fractal-file-dropzone__copy", children: [
2537
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "fractal-file-dropzone__title", children: title }),
2538
+ description && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "fractal-file-dropzone__description", children: description })
2412
2539
  ] })
2413
2540
  ]
2414
2541
  }
2415
2542
  ),
2416
- files.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("ul", { className: "fractal-file-dropzone__files", "aria-label": "Attached files", children: files.map((file, index) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("li", { className: "fractal-file-dropzone__file", children: [
2417
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "fractal-file-dropzone__file-name", children: file.name }),
2418
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "fractal-file-dropzone__file-meta", children: formatFileSize(file.size) }),
2419
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2543
+ files.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("ul", { className: "fractal-file-dropzone__files", "aria-label": "Attached files", children: files.map((file, index) => /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("li", { className: "fractal-file-dropzone__file", children: [
2544
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "fractal-file-dropzone__file-name", children: file.name }),
2545
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "fractal-file-dropzone__file-meta", children: formatFileSize(file.size) }),
2546
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2420
2547
  "button",
2421
2548
  {
2422
2549
  className: "fractal-file-dropzone__remove",
@@ -2424,7 +2551,7 @@ function FileDropzone({
2424
2551
  "aria-label": `Remove ${file.name}`,
2425
2552
  disabled,
2426
2553
  onClick: () => onFilesChange(files.filter((_, fileIndex) => fileIndex !== index)),
2427
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_fractal_icons13.Close, { "aria-hidden": "true", size: 14 })
2554
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_fractal_icons13.Close, { "aria-hidden": "true", size: 14 })
2428
2555
  }
2429
2556
  )
2430
2557
  ] }, `${file.name}-${file.size}-${index}`)) })
@@ -2438,7 +2565,7 @@ function formatFileSize(bytes) {
2438
2565
 
2439
2566
  // src/components/Pagination/Pagination.tsx
2440
2567
  var import_fractal_icons14 = require("@mirror-physics/fractal-icons");
2441
- var import_jsx_runtime31 = require("react/jsx-runtime");
2568
+ var import_jsx_runtime32 = require("react/jsx-runtime");
2442
2569
  function Pagination({
2443
2570
  page,
2444
2571
  pageSize,
@@ -2454,10 +2581,10 @@ function Pagination({
2454
2581
  const start = totalItems === 0 ? 0 : (currentPage - 1) * pageSize + 1;
2455
2582
  const end = Math.min(currentPage * pageSize, totalItems);
2456
2583
  const canChangePageSize = pageSizeOptions != null && pageSizeOptions.length > 0 && onPageSizeChange != null;
2457
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("nav", { className: cn("fractal-pagination", className), "aria-label": ariaLabel, children: [
2458
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "fractal-pagination__summary", children: totalItems === 0 ? "No results" : `${start}-${end} of ${totalItems}` }),
2459
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "fractal-pagination__controls", children: [
2460
- canChangePageSize && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2584
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("nav", { className: cn("fractal-pagination", className), "aria-label": ariaLabel, children: [
2585
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "fractal-pagination__summary", children: totalItems === 0 ? "No results" : `${start}-${end} of ${totalItems}` }),
2586
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "fractal-pagination__controls", children: [
2587
+ canChangePageSize && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2461
2588
  Dropdown,
2462
2589
  {
2463
2590
  align: "right",
@@ -2474,7 +2601,7 @@ function Pagination({
2474
2601
  triggerVariant: "tertiary"
2475
2602
  }
2476
2603
  ),
2477
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2604
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2478
2605
  "button",
2479
2606
  {
2480
2607
  className: "fractal-pagination__button",
@@ -2483,15 +2610,15 @@ function Pagination({
2483
2610
  title: "Previous page",
2484
2611
  disabled: currentPage === 1 || totalItems === 0,
2485
2612
  onClick: () => onPageChange(currentPage - 1),
2486
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_fractal_icons14.ArrowLeft, { "aria-hidden": "true", size: 16 })
2613
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_fractal_icons14.ArrowLeft, { "aria-hidden": "true", size: 16 })
2487
2614
  }
2488
2615
  ),
2489
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: "fractal-pagination__page", "aria-current": "page", children: [
2616
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("span", { className: "fractal-pagination__page", "aria-current": "page", children: [
2490
2617
  currentPage,
2491
2618
  " of ",
2492
2619
  totalPages
2493
2620
  ] }),
2494
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2621
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2495
2622
  "button",
2496
2623
  {
2497
2624
  className: "fractal-pagination__button",
@@ -2500,7 +2627,7 @@ function Pagination({
2500
2627
  title: "Next page",
2501
2628
  disabled: currentPage === totalPages || totalItems === 0,
2502
2629
  onClick: () => onPageChange(currentPage + 1),
2503
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_fractal_icons14.ArrowRight, { "aria-hidden": "true", size: 16 })
2630
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_fractal_icons14.ArrowRight, { "aria-hidden": "true", size: 16 })
2504
2631
  }
2505
2632
  )
2506
2633
  ] })
@@ -2569,6 +2696,7 @@ function Pagination({
2569
2696
  SidebarNav,
2570
2697
  SidebarNavItem,
2571
2698
  SidebarSection,
2699
+ Slider,
2572
2700
  SortableTable,
2573
2701
  SortableTableGhost,
2574
2702
  TableSearch,