@ai-matrx/design-system 0.86.350 → 0.86.352

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.
Files changed (39) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/carousel.js +2 -2
  3. package/dist/{chunk-BCGNEWZM.js → chunk-FLWSEDUW.js} +2 -2
  4. package/dist/{chunk-UTADJKVR.js → chunk-GMNROZQJ.js} +3 -3
  5. package/dist/{chunk-UTADJKVR.js.map → chunk-GMNROZQJ.js.map} +1 -1
  6. package/dist/{chunk-SC3XPADZ.js → chunk-UGQRAQTE.js} +431 -342
  7. package/dist/chunk-UGQRAQTE.js.map +1 -0
  8. package/dist/controls.cjs +547 -458
  9. package/dist/controls.cjs.map +1 -1
  10. package/dist/controls.css +27 -18
  11. package/dist/controls.d.cts +51 -3
  12. package/dist/controls.d.ts +51 -3
  13. package/dist/controls.js +10 -2
  14. package/dist/data-table/index.cjs +45 -38
  15. package/dist/data-table/index.cjs.map +1 -1
  16. package/dist/data-table/index.js +44 -37
  17. package/dist/data-table/index.js.map +1 -1
  18. package/dist/desktop.cjs +98 -34
  19. package/dist/desktop.cjs.map +1 -1
  20. package/dist/desktop.css +29 -0
  21. package/dist/desktop.d.cts +17 -5
  22. package/dist/desktop.d.ts +17 -5
  23. package/dist/desktop.js +98 -34
  24. package/dist/desktop.js.map +1 -1
  25. package/dist/index.cjs +3 -3
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +3 -3
  28. package/dist/index.d.ts +3 -3
  29. package/dist/index.js +4 -4
  30. package/dist/index.js.map +1 -1
  31. package/dist/settings.cjs +2 -2
  32. package/dist/settings.cjs.map +1 -1
  33. package/dist/settings.js +1 -1
  34. package/dist/writing-field.cjs +2 -2
  35. package/dist/writing-field.cjs.map +1 -1
  36. package/dist/writing-field.js +1 -1
  37. package/package.json +2 -2
  38. package/dist/chunk-SC3XPADZ.js.map +0 -1
  39. /package/dist/{chunk-BCGNEWZM.js.map → chunk-FLWSEDUW.js.map} +0 -0
package/dist/controls.cjs CHANGED
@@ -44,6 +44,10 @@ __export(controls_exports, {
44
44
  CONTROLS_CONTAINER_CLASS: () => CONTROLS_CONTAINER_CLASS,
45
45
  CONTROLS_CONTAINER_NAME: () => CONTROLS_CONTAINER_NAME,
46
46
  CalloutBanner: () => CalloutBanner,
47
+ Checklist: () => Checklist,
48
+ ChecklistItem: () => ChecklistItem,
49
+ ChecklistMark: () => ChecklistMark,
50
+ ChecklistMeter: () => ChecklistMeter,
47
51
  Chip: () => Chip,
48
52
  ChipSet: () => ChipSet,
49
53
  CitationChip: () => CitationChip,
@@ -3621,12 +3625,12 @@ function SettingRow({ label, line, htmlFor, children, className }) {
3621
3625
  ] });
3622
3626
  }
3623
3627
  var Tile = React20.forwardRef(
3624
- ({ layout = "row", variant = "outline", icon, title, wrapTitle, line, end, selected, selectedStyle, tooltip, level, fit, endInset, oneLine, dashed, hoverStyle, danger, dimmed, glyphTone, hero, tone: tone2, dense, asChild = false, className, children, onClick, type, ...props }, ref) => {
3628
+ ({ layout = "row", variant = "outline", icon, title, wrapTitle, line, end, selected, selectedStyle, tooltip, level, fit, endInset, oneLine, dashed, hoverStyle, danger, dimmed, glyphTone, hero, tone: tone2, iconTone, dense, asChild = false, className, children, onClick, type, ...props }, ref) => {
3625
3629
  const Component = asChild ? import_react_slot4.Slot : "button";
3626
3630
  const ariaDisabled = props["aria-disabled"];
3627
3631
  const inert = ariaDisabled === true || ariaDisabled === "true";
3628
3632
  const body = /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
3629
- icon ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-tile-icon", children: icon }) : null,
3633
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-tile-icon", "data-tone": iconTone && iconTone !== "neutral" ? iconTone : void 0, children: icon }) : null,
3630
3634
  /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { className: "matrx-tile-text", children: [
3631
3635
  /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-tile-title", children: title }),
3632
3636
  line ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "matrx-tile-line", children: line }) : null
@@ -4048,9 +4052,94 @@ function StageSteps({ steps, current, labels = "all", maxVisible, className, ...
4048
4052
  }) });
4049
4053
  }
4050
4054
 
4055
+ // src/controls/checklist.tsx
4056
+ var import_jsx_runtime26 = require("react/jsx-runtime");
4057
+ var STATE_WORD = {
4058
+ done: "Met",
4059
+ open: "Missing",
4060
+ unknown: "Not measured"
4061
+ };
4062
+ function ChecklistMark({ state, className }) {
4063
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4064
+ "span",
4065
+ {
4066
+ "data-matrx-checklist-mark": "",
4067
+ "data-state": state,
4068
+ role: "img",
4069
+ "aria-label": STATE_WORD[state],
4070
+ className: cn(
4071
+ "grid size-4 shrink-0 place-items-center rounded-full",
4072
+ state === "done" && "bg-success text-success-foreground",
4073
+ state === "open" && "border-2 border-warning",
4074
+ state === "unknown" && "border-2 border-dashed border-muted-foreground",
4075
+ className
4076
+ ),
4077
+ children: state === "done" ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(CheckIcon, { className: "size-3", strokeWidth: 3 }) : null
4078
+ }
4079
+ );
4080
+ }
4081
+ function Checklist({ className, children, ...props }) {
4082
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("ul", { "data-matrx-checklist": "", className: cn("grid min-w-0", className), ...props, children });
4083
+ }
4084
+ function ChecklistItem({ state, title, line, end, className, ...props }) {
4085
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
4086
+ "li",
4087
+ {
4088
+ "data-matrx-checklist-item": "",
4089
+ "data-state": state,
4090
+ className: cn(
4091
+ "grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-start gap-x-2 py-1.5 sm:grid-cols-[auto_minmax(0,1fr)_auto]",
4092
+ className
4093
+ ),
4094
+ ...props,
4095
+ children: [
4096
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ChecklistMark, { state, className: "mt-0.5" }),
4097
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "min-w-0", children: [
4098
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "type-title truncate text-foreground", children: title }),
4099
+ line ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "type-secondary truncate text-muted-foreground", title: line, children: line }) : null
4100
+ ] }),
4101
+ end ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "col-start-2 mt-1.5 flex justify-start sm:col-start-3 sm:row-start-1 sm:mt-0 sm:justify-end sm:self-center", children: end }) : null
4102
+ ]
4103
+ }
4104
+ );
4105
+ }
4106
+ function ChecklistMeter({ label, met, total, end, className }) {
4107
+ const done = Math.max(0, Math.min(total, met));
4108
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { "data-matrx-checklist-meter": "", className: cn("grid min-w-0 gap-1.5", className), children: [
4109
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex min-w-0 items-center gap-2", children: [
4110
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "type-title min-w-0 truncate text-foreground", children: label }),
4111
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("span", { className: "type-meta shrink-0 tabular-nums text-muted-foreground", children: [
4112
+ done,
4113
+ " of ",
4114
+ total
4115
+ ] }),
4116
+ end ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "ml-auto flex shrink-0 items-center", children: end }) : null
4117
+ ] }),
4118
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4119
+ "div",
4120
+ {
4121
+ role: "meter",
4122
+ "aria-valuemin": 0,
4123
+ "aria-valuemax": total,
4124
+ "aria-valuenow": done,
4125
+ "aria-label": `${done} of ${total} met`,
4126
+ className: "flex gap-1",
4127
+ children: Array.from({ length: total }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4128
+ "span",
4129
+ {
4130
+ "data-filled": i < done ? "" : void 0,
4131
+ className: cn("h-1.5 flex-1 rounded-full", i < done ? "bg-success" : "bg-border")
4132
+ },
4133
+ i
4134
+ ))
4135
+ }
4136
+ )
4137
+ ] });
4138
+ }
4139
+
4051
4140
  // src/controls/clamped-number-input.tsx
4052
4141
  var import_react3 = require("react");
4053
- var import_jsx_runtime26 = require("react/jsx-runtime");
4142
+ var import_jsx_runtime27 = require("react/jsx-runtime");
4054
4143
  function shownDraft(raw, min, max, decimal = false) {
4055
4144
  const next = clampDraft(raw, min, max, decimal);
4056
4145
  if (next === null) return null;
@@ -4095,7 +4184,7 @@ function ClampedNumberInput({
4095
4184
  setDraft(String(next));
4096
4185
  if (next !== value) onChange(next);
4097
4186
  };
4098
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4187
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4099
4188
  Input,
4100
4189
  {
4101
4190
  id,
@@ -4128,7 +4217,7 @@ function ClampedNumberInput({
4128
4217
 
4129
4218
  // src/controls/light-switch-toggle.tsx
4130
4219
  var import_react4 = require("react");
4131
- var import_jsx_runtime27 = require("react/jsx-runtime");
4220
+ var import_jsx_runtime28 = require("react/jsx-runtime");
4132
4221
  var defaultSizes = {
4133
4222
  width: "w-48",
4134
4223
  height: "h-16"
@@ -4166,7 +4255,7 @@ var LightSwitchToggle = (0, import_react4.forwardRef)(
4166
4255
  const buttonBaseClasses = "relative w-1/2 h-full transition-all duration-300";
4167
4256
  const activeButtonClasses = "bg-primary transform -translate-y-px shadow-[inset_0_1px_3px_rgba(0,0,0,0.2)]";
4168
4257
  const inactiveButtonClasses = "bg-muted/60 transform -translate-y-1.5";
4169
- const renderOption = (isActive, label, side, onClick) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
4258
+ const renderOption = (isActive, label, side, onClick) => /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
4170
4259
  "button",
4171
4260
  {
4172
4261
  type: "button",
@@ -4178,7 +4267,7 @@ var LightSwitchToggle = (0, import_react4.forwardRef)(
4178
4267
  isActive ? activeButtonClasses : inactiveButtonClasses
4179
4268
  ),
4180
4269
  children: [
4181
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4270
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4182
4271
  "div",
4183
4272
  {
4184
4273
  className: cn(
@@ -4189,7 +4278,7 @@ var LightSwitchToggle = (0, import_react4.forwardRef)(
4189
4278
  )
4190
4279
  }
4191
4280
  ),
4192
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4281
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4193
4282
  "span",
4194
4283
  {
4195
4284
  className: cn(
@@ -4202,8 +4291,8 @@ var LightSwitchToggle = (0, import_react4.forwardRef)(
4202
4291
  ]
4203
4292
  }
4204
4293
  );
4205
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { ref, className: containerClasses, children: [
4206
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "absolute left-1/2 top-0 bottom-0 w-[2px] bg-border transform -translate-x-1/2 z-10" }),
4294
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { ref, className: containerClasses, children: [
4295
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "absolute left-1/2 top-0 bottom-0 w-[2px] bg-border transform -translate-x-1/2 z-10" }),
4207
4296
  renderOption(!isOn, labels.off, "left", () => handleToggle(false)),
4208
4297
  renderOption(isOn, labels.on, "right", () => handleToggle(true))
4209
4298
  ] }) });
@@ -4222,12 +4311,12 @@ var React23 = __toESM(require("react"), 1);
4222
4311
  // src/close-slot.tsx
4223
4312
  var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
4224
4313
  var React22 = __toESM(require("react"), 1);
4225
- var import_jsx_runtime28 = require("react/jsx-runtime");
4314
+ var import_jsx_runtime29 = require("react/jsx-runtime");
4226
4315
  var CLOSE_CONTROL_CLASSES = "flex h-11 w-11 shrink-0 items-center justify-center rounded-sm text-muted-foreground ring-offset-background transition-colors hover:text-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none lg:h-8 lg:w-8";
4227
4316
  function CloseControl({ className }) {
4228
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(DialogPrimitive.Close, { "data-slot": "dialog-close", "aria-label": "Close", className: cn(CLOSE_CONTROL_CLASSES, className), children: [
4229
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(XIcon, { className: "h-4 w-4", "aria-hidden": "true" }),
4230
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "sr-only", children: "Close" })
4317
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(DialogPrimitive.Close, { "data-slot": "dialog-close", "aria-label": "Close", className: cn(CLOSE_CONTROL_CLASSES, className), children: [
4318
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(XIcon, { className: "h-4 w-4", "aria-hidden": "true" }),
4319
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "sr-only", children: "Close" })
4231
4320
  ] });
4232
4321
  }
4233
4322
  var CloseSlotContext = React22.createContext(null);
@@ -4259,7 +4348,7 @@ function useSearchRowCloseSlotClaim() {
4259
4348
  return useClaim(SearchRowCloseSlotContext, false);
4260
4349
  }
4261
4350
  function CloseRow({ className }) {
4262
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { "data-slot": "close-row", className: cn("flex justify-end", className), children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CloseControl, {}) });
4351
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { "data-slot": "close-row", className: cn("flex justify-end", className), children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CloseControl, {}) });
4263
4352
  }
4264
4353
  var BODY_LAYOUT = /^!?(?:[a-z0-9]+:)*(?:flex|grid|flex-(?:row|col)(?:-reverse)?|grid-(?:cols|rows|flow)-\S+|place-\S+|items-\S+|justify-\S+|content-\S+|gap(?:-[xy])?-\S+|space-[xy]-\S+|text-(?:left|center|right|start|end)|flex-wrap|flex-nowrap)$/;
4265
4354
  var OLD_CLOSE_RESERVE = /^pr-(?:8|9|10|11|12|14|16)$/;
@@ -4282,19 +4371,19 @@ function HeaderWithClose({
4282
4371
  }) {
4283
4372
  const owns = useCloseSlotClaim(/(?:^|\s)(?:sr-only|hidden)(?:\s|$)/.test(className ?? ""));
4284
4373
  if (!owns) {
4285
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { "data-slot": slotName, className: cn(baseClassName, className), ...props, children });
4374
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { "data-slot": slotName, className: cn(baseClassName, className), ...props, children });
4286
4375
  }
4287
4376
  const { row, body } = splitHeaderClasses(className);
4288
4377
  const rowish = /(?:^|\s)(?:[a-z0-9]+:)*flex-row(?:\s|$)/.test(body);
4289
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { "data-slot": slotName, "data-has-close": "", className: cn("flex gap-2", rowish ? "items-center" : "items-start", row), ...props, children: [
4290
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { "data-slot": `${slotName}-body`, className: cn("min-w-0 flex-1", baseClassName, body), children }),
4291
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CloseControl, { className: cn("-mr-2", !rowish && closeOffsetClassName) })
4378
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { "data-slot": slotName, "data-has-close": "", className: cn("flex gap-2", rowish ? "items-center" : "items-start", row), ...props, children: [
4379
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { "data-slot": `${slotName}-body`, className: cn("min-w-0 flex-1", baseClassName, body), children }),
4380
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CloseControl, { className: cn("-mr-2", !rowish && closeOffsetClassName) })
4292
4381
  ] });
4293
4382
  }
4294
4383
 
4295
4384
  // src/command.tsx
4296
- var import_jsx_runtime29 = require("react/jsx-runtime");
4297
- var Command = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4385
+ var import_jsx_runtime30 = require("react/jsx-runtime");
4386
+ var Command = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4298
4387
  import_cmdk.Command,
4299
4388
  {
4300
4389
  ref,
@@ -4315,8 +4404,8 @@ var CommandDialogContent = React23.forwardRef(({ className, children, container,
4315
4404
  useModalLayer(isModal);
4316
4405
  const portalContainer = usePortalContainer(container);
4317
4406
  const closeSlot = useCloseSlot(true);
4318
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(DialogPrimitive2.Portal, { container: portalContainer, children: [
4319
- isModal ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4407
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(DialogPrimitive2.Portal, { container: portalContainer, children: [
4408
+ isModal ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4320
4409
  DialogPrimitive2.Overlay,
4321
4410
  {
4322
4411
  className: cn(
@@ -4325,7 +4414,7 @@ var CommandDialogContent = React23.forwardRef(({ className, children, container,
4325
4414
  )
4326
4415
  }
4327
4416
  ) : null,
4328
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
4417
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
4329
4418
  DialogPrimitive2.Content,
4330
4419
  {
4331
4420
  ref,
@@ -4341,8 +4430,8 @@ var CommandDialogContent = React23.forwardRef(({ className, children, container,
4341
4430
  ...props,
4342
4431
  onInteractOutside: keepFloatingLayersInside(onInteractOutside),
4343
4432
  children: [
4344
- closeSlot.slot && !closeSlot.claimed ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CloseRow, { className: "px-4 pt-4" }) : null,
4345
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CloseSlotProvider, { value: null, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SearchRowCloseSlotProvider, { value: closeSlot.slot, children }) })
4433
+ closeSlot.slot && !closeSlot.claimed ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CloseRow, { className: "px-4 pt-4" }) : null,
4434
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CloseSlotProvider, { value: null, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SearchRowCloseSlotProvider, { value: closeSlot.slot, children }) })
4346
4435
  ]
4347
4436
  }
4348
4437
  )
@@ -4351,9 +4440,9 @@ var CommandDialogContent = React23.forwardRef(({ className, children, container,
4351
4440
  CommandDialogContent.displayName = "CommandDialogContent";
4352
4441
  var CommandInput = React23.forwardRef(({ className, ...props }, ref) => {
4353
4442
  const ownsClose = useSearchRowCloseSlotClaim();
4354
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center gap-2 border-b px-3", "cmdk-input-wrapper": "", children: [
4355
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(MagnifyingGlassIcon, { className: "h-4 w-4 shrink-0 opacity-50" }),
4356
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4443
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex items-center gap-2 border-b px-3", "cmdk-input-wrapper": "", children: [
4444
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(MagnifyingGlassIcon, { className: "h-4 w-4 shrink-0 opacity-50" }),
4445
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4357
4446
  import_cmdk.Command.Input,
4358
4447
  {
4359
4448
  ref,
@@ -4364,11 +4453,11 @@ var CommandInput = React23.forwardRef(({ className, ...props }, ref) => {
4364
4453
  ...props
4365
4454
  }
4366
4455
  ),
4367
- ownsClose ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CloseControl, { className: "-mr-1" }) : null
4456
+ ownsClose ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CloseControl, { className: "-mr-1" }) : null
4368
4457
  ] });
4369
4458
  });
4370
4459
  CommandInput.displayName = import_cmdk.Command.Input.displayName;
4371
- var CommandList = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4460
+ var CommandList = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4372
4461
  import_cmdk.Command.List,
4373
4462
  {
4374
4463
  ref,
@@ -4377,7 +4466,7 @@ var CommandList = React23.forwardRef(({ className, ...props }, ref) => /* @__PUR
4377
4466
  }
4378
4467
  ));
4379
4468
  CommandList.displayName = import_cmdk.Command.List.displayName;
4380
- var CommandEmpty = React23.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4469
+ var CommandEmpty = React23.forwardRef((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4381
4470
  import_cmdk.Command.Empty,
4382
4471
  {
4383
4472
  ref,
@@ -4386,7 +4475,7 @@ var CommandEmpty = React23.forwardRef((props, ref) => /* @__PURE__ */ (0, import
4386
4475
  }
4387
4476
  ));
4388
4477
  CommandEmpty.displayName = import_cmdk.Command.Empty.displayName;
4389
- var CommandGroup = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4478
+ var CommandGroup = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4390
4479
  import_cmdk.Command.Group,
4391
4480
  {
4392
4481
  ref,
@@ -4398,7 +4487,7 @@ var CommandGroup = React23.forwardRef(({ className, ...props }, ref) => /* @__PU
4398
4487
  }
4399
4488
  ));
4400
4489
  CommandGroup.displayName = import_cmdk.Command.Group.displayName;
4401
- var CommandSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4490
+ var CommandSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4402
4491
  import_cmdk.Command.Separator,
4403
4492
  {
4404
4493
  ref,
@@ -4407,7 +4496,7 @@ var CommandSeparator = React23.forwardRef(({ className, ...props }, ref) => /* @
4407
4496
  }
4408
4497
  ));
4409
4498
  CommandSeparator.displayName = import_cmdk.Command.Separator.displayName;
4410
- var CommandItem = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4499
+ var CommandItem = React23.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4411
4500
  import_cmdk.Command.Item,
4412
4501
  {
4413
4502
  ref,
@@ -4423,7 +4512,7 @@ var CommandShortcut = ({
4423
4512
  className,
4424
4513
  ...props
4425
4514
  }) => {
4426
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4515
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4427
4516
  "span",
4428
4517
  {
4429
4518
  className: cn(
@@ -4437,7 +4526,7 @@ var CommandShortcut = ({
4437
4526
  CommandShortcut.displayName = "CommandShortcut";
4438
4527
 
4439
4528
  // src/controls/option-combobox.tsx
4440
- var import_jsx_runtime30 = require("react/jsx-runtime");
4529
+ var import_jsx_runtime31 = require("react/jsx-runtime");
4441
4530
  function OptionCombobox({
4442
4531
  value,
4443
4532
  onChange,
@@ -4471,7 +4560,7 @@ function OptionCombobox({
4471
4560
  setOpen(false);
4472
4561
  setQuery("");
4473
4562
  };
4474
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
4563
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
4475
4564
  Popover,
4476
4565
  {
4477
4566
  open,
@@ -4483,7 +4572,7 @@ function OptionCombobox({
4483
4572
  }
4484
4573
  },
4485
4574
  children: [
4486
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(PopoverTrigger, { asChild: true, disabled, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
4575
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(PopoverTrigger, { asChild: true, disabled, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
4487
4576
  "button",
4488
4577
  {
4489
4578
  id,
@@ -4504,7 +4593,7 @@ function OptionCombobox({
4504
4593
  ),
4505
4594
  children: [
4506
4595
  hasValue && renderIcon?.(value),
4507
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
4596
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
4508
4597
  "span",
4509
4598
  {
4510
4599
  className: cn(
@@ -4513,22 +4602,22 @@ function OptionCombobox({
4513
4602
  ),
4514
4603
  children: [
4515
4604
  hasValue ? getLabel(value) : placeholder,
4516
- hint && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "ml-1.5 text-muted-foreground", children: hint })
4605
+ hint && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "ml-1.5 text-muted-foreground", children: hint })
4517
4606
  ]
4518
4607
  }
4519
4608
  ),
4520
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SelectChevron, { size: "sm", className: variant === "inline" ? "h-3 w-3" : void 0 })
4609
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SelectChevron, { size: "sm", className: variant === "inline" ? "h-3 w-3" : void 0 })
4521
4610
  ]
4522
4611
  }
4523
4612
  ) }),
4524
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4613
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4525
4614
  PopoverContent,
4526
4615
  {
4527
4616
  sizing: "content",
4528
4617
  align: "start",
4529
4618
  className: "p-0",
4530
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Command, { shouldFilter: false, children: [
4531
- searchable && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4619
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Command, { shouldFilter: false, children: [
4620
+ searchable && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4532
4621
  CommandInput,
4533
4622
  {
4534
4623
  placeholder: searchPlaceholder,
@@ -4536,8 +4625,8 @@ function OptionCombobox({
4536
4625
  onValueChange: setQuery
4537
4626
  }
4538
4627
  ),
4539
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(CommandList, { className: "max-h-72", children: [
4540
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(CommandEmpty, { children: [
4628
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(CommandList, { className: "max-h-72", children: [
4629
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(CommandEmpty, { children: [
4541
4630
  "No match for \u201C",
4542
4631
  query,
4543
4632
  "\u201D."
@@ -4547,24 +4636,24 @@ function OptionCombobox({
4547
4636
  if (visible.length === 0) return null;
4548
4637
  const folded = group.collapsed && !showMore && !q && !group.options.includes(value);
4549
4638
  if (folded) {
4550
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CommandGroup, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
4639
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(CommandGroup, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
4551
4640
  CommandItem,
4552
4641
  {
4553
4642
  value: `__more_${gi}`,
4554
4643
  onSelect: () => setShowMore(true),
4555
4644
  className: "text-muted-foreground",
4556
4645
  children: [
4557
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(ChevronRightIcon, { className: "h-3.5 w-3.5" }),
4646
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ChevronRightIcon, { className: "h-3.5 w-3.5" }),
4558
4647
  group.heading ?? "More",
4559
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "ml-auto type-secondary tabular-nums", children: group.options.length })
4648
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "ml-auto type-secondary tabular-nums", children: group.options.length })
4560
4649
  ]
4561
4650
  }
4562
4651
  ) }, `g-${gi}`);
4563
4652
  }
4564
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CommandGroup, { heading: group.heading, children: visible.map((o) => {
4653
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(CommandGroup, { heading: group.heading, children: visible.map((o) => {
4565
4654
  const selected = o === value;
4566
4655
  const h = getHint?.(o);
4567
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
4656
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
4568
4657
  CommandItem,
4569
4658
  {
4570
4659
  value: o,
@@ -4572,11 +4661,11 @@ function OptionCombobox({
4572
4661
  className: "gap-2",
4573
4662
  children: [
4574
4663
  renderIcon?.(o),
4575
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("span", { className: "min-w-0 flex-1 truncate", children: [
4664
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: "min-w-0 flex-1 truncate", children: [
4576
4665
  getLabel(o),
4577
- h && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "ml-1.5 text-muted-foreground", children: h })
4666
+ h && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "ml-1.5 text-muted-foreground", children: h })
4578
4667
  ] }),
4579
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4668
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4580
4669
  CheckIcon,
4581
4670
  {
4582
4671
  className: cn(
@@ -4678,7 +4767,7 @@ function groupRatioOptions(options) {
4678
4767
  }
4679
4768
 
4680
4769
  // src/controls/aspect-ratio-select.tsx
4681
- var import_jsx_runtime31 = require("react/jsx-runtime");
4770
+ var import_jsx_runtime32 = require("react/jsx-runtime");
4682
4771
  function AspectRatioGlyph({
4683
4772
  value,
4684
4773
  className
@@ -4686,7 +4775,7 @@ function AspectRatioGlyph({
4686
4775
  const r = parseRatio(value);
4687
4776
  const box = 14;
4688
4777
  if (!r) {
4689
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4778
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4690
4779
  "span",
4691
4780
  {
4692
4781
  "aria-hidden": true,
@@ -4694,14 +4783,14 @@ function AspectRatioGlyph({
4694
4783
  "inline-flex h-3.5 w-3.5 shrink-0 items-center justify-center",
4695
4784
  className
4696
4785
  ),
4697
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "h-2.5 w-2.5 rounded-[2px] border border-dashed border-current opacity-60" })
4786
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "h-2.5 w-2.5 rounded-[2px] border border-dashed border-current opacity-60" })
4698
4787
  }
4699
4788
  );
4700
4789
  }
4701
4790
  const k = r.w / r.h;
4702
4791
  const w = k >= 1 ? box : Math.max(3, box * k);
4703
4792
  const h = k >= 1 ? Math.max(3, box / k) : box;
4704
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4793
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4705
4794
  "span",
4706
4795
  {
4707
4796
  "aria-hidden": true,
@@ -4709,7 +4798,7 @@ function AspectRatioGlyph({
4709
4798
  "inline-flex h-3.5 w-3.5 shrink-0 items-center justify-center",
4710
4799
  className
4711
4800
  ),
4712
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4801
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4713
4802
  "span",
4714
4803
  {
4715
4804
  className: "rounded-[2px] border-[1.5px] border-current opacity-80",
@@ -4736,7 +4825,7 @@ function AspectRatioSelect({
4736
4825
  { options: common },
4737
4826
  ...more.length ? [{ heading: "More ratios", options: more, collapsed: true }] : []
4738
4827
  ];
4739
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
4828
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4740
4829
  OptionCombobox,
4741
4830
  {
4742
4831
  value,
@@ -4744,7 +4833,7 @@ function AspectRatioSelect({
4744
4833
  groups,
4745
4834
  getLabel: (o) => parseRatio(o) ? o : humanizeRatioWord(o),
4746
4835
  getHint: (o) => ratioShapeName(o),
4747
- renderIcon: (o) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(AspectRatioGlyph, { value: o, className: "text-muted-foreground" }),
4836
+ renderIcon: (o) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(AspectRatioGlyph, { value: o, className: "text-muted-foreground" }),
4748
4837
  searchable: options.length > 12,
4749
4838
  searchPlaceholder: "Search ratios\u2026",
4750
4839
  placeholder,
@@ -4762,7 +4851,7 @@ var import_react6 = require("react");
4762
4851
 
4763
4852
  // src/table.tsx
4764
4853
  var React24 = __toESM(require("react"), 1);
4765
- var import_jsx_runtime32 = require("react/jsx-runtime");
4854
+ var import_jsx_runtime33 = require("react/jsx-runtime");
4766
4855
  var TABLE_SIZES = {
4767
4856
  sm: { head: "px-2", cell: "p-2" },
4768
4857
  md: { head: "px-3", cell: "p-3" }
@@ -4773,7 +4862,7 @@ function useTableSize() {
4773
4862
  }
4774
4863
  var Table = React24.forwardRef(
4775
4864
  ({ className, size = "md", wrap = true, wrapperClassName, ...props }, ref) => {
4776
- const table = /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4865
+ const table = /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4777
4866
  "table",
4778
4867
  {
4779
4868
  ref,
@@ -4783,7 +4872,7 @@ var Table = React24.forwardRef(
4783
4872
  ...props
4784
4873
  }
4785
4874
  );
4786
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(TableSizeContext.Provider, { value: size, children: wrap ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4875
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableSizeContext.Provider, { value: size, children: wrap ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4787
4876
  "div",
4788
4877
  {
4789
4878
  "data-slot": "table-wrapper",
@@ -4794,7 +4883,7 @@ var Table = React24.forwardRef(
4794
4883
  }
4795
4884
  );
4796
4885
  Table.displayName = "Table";
4797
- var TableHeader = React24.forwardRef(({ className, sticky = false, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4886
+ var TableHeader = React24.forwardRef(({ className, sticky = false, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4798
4887
  "thead",
4799
4888
  {
4800
4889
  ref,
@@ -4808,7 +4897,7 @@ var TableHeader = React24.forwardRef(({ className, sticky = false, ...props }, r
4808
4897
  }
4809
4898
  ));
4810
4899
  TableHeader.displayName = "TableHeader";
4811
- var TableBody = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4900
+ var TableBody = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4812
4901
  "tbody",
4813
4902
  {
4814
4903
  ref,
@@ -4818,7 +4907,7 @@ var TableBody = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE_
4818
4907
  }
4819
4908
  ));
4820
4909
  TableBody.displayName = "TableBody";
4821
- var TableFooter = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4910
+ var TableFooter = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4822
4911
  "tfoot",
4823
4912
  {
4824
4913
  ref,
@@ -4831,7 +4920,7 @@ var TableFooter = React24.forwardRef(({ className, ...props }, ref) => /* @__PUR
4831
4920
  }
4832
4921
  ));
4833
4922
  TableFooter.displayName = "TableFooter";
4834
- var TableRow = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4923
+ var TableRow = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4835
4924
  "tr",
4836
4925
  {
4837
4926
  ref,
@@ -4846,7 +4935,7 @@ var TableRow = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__
4846
4935
  TableRow.displayName = "TableRow";
4847
4936
  var TableHead = React24.forwardRef(({ className, ...props }, ref) => {
4848
4937
  const size = useTableSize();
4849
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4938
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4850
4939
  "th",
4851
4940
  {
4852
4941
  ref,
@@ -4863,7 +4952,7 @@ var TableHead = React24.forwardRef(({ className, ...props }, ref) => {
4863
4952
  TableHead.displayName = "TableHead";
4864
4953
  var TableCell = React24.forwardRef(({ className, ...props }, ref) => {
4865
4954
  const size = useTableSize();
4866
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4955
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4867
4956
  "td",
4868
4957
  {
4869
4958
  ref,
@@ -4878,7 +4967,7 @@ var TableCell = React24.forwardRef(({ className, ...props }, ref) => {
4878
4967
  );
4879
4968
  });
4880
4969
  TableCell.displayName = "TableCell";
4881
- var TableCaption = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
4970
+ var TableCaption = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
4882
4971
  "caption",
4883
4972
  {
4884
4973
  ref,
@@ -4929,7 +5018,7 @@ function isReactElementLike(value) {
4929
5018
  }
4930
5019
 
4931
5020
  // src/controls/configuration-fields.tsx
4932
- var import_jsx_runtime33 = require("react/jsx-runtime");
5021
+ var import_jsx_runtime34 = require("react/jsx-runtime");
4933
5022
  var CONFIGURATION_CHOICE_SIZE = "h-[34px] min-h-[34px] rounded-lg px-2.5 text-[11.5px] font-medium";
4934
5023
  var FIELD_HELP_OPEN = "matrx:field-help-open";
4935
5024
  function FieldHelp({
@@ -4986,8 +5075,8 @@ function FieldHelp({
4986
5075
  if (closeTimer.current) clearTimeout(closeTimer.current);
4987
5076
  };
4988
5077
  }, [id]);
4989
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(Popover, { open, onOpenChange: changeOpen, children: [
4990
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5078
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Popover, { open, onOpenChange: changeOpen, children: [
5079
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
4991
5080
  "button",
4992
5081
  {
4993
5082
  ref: trigger,
@@ -5023,10 +5112,10 @@ function FieldHelp({
5023
5112
  event.preventDefault();
5024
5113
  changeOpen(true);
5025
5114
  },
5026
- children: triggerIcon ?? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(CircleHelpIcon, { className: "size-3.5", "aria-hidden": "true" })
5115
+ children: triggerIcon ?? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(CircleHelpIcon, { className: "size-3.5", "aria-hidden": "true" })
5027
5116
  }
5028
5117
  ) }),
5029
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
5118
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
5030
5119
  PopoverContent,
5031
5120
  {
5032
5121
  ref: content,
@@ -5061,11 +5150,11 @@ function FieldHelp({
5061
5150
  ),
5062
5151
  onOpenAutoFocus: (event) => event.preventDefault(),
5063
5152
  children: [
5064
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
5065
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "font-medium", children: label }),
5066
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Button2, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(XIcon, {}), "aria-label": `Close help: ${label}`, onClick: () => changeOpen(false), className: "shrink-0" })
5153
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
5154
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "font-medium", children: label }),
5155
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Button2, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(XIcon, {}), "aria-label": `Close help: ${label}`, onClick: () => changeOpen(false), className: "shrink-0" })
5067
5156
  ] }),
5068
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "whitespace-pre-wrap break-words text-foreground", children })
5157
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "whitespace-pre-wrap break-words text-foreground", children })
5069
5158
  ]
5070
5159
  }
5071
5160
  )
@@ -5091,7 +5180,7 @@ function StatusToken({
5091
5180
  label
5092
5181
  }) {
5093
5182
  const { Icon: Icon3, color, label: defaultLabel } = STATUS[status];
5094
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
5183
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
5095
5184
  "span",
5096
5185
  {
5097
5186
  className: cn(
@@ -5100,14 +5189,14 @@ function StatusToken({
5100
5189
  color
5101
5190
  ),
5102
5191
  children: [
5103
- Icon3 ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Icon3, { className: "size-3.5 shrink-0", "aria-hidden": "true" }) : null,
5104
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "break-words", children: label ?? defaultLabel })
5192
+ Icon3 ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon3, { className: "size-3.5 shrink-0", "aria-hidden": "true" }) : null,
5193
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "break-words", children: label ?? defaultLabel })
5105
5194
  ]
5106
5195
  }
5107
5196
  );
5108
5197
  }
5109
5198
  function MissingTag({ children = "Not provided" }) {
5110
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5199
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5111
5200
  "span",
5112
5201
  {
5113
5202
  "data-matrx-missing": "",
@@ -5118,18 +5207,18 @@ function MissingTag({ children = "Not provided" }) {
5118
5207
  }
5119
5208
  function RowHelp({ label, help }) {
5120
5209
  if (typeof help === "string" || typeof help === "number") {
5121
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5210
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5122
5211
  "span",
5123
5212
  {
5124
5213
  title: String(help),
5125
5214
  "aria-label": String(help),
5126
5215
  "data-matrx-row-help": "",
5127
5216
  className: "inline-flex shrink-0 cursor-help text-muted-foreground hover:text-foreground",
5128
- children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(InfoIcon, { className: "size-3", "aria-hidden": "true" })
5217
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(InfoIcon, { className: "size-3", "aria-hidden": "true" })
5129
5218
  }
5130
5219
  );
5131
5220
  }
5132
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(FieldHelp, { label, triggerIcon: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(InfoIcon, { className: "size-3", "aria-hidden": "true" }), children: help });
5221
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(FieldHelp, { label, triggerIcon: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(InfoIcon, { className: "size-3", "aria-hidden": "true" }), children: help });
5133
5222
  }
5134
5223
  function isBlank(v) {
5135
5224
  return v === null || v === void 0 || v === false || v === "";
@@ -5161,7 +5250,7 @@ function PropertyRow({
5161
5250
  const valueClass = cn("min-w-0 type-value leading-5 [overflow-wrap:anywhere]", mono && "font-mono");
5162
5251
  const focusRing = "rounded-sm outline-none focus-visible:ring-2 focus-visible:ring-ring";
5163
5252
  if (layout === "inline") {
5164
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
5253
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
5165
5254
  "div",
5166
5255
  {
5167
5256
  "data-matrx-property-row": "inline",
@@ -5171,32 +5260,32 @@ function PropertyRow({
5171
5260
  className
5172
5261
  ),
5173
5262
  children: [
5174
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex min-w-0 shrink-0 items-center gap-1.5 type-label leading-4 sm:w-44", children: [
5175
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "break-words", children: label }),
5176
- help != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(RowHelp, { label, help }) : null
5263
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex min-w-0 shrink-0 items-center gap-1.5 type-label leading-4 sm:w-44", children: [
5264
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "break-words", children: label }),
5265
+ help != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(RowHelp, { label, help }) : null
5177
5266
  ] }),
5178
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex min-w-0 flex-1 flex-wrap items-center gap-x-6 gap-y-1", children: [
5179
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: cn("flex-1", valueClass), children: isMissing ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(MissingTag, { children: missingText }) : content }),
5180
- source != null || state != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1 type-secondary text-foreground", children: [
5181
- source != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { children: [
5182
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "font-medium", children: "Source:" }),
5267
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex min-w-0 flex-1 flex-wrap items-center gap-x-6 gap-y-1", children: [
5268
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: cn("flex-1", valueClass), children: isMissing ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(MissingTag, { children: missingText }) : content }),
5269
+ source != null || state != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex flex-wrap items-center gap-x-4 gap-y-1 type-secondary text-foreground", children: [
5270
+ source != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { children: [
5271
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "font-medium", children: "Source:" }),
5183
5272
  " ",
5184
5273
  source
5185
5274
  ] }) : null,
5186
- state != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { children: [
5187
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "font-medium", children: "State:" }),
5275
+ state != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { children: [
5276
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "font-medium", children: "State:" }),
5188
5277
  " ",
5189
5278
  state
5190
5279
  ] }) : null
5191
5280
  ] }) : null,
5192
- meta != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "flex shrink-0 items-center gap-1.5 type-meta text-muted-foreground", children: meta }) : null
5281
+ meta != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "flex shrink-0 items-center gap-1.5 type-meta text-muted-foreground", children: meta }) : null
5193
5282
  ] })
5194
5283
  ]
5195
5284
  }
5196
5285
  );
5197
5286
  }
5198
5287
  const margin = expandable || gutter;
5199
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
5288
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
5200
5289
  "div",
5201
5290
  {
5202
5291
  "data-matrx-property-row": "stacked",
@@ -5207,7 +5296,7 @@ function PropertyRow({
5207
5296
  className
5208
5297
  ),
5209
5298
  children: [
5210
- margin ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "flex h-4 items-center", children: expandable ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5299
+ margin ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "flex h-4 items-center", children: expandable ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5211
5300
  "button",
5212
5301
  {
5213
5302
  type: "button",
@@ -5215,15 +5304,15 @@ function PropertyRow({
5215
5304
  "aria-expanded": open,
5216
5305
  "aria-label": open ? `Collapse ${label}` : `Expand ${label}`,
5217
5306
  className: cn("inline-flex text-muted-foreground hover:text-foreground", focusRing),
5218
- children: open ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(ChevronDownIcon, { className: "size-3.5", "aria-hidden": "true" }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(ChevronRightIcon, { className: "size-3.5", "aria-hidden": "true" })
5307
+ children: open ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(ChevronDownIcon, { className: "size-3.5", "aria-hidden": "true" }) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(ChevronRightIcon, { className: "size-3.5", "aria-hidden": "true" })
5219
5308
  }
5220
5309
  ) : null }) : null,
5221
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex h-4 min-w-0 items-center gap-1.5", children: [
5222
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "truncate type-label leading-4", children: label }),
5223
- help != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(RowHelp, { label, help }) : null,
5224
- meta != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "ml-auto flex min-w-0 shrink-0 items-center gap-1.5 type-meta text-muted-foreground", children: meta }) : null
5310
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex h-4 min-w-0 items-center gap-1.5", children: [
5311
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "truncate type-label leading-4", children: label }),
5312
+ help != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(RowHelp, { label, help }) : null,
5313
+ meta != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "ml-auto flex min-w-0 shrink-0 items-center gap-1.5 type-meta text-muted-foreground", children: meta }) : null
5225
5314
  ] }),
5226
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5315
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5227
5316
  "div",
5228
5317
  {
5229
5318
  className: cn(
@@ -5232,7 +5321,7 @@ function PropertyRow({
5232
5321
  // A "Not provided" row is exactly as tall as a text row: the value line is a fixed 20px.
5233
5322
  isMissing ? "flex h-5 items-center" : expandable && open ? "mt-1" : "flex min-h-5 items-center"
5234
5323
  ),
5235
- children: isMissing ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(MissingTag, { children: missingText }) : expandable && open ? expanded : expandable ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5324
+ children: isMissing ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(MissingTag, { children: missingText }) : expandable && open ? expanded : expandable ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5236
5325
  "button",
5237
5326
  {
5238
5327
  type: "button",
@@ -5240,7 +5329,7 @@ function PropertyRow({
5240
5329
  className: cn("block max-w-full truncate text-left", valueClass, focusRing),
5241
5330
  children: content
5242
5331
  }
5243
- ) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: valueClass, children: content })
5332
+ ) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: valueClass, children: content })
5244
5333
  }
5245
5334
  )
5246
5335
  ]
@@ -5251,9 +5340,9 @@ function ConfigurationValueList({
5251
5340
  label,
5252
5341
  entries
5253
5342
  }) {
5254
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("dl", { "aria-label": label, className: "min-w-0 divide-y divide-border rounded-lg border border-border bg-card type-body text-foreground", children: entries.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "min-w-0 p-3", children: [
5255
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("dt", { className: "mb-2 break-words font-semibold", children: entry.label }),
5256
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("dd", { className: "min-w-0 [overflow-wrap:anywhere]", children: entry.value })
5343
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("dl", { "aria-label": label, className: "min-w-0 divide-y divide-border rounded-lg border border-border bg-card type-body text-foreground", children: entries.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "min-w-0 p-3", children: [
5344
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("dt", { className: "mb-2 break-words font-semibold", children: entry.label }),
5345
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("dd", { className: "min-w-0 [overflow-wrap:anywhere]", children: entry.value })
5257
5346
  ] }, entry.key)) });
5258
5347
  }
5259
5348
  function ConfigurationTable({
@@ -5261,7 +5350,7 @@ function ConfigurationTable({
5261
5350
  columns,
5262
5351
  children
5263
5352
  }) {
5264
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "min-w-0 rounded-lg border border-border bg-card", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
5353
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "min-w-0 rounded-lg border border-border bg-card", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
5265
5354
  Table,
5266
5355
  {
5267
5356
  size: "sm",
@@ -5269,19 +5358,19 @@ function ConfigurationTable({
5269
5358
  "aria-label": label,
5270
5359
  className: cn("matrx-config-table", "type-body text-foreground"),
5271
5360
  children: [
5272
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableHeader, { className: "matrx-config-head", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableRow, { className: "bg-accent/40 hover:bg-accent/40", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5361
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TableHeader, { className: "matrx-config-head", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TableRow, { className: "bg-accent/40 hover:bg-accent/40", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5273
5362
  TableHead,
5274
5363
  {
5275
5364
  scope: "col",
5276
5365
  className: "whitespace-normal align-middle font-semibold text-foreground",
5277
- children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: "matrx-config-heading", children: [
5366
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "matrx-config-heading", children: [
5278
5367
  column.label,
5279
- column.help ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(FieldHelp, { label: column.label, children: column.help }) : null
5368
+ column.help ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(FieldHelp, { label: column.label, children: column.help }) : null
5280
5369
  ] })
5281
5370
  },
5282
5371
  column.key
5283
5372
  )) }) }),
5284
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(TableBody, { className: "matrx-config-body", children })
5373
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TableBody, { className: "matrx-config-body", children })
5285
5374
  ]
5286
5375
  }
5287
5376
  ) });
@@ -5290,16 +5379,16 @@ function ConfigurationTableRow({
5290
5379
  columns,
5291
5380
  cells
5292
5381
  }) {
5293
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
5382
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5294
5383
  TableRow,
5295
5384
  {
5296
5385
  className: cn("matrx-config-row", "border-b border-border last:border-b-0"),
5297
- children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
5386
+ children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
5298
5387
  TableCell,
5299
5388
  {
5300
5389
  className: cn("matrx-config-cell", "min-w-0 whitespace-normal align-middle"),
5301
5390
  children: [
5302
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
5391
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
5303
5392
  "span",
5304
5393
  {
5305
5394
  className: cn(
@@ -5309,11 +5398,11 @@ function ConfigurationTableRow({
5309
5398
  children: [
5310
5399
  column.label,
5311
5400
  ":",
5312
- column.help ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(FieldHelp, { label: column.label, children: column.help }) : null
5401
+ column.help ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(FieldHelp, { label: column.label, children: column.help }) : null
5313
5402
  ]
5314
5403
  }
5315
5404
  ),
5316
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "matrx-config-cell-content", children: cells[column.key] ?? "Not specified" })
5405
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "matrx-config-cell-content", children: cells[column.key] ?? "Not specified" })
5317
5406
  ]
5318
5407
  },
5319
5408
  column.key
@@ -5323,7 +5412,7 @@ function ConfigurationTableRow({
5323
5412
  }
5324
5413
 
5325
5414
  // src/indicator-strip.tsx
5326
- var import_jsx_runtime34 = require("react/jsx-runtime");
5415
+ var import_jsx_runtime35 = require("react/jsx-runtime");
5327
5416
  var TONE = {
5328
5417
  danger: "text-destructive",
5329
5418
  warning: "text-warning",
@@ -5336,7 +5425,7 @@ function indicatorText(item) {
5336
5425
  return item.detail ? `${item.label}: yes \u2014 ${item.detail}` : `${item.label}: yes`;
5337
5426
  }
5338
5427
  function IndicatorStrip({ items, className, ...props }) {
5339
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5428
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
5340
5429
  "span",
5341
5430
  {
5342
5431
  "data-slot": "indicator-strip",
@@ -5346,7 +5435,7 @@ function IndicatorStrip({ items, className, ...props }) {
5346
5435
  children: items.map((item) => {
5347
5436
  const Icon3 = item.icon;
5348
5437
  const text = indicatorText(item);
5349
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5438
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
5350
5439
  "span",
5351
5440
  {
5352
5441
  role: "listitem",
@@ -5359,7 +5448,7 @@ function IndicatorStrip({ items, className, ...props }) {
5359
5448
  item.on ? TONE[item.tone ?? "warning"] : "text-muted-foreground opacity-30",
5360
5449
  item.on && item.soft && "opacity-55"
5361
5450
  ),
5362
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon3, { className: "size-3.5", "aria-hidden": true })
5451
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Icon3, { className: "size-3.5", "aria-hidden": true })
5363
5452
  },
5364
5453
  item.id
5365
5454
  );
@@ -5369,7 +5458,7 @@ function IndicatorStrip({ items, className, ...props }) {
5369
5458
  }
5370
5459
 
5371
5460
  // src/controls/middle-truncate.tsx
5372
- var import_jsx_runtime35 = require("react/jsx-runtime");
5461
+ var import_jsx_runtime36 = require("react/jsx-runtime");
5373
5462
  var DEFAULT_TAIL = 10;
5374
5463
  function splitForMiddleTruncate(text, tail = DEFAULT_TAIL) {
5375
5464
  const keep = Math.min(tail, Math.floor(text.length / 2));
@@ -5382,15 +5471,15 @@ function MiddleTruncate({
5382
5471
  className
5383
5472
  }) {
5384
5473
  const { head, end } = splitForMiddleTruncate(text, tail);
5385
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: cn("flex min-w-0 items-baseline", className), title: text, children: [
5386
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "sr-only", children: text }),
5387
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { "aria-hidden": true, className: "min-w-0 truncate whitespace-pre", children: head }),
5388
- end ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { "aria-hidden": true, className: "shrink-0 whitespace-pre", children: end }) : null
5474
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: cn("flex min-w-0 items-baseline", className), title: text, children: [
5475
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "sr-only", children: text }),
5476
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { "aria-hidden": true, className: "min-w-0 truncate whitespace-pre", children: head }),
5477
+ end ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { "aria-hidden": true, className: "shrink-0 whitespace-pre", children: end }) : null
5389
5478
  ] });
5390
5479
  }
5391
5480
 
5392
5481
  // src/controls/callout-banner.tsx
5393
- var import_jsx_runtime36 = require("react/jsx-runtime");
5482
+ var import_jsx_runtime37 = require("react/jsx-runtime");
5394
5483
  var TONE2 = {
5395
5484
  destructive: { container: "border-destructive/30 bg-destructive/10", icon: "text-destructive" },
5396
5485
  warning: { container: "border-warning/30 bg-warning/10", icon: "text-warning" },
@@ -5408,7 +5497,7 @@ function CalloutBanner({
5408
5497
  className
5409
5498
  }) {
5410
5499
  const t = TONE2[tone2];
5411
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
5500
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
5412
5501
  "div",
5413
5502
  {
5414
5503
  className: cn(
@@ -5418,16 +5507,16 @@ function CalloutBanner({
5418
5507
  ),
5419
5508
  role: "status",
5420
5509
  children: [
5421
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-2", children: [
5422
- Icon3 && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon3, { className: cn("mt-0.5 h-4 w-4 shrink-0", t.icon), "aria-hidden": true }),
5423
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "min-w-0", children: [
5424
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "type-title text-foreground", children: title }),
5425
- description && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "mt-0.5 type-secondary text-muted-foreground", children: description })
5510
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-2", children: [
5511
+ Icon3 && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon3, { className: cn("mt-0.5 h-4 w-4 shrink-0", t.icon), "aria-hidden": true }),
5512
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "min-w-0", children: [
5513
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "type-title text-foreground", children: title }),
5514
+ description && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "mt-0.5 type-secondary text-muted-foreground", children: description })
5426
5515
  ] })
5427
5516
  ] }),
5428
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex shrink-0 items-center gap-1.5 sm:ml-2", children: [
5517
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex shrink-0 items-center gap-1.5 sm:ml-2", children: [
5429
5518
  actions,
5430
- onDismiss && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Button2, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(XIcon, {}), "aria-label": "Dismiss", onClick: onDismiss, disabled: dismissing })
5519
+ onDismiss && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Button2, { variant: "quiet", icon: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(XIcon, {}), "aria-label": "Dismiss", onClick: onDismiss, disabled: dismissing })
5431
5520
  ] })
5432
5521
  ]
5433
5522
  }
@@ -5436,7 +5525,7 @@ function CalloutBanner({
5436
5525
 
5437
5526
  // src/controls/gated-action-button.tsx
5438
5527
  var React25 = __toESM(require("react"), 1);
5439
- var import_jsx_runtime37 = require("react/jsx-runtime");
5528
+ var import_jsx_runtime38 = require("react/jsx-runtime");
5440
5529
  function firstBlockingReason(checks) {
5441
5530
  for (const check of checks) {
5442
5531
  if (check && check.when) return check.reason;
@@ -5455,7 +5544,7 @@ function GatedActionButton({
5455
5544
  const reactId = React25.useId();
5456
5545
  const blocked = Boolean(reason && reason.trim());
5457
5546
  const reasonId = `gated-action-reason-${reactId}`;
5458
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
5547
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
5459
5548
  "span",
5460
5549
  {
5461
5550
  className: cn(
@@ -5463,7 +5552,7 @@ function GatedActionButton({
5463
5552
  wrapperClassName
5464
5553
  ),
5465
5554
  children: [
5466
- blocked ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5555
+ blocked ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5467
5556
  "span",
5468
5557
  {
5469
5558
  id: reasonId,
@@ -5476,7 +5565,7 @@ function GatedActionButton({
5476
5565
  children: reason
5477
5566
  }
5478
5567
  ) : null,
5479
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
5568
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5480
5569
  Button,
5481
5570
  {
5482
5571
  ...buttonProps,
@@ -5494,7 +5583,7 @@ GatedActionButton.displayName = "GatedActionButton";
5494
5583
 
5495
5584
  // src/controls/search-input.tsx
5496
5585
  var import_react7 = require("react");
5497
- var import_jsx_runtime38 = require("react/jsx-runtime");
5586
+ var import_jsx_runtime39 = require("react/jsx-runtime");
5498
5587
  function SearchInput({
5499
5588
  value,
5500
5589
  defaultValue = "",
@@ -5550,21 +5639,21 @@ function SearchInput({
5550
5639
  onSearch?.("");
5551
5640
  inputRef.current?.focus();
5552
5641
  };
5553
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
5642
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
5554
5643
  "form",
5555
5644
  {
5556
5645
  onSubmit: handleSubmit,
5557
5646
  className: cn("flex min-w-0 items-center gap-2", className),
5558
5647
  children: [
5559
- /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "relative min-w-0 flex-1", children: [
5560
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5648
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "relative min-w-0 flex-1", children: [
5649
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5561
5650
  SearchIcon,
5562
5651
  {
5563
5652
  className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground",
5564
5653
  "aria-hidden": true
5565
5654
  }
5566
5655
  ),
5567
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5656
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5568
5657
  Input,
5569
5658
  {
5570
5659
  ref: inputRef,
@@ -5578,7 +5667,7 @@ function SearchInput({
5578
5667
  adornment: showClearButton && searchValue ? "both" : "start"
5579
5668
  }
5580
5669
  ),
5581
- showClearButton && searchValue ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5670
+ showClearButton && searchValue ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5582
5671
  "button",
5583
5672
  {
5584
5673
  type: "button",
@@ -5586,14 +5675,14 @@ function SearchInput({
5586
5675
  disabled,
5587
5676
  "aria-label": "Clear search",
5588
5677
  className: "absolute right-2 top-1/2 flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:pointer-events-none disabled:text-disabled-foreground",
5589
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(XIcon, { className: "h-3.5 w-3.5" })
5678
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(XIcon, { className: "h-3.5 w-3.5" })
5590
5679
  }
5591
5680
  ) : null
5592
5681
  ] }),
5593
- showSubmitButton ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
5682
+ showSubmitButton ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5594
5683
  Button2,
5595
5684
  {
5596
- icon: loading ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Loader2Icon, { className: "animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SearchIcon, {}),
5685
+ icon: loading ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Loader2Icon, { className: "animate-spin" }) : /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(SearchIcon, {}),
5597
5686
  variant: "primary",
5598
5687
  type: "submit",
5599
5688
  disabled: disabled || loading,
@@ -5612,13 +5701,13 @@ var import_react8 = require("react");
5612
5701
  // src/tooltip.tsx
5613
5702
  var TooltipPrimitive = __toESM(require("@radix-ui/react-tooltip"), 1);
5614
5703
  var React27 = __toESM(require("react"), 1);
5615
- var import_jsx_runtime39 = require("react/jsx-runtime");
5704
+ var import_jsx_runtime40 = require("react/jsx-runtime");
5616
5705
  function TooltipProvider({ titleTooltips = true, disableHoverableContent = false, ...props }) {
5617
5706
  React27.useEffect(() => {
5618
5707
  if (!titleTooltips) return;
5619
5708
  return acquireTitleTooltips();
5620
5709
  }, [titleTooltips]);
5621
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TooltipPrimitive.Provider, { ...props, disableHoverableContent });
5710
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipPrimitive.Provider, { ...props, disableHoverableContent });
5622
5711
  }
5623
5712
  var TriggerContext = React27.createContext(null);
5624
5713
  var Tooltip = ({ onOpenChange, ...props }) => {
@@ -5626,7 +5715,7 @@ var Tooltip = ({ onOpenChange, ...props }) => {
5626
5715
  const [open, setOpen] = React27.useState(Boolean(props.open ?? props.defaultOpen));
5627
5716
  const shown = props.open ?? open;
5628
5717
  const value = React27.useMemo(() => ({ ref, open: shown }), [shown]);
5629
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TriggerContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5718
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TriggerContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5630
5719
  TooltipPrimitive.Root,
5631
5720
  {
5632
5721
  ...props,
@@ -5648,14 +5737,14 @@ var TooltipTrigger = React27.forwardRef((props, ref) => {
5648
5737
  },
5649
5738
  [trigger, ref]
5650
5739
  );
5651
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TooltipPrimitive.Trigger, { ref: setRef, ...{ [TOOLTIP_TRIGGER_ATTR]: "" }, ...props });
5740
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipPrimitive.Trigger, { ref: setRef, ...{ [TOOLTIP_TRIGGER_ATTR]: "" }, ...props });
5652
5741
  });
5653
5742
  TooltipTrigger.displayName = TooltipPrimitive.Trigger.displayName;
5654
5743
  var TooltipContent = React27.forwardRef(({ className, side, fallbackSide, sideOffset = 4, collisionPadding = TOOLTIP_EDGE_PX, container, animated = true, children, style, ...props }, ref) => {
5655
5744
  const resolved = usePortalContainer(container);
5656
5745
  const trigger = React27.useContext(TriggerContext);
5657
5746
  const placed = side ?? (trigger?.open ? tooltipSide(trigger.ref.current, fallbackSide) : fallbackSide ?? "top");
5658
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(TooltipPrimitive.Portal, { container: resolved ?? null, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
5747
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipPrimitive.Portal, { container: resolved ?? null, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5659
5748
  TooltipPrimitive.Content,
5660
5749
  {
5661
5750
  ref,
@@ -5678,7 +5767,7 @@ var TooltipContent = React27.forwardRef(({ className, side, fallbackSide, sideOf
5678
5767
  TooltipContent.displayName = TooltipPrimitive.Content.displayName;
5679
5768
 
5680
5769
  // src/controls/collapsible-text.tsx
5681
- var import_jsx_runtime40 = require("react/jsx-runtime");
5770
+ var import_jsx_runtime41 = require("react/jsx-runtime");
5682
5771
  function CollapsibleText({
5683
5772
  children,
5684
5773
  expanded,
@@ -5712,8 +5801,8 @@ function CollapsibleText({
5712
5801
  }, [children, collapsedLines]);
5713
5802
  const isCollapsed = isOverflowing && !expanded;
5714
5803
  if (showLabel) {
5715
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "relative min-w-0", children: [
5716
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5804
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "relative min-w-0", children: [
5805
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
5717
5806
  "div",
5718
5807
  {
5719
5808
  ref: contentRef,
@@ -5726,7 +5815,7 @@ function CollapsibleText({
5726
5815
  children
5727
5816
  }
5728
5817
  ),
5729
- isOverflowing ? /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
5818
+ isOverflowing ? /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
5730
5819
  "button",
5731
5820
  {
5732
5821
  type: "button",
@@ -5737,15 +5826,15 @@ function CollapsibleText({
5737
5826
  },
5738
5827
  className: "mt-0.5 inline-flex min-h-6 items-center gap-0.5 rounded text-xs font-medium text-primary hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring",
5739
5828
  children: [
5740
- isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronDownIcon, { className: "h-3.5 w-3.5", "aria-hidden": true }) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronUpIcon, { className: "h-3.5 w-3.5", "aria-hidden": true }),
5829
+ isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronDownIcon, { className: "h-3.5 w-3.5", "aria-hidden": true }) : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronUpIcon, { className: "h-3.5 w-3.5", "aria-hidden": true }),
5741
5830
  isCollapsed ? expandLabel : collapseLabel
5742
5831
  ]
5743
5832
  }
5744
5833
  ) : null
5745
5834
  ] });
5746
5835
  }
5747
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "relative min-w-0", children: [
5748
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5836
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "relative min-w-0", children: [
5837
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
5749
5838
  "div",
5750
5839
  {
5751
5840
  ref: contentRef,
@@ -5758,10 +5847,10 @@ function CollapsibleText({
5758
5847
  children
5759
5848
  }
5760
5849
  ),
5761
- isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "pointer-events-none absolute inset-x-0 bottom-0 flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5850
+ isCollapsed ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "pointer-events-none absolute inset-x-0 bottom-0 flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
5762
5851
  Button2,
5763
5852
  {
5764
- icon: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronDownIcon, {}),
5853
+ icon: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronDownIcon, {}),
5765
5854
  type: "button",
5766
5855
  variant: "outline",
5767
5856
  "aria-label": expandLabel,
@@ -5772,10 +5861,10 @@ function CollapsibleText({
5772
5861
  },
5773
5862
  className: "pointer-events-auto"
5774
5863
  }
5775
- ) }) : isOverflowing ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "flex justify-center pt-0.5", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5864
+ ) }) : isOverflowing ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "flex justify-center pt-0.5", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
5776
5865
  Button2,
5777
5866
  {
5778
- icon: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronUpIcon, {}),
5867
+ icon: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronUpIcon, {}),
5779
5868
  type: "button",
5780
5869
  variant: "quiet",
5781
5870
  "aria-label": collapseLabel,
@@ -5795,12 +5884,12 @@ function CollapsibleTextGroupControls({
5795
5884
  anyExpanded,
5796
5885
  disabled = false
5797
5886
  }) {
5798
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex items-center gap-0.5", children: [
5799
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Tooltip, { children: [
5800
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5887
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-center gap-0.5", children: [
5888
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Tooltip, { children: [
5889
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
5801
5890
  Button2,
5802
5891
  {
5803
- icon: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronsDownIcon, { className: "!size-[18px] lg:!size-3.5" }),
5892
+ icon: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronsDownIcon, { className: "!size-[18px] lg:!size-3.5" }),
5804
5893
  type: "button",
5805
5894
  variant: "quiet",
5806
5895
  "aria-label": "Expand all",
@@ -5808,13 +5897,13 @@ function CollapsibleTextGroupControls({
5808
5897
  disabled: disabled || allExpanded
5809
5898
  }
5810
5899
  ) }),
5811
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipContent, { side: "top", children: "Expand all" })
5900
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipContent, { side: "top", children: "Expand all" })
5812
5901
  ] }),
5813
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Tooltip, { children: [
5814
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
5902
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Tooltip, { children: [
5903
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
5815
5904
  Button2,
5816
5905
  {
5817
- icon: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ChevronsUpIcon, { className: "!size-[18px] lg:!size-3.5" }),
5906
+ icon: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(ChevronsUpIcon, { className: "!size-[18px] lg:!size-3.5" }),
5818
5907
  type: "button",
5819
5908
  variant: "quiet",
5820
5909
  "aria-label": "Collapse all",
@@ -5822,14 +5911,14 @@ function CollapsibleTextGroupControls({
5822
5911
  disabled: disabled || !anyExpanded
5823
5912
  }
5824
5913
  ) }),
5825
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TooltipContent, { side: "top", children: "Collapse all" })
5914
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipContent, { side: "top", children: "Collapse all" })
5826
5915
  ] })
5827
5916
  ] });
5828
5917
  }
5829
5918
 
5830
5919
  // src/controls/info-hint.tsx
5831
5920
  var import_react9 = require("react");
5832
- var import_jsx_runtime41 = require("react/jsx-runtime");
5921
+ var import_jsx_runtime42 = require("react/jsx-runtime");
5833
5922
  var COARSE_POINTER_QUERY = "(pointer: coarse)";
5834
5923
  function subscribeCoarse(onChange) {
5835
5924
  const mq = window.matchMedia(COARSE_POINTER_QUERY);
@@ -5853,10 +5942,10 @@ function InfoHint({ text, label = "More info", className, side = "top" }) {
5853
5942
  const coarse = useCoarsePointer();
5854
5943
  const isMobile = (0, import_media_query.useIsMobile)();
5855
5944
  const [open, setOpen] = (0, import_react9.useState)(false);
5856
- const glyph = /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(InfoIcon, { "aria-hidden": true, className: "h-3.5 w-3.5", strokeWidth: 2 });
5945
+ const glyph = /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(InfoIcon, { "aria-hidden": true, className: "h-3.5 w-3.5", strokeWidth: 2 });
5857
5946
  if (coarse || isMobile) {
5858
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
5859
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
5947
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
5948
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
5860
5949
  "button",
5861
5950
  {
5862
5951
  type: "button",
@@ -5870,7 +5959,7 @@ function InfoHint({ text, label = "More info", className, side = "top" }) {
5870
5959
  children: glyph
5871
5960
  }
5872
5961
  ) }),
5873
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
5962
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
5874
5963
  PopoverContent,
5875
5964
  {
5876
5965
  side,
@@ -5887,8 +5976,8 @@ function InfoHint({ text, label = "More info", className, side = "top" }) {
5887
5976
  return (
5888
5977
  // Brings its own provider: an official component works wherever it is imported (a
5889
5978
  // test, a portal, a page without the app shell) — 2026-09-30, final-switch tests.
5890
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipProvider, { delayDuration: 200, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(Tooltip, { open, onOpenChange: setOpen, children: [
5891
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
5979
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(TooltipProvider, { delayDuration: 200, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(Tooltip, { open, onOpenChange: setOpen, children: [
5980
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
5892
5981
  "button",
5893
5982
  {
5894
5983
  type: "button",
@@ -5904,13 +5993,13 @@ function InfoHint({ text, label = "More info", className, side = "top" }) {
5904
5993
  children: glyph
5905
5994
  }
5906
5995
  ) }),
5907
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TooltipContent, { side, className: CONTENT_CLASS, onClick: isolate, children: text })
5996
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(TooltipContent, { side, className: CONTENT_CLASS, onClick: isolate, children: text })
5908
5997
  ] }) })
5909
5998
  );
5910
5999
  }
5911
6000
 
5912
6001
  // src/controls/status-badge.tsx
5913
- var import_jsx_runtime42 = require("react/jsx-runtime");
6002
+ var import_jsx_runtime43 = require("react/jsx-runtime");
5914
6003
  var STATUS_TONES = ["success", "warning", "danger", "neutral", "info"];
5915
6004
  var TONE_CLASS = {
5916
6005
  success: "border-success/40 bg-success/15 text-success-ink",
@@ -5926,7 +6015,7 @@ var SIZE_CLASS = {
5926
6015
  };
5927
6016
  function StatusBadge({ label, tone: tone2, icon: Icon3, size = "md", title, trailing, className }) {
5928
6017
  const s = SIZE_CLASS[size];
5929
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
6018
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
5930
6019
  "span",
5931
6020
  {
5932
6021
  role: "status",
@@ -5942,7 +6031,7 @@ function StatusBadge({ label, tone: tone2, icon: Icon3, size = "md", title, trai
5942
6031
  className
5943
6032
  ),
5944
6033
  children: [
5945
- Icon3 ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon3, { "aria-hidden": true, className: cn("shrink-0", s.icon) }) : null,
6034
+ Icon3 ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon3, { "aria-hidden": true, className: cn("shrink-0", s.icon) }) : null,
5946
6035
  label,
5947
6036
  trailing
5948
6037
  ]
@@ -5952,7 +6041,7 @@ function StatusBadge({ label, tone: tone2, icon: Icon3, size = "md", title, trai
5952
6041
 
5953
6042
  // src/controls/structured-section-card.tsx
5954
6043
  var React28 = __toESM(require("react"), 1);
5955
- var import_jsx_runtime43 = require("react/jsx-runtime");
6044
+ var import_jsx_runtime44 = require("react/jsx-runtime");
5956
6045
  var TITLE_TONE = {
5957
6046
  primary: "text-primary-ink",
5958
6047
  foreground: "text-foreground"
@@ -5969,24 +6058,24 @@ function StructuredSectionCard({
5969
6058
  className
5970
6059
  }) {
5971
6060
  const hasFooter = footerLeft || footerCenter || footerRight;
5972
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
6061
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
5973
6062
  "div",
5974
6063
  {
5975
6064
  "data-slot": "structured-section-card",
5976
6065
  className: cn("overflow-hidden rounded-xl border-border bg-textured shadow-sm", className),
5977
6066
  children: [
5978
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "flex items-center justify-between border-b border-border bg-muted px-4 py-3", children: [
5979
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "min-w-0", children: [
5980
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("h3", { className: cn("font-medium", TITLE_TONE[titleTone]), children: title }),
5981
- description && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "type-body text-muted-foreground", children: description })
6067
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex items-center justify-between border-b border-border bg-muted px-4 py-3", children: [
6068
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "min-w-0", children: [
6069
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("h3", { className: cn("font-medium", TITLE_TONE[titleTone]), children: title }),
6070
+ description && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("p", { className: "type-body text-muted-foreground", children: description })
5982
6071
  ] }),
5983
- headerActions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "ml-4 flex shrink-0 items-center space-x-2", children: headerActions.map((action, index) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(React28.Fragment, { children: action }, index)) })
6072
+ headerActions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "ml-4 flex shrink-0 items-center space-x-2", children: headerActions.map((action, index) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(React28.Fragment, { children: action }, index)) })
5984
6073
  ] }),
5985
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "p-4", children }),
5986
- hasFooter && /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "flex flex-wrap items-center border-t border-border px-4 py-3", children: [
5987
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "flex min-w-[33%] flex-1 justify-start space-x-2 sm:min-w-0", children: footerLeft }),
5988
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "mt-2 flex min-w-[33%] flex-1 justify-center space-x-2 sm:mt-0 sm:min-w-0", children: footerCenter }),
5989
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "mt-2 flex min-w-[33%] flex-1 justify-end space-x-2 sm:mt-0 sm:min-w-0", children: footerRight })
6074
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "p-4", children }),
6075
+ hasFooter && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "flex flex-wrap items-center border-t border-border px-4 py-3", children: [
6076
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "flex min-w-[33%] flex-1 justify-start space-x-2 sm:min-w-0", children: footerLeft }),
6077
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "mt-2 flex min-w-[33%] flex-1 justify-center space-x-2 sm:mt-0 sm:min-w-0", children: footerCenter }),
6078
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "mt-2 flex min-w-[33%] flex-1 justify-end space-x-2 sm:mt-0 sm:min-w-0", children: footerRight })
5990
6079
  ] })
5991
6080
  ]
5992
6081
  }
@@ -5994,7 +6083,7 @@ function StructuredSectionCard({
5994
6083
  }
5995
6084
 
5996
6085
  // src/controls/icon-dropdown-menu.tsx
5997
- var import_jsx_runtime44 = require("react/jsx-runtime");
6086
+ var import_jsx_runtime45 = require("react/jsx-runtime");
5998
6087
  function IconDropdownMenu({
5999
6088
  options,
6000
6089
  value,
@@ -6009,21 +6098,21 @@ function IconDropdownMenu({
6009
6098
  console.warn("IconDropdownMenu: no option to show \u2014 pass at least one option.");
6010
6099
  return null;
6011
6100
  }
6012
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(DropdownMenu, { children: [
6013
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
6101
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(DropdownMenu, { children: [
6102
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
6014
6103
  Button2,
6015
6104
  {
6016
- icon: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(SelectedIcon, {}),
6017
- iconEnd: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ChevronDownIcon, {}),
6105
+ icon: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(SelectedIcon, {}),
6106
+ iconEnd: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(ChevronDownIcon, {}),
6018
6107
  variant: "outline",
6019
6108
  "aria-label": selected.label,
6020
6109
  ...className ? { className } : {}
6021
6110
  }
6022
6111
  ) }),
6023
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(DropdownMenuContent, { align, className: cn("rounded-2xl p-1", menuWidth), children: options.map((option) => {
6112
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(DropdownMenuContent, { align, className: cn("rounded-2xl p-1", menuWidth), children: options.map((option) => {
6024
6113
  const isSelected = option.value === value;
6025
6114
  const OptionIcon = option.icon;
6026
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
6115
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
6027
6116
  DropdownMenuItem,
6028
6117
  {
6029
6118
  onClick: () => onValueChange(option.value),
@@ -6033,9 +6122,9 @@ function IconDropdownMenu({
6033
6122
  isSelected && "bg-primary/10"
6034
6123
  ),
6035
6124
  children: [
6036
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(OptionIcon, { className: cn("h-4 w-4 shrink-0", isSelected ? "text-primary-ink" : "text-muted-foreground") }),
6037
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: cn("type-body flex-1 leading-tight", isSelected ? "font-medium text-primary-ink" : "text-foreground"), children: option.label }),
6038
- isSelected && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(CheckIcon, { className: "h-4 w-4 shrink-0 text-primary-ink" })
6125
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(OptionIcon, { className: cn("h-4 w-4 shrink-0", isSelected ? "text-primary-ink" : "text-muted-foreground") }),
6126
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: cn("type-body flex-1 leading-tight", isSelected ? "font-medium text-primary-ink" : "text-foreground"), children: option.label }),
6127
+ isSelected && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(CheckIcon, { className: "h-4 w-4 shrink-0 text-primary-ink" })
6039
6128
  ]
6040
6129
  },
6041
6130
  String(option.value)
@@ -6046,7 +6135,7 @@ function IconDropdownMenu({
6046
6135
 
6047
6136
  // src/error-box.tsx
6048
6137
  var React29 = __toESM(require("react"), 1);
6049
- var import_jsx_runtime45 = require("react/jsx-runtime");
6138
+ var import_jsx_runtime46 = require("react/jsx-runtime");
6050
6139
  var CONTEXT_KEY = /* @__PURE__ */ Symbol.for("@ai-matrx/design-system/error-actions");
6051
6140
  var registry2 = globalThis;
6052
6141
  var ErrorActionsContext = registry2[CONTEXT_KEY] ?? (registry2[CONTEXT_KEY] = React29.createContext(null));
@@ -6059,7 +6148,7 @@ function useErrorActions() {
6059
6148
  function ErrorActions(props) {
6060
6149
  const render = useErrorActions();
6061
6150
  if (!render) return null;
6062
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: render(props) });
6151
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_jsx_runtime46.Fragment, { children: render(props) });
6063
6152
  }
6064
6153
  var ErrorBox = React29.forwardRef(function ErrorBox2({
6065
6154
  as = "p",
@@ -6083,17 +6172,17 @@ var ErrorBox = React29.forwardRef(function ErrorBox2({
6083
6172
  ...unsavedInput !== void 0 ? { unsavedInput } : {},
6084
6173
  ...origin !== void 0 ? { origin } : {}
6085
6174
  };
6086
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(Tag, { ref, role: "alert", "data-error-box": "", ...rest, children: [
6175
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Tag, { ref, role: "alert", "data-error-box": "", ...rest, children: [
6087
6176
  children ?? message,
6088
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(ErrorActions, { ...facts })
6177
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ErrorActions, { ...facts })
6089
6178
  ] });
6090
6179
  });
6091
6180
 
6092
6181
  // src/label.tsx
6093
6182
  var LabelPrimitive = __toESM(require("@radix-ui/react-label"), 1);
6094
6183
  var React30 = __toESM(require("react"), 1);
6095
- var import_jsx_runtime46 = require("react/jsx-runtime");
6096
- var Label3 = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
6184
+ var import_jsx_runtime47 = require("react/jsx-runtime");
6185
+ var Label3 = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
6097
6186
  LabelPrimitive.Root,
6098
6187
  {
6099
6188
  ref,
@@ -6107,7 +6196,7 @@ var Label3 = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
6107
6196
  Label3.displayName = LabelPrimitive.Root.displayName;
6108
6197
 
6109
6198
  // src/controls/field.tsx
6110
- var import_jsx_runtime47 = require("react/jsx-runtime");
6199
+ var import_jsx_runtime48 = require("react/jsx-runtime");
6111
6200
  function LabeledField({
6112
6201
  label,
6113
6202
  htmlFor,
@@ -6126,9 +6215,9 @@ function LabeledField({
6126
6215
  const hasCounter = typeof count === "number";
6127
6216
  const overLimit = hasCounter && maxCount != null && count > maxCount;
6128
6217
  const nearLimit = hasCounter && maxCount != null && count > maxCount * 0.9 && !overLimit;
6129
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { "data-field-root": "", className: cn("group/field space-y-1.5", className), children: [
6130
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-1.5", children: [
6131
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
6218
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { "data-field-root": "", className: cn("group/field space-y-1.5", className), children: [
6219
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-1.5", children: [
6220
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
6132
6221
  Label3,
6133
6222
  {
6134
6223
  htmlFor,
@@ -6138,27 +6227,27 @@ function LabeledField({
6138
6227
  ),
6139
6228
  children: [
6140
6229
  label,
6141
- required && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "text-destructive ml-1", "aria-hidden": true, children: "*" }),
6142
- !required && optional && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "text-muted-foreground ml-1.5 type-secondary font-normal", children: "(optional)" })
6230
+ required && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "text-destructive ml-1", "aria-hidden": true, children: "*" }),
6231
+ !required && optional && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "text-muted-foreground ml-1.5 type-secondary font-normal", children: "(optional)" })
6143
6232
  ]
6144
6233
  }
6145
6234
  ),
6146
- typeof help === "string" && help && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(InfoHint, { text: help, label: typeof label === "string" ? `About ${label}` : "Help" }),
6147
- help && typeof help !== "string" && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TooltipProvider, { delayDuration: 150, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Tooltip, { children: [
6148
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
6235
+ typeof help === "string" && help && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(InfoHint, { text: help, label: typeof label === "string" ? `About ${label}` : "Help" }),
6236
+ help && typeof help !== "string" && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(TooltipProvider, { delayDuration: 150, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Tooltip, { children: [
6237
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
6149
6238
  "button",
6150
6239
  {
6151
6240
  type: "button",
6152
6241
  "aria-label": "Help",
6153
6242
  className: "inline-flex items-center justify-center h-4 w-4 rounded-full text-muted-foreground hover:text-foreground transition-colors",
6154
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CircleHelpIcon, { className: "h-3.5 w-3.5" })
6243
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CircleHelpIcon, { className: "h-3.5 w-3.5" })
6155
6244
  }
6156
6245
  ) }),
6157
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TooltipContent, { side: "top", className: "max-w-xs type-secondary", children: help })
6246
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(TooltipContent, { side: "top", className: "max-w-xs type-secondary", children: help })
6158
6247
  ] }) })
6159
6248
  ] }),
6160
- description && !error && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "type-secondary text-muted-foreground", children: description }),
6161
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
6249
+ description && !error && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "type-secondary text-muted-foreground", children: description }),
6250
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
6162
6251
  "div",
6163
6252
  {
6164
6253
  "data-slot": "field-control",
@@ -6169,7 +6258,7 @@ function LabeledField({
6169
6258
  children
6170
6259
  }
6171
6260
  ),
6172
- (error || hasCounter || requiredEmpty) && /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
6261
+ (error || hasCounter || requiredEmpty) && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
6173
6262
  "div",
6174
6263
  {
6175
6264
  className: cn(
@@ -6181,10 +6270,10 @@ function LabeledField({
6181
6270
  !error && !hasCounter && "hidden [[data-field-root]:has(:placeholder-shown)_&]:flex"
6182
6271
  ),
6183
6272
  children: [
6184
- error ? /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("p", { className: "type-secondary text-destructive flex items-center gap-1", children: [
6185
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CircleAlertIcon, { className: "h-3 w-3 flex-shrink-0" }),
6186
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { children: error }),
6187
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
6273
+ error ? /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("p", { className: "type-secondary text-destructive flex items-center gap-1", children: [
6274
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CircleAlertIcon, { className: "h-3 w-3 flex-shrink-0" }),
6275
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { children: error }),
6276
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
6188
6277
  ErrorActions,
6189
6278
  {
6190
6279
  ...typeof error === "string" ? { message: error } : {},
@@ -6192,18 +6281,18 @@ function LabeledField({
6192
6281
  origin: "design-system/LabeledField"
6193
6282
  }
6194
6283
  )
6195
- ] }) : requiredEmpty ? /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
6284
+ ] }) : requiredEmpty ? /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
6196
6285
  "p",
6197
6286
  {
6198
6287
  "data-slot": "field-empty-notice",
6199
6288
  className: "hidden type-secondary text-muted-foreground items-center gap-1 [[data-field-root]:has(:placeholder-shown)_&]:flex",
6200
6289
  children: [
6201
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CircleAlertIcon, { className: "h-3 w-3 flex-shrink-0" }),
6202
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { children: "Empty \u2014 the gray text is an example, not your answer." })
6290
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CircleAlertIcon, { className: "h-3 w-3 flex-shrink-0" }),
6291
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { children: "Empty \u2014 the gray text is an example, not your answer." })
6203
6292
  ]
6204
6293
  }
6205
- ) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", {}),
6206
- hasCounter && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
6294
+ ) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", {}),
6295
+ hasCounter && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
6207
6296
  "span",
6208
6297
  {
6209
6298
  className: cn(
@@ -6226,7 +6315,7 @@ var import_clipboard_fallback_opener = require("@ai-matrx/kit/clipboard-fallback
6226
6315
  var import_notify = require("@ai-matrx/kit/notify");
6227
6316
  var React31 = __toESM(require("react"), 1);
6228
6317
  var import_react_dom = require("react-dom");
6229
- var import_jsx_runtime48 = require("react/jsx-runtime");
6318
+ var import_jsx_runtime49 = require("react/jsx-runtime");
6230
6319
  var { useState: useState17, useLayoutEffect: useLayoutEffect4, useRef: useRef12 } = React31;
6231
6320
  function HelpIcon({
6232
6321
  text,
@@ -6325,13 +6414,13 @@ function HelpIcon({
6325
6414
  }, [isVisible]);
6326
6415
  const formatTextWithLineBreaks = (text2) => {
6327
6416
  const processedText = text2.replace(/\\n/g, "\n");
6328
- return processedText.split("\n").map((line, index) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(React31.Fragment, { children: [
6329
- index > 0 && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("br", {}),
6417
+ return processedText.split("\n").map((line, index) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(React31.Fragment, { children: [
6418
+ index > 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("br", {}),
6330
6419
  line
6331
6420
  ] }, index));
6332
6421
  };
6333
6422
  if (!text && !content) return null;
6334
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
6423
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
6335
6424
  "div",
6336
6425
  {
6337
6426
  className: `inline-block relative cursor-help ${className}`,
@@ -6339,9 +6428,9 @@ function HelpIcon({
6339
6428
  onMouseEnter: showTooltip,
6340
6429
  onMouseLeave: hideTooltip,
6341
6430
  children: [
6342
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(InfoIcon, { className: "h-4 w-4 text-muted-foreground transition-colors duration-200" }),
6431
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(InfoIcon, { className: "h-4 w-4 text-muted-foreground transition-colors duration-200" }),
6343
6432
  isVisible && typeof document !== "undefined" && (0, import_react_dom.createPortal)(
6344
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
6433
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
6345
6434
  "div",
6346
6435
  {
6347
6436
  ref: tooltipRef,
@@ -6354,29 +6443,29 @@ function HelpIcon({
6354
6443
  onMouseEnter: cancelHideTooltip,
6355
6444
  onMouseLeave: hideTooltip,
6356
6445
  children: [
6357
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "p-3", children: [
6358
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
6359
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CircleHelpIcon, { className: "h-4 w-4 flex-shrink-0 text-info-ink" }),
6360
- title && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("h3", { className: "text-foreground type-title", children: title }),
6361
- text && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
6446
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "p-3", children: [
6447
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center gap-2 mb-2", children: [
6448
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CircleHelpIcon, { className: "h-4 w-4 flex-shrink-0 text-info-ink" }),
6449
+ title && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("h3", { className: "text-foreground type-title", children: title }),
6450
+ text && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
6362
6451
  Button2,
6363
6452
  {
6364
6453
  variant: "quiet",
6365
6454
  className: "ml-auto",
6366
- icon: copied ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CopyIcon, {}),
6455
+ icon: copied ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CopyIcon, {}),
6367
6456
  "aria-label": "Copy to clipboard",
6368
6457
  onClick: handleCopy
6369
6458
  }
6370
6459
  )
6371
6460
  ] }),
6372
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "type-body text-foreground leading-relaxed", children: content ? content : text && formatTextWithLineBreaks(text) }),
6373
- required && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "mt-3 inline-flex items-center gap-1.5 px-2.5 py-1 bg-warning/15 text-warning-ink type-secondary font-medium rounded-full", children: [
6374
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "w-1.5 h-1.5 bg-warning-ink rounded-full" }),
6461
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "type-body text-foreground leading-relaxed", children: content ? content : text && formatTextWithLineBreaks(text) }),
6462
+ required && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "mt-3 inline-flex items-center gap-1.5 px-2.5 py-1 bg-warning/15 text-warning-ink type-secondary font-medium rounded-full", children: [
6463
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "w-1.5 h-1.5 bg-warning-ink rounded-full" }),
6375
6464
  "Required Field"
6376
6465
  ] }),
6377
- onAiAssistance && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Button2, { variant: "primary", icon: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(CircleDotIcon, {}), className: "mt-3 w-full", onClick: handleAiClick, children: "Get Help From Matrx AI" })
6466
+ onAiAssistance && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Button2, { variant: "primary", icon: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CircleDotIcon, {}), className: "mt-3 w-full", onClick: handleAiClick, children: "Get Help From Matrx AI" })
6378
6467
  ] }),
6379
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "absolute -bottom-1.5 left-1/2 -translate-x-1/2 w-3 h-3 bg-textured border-r border-b border-border rotate-45" })
6468
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "absolute -bottom-1.5 left-1/2 -translate-x-1/2 w-3 h-3 bg-textured border-r border-b border-border rotate-45" })
6380
6469
  ]
6381
6470
  }
6382
6471
  ),
@@ -6392,7 +6481,7 @@ var import_clipboard2 = require("@ai-matrx/kit/clipboard");
6392
6481
  var import_notify2 = require("@ai-matrx/kit/notify");
6393
6482
  var import_clipboard_fallback_opener2 = require("@ai-matrx/kit/clipboard-fallback-opener");
6394
6483
  var React32 = __toESM(require("react"), 1);
6395
- var import_jsx_runtime49 = require("react/jsx-runtime");
6484
+ var import_jsx_runtime50 = require("react/jsx-runtime");
6396
6485
  function cleanUrl(url) {
6397
6486
  try {
6398
6487
  const parsed = new URL(url);
@@ -6448,9 +6537,9 @@ function TextArrayInput({
6448
6537
  handleChange([...value, ...added]);
6449
6538
  setInputValue("");
6450
6539
  };
6451
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: `space-y-3 ${className}`, children: [
6452
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("form", { onSubmit: handleSubmit, className: "relative w-full", children: [
6453
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
6540
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: `space-y-3 ${className}`, children: [
6541
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("form", { onSubmit: handleSubmit, className: "relative w-full", children: [
6542
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
6454
6543
  Input,
6455
6544
  {
6456
6545
  adornment: "end",
@@ -6464,12 +6553,12 @@ function TextArrayInput({
6464
6553
  className: "w-full"
6465
6554
  }
6466
6555
  ),
6467
- showCopyIcon && value.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
6556
+ showCopyIcon && value.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
6468
6557
  Button2,
6469
6558
  {
6470
6559
  ...tabIndexProp,
6471
6560
  variant: "quiet",
6472
- icon: copied ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(CopyIcon, {}),
6561
+ icon: copied ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(CheckIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(CopyIcon, {}),
6473
6562
  ...copied ? { glyphTone: "success" } : {},
6474
6563
  "aria-label": "Copy values",
6475
6564
  onClick: handleCopy,
@@ -6477,13 +6566,13 @@ function TextArrayInput({
6477
6566
  }
6478
6567
  )
6479
6568
  ] }),
6480
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "flex flex-wrap gap-2", children: value.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "type-body inline-flex items-center rounded-full bg-muted px-3 py-1 text-muted-foreground", children: "None Added" }) : value.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
6569
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "flex flex-wrap gap-2", children: value.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "type-body inline-flex items-center rounded-full bg-muted px-3 py-1 text-muted-foreground", children: "None Added" }) : value.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
6481
6570
  "span",
6482
6571
  {
6483
6572
  className: `inline-flex cursor-default items-center gap-1 rounded-full px-3 py-1 text-sm transition-all duration-200 ${chipClassName}`,
6484
6573
  children: [
6485
6574
  item,
6486
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
6575
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
6487
6576
  "button",
6488
6577
  {
6489
6578
  ...tabIndexProp,
@@ -6494,7 +6583,7 @@ function TextArrayInput({
6494
6583
  },
6495
6584
  className: "cursor-pointer rounded-full p-0.5 transition-colors duration-200 hover:bg-primary-foreground/20",
6496
6585
  "aria-label": `Remove ${item}`,
6497
- children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(XIcon, { className: "h-3.5 w-3.5" })
6586
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(XIcon, { className: "h-3.5 w-3.5" })
6498
6587
  }
6499
6588
  )
6500
6589
  ]
@@ -6523,21 +6612,21 @@ function getTapTargetLinkComponent() {
6523
6612
  }
6524
6613
 
6525
6614
  // src/host-link.tsx
6526
- var import_jsx_runtime50 = require("react/jsx-runtime");
6615
+ var import_jsx_runtime51 = require("react/jsx-runtime");
6527
6616
  var HostLink = React33.forwardRef(function HostLink2({ href, prefetch, ...rest }, ref) {
6528
6617
  const Registered = getTapTargetLinkComponent();
6529
6618
  if (Registered) {
6530
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Registered, { ref, href, ...prefetch === void 0 ? {} : { prefetch }, ...rest });
6619
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Registered, { ref, href, ...prefetch === void 0 ? {} : { prefetch }, ...rest });
6531
6620
  }
6532
6621
  announceStandIn(
6533
6622
  "link-host",
6534
6623
  "HostLink drew a plain <a>: register the app's link component once with setTapTargetLinkComponent() from @ai-matrx/design-system/tap-target."
6535
6624
  );
6536
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("a", { ref, href, "data-link-host": UNCONFIGURED, ...rest });
6625
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("a", { ref, href, "data-link-host": UNCONFIGURED, ...rest });
6537
6626
  });
6538
6627
 
6539
6628
  // src/read-state/untrusted-count.tsx
6540
- var import_jsx_runtime51 = require("react/jsx-runtime");
6629
+ var import_jsx_runtime52 = require("react/jsx-runtime");
6541
6630
  function countReadState(input) {
6542
6631
  const { read, trustworthy } = input;
6543
6632
  if (trustworthy === false) return "failed";
@@ -6554,7 +6643,7 @@ function unavailableCountLabel(label) {
6554
6643
  }
6555
6644
 
6556
6645
  // src/controls/kpi-tile.tsx
6557
- var import_jsx_runtime52 = require("react/jsx-runtime");
6646
+ var import_jsx_runtime53 = require("react/jsx-runtime");
6558
6647
  var TONE_VALUE = {
6559
6648
  neutral: "text-foreground",
6560
6649
  good: "text-success-ink",
@@ -6577,7 +6666,7 @@ function KpiSparkline({ trend, label }) {
6577
6666
  const range = Math.max(max - min, Math.abs(max) * 0.1) || 1;
6578
6667
  const y = (v) => max === min ? SPARK_H / 2 : SPARK_H - 2 - (v - min) / range * (SPARK_H - 4);
6579
6668
  const pts = trend.values.map((v, i) => `${(i / (n - 1) * SPARK_W).toFixed(1)},${y(v).toFixed(1)}`).join(" ");
6580
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
6669
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
6581
6670
  "svg",
6582
6671
  {
6583
6672
  viewBox: `0 0 ${SPARK_W} ${SPARK_H}`,
@@ -6586,9 +6675,9 @@ function KpiSparkline({ trend, label }) {
6586
6675
  "aria-label": `${trend.label ?? label}, last ${trend.period}`,
6587
6676
  className: "h-5 w-16 shrink-0 text-primary",
6588
6677
  children: [
6589
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("title", { children: `${trend.label ?? label}, last ${trend.period}` }),
6590
- max === min ? null : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("polygon", { points: `0,${SPARK_H} ${pts} ${SPARK_W},${SPARK_H}`, fill: "currentColor", fillOpacity: 0.15 }),
6591
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("polyline", { points: pts, fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" })
6678
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("title", { children: `${trend.label ?? label}, last ${trend.period}` }),
6679
+ max === min ? null : /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("polygon", { points: `0,${SPARK_H} ${pts} ${SPARK_W},${SPARK_H}`, fill: "currentColor", fillOpacity: 0.15 }),
6680
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("polyline", { points: pts, fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" })
6592
6681
  ]
6593
6682
  }
6594
6683
  );
@@ -6610,19 +6699,19 @@ function KpiTile({
6610
6699
  const failed = readState === "failed";
6611
6700
  const shown = failed ? null : value;
6612
6701
  const dot = TONE_DOT[tone2];
6613
- const body = /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment, { children: [
6614
- /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "flex min-w-0 items-start gap-1.5 type-meta font-medium uppercase tracking-wide text-muted-foreground", children: [
6615
- dot ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { "aria-hidden": true, className: cn("mt-1 inline-block h-2 w-2 shrink-0 rounded-sm", dot) }) : null,
6616
- /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("span", { className: "line-clamp-2 break-words", children: [
6702
+ const body = /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
6703
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex min-w-0 items-start gap-1.5 type-meta font-medium uppercase tracking-wide text-muted-foreground", children: [
6704
+ dot ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { "aria-hidden": true, className: cn("mt-1 inline-block h-2 w-2 shrink-0 rounded-sm", dot) }) : null,
6705
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("span", { className: "line-clamp-2 break-words", children: [
6617
6706
  label,
6618
- title ? /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment, { children: [
6707
+ title ? /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
6619
6708
  " ",
6620
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(InfoHint, { text: title, label: `What ${label} means` })
6709
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(InfoHint, { text: title, label: `What ${label} means` })
6621
6710
  ] }) : null
6622
6711
  ] })
6623
6712
  ] }),
6624
- loading ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "my-0.5 h-6 w-12 animate-pulse rounded bg-muted", "aria-hidden": true }) : /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "flex min-w-0 items-end justify-between gap-2", children: [
6625
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
6713
+ loading ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "my-0.5 h-6 w-12 animate-pulse rounded bg-muted", "aria-hidden": true }) : /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex min-w-0 items-end justify-between gap-2", children: [
6714
+ /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
6626
6715
  "div",
6627
6716
  {
6628
6717
  className: cn(
@@ -6634,16 +6723,16 @@ function KpiTile({
6634
6723
  children: shown === null ? "\u2014" : shown
6635
6724
  }
6636
6725
  ),
6637
- trend && shown !== null ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(KpiSparkline, { trend, label }) : null
6726
+ trend && shown !== null ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(KpiSparkline, { trend, label }) : null
6638
6727
  ] }),
6639
- hint ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "truncate type-meta text-muted-foreground", children: hint }) : null
6728
+ hint ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "truncate type-meta text-muted-foreground", children: hint }) : null
6640
6729
  ] });
6641
6730
  const shell = cn(
6642
6731
  "flex min-w-0 flex-col gap-0.5 rounded-md border border-border bg-card px-3 py-2",
6643
6732
  className
6644
6733
  );
6645
6734
  if (href && !loading && shown !== null) {
6646
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
6735
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
6647
6736
  HostLink,
6648
6737
  {
6649
6738
  href,
@@ -6656,13 +6745,13 @@ function KpiTile({
6656
6745
  }
6657
6746
  );
6658
6747
  }
6659
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: shell, "data-look-surface": "card", "aria-busy": loading || void 0, children: body });
6748
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: shell, "data-look-surface": "card", "aria-busy": loading || void 0, children: body });
6660
6749
  }
6661
6750
  function KpiGrid({
6662
6751
  children,
6663
6752
  className
6664
6753
  }) {
6665
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
6754
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
6666
6755
  "div",
6667
6756
  {
6668
6757
  className: cn(
@@ -6676,7 +6765,7 @@ function KpiGrid({
6676
6765
 
6677
6766
  // src/controls/action-feedback-button.tsx
6678
6767
  var React34 = __toESM(require("react"), 1);
6679
- var import_jsx_runtime53 = require("react/jsx-runtime");
6768
+ var import_jsx_runtime54 = require("react/jsx-runtime");
6680
6769
  function ActionFeedbackButton({
6681
6770
  icon,
6682
6771
  tooltip,
@@ -6702,11 +6791,11 @@ function ActionFeedbackButton({
6702
6791
  timer.current = setTimeout(() => setShowSuccess(false), feedbackDuration);
6703
6792
  };
6704
6793
  const text = showSuccess ? successTooltip : disabled && disabledTooltip ? disabledTooltip : tooltip;
6705
- const button = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
6794
+ const button = /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6706
6795
  Button2,
6707
6796
  {
6708
6797
  variant,
6709
- icon: showSuccess ? successIcon ?? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(CheckCircle2Icon, {}) : icon,
6798
+ icon: showSuccess ? successIcon ?? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(CheckCircle2Icon, {}) : icon,
6710
6799
  ...showSuccess ? { glyphTone: "success" } : glyphTone ? { glyphTone } : {},
6711
6800
  ...props,
6712
6801
  "aria-label": text,
@@ -6714,15 +6803,15 @@ function ActionFeedbackButton({
6714
6803
  onClick: handleClick
6715
6804
  }
6716
6805
  );
6717
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(Tooltip, { children: [
6718
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(TooltipTrigger, { asChild: true, children: disabled ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "inline-flex", children: button }) : button }),
6719
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(TooltipContent, { side: "bottom", sideOffset: 5, className: "z-[9999]", children: text })
6806
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(Tooltip, { children: [
6807
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(TooltipTrigger, { asChild: true, children: disabled ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "inline-flex", children: button }) : button }),
6808
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(TooltipContent, { side: "bottom", sideOffset: 5, className: "z-[9999]", children: text })
6720
6809
  ] });
6721
6810
  }
6722
6811
 
6723
6812
  // src/controls/citation-chip.tsx
6724
6813
  var import_react10 = require("react");
6725
- var import_jsx_runtime54 = require("react/jsx-runtime");
6814
+ var import_jsx_runtime55 = require("react/jsx-runtime");
6726
6815
  function CitationPopoverBody({
6727
6816
  icon: Icon3,
6728
6817
  label,
@@ -6732,32 +6821,32 @@ function CitationPopoverBody({
6732
6821
  onOpen,
6733
6822
  openLabel = "Open source"
6734
6823
  }) {
6735
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-col gap-2", children: [
6736
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex items-start gap-2", children: [
6737
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6824
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex flex-col gap-2", children: [
6825
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex items-start gap-2", children: [
6826
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6738
6827
  Icon3,
6739
6828
  {
6740
6829
  className: "mt-0.5 h-4 w-4 shrink-0 text-muted-foreground",
6741
6830
  "aria-hidden": true
6742
6831
  }
6743
6832
  ),
6744
- /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "min-w-0", children: [
6745
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "truncate type-title text-foreground", children: label }),
6746
- locator && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "type-secondary text-muted-foreground", children: locator })
6833
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "min-w-0", children: [
6834
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: "truncate type-title text-foreground", children: label }),
6835
+ locator && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: "type-secondary text-muted-foreground", children: locator })
6747
6836
  ] })
6748
6837
  ] }),
6749
- excerpt && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("blockquote", { className: "flex gap-2 rounded-md bg-muted/60 p-2 type-secondary italic text-muted-foreground", children: [
6750
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(QuoteIcon, { className: "h-3 w-3 shrink-0", "aria-hidden": true }),
6751
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: cn("not-italic", clampExcerpt && "line-clamp-6"), children: excerpt })
6838
+ excerpt && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("blockquote", { className: "flex gap-2 rounded-md bg-muted/60 p-2 type-secondary italic text-muted-foreground", children: [
6839
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(QuoteIcon, { className: "h-3 w-3 shrink-0", "aria-hidden": true }),
6840
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: cn("not-italic", clampExcerpt && "line-clamp-6"), children: excerpt })
6752
6841
  ] }),
6753
- onOpen && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
6842
+ onOpen && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
6754
6843
  "button",
6755
6844
  {
6756
6845
  type: "button",
6757
6846
  onClick: onOpen,
6758
6847
  className: "inline-flex items-center gap-1 self-start text-xs font-medium text-primary hover:underline",
6759
6848
  children: [
6760
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(ArrowUpRightIcon, { className: "h-3 w-3", "aria-hidden": true }),
6849
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(ArrowUpRightIcon, { className: "h-3 w-3", "aria-hidden": true }),
6761
6850
  openLabel
6762
6851
  ]
6763
6852
  }
@@ -6777,8 +6866,8 @@ function CitationChip({
6777
6866
  setOpen(false);
6778
6867
  body.onOpen?.();
6779
6868
  } : void 0;
6780
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
6781
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
6869
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
6870
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
6782
6871
  "button",
6783
6872
  {
6784
6873
  type: "button",
@@ -6788,20 +6877,20 @@ function CitationChip({
6788
6877
  chipClassName
6789
6878
  ),
6790
6879
  children: [
6791
- number != null && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full bg-muted px-1 text-[0.65rem] font-medium leading-none text-muted-foreground", children: number }),
6792
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Icon3, { className: "h-3 w-3 shrink-0 text-muted-foreground", "aria-hidden": true }),
6793
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "truncate", children: label }),
6794
- chipSuffix && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "shrink-0 text-muted-foreground", children: chipSuffix })
6880
+ number != null && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "inline-flex h-4 min-w-4 shrink-0 items-center justify-center rounded-full bg-muted px-1 text-[0.65rem] font-medium leading-none text-muted-foreground", children: number }),
6881
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Icon3, { className: "h-3 w-3 shrink-0 text-muted-foreground", "aria-hidden": true }),
6882
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "truncate", children: label }),
6883
+ chipSuffix && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "shrink-0 text-muted-foreground", children: chipSuffix })
6795
6884
  ]
6796
6885
  }
6797
6886
  ) }),
6798
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(PopoverContent, { sizing: "content", align: "start", className: "p-3", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(CitationPopoverBody, { ...body, onOpen }) })
6887
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(PopoverContent, { sizing: "content", align: "start", className: "p-3", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(CitationPopoverBody, { ...body, onOpen }) })
6799
6888
  ] });
6800
6889
  }
6801
6890
 
6802
6891
  // src/controls/tool-rail.tsx
6803
6892
  var React35 = __toESM(require("react"), 1);
6804
- var import_jsx_runtime55 = require("react/jsx-runtime");
6893
+ var import_jsx_runtime56 = require("react/jsx-runtime");
6805
6894
  function ToolRail({
6806
6895
  groups,
6807
6896
  value,
@@ -6841,7 +6930,7 @@ function ToolRail({
6841
6930
  focusAt(enabled[enabled.length - 1]?.id);
6842
6931
  }
6843
6932
  };
6844
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6933
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
6845
6934
  "div",
6846
6935
  {
6847
6936
  role: "toolbar",
@@ -6850,8 +6939,8 @@ function ToolRail({
6850
6939
  "data-matrx-tool-rail": "",
6851
6940
  "data-orientation": orientation,
6852
6941
  className: cn("flex w-fit shrink-0 items-center gap-1", vertical ? "flex-col" : "flex-row", className),
6853
- children: groups.map((group, gi) => /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(React35.Fragment, { children: [
6854
- gi > 0 ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6942
+ children: groups.map((group, gi) => /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(React35.Fragment, { children: [
6943
+ gi > 0 ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
6855
6944
  "div",
6856
6945
  {
6857
6946
  role: "separator",
@@ -6863,8 +6952,8 @@ function ToolRail({
6863
6952
  const on = tool.id === value;
6864
6953
  const Icon3 = tool.icon;
6865
6954
  const name = tool.shortcut ? `${tool.label} (${tool.shortcut})` : tool.label;
6866
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(Tooltip, { children: [
6867
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6955
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(Tooltip, { children: [
6956
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
6868
6957
  Button2,
6869
6958
  {
6870
6959
  ref: (el) => {
@@ -6872,7 +6961,7 @@ function ToolRail({
6872
6961
  else refs.current.delete(tool.id);
6873
6962
  },
6874
6963
  variant: on ? "primary" : "quiet",
6875
- icon: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Icon3, {}),
6964
+ icon: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Icon3, {}),
6876
6965
  "aria-label": name,
6877
6966
  pressed: on,
6878
6967
  disabled: tool.disabled,
@@ -6883,7 +6972,7 @@ function ToolRail({
6883
6972
  onClick: () => onValueChange(on && allowDeselect ? null : tool.id, tool)
6884
6973
  }
6885
6974
  ) }),
6886
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(TooltipContent, { side: vertical ? "right" : "bottom", sideOffset: 6, children: name })
6975
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(TooltipContent, { side: vertical ? "right" : "bottom", sideOffset: 6, children: name })
6887
6976
  ] }, tool.id);
6888
6977
  })
6889
6978
  ] }, gi))
@@ -6963,7 +7052,7 @@ function formatPageRanges(pages) {
6963
7052
  }
6964
7053
 
6965
7054
  // src/controls/page-range-input.tsx
6966
- var import_jsx_runtime56 = require("react/jsx-runtime");
7055
+ var import_jsx_runtime57 = require("react/jsx-runtime");
6967
7056
  function PageRangeInput({
6968
7057
  value,
6969
7058
  onChange,
@@ -6980,8 +7069,8 @@ function PageRangeInput({
6980
7069
  const parsed = React36.useMemo(() => parsePageRanges(value, pageCount), [value, pageCount]);
6981
7070
  const first = parsed.issues[0];
6982
7071
  const hint = parsed.empty ? `${pageCount} page${pageCount === 1 ? "" : "s"}` : first ? first.hint : `${parsed.pages.length} page${parsed.pages.length === 1 ? "" : "s"}: ${formatPageRanges(parsed.pages)}`;
6983
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: cn("flex min-w-0 flex-col gap-1", className), "data-matrx-page-range-input": "", children: [
6984
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
7072
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: cn("flex min-w-0 flex-col gap-1", className), "data-matrx-page-range-input": "", children: [
7073
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
6985
7074
  Input,
6986
7075
  {
6987
7076
  id,
@@ -7000,7 +7089,7 @@ function PageRangeInput({
7000
7089
  }
7001
7090
  }
7002
7091
  ),
7003
- /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
7092
+ /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
7004
7093
  "p",
7005
7094
  {
7006
7095
  id: hintId,
@@ -7015,7 +7104,7 @@ function PageRangeInput({
7015
7104
 
7016
7105
  // src/controls/opacity-slider.tsx
7017
7106
  var React37 = __toESM(require("react"), 1);
7018
- var import_jsx_runtime57 = require("react/jsx-runtime");
7107
+ var import_jsx_runtime58 = require("react/jsx-runtime");
7019
7108
  var clamp = (n, lo, hi) => Math.min(hi, Math.max(lo, n));
7020
7109
  var toPercent = (v) => Math.round(v * 100);
7021
7110
  function OpacitySlider({
@@ -7035,8 +7124,8 @@ function OpacitySlider({
7035
7124
  }
7036
7125
  setDraft(null);
7037
7126
  };
7038
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: cn("flex min-w-0 items-center gap-2", className), "data-matrx-opacity-slider": "", children: [
7039
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
7127
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: cn("flex min-w-0 items-center gap-2", className), "data-matrx-opacity-slider": "", children: [
7128
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
7040
7129
  Slider,
7041
7130
  {
7042
7131
  className: "min-w-0 flex-1",
@@ -7049,8 +7138,8 @@ function OpacitySlider({
7049
7138
  onValueChange: ([v]) => onChange(clamp((v ?? 0) / 100, min, max))
7050
7139
  }
7051
7140
  ),
7052
- /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "flex w-16 shrink-0 items-center gap-1", style: { ["--matrx-control-field-min"]: "0px" }, children: [
7053
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
7141
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "flex w-16 shrink-0 items-center gap-1", style: { ["--matrx-control-field-min"]: "0px" }, children: [
7142
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
7054
7143
  Input,
7055
7144
  {
7056
7145
  numeric: true,
@@ -7069,14 +7158,14 @@ function OpacitySlider({
7069
7158
  }
7070
7159
  }
7071
7160
  ),
7072
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { "aria-hidden": true, className: "text-xs text-muted-foreground", children: "%" })
7161
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { "aria-hidden": true, className: "text-xs text-muted-foreground", children: "%" })
7073
7162
  ] })
7074
7163
  ] });
7075
7164
  }
7076
7165
 
7077
7166
  // src/controls/color-swatch-row.tsx
7078
7167
  var React38 = __toESM(require("react"), 1);
7079
- var import_jsx_runtime58 = require("react/jsx-runtime");
7168
+ var import_jsx_runtime59 = require("react/jsx-runtime");
7080
7169
  function ColorSwatchRow({
7081
7170
  colors,
7082
7171
  value,
@@ -7095,7 +7184,7 @@ function ColorSwatchRow({
7095
7184
  refs.current[i]?.focus();
7096
7185
  onChange(c.value, c);
7097
7186
  };
7098
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
7187
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
7099
7188
  "div",
7100
7189
  {
7101
7190
  role: "radiogroup",
@@ -7105,7 +7194,7 @@ function ColorSwatchRow({
7105
7194
  "data-matrx-color-swatch-row": "",
7106
7195
  children: colors.map((c, i) => {
7107
7196
  const on = i === chosen;
7108
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
7197
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
7109
7198
  "button",
7110
7199
  {
7111
7200
  ref: (el) => {
@@ -7143,7 +7232,7 @@ function ColorSwatchRow({
7143
7232
  on && "ring-2 ring-foreground ring-offset-1 ring-offset-background"
7144
7233
  ),
7145
7234
  style: { backgroundColor: c.value },
7146
- children: on ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(RadixCheckIcon, { className: "size-3 mix-blend-difference text-white" }) : null
7235
+ children: on ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(RadixCheckIcon, { className: "size-3 mix-blend-difference text-white" }) : null
7147
7236
  },
7148
7237
  `${c.value}-${i}`
7149
7238
  );
@@ -7154,7 +7243,7 @@ function ColorSwatchRow({
7154
7243
 
7155
7244
  // src/controls/anchored-toolbar.tsx
7156
7245
  var React39 = __toESM(require("react"), 1);
7157
- var import_jsx_runtime59 = require("react/jsx-runtime");
7246
+ var import_jsx_runtime60 = require("react/jsx-runtime");
7158
7247
  function virtualFor(rect) {
7159
7248
  return {
7160
7249
  getBoundingClientRect: () => ({
@@ -7187,9 +7276,9 @@ function AnchoredToolbar({
7187
7276
  [x, y, w, h]
7188
7277
  );
7189
7278
  const visible = open && rect !== null;
7190
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(Popover, { open: visible, ...onOpenChange ? { onOpenChange } : {}, children: [
7191
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(PopoverAnchor, { virtualRef }),
7192
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
7279
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(Popover, { open: visible, ...onOpenChange ? { onOpenChange } : {}, children: [
7280
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(PopoverAnchor, { virtualRef }),
7281
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
7193
7282
  PopoverContent,
7194
7283
  {
7195
7284
  role: "toolbar",
@@ -7214,7 +7303,7 @@ function AnchoredToolbar({
7214
7303
  // src/controls/icon-select.tsx
7215
7304
  var React40 = __toESM(require("react"), 1);
7216
7305
  var import_outbound = require("@ai-matrx/kit/outbound");
7217
- var import_jsx_runtime60 = require("react/jsx-runtime");
7306
+ var import_jsx_runtime61 = require("react/jsx-runtime");
7218
7307
  function wantsNewTab(e) {
7219
7308
  return Boolean(e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || e.button === 1);
7220
7309
  }
@@ -7224,7 +7313,7 @@ var TRIGGER_SIZE = {
7224
7313
  };
7225
7314
  var TRIGGER_FACE = "h-7 w-7 justify-center border-none bg-muted px-0 focus:outline-none focus:ring-0";
7226
7315
  var IconSelectTrigger = React40.forwardRef(function IconSelectTrigger2({ icon, disabled, ariaLabel, size = "default", className, ...rest }, ref) {
7227
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
7316
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
7228
7317
  Button2,
7229
7318
  {
7230
7319
  ref,
@@ -7252,13 +7341,13 @@ function IconSelect({
7252
7341
  const [open, setOpen] = React40.useState(false);
7253
7342
  const skipSelectRef = React40.useRef(false);
7254
7343
  if (searchable) {
7255
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
7256
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(IconSelectTrigger, { icon, disabled, ariaLabel, size, className }) }),
7257
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(PopoverContent, { sizing: "content", className: "p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(Command, { children: [
7258
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CommandInput, { placeholder: searchPlaceholder, className: "h-9 text-sm" }),
7259
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(CommandList, { children: [
7260
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CommandEmpty, { children: "No results found." }),
7261
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CommandGroup, { className: "max-h-72 overflow-auto", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
7344
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(Popover, { open, onOpenChange: setOpen, children: [
7345
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(IconSelectTrigger, { icon, disabled, ariaLabel, size, className }) }),
7346
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(PopoverContent, { sizing: "content", className: "p-0", align: "start", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(Command, { children: [
7347
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CommandInput, { placeholder: searchPlaceholder, className: "h-9 text-sm" }),
7348
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(CommandList, { children: [
7349
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CommandEmpty, { children: "No results found." }),
7350
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(CommandGroup, { className: "max-h-72 overflow-auto", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
7262
7351
  CommandItem,
7263
7352
  {
7264
7353
  value: item.label,
@@ -7278,8 +7367,8 @@ function IconSelect({
7278
7367
  onValueChange?.(item.value);
7279
7368
  setOpen(false);
7280
7369
  },
7281
- children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "flex items-center", children: [
7282
- item.icon && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "mr-2", children: item.icon }),
7370
+ children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "flex items-center", children: [
7371
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "mr-2", children: item.icon }),
7283
7372
  item.label
7284
7373
  ] })
7285
7374
  },
@@ -7289,8 +7378,8 @@ function IconSelect({
7289
7378
  ] }) })
7290
7379
  ] });
7291
7380
  }
7292
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(Select, { ...value === void 0 ? {} : { value }, ...onValueChange ? { onValueChange } : {}, disabled, children: [
7293
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
7381
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(Select, { ...value === void 0 ? {} : { value }, ...onValueChange ? { onValueChange } : {}, disabled, children: [
7382
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
7294
7383
  SelectTrigger,
7295
7384
  {
7296
7385
  "aria-label": ariaLabel,
@@ -7299,7 +7388,7 @@ function IconSelect({
7299
7388
  children: icon
7300
7389
  }
7301
7390
  ),
7302
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(SelectContent, { children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(SelectGroup, { children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
7391
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(SelectContent, { children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(SelectGroup, { children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
7303
7392
  SelectItem,
7304
7393
  {
7305
7394
  value: item.value,
@@ -7309,8 +7398,8 @@ function IconSelect({
7309
7398
  (0, import_outbound.openOutbound)(item.href, "_blank", "noopener");
7310
7399
  }
7311
7400
  },
7312
- children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "flex items-center", children: [
7313
- item.icon && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "mr-2", children: item.icon }),
7401
+ children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "flex items-center", children: [
7402
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "mr-2", children: item.icon }),
7314
7403
  item.label
7315
7404
  ] })
7316
7405
  },
@@ -7328,10 +7417,10 @@ var import_notify3 = require("@ai-matrx/kit/notify");
7328
7417
  // src/collapsible.tsx
7329
7418
  var CollapsiblePrimitive = __toESM(require("@radix-ui/react-collapsible"), 1);
7330
7419
  var React41 = __toESM(require("react"), 1);
7331
- var import_jsx_runtime61 = require("react/jsx-runtime");
7420
+ var import_jsx_runtime62 = require("react/jsx-runtime");
7332
7421
  var Collapsible = CollapsiblePrimitive.Root;
7333
7422
  var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
7334
- var CollapsibleContent2 = React41.forwardRef(({ className, animated = true, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
7423
+ var CollapsibleContent2 = React41.forwardRef(({ className, animated = true, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
7335
7424
  CollapsiblePrimitive.CollapsibleContent,
7336
7425
  {
7337
7426
  ref,
@@ -7353,7 +7442,7 @@ var React43 = __toESM(require("react"), 1);
7353
7442
 
7354
7443
  // src/look.tsx
7355
7444
  var React42 = __toESM(require("react"), 1);
7356
- var import_jsx_runtime62 = require("react/jsx-runtime");
7445
+ var import_jsx_runtime63 = require("react/jsx-runtime");
7357
7446
  var CONTEXT_SLOT3 = /* @__PURE__ */ Symbol.for("ai-matrx.design-system.look-context");
7358
7447
  var registry3 = globalThis;
7359
7448
  var LookContext = registry3[CONTEXT_SLOT3] ??= React42.createContext("web");
@@ -7609,7 +7698,7 @@ function useDragMove(options) {
7609
7698
  }
7610
7699
 
7611
7700
  // src/dialog.tsx
7612
- var import_jsx_runtime63 = require("react/jsx-runtime");
7701
+ var import_jsx_runtime64 = require("react/jsx-runtime");
7613
7702
  var DialogWindowedByDefaultContext = React43.createContext(false);
7614
7703
  var Dialog = ({
7615
7704
  children,
@@ -7618,7 +7707,7 @@ var Dialog = ({
7618
7707
  const isMobile = (0, import_media_query.useIsMobile)();
7619
7708
  const desktopLook = useLook() === "desktop";
7620
7709
  const modal = desktopLook || (props.modal ?? isMobile);
7621
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogWindowedByDefaultContext.Provider, { value: !desktopLook && props.modal === void 0, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(RadixDialogModalProvider, { modal, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogPrimitive3.Root, { ...props, modal, children }) }) });
7710
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogWindowedByDefaultContext.Provider, { value: !desktopLook && props.modal === void 0, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(RadixDialogModalProvider, { modal, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogPrimitive3.Root, { ...props, modal, children }) }) });
7622
7711
  };
7623
7712
  Dialog.displayName = "Dialog";
7624
7713
  var DialogPortal = ({
@@ -7626,13 +7715,13 @@ var DialogPortal = ({
7626
7715
  ...props
7627
7716
  }) => {
7628
7717
  const resolved = usePortalContainer(container);
7629
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogPrimitive3.Portal, { container: resolved ?? null, ...props });
7718
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogPrimitive3.Portal, { container: resolved ?? null, ...props });
7630
7719
  };
7631
7720
  DialogPortal.displayName = "DialogPortal";
7632
7721
  var CONTEXT_SLOT4 = /* @__PURE__ */ Symbol.for("ai-matrx.design-system.dialog-container-context");
7633
7722
  var contextRegistry3 = globalThis;
7634
7723
  var DialogContainerContext = contextRegistry3[CONTEXT_SLOT4] ??= React43.createContext(null);
7635
- var DialogOverlay = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7724
+ var DialogOverlay = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
7636
7725
  DialogPrimitive3.Overlay,
7637
7726
  {
7638
7727
  ref,
@@ -7651,7 +7740,7 @@ DialogOverlay.displayName = DialogPrimitive3.Overlay.displayName;
7651
7740
  var DialogContentPrimitive = React43.forwardRef(({ onInteractOutside, onCloseAutoFocus, ...props }, ref) => {
7652
7741
  const isModal = useRadixDialogModal();
7653
7742
  useModalLayer(isModal);
7654
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7743
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
7655
7744
  DialogPrimitive3.Content,
7656
7745
  {
7657
7746
  ...props,
@@ -7749,9 +7838,9 @@ var DialogContent = React43.forwardRef(
7749
7838
  const closeSlot = useCloseSlot(showCloseButton && !desktopLook);
7750
7839
  const hasTitle = (0, import_react_tree3.treeContainsComponent)(children, DialogTitle) || (0, import_react_tree3.treeContainsComponent)(children, DialogPrimitive3.Title);
7751
7840
  const hasDescription = (0, import_react_tree3.treeContainsComponent)(children, DialogDescription) || (0, import_react_tree3.treeContainsComponent)(children, DialogPrimitive3.Description);
7752
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(DialogPortal, { container, children: [
7753
- isModal ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogOverlay, {}) : null,
7754
- /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
7841
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(DialogPortal, { container, children: [
7842
+ isModal ? /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogOverlay, {}) : null,
7843
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(
7755
7844
  DialogContentPrimitive,
7756
7845
  {
7757
7846
  ref: mergedRef,
@@ -7802,9 +7891,9 @@ var DialogContent = React43.forwardRef(
7802
7891
  ...hasDescription ? {} : { "aria-describedby": void 0 },
7803
7892
  ...props,
7804
7893
  children: [
7805
- hasTitle ? null : /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(VisuallyHidden2.Root, { children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogPrimitive3.Title, { children: "Dialog" }) }),
7806
- closeSlot.slot && !closeSlot.claimed ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CloseRow, {}) : null,
7807
- /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(CloseSlotProvider, { value: closeSlot.slot, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogContainerContext.Provider, { value: containerEl, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(DialogWindowHandleContext.Provider, { value: handle, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7894
+ hasTitle ? null : /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(VisuallyHidden2.Root, { children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogPrimitive3.Title, { children: "Dialog" }) }),
7895
+ closeSlot.slot && !closeSlot.claimed ? /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(CloseRow, {}) : null,
7896
+ /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(CloseSlotProvider, { value: closeSlot.slot, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogContainerContext.Provider, { value: containerEl, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(DialogWindowHandleContext.Provider, { value: handle, children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
7808
7897
  PortalContainerProvider,
7809
7898
  {
7810
7899
  container: containerEl ?? injectedContainer ?? null,
@@ -7823,7 +7912,7 @@ var DialogHeader = ({
7823
7912
  ...props
7824
7913
  }) => {
7825
7914
  const handle = React43.useContext(DialogWindowHandleContext);
7826
- return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7915
+ return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
7827
7916
  HeaderWithClose,
7828
7917
  {
7829
7918
  slotName: "dialog-header",
@@ -7843,7 +7932,7 @@ DialogHeader.displayName = "DialogHeader";
7843
7932
  var DialogFooter = ({
7844
7933
  className,
7845
7934
  ...props
7846
- }) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7935
+ }) => /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
7847
7936
  "div",
7848
7937
  {
7849
7938
  "data-slot": "dialog-footer",
@@ -7877,7 +7966,7 @@ var DialogFooter = ({
7877
7966
  }
7878
7967
  );
7879
7968
  DialogFooter.displayName = "DialogFooter";
7880
- var DialogTitle = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7969
+ var DialogTitle = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
7881
7970
  DialogPrimitive3.Title,
7882
7971
  {
7883
7972
  ref,
@@ -7887,7 +7976,7 @@ var DialogTitle = React43.forwardRef(({ className, ...props }, ref) => /* @__PUR
7887
7976
  }
7888
7977
  ));
7889
7978
  DialogTitle.displayName = DialogPrimitive3.Title.displayName;
7890
- var DialogDescription = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
7979
+ var DialogDescription = React43.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
7891
7980
  DialogPrimitive3.Description,
7892
7981
  {
7893
7982
  ref,
@@ -7899,7 +7988,7 @@ var DialogDescription = React43.forwardRef(({ className, ...props }, ref) => /*
7899
7988
  DialogDescription.displayName = DialogPrimitive3.Description.displayName;
7900
7989
 
7901
7990
  // src/icon-button.tsx
7902
- var import_jsx_runtime64 = require("react/jsx-runtime");
7991
+ var import_jsx_runtime65 = require("react/jsx-runtime");
7903
7992
  var VARIANT = {
7904
7993
  ghost: "quiet",
7905
7994
  outline: "outline",
@@ -7920,25 +8009,25 @@ function IconButton({
7920
8009
  "aria-label": ariaLabel,
7921
8010
  ...props
7922
8011
  }) {
7923
- const control = /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
8012
+ const control = /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
7924
8013
  Button2,
7925
8014
  {
7926
8015
  variant: VARIANT[variant],
7927
- icon: spinning ? /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Icon3, { className: MOTION_SPIN }) : /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Icon3, {}),
8016
+ icon: spinning ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Icon3, { className: MOTION_SPIN }) : /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Icon3, {}),
7928
8017
  ...glyphTone ? { glyphTone } : {},
7929
8018
  "aria-label": ariaLabel ?? tooltip ?? "Action",
7930
8019
  ...props
7931
8020
  }
7932
8021
  );
7933
8022
  if (!tooltip) return control;
7934
- return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(Tooltip, { children: [
7935
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(TooltipTrigger, { asChild: true, children: control }),
7936
- /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(TooltipContent, { side: tooltipSide2, align: tooltipAlign, className: "z-[9999]", sideOffset: tooltipOffset, children: tooltip })
8023
+ return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(Tooltip, { children: [
8024
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(TooltipTrigger, { asChild: true, children: control }),
8025
+ /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(TooltipContent, { side: tooltipSide2, align: tooltipAlign, className: "z-[9999]", sideOffset: tooltipOffset, children: tooltip })
7937
8026
  ] });
7938
8027
  }
7939
8028
 
7940
8029
  // src/controls/advanced-collapsible.tsx
7941
- var import_jsx_runtime65 = require("react/jsx-runtime");
8030
+ var import_jsx_runtime66 = require("react/jsx-runtime");
7942
8031
  function AdvancedCollapsible({
7943
8032
  icon,
7944
8033
  title,
@@ -7978,29 +8067,29 @@ function AdvancedCollapsible({
7978
8067
  if (!landed) void (0, import_clipboard_fallback_opener3.openClipboardFallback)(text);
7979
8068
  else onCopy?.();
7980
8069
  };
7981
- const actions = /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center justify-end gap-2", children: [
7982
- onSave && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
8070
+ const actions = /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex items-center justify-end gap-2", children: [
8071
+ onSave && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
7983
8072
  ActionFeedbackButton,
7984
8073
  {
7985
- icon: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(SaveIcon, {}),
8074
+ icon: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(SaveIcon, {}),
7986
8075
  glyphTone: "info",
7987
8076
  tooltip: saveTooltip,
7988
8077
  successTooltip: "Saved!",
7989
8078
  onClick: onSave
7990
8079
  }
7991
8080
  ),
7992
- onReset && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
8081
+ onReset && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
7993
8082
  ActionFeedbackButton,
7994
8083
  {
7995
- icon: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(RefreshCwIcon, {}),
8084
+ icon: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(RefreshCwIcon, {}),
7996
8085
  glyphTone: "warning",
7997
8086
  tooltip: resetTooltip,
7998
8087
  successTooltip: "Reset!",
7999
8088
  onClick: onReset
8000
8089
  }
8001
8090
  ),
8002
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(IconButton, { icon: CopyIcon, tooltip: copyTooltip, onClick: () => void handleCopy() }),
8003
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
8091
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(IconButton, { icon: CopyIcon, tooltip: copyTooltip, onClick: () => void handleCopy() }),
8092
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
8004
8093
  IconButton,
8005
8094
  {
8006
8095
  icon: isFullScreen ? Minimize2Icon : Maximize2Icon,
@@ -8011,20 +8100,20 @@ function AdvancedCollapsible({
8011
8100
  )
8012
8101
  ] });
8013
8102
  const heading = typeof title === "string" ? title : "Content";
8014
- return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
8015
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
8103
+ return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_jsx_runtime66.Fragment, { children: [
8104
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(
8016
8105
  Collapsible,
8017
8106
  {
8018
8107
  open: isOpen,
8019
8108
  onOpenChange: handleOpenChange,
8020
8109
  className: cn("w-full rounded-xl border border-border shadow-sm", className),
8021
8110
  children: [
8022
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(CollapsibleTrigger2, { className: "relative flex w-full items-center justify-between rounded-t-xl px-4 py-3 font-medium hover:bg-muted", children: [
8023
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center gap-2", children: [
8111
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(CollapsibleTrigger2, { className: "relative flex w-full items-center justify-between rounded-t-xl px-4 py-3 font-medium hover:bg-muted", children: [
8112
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex items-center gap-2", children: [
8024
8113
  icon,
8025
- typeof title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { children: title }) : title
8114
+ typeof title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { children: title }) : title
8026
8115
  ] }),
8027
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
8116
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
8028
8117
  ChevronDownIcon,
8029
8118
  {
8030
8119
  className: cn(
@@ -8034,27 +8123,27 @@ function AdvancedCollapsible({
8034
8123
  }
8035
8124
  )
8036
8125
  ] }),
8037
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(CollapsibleContent2, { children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "relative", children: [
8038
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "absolute left-8 right-8 top-0 h-px bg-border" }),
8039
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { ref: contentRef, className: "p-4", children }),
8040
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "mb-1 mr-1 mt-2", children: actions })
8126
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(CollapsibleContent2, { children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "relative", children: [
8127
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "absolute left-8 right-8 top-0 h-px bg-border" }),
8128
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { ref: contentRef, className: "p-4", children }),
8129
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "mb-1 mr-1 mt-2", children: actions })
8041
8130
  ] }) })
8042
8131
  ]
8043
8132
  }
8044
8133
  ),
8045
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Dialog, { open: isFullScreen, onOpenChange: setIsFullScreen, children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(DialogContent, { size: "full", height: "tall", children: [
8046
- /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(DialogHeader, { children: [
8047
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(DialogTitle, { children: fullScreenTitle || heading }),
8048
- fullScreenDescription ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(DialogDescription, { children: fullScreenDescription }) : null
8134
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Dialog, { open: isFullScreen, onOpenChange: setIsFullScreen, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(DialogContent, { size: "full", height: "tall", children: [
8135
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(DialogHeader, { children: [
8136
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(DialogTitle, { children: fullScreenTitle || heading }),
8137
+ fullScreenDescription ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(DialogDescription, { children: fullScreenDescription }) : null
8049
8138
  ] }),
8050
8139
  actions,
8051
- /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { ref: fullRef, className: "min-h-0 flex-1 overflow-auto p-4", children })
8140
+ /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { ref: fullRef, className: "min-h-0 flex-1 overflow-auto p-4", children })
8052
8141
  ] }) })
8053
8142
  ] });
8054
8143
  }
8055
8144
 
8056
8145
  // src/controls/empty-state-card.tsx
8057
- var import_jsx_runtime66 = require("react/jsx-runtime");
8146
+ var import_jsx_runtime67 = require("react/jsx-runtime");
8058
8147
  var TONE3 = {
8059
8148
  primary: { data: "primary", button: "primary" },
8060
8149
  success: { data: "success", button: "outline" }
@@ -8069,12 +8158,12 @@ function EmptyStateCard({
8069
8158
  tone: tone2 = "primary"
8070
8159
  }) {
8071
8160
  const t = TONE3[tone2];
8072
- return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { "data-tone": t.data, className: "matrx-hue-card flex flex-col items-center justify-center px-6 py-12 text-center", children: [
8073
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "matrx-hue-icon mb-6 rounded-full p-6", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Icon3, { className: "h-12 w-12", strokeWidth: 1.5 }) }),
8074
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("h3", { className: cn("mb-3 text-xl font-semibold", tone2 === "success" ? "text-success-ink" : "text-foreground"), children: title }),
8075
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("p", { className: "mb-8 max-w-md text-muted-foreground", children: description }),
8076
- buttonText && /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex flex-col gap-4 sm:flex-row", children: [
8077
- /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Button2, { variant: t.button, ...tone2 === "success" ? { tone: "success" } : {}, ...onButtonClick ? { onClick: onButtonClick } : {}, children: buttonText }),
8161
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { "data-tone": t.data, className: "matrx-hue-card flex flex-col items-center justify-center px-6 py-12 text-center", children: [
8162
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "matrx-hue-icon mb-6 rounded-full p-6", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Icon3, { className: "h-12 w-12", strokeWidth: 1.5 }) }),
8163
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h3", { className: cn("mb-3 text-xl font-semibold", tone2 === "success" ? "text-success-ink" : "text-foreground"), children: title }),
8164
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "mb-8 max-w-md text-muted-foreground", children: description }),
8165
+ buttonText && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex flex-col gap-4 sm:flex-row", children: [
8166
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Button2, { variant: t.button, ...tone2 === "success" ? { tone: "success" } : {}, ...onButtonClick ? { onClick: onButtonClick } : {}, children: buttonText }),
8078
8167
  secondaryButton
8079
8168
  ] })
8080
8169
  ] });
@@ -8082,7 +8171,7 @@ function EmptyStateCard({
8082
8171
 
8083
8172
  // src/controls/hue-cards.tsx
8084
8173
  var React45 = __toESM(require("react"), 1);
8085
- var import_jsx_runtime67 = require("react/jsx-runtime");
8174
+ var import_jsx_runtime68 = require("react/jsx-runtime");
8086
8175
  var HUE_TONE = {
8087
8176
  indigo: "indigo",
8088
8177
  emerald: "emerald",
@@ -8116,7 +8205,7 @@ function Destination({
8116
8205
  children
8117
8206
  }) {
8118
8207
  if (path) {
8119
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
8208
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
8120
8209
  HostLink,
8121
8210
  {
8122
8211
  href: path,
@@ -8127,7 +8216,7 @@ function Destination({
8127
8216
  }
8128
8217
  );
8129
8218
  }
8130
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { ...className ? { className } : {}, ...onClick ? { onClick } : {}, children });
8219
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { ...className ? { className } : {}, ...onClick ? { onClick } : {}, children });
8131
8220
  }
8132
8221
  var SIZE_PADDING = {
8133
8222
  xs: "p-3",
@@ -8150,19 +8239,19 @@ function HueCard({
8150
8239
  external = false
8151
8240
  }) {
8152
8241
  if (compact) {
8153
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Destination, { path, onClick, external, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
8242
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Destination, { path, onClick, external, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
8154
8243
  "div",
8155
8244
  {
8156
8245
  "data-tone": tone(color),
8157
8246
  className: cn("matrx-hue-card flex cursor-pointer select-none flex-col items-center gap-1.5", className),
8158
8247
  children: [
8159
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "matrx-hue-squircle flex aspect-square w-full max-w-[62px] items-center justify-center rounded-[22%] shadow-sm transition-colors", children: sizedIcon(icon, 36) }),
8160
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "type-meta w-full truncate px-0.5 text-center font-medium leading-tight text-foreground", children: title })
8248
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "matrx-hue-squircle flex aspect-square w-full max-w-[62px] items-center justify-center rounded-[22%] shadow-sm transition-colors", children: sizedIcon(icon, 36) }),
8249
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "type-meta w-full truncate px-0.5 text-center font-medium leading-tight text-foreground", children: title })
8161
8250
  ]
8162
8251
  }
8163
8252
  ) });
8164
8253
  }
8165
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Destination, { path, onClick, external, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
8254
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Destination, { path, onClick, external, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
8166
8255
  "div",
8167
8256
  {
8168
8257
  "data-tone": tone(color),
@@ -8171,10 +8260,10 @@ function HueCard({
8171
8260
  SIZE_PADDING[size],
8172
8261
  className
8173
8262
  ),
8174
- children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex flex-col items-center space-y-3 text-center", children: [
8175
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "matrx-hue-icon rounded-full p-3", children: sizedIcon(icon, 28) }),
8176
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h3", { className: "text-lg font-semibold", children: title }),
8177
- description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-body text-muted-foreground", children: description }),
8263
+ children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex flex-col items-center space-y-3 text-center", children: [
8264
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "matrx-hue-icon rounded-full p-3", children: sizedIcon(icon, 28) }),
8265
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h3", { className: "text-lg font-semibold", children: title }),
8266
+ description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-body text-muted-foreground", children: description }),
8178
8267
  descriptionNode && !description && descriptionNode
8179
8268
  ] })
8180
8269
  }
@@ -8201,12 +8290,12 @@ function HueGrid({
8201
8290
  compact = false
8202
8291
  }) {
8203
8292
  const colsClass = compact ? "grid-cols-4" : GRID_COLUMNS[Math.min(6, Math.max(1, columns))];
8204
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className, children: [
8205
- title && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h2", { className: "mb-4 text-base font-semibold", children: title }),
8206
- description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-body mb-4 text-muted-foreground", children: description }),
8207
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: cn("grid", compact ? "gap-2" : "gap-4", colsClass), children: [
8208
- items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(HueCard, { ...item, compact, className: cn(cardClassName, item.className) }, `card-${index}`)),
8209
- showAddButton && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
8293
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className, children: [
8294
+ title && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h2", { className: "mb-4 text-base font-semibold", children: title }),
8295
+ description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-body mb-4 text-muted-foreground", children: description }),
8296
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: cn("grid", compact ? "gap-2" : "gap-4", colsClass), children: [
8297
+ items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(HueCard, { ...item, compact, className: cn(cardClassName, item.className) }, `card-${index}`)),
8298
+ showAddButton && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
8210
8299
  "button",
8211
8300
  {
8212
8301
  type: "button",
@@ -8216,8 +8305,8 @@ function HueGrid({
8216
8305
  cardClassName
8217
8306
  ),
8218
8307
  children: [
8219
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "rounded-full bg-muted p-3 text-muted-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PlusIcon, { className: "h-7 w-7" }) }),
8220
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "text-lg font-semibold", children: addButtonText })
8308
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "rounded-full bg-muted p-3 text-muted-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(PlusIcon, { className: "h-7 w-7" }) }),
8309
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "text-lg font-semibold", children: addButtonText })
8221
8310
  ]
8222
8311
  }
8223
8312
  )
@@ -8232,12 +8321,12 @@ function HueRow({
8232
8321
  color,
8233
8322
  path,
8234
8323
  className,
8235
- rightIcon = /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ChevronRightIcon, { className: "h-5 w-5 text-muted-foreground" }),
8324
+ rightIcon = /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ChevronRightIcon, { className: "h-5 w-5 text-muted-foreground" }),
8236
8325
  onClick,
8237
8326
  showBorder = true,
8238
8327
  isLast = false
8239
8328
  }) {
8240
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Destination, { path, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
8329
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Destination, { path, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
8241
8330
  "div",
8242
8331
  {
8243
8332
  "data-tone": tone(color),
@@ -8247,11 +8336,11 @@ function HueRow({
8247
8336
  className
8248
8337
  ),
8249
8338
  children: [
8250
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-center", children: [
8251
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "matrx-hue-icon mr-4 rounded-lg p-2", children: sizedIcon(icon, 20) }),
8252
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { children: [
8253
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h3", { className: "font-medium", children: title }),
8254
- description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-body text-muted-foreground", children: description }),
8339
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-center", children: [
8340
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "matrx-hue-icon mr-4 rounded-lg p-2", children: sizedIcon(icon, 20) }),
8341
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
8342
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h3", { className: "font-medium", children: title }),
8343
+ description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-body text-muted-foreground", children: description }),
8255
8344
  descriptionNode && !description && descriptionNode
8256
8345
  ] })
8257
8346
  ] }),
@@ -8269,7 +8358,7 @@ function HueList({
8269
8358
  showBorders = true,
8270
8359
  showContainer = true
8271
8360
  }) {
8272
- const rows = items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
8361
+ const rows = items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
8273
8362
  HueRow,
8274
8363
  {
8275
8364
  ...item,
@@ -8279,14 +8368,14 @@ function HueList({
8279
8368
  },
8280
8369
  `row-${index}`
8281
8370
  ));
8282
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className, children: [
8283
- title && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h2", { className: "mb-4 text-base font-semibold", children: title }),
8284
- description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-body mb-4 text-muted-foreground", children: description }),
8285
- showContainer ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "rounded-xl bg-card shadow-md", children: rows }) : rows
8371
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className, children: [
8372
+ title && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h2", { className: "mb-4 text-base font-semibold", children: title }),
8373
+ description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-body mb-4 text-muted-foreground", children: description }),
8374
+ showContainer ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "rounded-xl bg-card shadow-md", children: rows }) : rows
8286
8375
  ] });
8287
8376
  }
8288
8377
  function IosWidget({ title, description, icon, color, path, badge, className, onClick }) {
8289
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Destination, { path, onClick, className: "contents", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
8378
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Destination, { path, onClick, className: "contents", children: /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(
8290
8379
  "div",
8291
8380
  {
8292
8381
  "data-tone": tone(color),
@@ -8295,13 +8384,13 @@ function IosWidget({ title, description, icon, color, path, badge, className, on
8295
8384
  className
8296
8385
  ),
8297
8386
  children: [
8298
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex items-start justify-between", children: [
8299
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { children: sizedIcon(icon, 32) }),
8300
- badge && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "type-meta rounded-full bg-black/25 px-2 py-0.5 font-semibold leading-tight", children: badge })
8387
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "flex items-start justify-between", children: [
8388
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { children: sizedIcon(icon, 32) }),
8389
+ badge && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "type-meta rounded-full bg-black/25 px-2 py-0.5 font-semibold leading-tight", children: badge })
8301
8390
  ] }),
8302
- /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { children: [
8303
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-title line-clamp-2 leading-tight", children: title }),
8304
- description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-meta mt-0.5 line-clamp-2 leading-tight", children: description })
8391
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { children: [
8392
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-title line-clamp-2 leading-tight", children: title }),
8393
+ description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-meta mt-0.5 line-clamp-2 leading-tight", children: description })
8305
8394
  ] })
8306
8395
  ]
8307
8396
  }
@@ -8312,21 +8401,21 @@ function TileCard({ icon, title, description, onClick, href, className }) {
8312
8401
  "flex h-64 cursor-pointer flex-col items-center justify-center space-y-6 rounded-xl border-2 border-border bg-muted p-4 text-xl transition-colors hover:border-primary hover:bg-accent",
8313
8402
  className
8314
8403
  );
8315
- const content = /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
8316
- icon && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "h-12 w-12 text-primary-ink", children: icon }),
8317
- title && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "font-medium text-primary-ink", children: title }),
8318
- description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "type-secondary mt-1 text-center text-muted-foreground", children: description })
8404
+ const content = /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
8405
+ icon && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "h-12 w-12 text-primary-ink", children: icon }),
8406
+ title && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "font-medium text-primary-ink", children: title }),
8407
+ description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "type-secondary mt-1 text-center text-muted-foreground", children: description })
8319
8408
  ] });
8320
- return href ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(HostLink, { href, className: face, children: content }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { onClick, className: face, children: content });
8409
+ return href ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(HostLink, { href, className: face, children: content }) : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { onClick, className: face, children: content });
8321
8410
  }
8322
8411
  var TILE_COLUMNS = { 1: "md:grid-cols-1", 2: "md:grid-cols-2", 3: "md:grid-cols-3", 4: "md:grid-cols-4" };
8323
8412
  function TileCardGrid({ title, description, cards, columns = 2, className }) {
8324
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: cn("w-full", className), children: [
8325
- (title || description) && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "pb-8 text-center", children: [
8326
- title && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("h2", { className: "text-2xl font-bold text-foreground md:text-3xl", children: title }),
8327
- description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("p", { className: "mt-2 text-muted-foreground", children: description })
8413
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: cn("w-full", className), children: [
8414
+ (title || description) && /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "pb-8 text-center", children: [
8415
+ title && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h2", { className: "text-2xl font-bold text-foreground md:text-3xl", children: title }),
8416
+ description && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { className: "mt-2 text-muted-foreground", children: description })
8328
8417
  ] }),
8329
- /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: cn("grid grid-cols-1 gap-6", TILE_COLUMNS[columns] ?? TILE_COLUMNS[2]), children: cards.map((card, index) => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(TileCard, { ...card }, index)) })
8418
+ /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: cn("grid grid-cols-1 gap-6", TILE_COLUMNS[columns] ?? TILE_COLUMNS[2]), children: cards.map((card, index) => /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(TileCard, { ...card }, index)) })
8330
8419
  ] });
8331
8420
  }
8332
8421
  //# sourceMappingURL=controls.cjs.map