@ai-matrx/design-system 0.86.332 → 0.86.334

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 (140) hide show
  1. package/CHANGELOG.md +28 -2
  2. package/dist/auth-gate-dialog.js +4 -4
  3. package/dist/carousel.js +18 -18
  4. package/dist/{chunk-MVGMI6UZ.js → chunk-3MQMVPKO.js} +5 -5
  5. package/dist/{chunk-2WL2SGKL.js → chunk-677JS6TX.js} +24 -10
  6. package/dist/chunk-677JS6TX.js.map +1 -0
  7. package/dist/{chunk-TBDMTCRW.js → chunk-6YZMGSQY.js} +10 -10
  8. package/dist/{chunk-OFJ5LGBU.js → chunk-7NEVJKDZ.js} +8 -8
  9. package/dist/{chunk-XTNAKJSH.js → chunk-B3LDW3IQ.js} +2 -2
  10. package/dist/{chunk-VTJWQPYR.js → chunk-BM2YYBUO.js} +5 -5
  11. package/dist/{chunk-FTZCPGTH.js → chunk-CFCWQDGC.js} +4 -4
  12. package/dist/{chunk-CN7C4KQB.js → chunk-CH2NWSES.js} +2 -2
  13. package/dist/{chunk-CJCUD62M.js → chunk-CSSD6NS4.js} +5 -5
  14. package/dist/{chunk-W3QSRJ3O.js → chunk-E4GS5QH7.js} +7 -7
  15. package/dist/{chunk-O4KANICE.js → chunk-FRJ4PPA2.js} +5 -5
  16. package/dist/{chunk-4PCLJAW2.js → chunk-FXT7PZAF.js} +5 -14
  17. package/dist/chunk-FXT7PZAF.js.map +1 -0
  18. package/dist/{chunk-D45XDOJS.js → chunk-GHPUO3O7.js} +2 -2
  19. package/dist/{chunk-RPUC5MNH.js → chunk-GLZJ7WZK.js} +3 -3
  20. package/dist/{chunk-VKWQTSB6.js → chunk-HEFTQUJ5.js} +6 -6
  21. package/dist/{chunk-KWBYKUKP.js → chunk-J6637L6D.js} +4 -4
  22. package/dist/chunk-KGW373MK.js +21 -0
  23. package/dist/chunk-KGW373MK.js.map +1 -0
  24. package/dist/{chunk-5LT34PFX.js → chunk-MEJVHDYJ.js} +18 -18
  25. package/dist/{chunk-PPB52S7F.js → chunk-MFUNGDHO.js} +7 -7
  26. package/dist/{chunk-LCPHFONA.js → chunk-MIJMP4WI.js} +5 -5
  27. package/dist/{chunk-XREKZXAL.js → chunk-SMJGESH7.js} +6 -6
  28. package/dist/{chunk-SNHCBHBE.js → chunk-U24MOJWK.js} +4 -4
  29. package/dist/{chunk-DO6G4EKJ.js → chunk-UWTODOMD.js} +2 -2
  30. package/dist/{chunk-BQR4N24F.js → chunk-VLLUUOYJ.js} +4 -4
  31. package/dist/{chunk-FD6V6JBN.js → chunk-VV6WZTH5.js} +8 -8
  32. package/dist/{chunk-LVM7XZRJ.js → chunk-WQ2QCMMA.js} +4 -4
  33. package/dist/{chunk-57OD2WTY.js → chunk-X6ZRHJQP.js} +6 -6
  34. package/dist/{chunk-PLFWDUJW.js → chunk-XEXSZBXV.js} +3 -3
  35. package/dist/{chunk-JSXNITMG.js → chunk-YC5GAO35.js} +2 -2
  36. package/dist/{chunk-5TF2AFDM.js → chunk-ZCRPESQX.js} +4 -4
  37. package/dist/{chunk-5IKQ6RU4.js → chunk-ZOQ2XKXF.js} +9 -9
  38. package/dist/clipboard-fallback-dialog.js +10 -10
  39. package/dist/controls.js +15 -15
  40. package/dist/data-table/data-row-inspector.js +15 -14
  41. package/dist/data-table/data-row-window.js +20 -19
  42. package/dist/data-table/index.cjs +16 -12
  43. package/dist/data-table/index.cjs.map +1 -1
  44. package/dist/data-table/index.js +37 -36
  45. package/dist/data-table/index.js.map +1 -1
  46. package/dist/data-table/layered-filter-builder.js +4 -4
  47. package/dist/data-table/pagination.js +8 -8
  48. package/dist/data-table/uuid-cell.js +8 -8
  49. package/dist/desktop.js +22 -22
  50. package/dist/email-input-dialog.js +7 -7
  51. package/dist/index.cjs +590 -397
  52. package/dist/index.cjs.map +1 -1
  53. package/dist/index.d.cts +120 -10
  54. package/dist/index.d.ts +120 -10
  55. package/dist/index.js +519 -348
  56. package/dist/index.js.map +1 -1
  57. package/dist/intro-stage.js +3 -3
  58. package/dist/item.cjs +33 -17
  59. package/dist/item.cjs.map +1 -1
  60. package/dist/item.d.cts +7 -1
  61. package/dist/item.d.ts +7 -1
  62. package/dist/item.js +32 -30
  63. package/dist/item.js.map +1 -1
  64. package/dist/lite-table.js +10 -10
  65. package/dist/menu-look.js +3 -3
  66. package/dist/record-list.cjs +16 -2
  67. package/dist/record-list.cjs.map +1 -1
  68. package/dist/record-list.d.cts +7 -1
  69. package/dist/record-list.d.ts +7 -1
  70. package/dist/record-list.js +13 -13
  71. package/dist/sandbox-gate-dialog.js +8 -8
  72. package/dist/scope-mismatch-dialog.js +7 -7
  73. package/dist/settings.cjs +16 -12
  74. package/dist/settings.cjs.map +1 -1
  75. package/dist/settings.js +20 -19
  76. package/dist/settings.js.map +1 -1
  77. package/dist/site-icon.js +2 -2
  78. package/dist/swipe-deck.js +1 -1
  79. package/dist/tap-shortcut.cjs +40 -0
  80. package/dist/tap-shortcut.cjs.map +1 -0
  81. package/dist/tap-shortcut.d.cts +13 -0
  82. package/dist/tap-shortcut.d.ts +13 -0
  83. package/dist/tap-shortcut.js +10 -0
  84. package/dist/tap-shortcut.js.map +1 -0
  85. package/dist/tap-target/ai-buttons.cjs +16 -12
  86. package/dist/tap-target/ai-buttons.cjs.map +1 -1
  87. package/dist/tap-target/ai-buttons.js +4 -3
  88. package/dist/tap-target/ai-buttons.js.map +1 -1
  89. package/dist/tap-target/buttons.cjs +16 -12
  90. package/dist/tap-target/buttons.cjs.map +1 -1
  91. package/dist/tap-target/buttons.d.cts +3 -5
  92. package/dist/tap-target/buttons.d.ts +3 -5
  93. package/dist/tap-target/buttons.js +4 -3
  94. package/dist/tap-target.cjs +16 -12
  95. package/dist/tap-target.cjs.map +1 -1
  96. package/dist/tap-target.d.cts +5 -7
  97. package/dist/tap-target.d.ts +5 -7
  98. package/dist/tap-target.js +6 -4
  99. package/dist/text-input-dialog.js +10 -10
  100. package/dist/thumbnail-grid.js +2 -2
  101. package/dist/transcript-scroll-nav.cjs +16 -12
  102. package/dist/transcript-scroll-nav.cjs.map +1 -1
  103. package/dist/transcript-scroll-nav.js +2 -1
  104. package/dist/transcript-scroll-nav.js.map +1 -1
  105. package/dist/value-prompts-dialog.js +5 -5
  106. package/dist/writing-field.cjs +16 -12
  107. package/dist/writing-field.cjs.map +1 -1
  108. package/dist/writing-field.js +21 -20
  109. package/dist/writing-field.js.map +1 -1
  110. package/package.json +12 -2
  111. package/dist/chunk-2WL2SGKL.js.map +0 -1
  112. package/dist/chunk-4PCLJAW2.js.map +0 -1
  113. /package/dist/{chunk-MVGMI6UZ.js.map → chunk-3MQMVPKO.js.map} +0 -0
  114. /package/dist/{chunk-TBDMTCRW.js.map → chunk-6YZMGSQY.js.map} +0 -0
  115. /package/dist/{chunk-OFJ5LGBU.js.map → chunk-7NEVJKDZ.js.map} +0 -0
  116. /package/dist/{chunk-XTNAKJSH.js.map → chunk-B3LDW3IQ.js.map} +0 -0
  117. /package/dist/{chunk-VTJWQPYR.js.map → chunk-BM2YYBUO.js.map} +0 -0
  118. /package/dist/{chunk-FTZCPGTH.js.map → chunk-CFCWQDGC.js.map} +0 -0
  119. /package/dist/{chunk-CN7C4KQB.js.map → chunk-CH2NWSES.js.map} +0 -0
  120. /package/dist/{chunk-CJCUD62M.js.map → chunk-CSSD6NS4.js.map} +0 -0
  121. /package/dist/{chunk-W3QSRJ3O.js.map → chunk-E4GS5QH7.js.map} +0 -0
  122. /package/dist/{chunk-O4KANICE.js.map → chunk-FRJ4PPA2.js.map} +0 -0
  123. /package/dist/{chunk-D45XDOJS.js.map → chunk-GHPUO3O7.js.map} +0 -0
  124. /package/dist/{chunk-RPUC5MNH.js.map → chunk-GLZJ7WZK.js.map} +0 -0
  125. /package/dist/{chunk-VKWQTSB6.js.map → chunk-HEFTQUJ5.js.map} +0 -0
  126. /package/dist/{chunk-KWBYKUKP.js.map → chunk-J6637L6D.js.map} +0 -0
  127. /package/dist/{chunk-5LT34PFX.js.map → chunk-MEJVHDYJ.js.map} +0 -0
  128. /package/dist/{chunk-PPB52S7F.js.map → chunk-MFUNGDHO.js.map} +0 -0
  129. /package/dist/{chunk-LCPHFONA.js.map → chunk-MIJMP4WI.js.map} +0 -0
  130. /package/dist/{chunk-XREKZXAL.js.map → chunk-SMJGESH7.js.map} +0 -0
  131. /package/dist/{chunk-SNHCBHBE.js.map → chunk-U24MOJWK.js.map} +0 -0
  132. /package/dist/{chunk-DO6G4EKJ.js.map → chunk-UWTODOMD.js.map} +0 -0
  133. /package/dist/{chunk-BQR4N24F.js.map → chunk-VLLUUOYJ.js.map} +0 -0
  134. /package/dist/{chunk-FD6V6JBN.js.map → chunk-VV6WZTH5.js.map} +0 -0
  135. /package/dist/{chunk-LVM7XZRJ.js.map → chunk-WQ2QCMMA.js.map} +0 -0
  136. /package/dist/{chunk-57OD2WTY.js.map → chunk-X6ZRHJQP.js.map} +0 -0
  137. /package/dist/{chunk-PLFWDUJW.js.map → chunk-XEXSZBXV.js.map} +0 -0
  138. /package/dist/{chunk-JSXNITMG.js.map → chunk-YC5GAO35.js.map} +0 -0
  139. /package/dist/{chunk-5TF2AFDM.js.map → chunk-ZCRPESQX.js.map} +0 -0
  140. /package/dist/{chunk-5IKQ6RU4.js.map → chunk-ZOQ2XKXF.js.map} +0 -0
package/dist/index.js CHANGED
@@ -1,4 +1,10 @@
1
1
  "use client";
2
+ import {
3
+ WritingBoxProvider,
4
+ WritingInputProvider,
5
+ useWritingBox,
6
+ useWritingInput
7
+ } from "./chunk-AJ6BAYEN.js";
2
8
  import {
3
9
  ARCHIVED_NEVER_DESTROYED,
4
10
  AppRail,
@@ -19,13 +25,10 @@ import {
19
25
  matchesOrganizationQuery,
20
26
  orderOrganizationsForPicker,
21
27
  organizationColor
22
- } from "./chunk-OFJ5LGBU.js";
28
+ } from "./chunk-7NEVJKDZ.js";
23
29
  import {
24
- WritingBoxProvider,
25
- WritingInputProvider,
26
- useWritingBox,
27
- useWritingInput
28
- } from "./chunk-AJ6BAYEN.js";
30
+ EditableLabel
31
+ } from "./chunk-J6637L6D.js";
29
32
  import {
30
33
  ErrorNotice,
31
34
  RELOAD_PAGE_LABEL,
@@ -40,7 +43,24 @@ import {
40
43
  isTimedOutError,
41
44
  readOf,
42
45
  readStatusOf
43
- } from "./chunk-FTZCPGTH.js";
46
+ } from "./chunk-CFCWQDGC.js";
47
+ import {
48
+ ContextMenu,
49
+ ContextMenuCheckboxItem,
50
+ ContextMenuContent,
51
+ ContextMenuGroup,
52
+ ContextMenuItem,
53
+ ContextMenuLabel,
54
+ ContextMenuPortal,
55
+ ContextMenuRadioGroup,
56
+ ContextMenuRadioItem,
57
+ ContextMenuSeparator,
58
+ ContextMenuShortcut,
59
+ ContextMenuSub,
60
+ ContextMenuSubContent,
61
+ ContextMenuSubTrigger,
62
+ ContextMenuTrigger
63
+ } from "./chunk-HEFTQUJ5.js";
44
64
  import {
45
65
  DecisionControl,
46
66
  IconButton,
@@ -50,13 +70,13 @@ import {
50
70
  countReadState,
51
71
  indicatorText,
52
72
  unavailableCountLabel
53
- } from "./chunk-5LT34PFX.js";
73
+ } from "./chunk-MEJVHDYJ.js";
54
74
  import {
55
75
  Collapsible,
56
76
  CollapsibleContent,
57
77
  CollapsibleTrigger
58
78
  } from "./chunk-6NOLVA4E.js";
59
- import "./chunk-D45XDOJS.js";
79
+ import "./chunk-GHPUO3O7.js";
60
80
  import {
61
81
  Slider
62
82
  } from "./chunk-ZRHVA3DL.js";
@@ -67,30 +87,10 @@ import {
67
87
  SiteIcon,
68
88
  resolveSiteIcon,
69
89
  siteHostname
70
- } from "./chunk-5TF2AFDM.js";
71
- import {
72
- EditableLabel
73
- } from "./chunk-KWBYKUKP.js";
74
- import {
75
- ContextMenu,
76
- ContextMenuCheckboxItem,
77
- ContextMenuContent,
78
- ContextMenuGroup,
79
- ContextMenuItem,
80
- ContextMenuLabel,
81
- ContextMenuPortal,
82
- ContextMenuRadioGroup,
83
- ContextMenuRadioItem,
84
- ContextMenuSeparator,
85
- ContextMenuShortcut,
86
- ContextMenuSub,
87
- ContextMenuSubContent,
88
- ContextMenuSubTrigger,
89
- ContextMenuTrigger
90
- } from "./chunk-VKWQTSB6.js";
90
+ } from "./chunk-ZCRPESQX.js";
91
91
  import {
92
92
  MatrxTableRowAlchemyProvider
93
- } from "./chunk-CN7C4KQB.js";
93
+ } from "./chunk-CH2NWSES.js";
94
94
  import {
95
95
  ARCHIVE_FILTER_LABELS,
96
96
  ARCHIVE_FILTER_VALUES,
@@ -109,7 +109,7 @@ import {
109
109
  BottomSheetBody,
110
110
  BottomSheetFooter,
111
111
  BottomSheetHeader
112
- } from "./chunk-LVM7XZRJ.js";
112
+ } from "./chunk-WQ2QCMMA.js";
113
113
  import {
114
114
  Command,
115
115
  CommandDialog,
@@ -120,7 +120,7 @@ import {
120
120
  CommandList,
121
121
  CommandSeparator,
122
122
  CommandShortcut
123
- } from "./chunk-LCPHFONA.js";
123
+ } from "./chunk-MIJMP4WI.js";
124
124
  import {
125
125
  AlertDialog,
126
126
  AlertDialogAction,
@@ -138,7 +138,7 @@ import {
138
138
  EmptyState,
139
139
  RowGroup,
140
140
  Tile
141
- } from "./chunk-PPB52S7F.js";
141
+ } from "./chunk-MFUNGDHO.js";
142
142
  import {
143
143
  Drawer,
144
144
  DrawerBody,
@@ -183,14 +183,13 @@ import {
183
183
  SheetTitle,
184
184
  SheetTrigger,
185
185
  sheetVariants
186
- } from "./chunk-JSXNITMG.js";
186
+ } from "./chunk-YC5GAO35.js";
187
+ import {
188
+ Checkbox
189
+ } from "./chunk-VLLUUOYJ.js";
187
190
  import {
188
191
  HostLink
189
192
  } from "./chunk-TH6DDCWF.js";
190
- import "./chunk-IMQ3RX35.js";
191
- import {
192
- Checkbox
193
- } from "./chunk-BQR4N24F.js";
194
193
  import {
195
194
  DRAG_IGNORE_SELECTOR,
196
195
  Dialog,
@@ -216,11 +215,12 @@ import {
216
215
  useDialogContainer,
217
216
  useDragMove,
218
217
  useLook
219
- } from "./chunk-DO6G4EKJ.js";
218
+ } from "./chunk-UWTODOMD.js";
219
+ import "./chunk-IMQ3RX35.js";
220
220
  import {
221
221
  MOBILE_BREAKPOINT,
222
222
  useIsMobile
223
- } from "./chunk-SNHCBHBE.js";
223
+ } from "./chunk-U24MOJWK.js";
224
224
  import {
225
225
  FLOATING_LAYER_ATTR,
226
226
  FloatingLayer,
@@ -243,16 +243,20 @@ import {
243
243
  DRAG_CURSORS,
244
244
  holdDragCursor
245
245
  } from "./chunk-LEPD6TV7.js";
246
- import "./chunk-O4KANICE.js";
246
+ import "./chunk-FRJ4PPA2.js";
247
+ import {
248
+ ALCHEMY_GLYPH_PATHS,
249
+ ALCHEMY_GLYPH_VIEWBOX
250
+ } from "./chunk-KPZX2M2C.js";
247
251
  import {
248
252
  TapTargetCopyButton,
249
253
  TapTargetLabeled,
250
254
  TapTargetSearchGroup
251
- } from "./chunk-RPUC5MNH.js";
255
+ } from "./chunk-GLZJ7WZK.js";
252
256
  import {
253
257
  TapDefaultVariant,
254
258
  useTapDefaultVariant
255
- } from "./chunk-XTNAKJSH.js";
259
+ } from "./chunk-B3LDW3IQ.js";
256
260
  import {
257
261
  TapSurface,
258
262
  TapTargetButton,
@@ -266,10 +270,9 @@ import {
266
270
  findPillInsetWarning,
267
271
  findTapPlacementWarning,
268
272
  findTapViolation,
269
- formatTapShortcut,
270
273
  layoutScale,
271
274
  useTapSurface
272
- } from "./chunk-4PCLJAW2.js";
275
+ } from "./chunk-FXT7PZAF.js";
273
276
  import {
274
277
  MissingTag,
275
278
  PropertyRow,
@@ -282,15 +285,14 @@ import {
282
285
  TableHeader,
283
286
  TableRow,
284
287
  useTableSize
285
- } from "./chunk-CJCUD62M.js";
286
- import {
287
- ALCHEMY_GLYPH_PATHS,
288
- ALCHEMY_GLYPH_VIEWBOX
289
- } from "./chunk-KPZX2M2C.js";
288
+ } from "./chunk-CSSD6NS4.js";
290
289
  import {
291
290
  getTapTargetLinkComponent,
292
291
  setTapTargetLinkComponent
293
292
  } from "./chunk-WFBPCMPF.js";
293
+ import {
294
+ formatTapShortcut
295
+ } from "./chunk-KGW373MK.js";
294
296
  import {
295
297
  Popover,
296
298
  PopoverAnchor,
@@ -301,26 +303,26 @@ import {
301
303
  RecordId,
302
304
  displayId,
303
305
  isRecordUuid
304
- } from "./chunk-W3QSRJ3O.js";
305
- import {
306
- Tooltip,
307
- TooltipContent,
308
- TooltipProvider,
309
- TooltipTrigger
310
- } from "./chunk-PIQJULQB.js";
306
+ } from "./chunk-E4GS5QH7.js";
311
307
  import {
312
308
  Badge,
313
309
  Button as Button2,
314
310
  Chip,
315
311
  ChipSet,
316
312
  Switch
317
- } from "./chunk-5IKQ6RU4.js";
318
- import "./chunk-BKCJUFD3.js";
313
+ } from "./chunk-ZOQ2XKXF.js";
319
314
  import {
320
315
  BasicTextarea,
321
316
  Textarea,
322
317
  TextareaWithPrefix
323
318
  } from "./chunk-BD77DHUO.js";
319
+ import "./chunk-BKCJUFD3.js";
320
+ import {
321
+ Tooltip,
322
+ TooltipContent,
323
+ TooltipProvider,
324
+ TooltipTrigger
325
+ } from "./chunk-PIQJULQB.js";
324
326
  import {
325
327
  NATIVE_TITLE_OPT_OUT_ATTR,
326
328
  acquireTitleTooltips
@@ -341,7 +343,7 @@ import {
341
343
  DropdownMenuSubContent,
342
344
  DropdownMenuSubTrigger,
343
345
  DropdownMenuTrigger
344
- } from "./chunk-57OD2WTY.js";
346
+ } from "./chunk-X6ZRHJQP.js";
345
347
  import {
346
348
  useScrollFade
347
349
  } from "./chunk-BNXNIN2S.js";
@@ -364,49 +366,31 @@ import {
364
366
  SelectTrigger,
365
367
  SelectValue,
366
368
  selectTriggerVariants
367
- } from "./chunk-XREKZXAL.js";
369
+ } from "./chunk-SMJGESH7.js";
370
+ import {
371
+ FIELD_SURFACE_CLASS
372
+ } from "./chunk-WAT2XW7L.js";
368
373
  import {
369
374
  Button,
370
375
  buttonVariants
371
376
  } from "./chunk-7IOSA55D.js";
372
- import {
373
- FIELD_SURFACE_CLASS
374
- } from "./chunk-WAT2XW7L.js";
375
377
  import "./chunk-FXXSZNER.js";
376
378
  import "./chunk-DGNHZBJY.js";
377
379
  import {
378
380
  PortalContainerProvider,
379
381
  usePortalContainer
380
382
  } from "./chunk-XIUVUL2Y.js";
381
- import {
382
- ALL_MOTION_CLASSES,
383
- CENTERED_DIALOG,
384
- FORBIDDEN_HOST_MOTION_UTILITIES,
385
- MOTION_BOTTOM_SHEET,
386
- MOTION_DIALOG,
387
- MOTION_HINT_BEACON,
388
- MOTION_OVERLAY,
389
- MOTION_POPPER,
390
- MOTION_PULSE,
391
- MOTION_SHEET,
392
- MOTION_SHIMMER,
393
- MOTION_SPIN,
394
- PANEL_MOTION_CLASS,
395
- PANEL_MOTION_DURATION_VAR,
396
- PANEL_MOTION_EASE_VAR,
397
- POPPER_OFFSET
398
- } from "./chunk-IMOOQQOO.js";
399
- import {
400
- cn
401
- } from "./chunk-M6KA5EHN.js";
402
383
  import {
403
384
  AtSignIcon,
404
385
  BadgeCheckIcon,
386
+ BellOffIcon,
405
387
  CheckIcon,
406
388
  ChevronDownIcon,
407
389
  ChevronRightIcon,
390
+ ClockIcon,
408
391
  CopyIcon,
409
392
  CopyPlusIcon,
393
+ CornerDownRightIcon,
410
394
  DownloadIcon,
411
395
  ExternalLinkIcon,
412
396
  GlobeIcon,
@@ -435,6 +419,27 @@ import {
435
419
  WorkflowIcon,
436
420
  XIcon
437
421
  } from "./chunk-YCUFQCJW.js";
422
+ import {
423
+ ALL_MOTION_CLASSES,
424
+ CENTERED_DIALOG,
425
+ FORBIDDEN_HOST_MOTION_UTILITIES,
426
+ MOTION_BOTTOM_SHEET,
427
+ MOTION_DIALOG,
428
+ MOTION_HINT_BEACON,
429
+ MOTION_OVERLAY,
430
+ MOTION_POPPER,
431
+ MOTION_PULSE,
432
+ MOTION_SHEET,
433
+ MOTION_SHIMMER,
434
+ MOTION_SPIN,
435
+ PANEL_MOTION_CLASS,
436
+ PANEL_MOTION_DURATION_VAR,
437
+ PANEL_MOTION_EASE_VAR,
438
+ POPPER_OFFSET
439
+ } from "./chunk-IMOOQQOO.js";
440
+ import {
441
+ cn
442
+ } from "./chunk-M6KA5EHN.js";
438
443
 
439
444
  // src/accordion.tsx
440
445
  import * as AccordionPrimitive from "@radix-ui/react-accordion";
@@ -2754,7 +2759,7 @@ import * as React16 from "react";
2754
2759
  import { createPortal } from "react-dom";
2755
2760
  import { openOutbound } from "@ai-matrx/kit/outbound";
2756
2761
  import { OutboundLink as OutboundLink2 } from "@ai-matrx/kit/outbound-react";
2757
- import { Fragment as Fragment2, jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
2762
+ import { Fragment as Fragment3, jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
2758
2763
  function defaultDensity(size) {
2759
2764
  return size === "xs" || size === "sm" ? "compact" : "comfortable";
2760
2765
  }
@@ -2827,7 +2832,7 @@ var PeekCard = React16.forwardRef((allProps, ref) => {
2827
2832
  // Every height is capped by the room the host left (`--matrx-peek-room`, set by the hover
2828
2833
  // and click hosts from the popper's available height), so a card that cannot fit above or
2829
2834
  // below its trigger shrinks and scrolls inside instead of leaving the screen.
2830
- ...height === "fixed" || loading ? { height: `min(${box.height}px, var(${PEEK_ROOM_VAR}, 100vh))` } : {
2835
+ ...height === "content" ? { maxHeight: `min(${box.height}px, var(${PEEK_ROOM_VAR}, 100vh))` } : height === "fixed" || loading ? { height: `min(${box.height}px, var(${PEEK_ROOM_VAR}, 100vh))` } : {
2831
2836
  minHeight: `min(${box.minHeight}px, var(${PEEK_ROOM_VAR}, 100vh))`,
2832
2837
  maxHeight: `min(${box.height}px, var(${PEEK_ROOM_VAR}, 100vh))`
2833
2838
  }
@@ -2846,7 +2851,7 @@ function PeekRule({ vertical = false }) {
2846
2851
  function PeekCardHeader({ title, subtitle, leading, trailing, pinned, id }) {
2847
2852
  const { density, window: window2 } = usePeekCard();
2848
2853
  const pad = PAD[density];
2849
- return /* @__PURE__ */ jsxs9(Fragment2, { children: [
2854
+ return /* @__PURE__ */ jsxs9(Fragment3, { children: [
2850
2855
  /* @__PURE__ */ jsxs9(
2851
2856
  "div",
2852
2857
  {
@@ -3144,16 +3149,44 @@ function recordDoors(doors) {
3144
3149
  href: door.href,
3145
3150
  newTab: door.newTab,
3146
3151
  inMenu: known.inMenu,
3147
- busy: door.busy
3152
+ busy: door.busy,
3153
+ menu: door.kind === "action" && door.menu?.length ? door.menu : void 0
3148
3154
  });
3149
3155
  }
3150
3156
  return out;
3151
3157
  }
3152
3158
  var PEEK_SHEET_FOOTER_SLOTS = 4;
3153
3159
  var PEEK_DOOR = "flex shrink-0 items-center justify-center rounded-md text-foreground transition-colors hover:bg-accent hover:text-primary disabled:text-disabled-foreground disabled:hover:bg-transparent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary";
3160
+ function MenuDoor({ action, menu, disabled }) {
3161
+ const { sheet } = usePeekCard();
3162
+ const [open, setOpen] = React16.useState(false);
3163
+ usePeekHoldWhile(open);
3164
+ const glyph = sheet ? /* @__PURE__ */ jsx19(action.icon, { className: "size-5" }) : /* @__PURE__ */ jsx19(action.icon, { className: "size-3.5" });
3165
+ return /* @__PURE__ */ jsxs9(DropdownMenu, { modal: false, open, onOpenChange: setOpen, children: [
3166
+ /* @__PURE__ */ jsx19(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx19(
3167
+ Button2,
3168
+ {
3169
+ type: "button",
3170
+ variant: "quiet",
3171
+ "aria-label": action.label,
3172
+ title: action.label,
3173
+ icon: action.busy ? /* @__PURE__ */ jsx19(Loader2Icon, { className: "animate-spin" }) : glyph,
3174
+ className: "shrink-0",
3175
+ disabled: disabled || action.busy,
3176
+ onClick: (event) => event.stopPropagation()
3177
+ }
3178
+ ) }),
3179
+ /* @__PURE__ */ jsx19(DropdownMenuContent, { align: "end", "data-peek-no-drag": "", children: menu.map((group, i) => /* @__PURE__ */ jsxs9(React16.Fragment, { children: [
3180
+ i > 0 ? /* @__PURE__ */ jsx19(DropdownMenuSeparator, {}) : null,
3181
+ group.label ? /* @__PURE__ */ jsx19(DropdownMenuLabel, { children: group.label }) : null,
3182
+ group.items.map((item) => /* @__PURE__ */ jsx19(DropdownMenuItem, { ...item.tone ? { tone: item.tone } : {}, onSelect: () => item.onSelect(), children: item.label }, item.key))
3183
+ ] }, `${group.label ?? ""}-${i}`)) })
3184
+ ] });
3185
+ }
3154
3186
  function FooterDoor({ action, disabled = false }) {
3155
3187
  const { sheet } = usePeekCard();
3156
3188
  const { Link } = useMatrxDataTableHost();
3189
+ if (action.menu) return /* @__PURE__ */ jsx19(MenuDoor, { action, menu: action.menu, disabled });
3157
3190
  const box = sheet ? "size-11" : "size-7";
3158
3191
  const glyph = /* @__PURE__ */ jsx19(action.icon, { className: sheet ? "size-5" : "size-3.5" });
3159
3192
  if (action.href && !disabled && !action.newTab && Link) {
@@ -3330,7 +3363,7 @@ function useDoorsThatFit(row, primaryRef, opts) {
3330
3363
  }, [row, primaryRef, doorPx, fixedDoors, fills, hasPrimary, sheet, actionCount]);
3331
3364
  return fit;
3332
3365
  }
3333
- function PeekCardFooter({ primary, onSettings, doors = [], copy, openHref }) {
3366
+ function PeekCardFooter({ primary, primaryAt, onSettings, doors = [], copy, openHref }) {
3334
3367
  const { density, size, orientation, loading, sheet } = usePeekCard();
3335
3368
  const row = React16.useRef(null);
3336
3369
  const primaryRef = React16.useRef(null);
@@ -3338,8 +3371,8 @@ function PeekCardFooter({ primary, onSettings, doors = [], copy, openHref }) {
3338
3371
  const [moreOpen, setMoreOpen] = React16.useState(false);
3339
3372
  const actions2 = recordDoors(doors);
3340
3373
  const open = openHref ? { icon: ExternalLinkIcon, label: "Open in new tab", href: openHref, newTab: true } : null;
3341
- const fixedDoors = [settings, copy, open].filter(Boolean).length;
3342
- const fills = Boolean(sheet) || orientation === "portrait";
3374
+ const fixedDoors = [settings, copy, open].filter(Boolean).length + actions2.filter((action) => action.menu).length;
3375
+ const fills = Boolean(sheet) || (primaryAt ?? (orientation === "portrait" ? "fill" : "end")) === "fill";
3343
3376
  const measured = useDoorsThatFit(row, primaryRef, {
3344
3377
  doorPx: sheet ? 44 : 28,
3345
3378
  fixedDoors,
@@ -3349,8 +3382,9 @@ function PeekCardFooter({ primary, onSettings, doors = [], copy, openHref }) {
3349
3382
  actionCount: actions2.length
3350
3383
  });
3351
3384
  const room = measured ?? (sheet ? PEEK_SHEET_FOOTER_SLOTS : PEEK_CARD_FOOTER_SLOTS[size]) - fixedDoors;
3352
- const inline = actions2.filter((action) => !action.inMenu);
3385
+ const inline = actions2.filter((action) => !action.inMenu && !action.menu);
3353
3386
  const menuOnly = actions2.filter((action) => action.inMenu);
3387
+ const menuDoors = actions2.filter((action) => action.menu);
3354
3388
  const inlineRoom = menuOnly.length ? Math.max(0, room - 1) : room;
3355
3389
  const shown = inline.length <= inlineRoom ? inline : inline.slice(0, Math.max(0, inlineRoom - (menuOnly.length ? 0 : 1)));
3356
3390
  const overflow = [...inline.slice(shown.length), ...menuOnly];
@@ -3363,7 +3397,9 @@ function PeekCardFooter({ primary, onSettings, doors = [], copy, openHref }) {
3363
3397
  variant: "primary",
3364
3398
  className: cn("mx-1", fills && "flex-1"),
3365
3399
  style: fills ? { minWidth: PEEK_PRIMARY_MIN_PX[sheet ? "sheet" : "card"] } : void 0,
3366
- disabled: loading,
3400
+ disabled: loading || primary.disabled || primary.busy,
3401
+ title: primary.title,
3402
+ icon: primary.busy ? /* @__PURE__ */ jsx19(Loader2Icon, { className: "animate-spin" }) : void 0,
3367
3403
  onClick: primary.onClick,
3368
3404
  children: primary.label
3369
3405
  }
@@ -3375,7 +3411,7 @@ function PeekCardFooter({ primary, onSettings, doors = [], copy, openHref }) {
3375
3411
  action.label
3376
3412
  ] }, `${action.label}-${i}`)) })
3377
3413
  ] }) : null;
3378
- return /* @__PURE__ */ jsxs9(Fragment2, { children: [
3414
+ return /* @__PURE__ */ jsxs9(Fragment3, { children: [
3379
3415
  sheet ? /* @__PURE__ */ jsx19("div", { "aria-hidden": true, className: "h-px shrink-0 bg-border" }) : /* @__PURE__ */ jsx19(PeekRule, {}),
3380
3416
  /* @__PURE__ */ jsxs9(
3381
3417
  "div",
@@ -3391,6 +3427,7 @@ function PeekCardFooter({ primary, onSettings, doors = [], copy, openHref }) {
3391
3427
  settings ? /* @__PURE__ */ jsx19(FooterDoor, { action: settings, disabled: loading }) : null,
3392
3428
  fills && primaryButton ? primaryButton : /* @__PURE__ */ jsx19("span", { className: "flex-1" }),
3393
3429
  more,
3430
+ menuDoors.map((action, i) => /* @__PURE__ */ jsx19(FooterDoor, { action, disabled: loading }, `menu-${action.label}-${i}`)),
3394
3431
  shown.map((action, i) => /* @__PURE__ */ jsx19(FooterDoor, { action, disabled: loading }, `${action.label}-${i}`)),
3395
3432
  copy ? /* @__PURE__ */ jsx19(PeekCopyDoor, { copy, disabled: loading }) : null,
3396
3433
  open ? /* @__PURE__ */ jsx19(FooterDoor, { action: open, disabled: loading }) : null,
@@ -3432,7 +3469,7 @@ function SheetHost({ trigger, children, label = "Details", open, onOpenChange, s
3432
3469
  setOwn(next);
3433
3470
  onOpenChange?.(next);
3434
3471
  };
3435
- return /* @__PURE__ */ jsxs9(Fragment2, { children: [
3472
+ return /* @__PURE__ */ jsxs9(Fragment3, { children: [
3436
3473
  /* @__PURE__ */ jsx19(Slot2, { onClick: () => setOpen(true), children: trigger }),
3437
3474
  /* @__PURE__ */ jsx19(PeekSheet, { open: isOpen, onOpenChange: setOpen, label, sheetFooter, children })
3438
3475
  ] });
@@ -3448,7 +3485,7 @@ function PeekHoverCard(props) {
3448
3485
  {
3449
3486
  openDelay: Math.max(HOVER_CARD_OPEN_DELAY_MS, HOVER_CARD_OPEN_DELAY_FLOOR_MS),
3450
3487
  closeDelay: HOVER_CARD_CLOSE_DELAY_MS,
3451
- open: open ?? (hovered || held),
3488
+ open: (open ?? hovered) || held,
3452
3489
  onOpenChange: (next) => {
3453
3490
  setHovered(next);
3454
3491
  onOpenChange?.(next);
@@ -3589,7 +3626,7 @@ function FloatingPeekWindow({ open, onClose, initialPosition, children }) {
3589
3626
  }
3590
3627
 
3591
3628
  // src/peek.tsx
3592
- import { Fragment as Fragment3, jsx as jsx20, jsxs as jsxs10 } from "react/jsx-runtime";
3629
+ import { Fragment as Fragment4, jsx as jsx20, jsxs as jsxs10 } from "react/jsx-runtime";
3593
3630
  var PeekEntityRendererContext = React17.createContext(null);
3594
3631
  function PeekEntityRendererProvider({ render, children }) {
3595
3632
  return /* @__PURE__ */ jsx20(PeekEntityRendererContext.Provider, { value: render, children });
@@ -3607,7 +3644,7 @@ function screamPartOnce(kind) {
3607
3644
  function HostPart({ part }) {
3608
3645
  const render = React17.useContext(PeekPartRendererContext);
3609
3646
  const drawn = render?.(part);
3610
- if (drawn) return /* @__PURE__ */ jsx20(Fragment3, { children: drawn });
3647
+ if (drawn) return /* @__PURE__ */ jsx20(Fragment4, { children: drawn });
3611
3648
  if (!render) {
3612
3649
  screamPartOnce("token" in part ? `${part.part}:${part.token}` : part.part);
3613
3650
  }
@@ -3641,7 +3678,7 @@ function EntityText({ entity, name }) {
3641
3678
  const { EntityRef } = useMatrxDataTableHost();
3642
3679
  const className = "type-secondary min-w-0 max-w-full truncate text-foreground";
3643
3680
  const drawn = render?.({ ...entity, name, className });
3644
- if (drawn) return /* @__PURE__ */ jsx20(Fragment3, { children: drawn });
3681
+ if (drawn) return /* @__PURE__ */ jsx20(Fragment4, { children: drawn });
3645
3682
  if (EntityRef) {
3646
3683
  return /* @__PURE__ */ jsx20(
3647
3684
  EntityRef,
@@ -3834,7 +3871,7 @@ function PeekBody({ record, size, orientation, height, density, frame, loading }
3834
3871
  } : {},
3835
3872
  ...record.avatar ? { leading: /* @__PURE__ */ jsx20(PeekCardAvatar, { initials: record.avatar.initials, src: record.avatar.src }) } : record.glyph ? { leading: /* @__PURE__ */ jsx20(record.glyph, {}) } : {},
3836
3873
  ...record.favorite || record.badge ? {
3837
- trailing: /* @__PURE__ */ jsxs10(Fragment3, { children: [
3874
+ trailing: /* @__PURE__ */ jsxs10(Fragment4, { children: [
3838
3875
  record.badge ? /* @__PURE__ */ jsx20(
3839
3876
  Chip,
3840
3877
  {
@@ -3858,7 +3895,7 @@ function PeekBody({ record, size, orientation, height, density, frame, loading }
3858
3895
  children: [
3859
3896
  record.failure ? /* @__PURE__ */ jsx20(Failure, { failure: record.failure }) : null,
3860
3897
  record.media ? /* @__PURE__ */ jsx20(Media, { media: record.media }) : null,
3861
- record.callout ? /* @__PURE__ */ jsx20(PeekCardCallout, { title: record.callout.title, ...record.callout.glyph ? { icon: record.callout.glyph } : {}, children: record.callout.text || record.callout.lines?.length ? /* @__PURE__ */ jsxs10(Fragment3, { children: [
3898
+ record.callout ? /* @__PURE__ */ jsx20(PeekCardCallout, { title: record.callout.title, ...record.callout.glyph ? { icon: record.callout.glyph } : {}, children: record.callout.text || record.callout.lines?.length ? /* @__PURE__ */ jsxs10(Fragment4, { children: [
3862
3899
  record.callout.text,
3863
3900
  record.callout.lines?.map((line, i) => /* @__PURE__ */ jsx20("div", { className: "type-meta text-muted-foreground", ...line.hint ? { title: line.hint } : {}, children: line.text }, `${i}:${line.text}`))
3864
3901
  ] }) : null }) : null,
@@ -4185,7 +4222,7 @@ function compactCount(n) {
4185
4222
  }
4186
4223
 
4187
4224
  // src/contact-values/contact-values.tsx
4188
- import { Fragment as Fragment4, jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
4225
+ import { Fragment as Fragment5, jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
4189
4226
  var HostContext = React18.createContext({});
4190
4227
  function ContactValuesHostProvider({ children, ...host }) {
4191
4228
  const value = React18.useMemo(() => host, [host.validateAddress]);
@@ -4258,7 +4295,7 @@ function ValueShell({ kind, glyph: Glyph, text, copy, state, record, peek, wrap
4258
4295
  const { open, setHovered, setHeld, setPinned, trigger } = usePinnedHover();
4259
4296
  const off = state !== "ok";
4260
4297
  const value = /* @__PURE__ */ jsx22("span", { className: cn("min-w-0", wrap ? "whitespace-pre-line break-words" : "truncate", off ? "text-muted-foreground line-through" : "text-foreground"), children: text });
4261
- const body = /* @__PURE__ */ jsxs11(Fragment4, { children: [
4298
+ const body = /* @__PURE__ */ jsxs11(Fragment5, { children: [
4262
4299
  /* @__PURE__ */ jsx22(Glyph, { className: cn("size-[1em] shrink-0", off ? "text-muted-foreground" : "text-muted-foreground") }),
4263
4300
  value,
4264
4301
  off ? /* @__PURE__ */ jsx22("span", { className: "shrink-0 text-muted-foreground no-underline", children: `\xB7 ${CONTACT_STATE_LABEL[state]}` }) : null
@@ -4674,11 +4711,143 @@ var AddTile = React20.forwardRef(function AddTile2({ icon, className, children,
4674
4711
  );
4675
4712
  });
4676
4713
 
4677
- // src/radio-group.tsx
4678
- import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
4714
+ // src/assist-peek.tsx
4679
4715
  import * as React21 from "react";
4716
+ import { Slot as Slot3 } from "@radix-ui/react-slot";
4680
4717
  import { jsx as jsx25, jsxs as jsxs14 } from "react/jsx-runtime";
4681
- var RadioGroupSizeContext = React21.createContext("md");
4718
+ function AssistPeekCard({
4719
+ title,
4720
+ icon: Icon,
4721
+ subtitle,
4722
+ children,
4723
+ why,
4724
+ evidence,
4725
+ yourNote,
4726
+ explainer,
4727
+ primary,
4728
+ later,
4729
+ stopShowing,
4730
+ deciding = false,
4731
+ onNotNow,
4732
+ step
4733
+ }) {
4734
+ const laterDoor = later?.length ? { kind: "action", id: "later", label: "Later", icon: ClockIcon, menu: later, busy: deciding } : null;
4735
+ const stopDoor = stopShowing?.length ? { kind: "action", id: "stop", label: "Stop showing", icon: BellOffIcon, menu: stopShowing, busy: deciding } : null;
4736
+ const doors = laterDoor && stopDoor ? [laterDoor, stopDoor] : laterDoor ? [laterDoor] : stopDoor ? [stopDoor] : [];
4737
+ return /* @__PURE__ */ jsxs14(PeekCard, { size: "xl", height: "content", "data-matrx-assist-peek": "", "data-matrx-notice-surface": "", children: [
4738
+ /* @__PURE__ */ jsx25(
4739
+ PeekCardHeader,
4740
+ {
4741
+ title,
4742
+ leading: Icon ? /* @__PURE__ */ jsx25(Icon, {}) : void 0,
4743
+ subtitle,
4744
+ trailing: /* @__PURE__ */ jsx25(Button2, { type: "button", variant: "quiet", "aria-label": "Not now", title: "Not now", icon: /* @__PURE__ */ jsx25(XIcon, {}), disabled: Boolean(primary.busy) || deciding, onClick: onNotNow })
4745
+ }
4746
+ ),
4747
+ /* @__PURE__ */ jsxs14(PeekCardBody, { children: [
4748
+ children ? (
4749
+ // The explanation is what the person came to read: 14px (the size the host's markdown
4750
+ // paragraphs draw at), one step above the card's secondary sections.
4751
+ /* @__PURE__ */ jsx25("div", { "data-matrx-assist-body": "", className: "type-value min-w-0 break-words text-foreground", children: typeof children === "string" ? /* @__PURE__ */ jsx25("p", { className: "whitespace-pre-wrap", children }) : children })
4752
+ ) : null,
4753
+ why ? /* @__PURE__ */ jsx25(PeekCardSection, { label: "Why", children: /* @__PURE__ */ jsx25(PeekCardText, { children: why }) }) : null,
4754
+ evidence ? /* @__PURE__ */ jsx25(EvidenceSection, { evidence }) : null,
4755
+ yourNote ? /* @__PURE__ */ jsx25(PeekCardSection, { label: "Your note", children: /* @__PURE__ */ jsx25(PeekCardText, { children: yourNote }) }) : null,
4756
+ explainer ? (
4757
+ // What pressing the verb will do, hung off a return arrow like a consequence.
4758
+ /* @__PURE__ */ jsx25(PeekCardRow, { icon: CornerDownRightIcon, tone: "muted", wrap: true, children: explainer })
4759
+ ) : /* @__PURE__ */ jsx25(PeekCardSection, { label: "Not available here", tone: "danger", children: /* @__PURE__ */ jsx25(PeekCardText, { children: "This version of the app does not know how to do this." }) }),
4760
+ step
4761
+ ] }),
4762
+ /* @__PURE__ */ jsx25(
4763
+ PeekCardFooter,
4764
+ {
4765
+ primaryAt: "end",
4766
+ primary: { ...primary, disabled: Boolean(primary.disabled) || explainer === null || deciding },
4767
+ doors
4768
+ }
4769
+ )
4770
+ ] });
4771
+ }
4772
+ function EvidenceSection({ evidence }) {
4773
+ const items = evidence.items ?? [];
4774
+ return /* @__PURE__ */ jsxs14(PeekCardSection, { label: "What we saw", children: [
4775
+ /* @__PURE__ */ jsx25(
4776
+ PeekCardRows,
4777
+ {
4778
+ rows: [{ key: "evidence", text: evidence.label, title: evidence.label, href: evidence.href }]
4779
+ }
4780
+ ),
4781
+ evidence.snippet ? /* @__PURE__ */ jsx25(PeekCardText, { clamp: 4, breaks: true, children: evidence.snippet }) : null,
4782
+ items.length ? /* @__PURE__ */ jsx25(PeekCardRows, { limit: 6, rows: items.map((item, i) => ({ key: `${i}-${item}`, text: item, title: item })) }) : null
4783
+ ] });
4784
+ }
4785
+ function inCardMenu(target) {
4786
+ return target instanceof Element && target.closest("[data-radix-menu-content]") !== null;
4787
+ }
4788
+ function AssistPeekHover({ trigger, label, side = "top", align = "end", presentation, children }) {
4789
+ const [hovered, setHovered] = React21.useState(false);
4790
+ const [kept, setKept] = React21.useState(false);
4791
+ const isMobile = useIsMobile();
4792
+ const sheet = presentation === "sheet" || presentation !== "float" && isMobile;
4793
+ const card = React21.useRef(null);
4794
+ const close = React21.useCallback(() => {
4795
+ setHovered(false);
4796
+ setKept(false);
4797
+ }, []);
4798
+ React21.useEffect(() => {
4799
+ if (!kept) return;
4800
+ const onPress = (event) => {
4801
+ if (card.current?.contains(event.target) || inCardMenu(event.target)) return;
4802
+ close();
4803
+ };
4804
+ const onKey = (event) => {
4805
+ if (event.key !== "Escape" || document.querySelector("[data-radix-menu-content]")) return;
4806
+ close();
4807
+ };
4808
+ document.addEventListener("pointerdown", onPress, true);
4809
+ document.addEventListener("keydown", onKey);
4810
+ return () => {
4811
+ document.removeEventListener("pointerdown", onPress, true);
4812
+ document.removeEventListener("keydown", onKey);
4813
+ };
4814
+ }, [kept, close]);
4815
+ const keep = () => {
4816
+ setHovered(true);
4817
+ setKept(true);
4818
+ };
4819
+ return /* @__PURE__ */ jsx25(
4820
+ PeekHoverCard,
4821
+ {
4822
+ trigger: /* @__PURE__ */ jsx25(
4823
+ Slot3,
4824
+ {
4825
+ onClick: (event) => {
4826
+ event.stopPropagation();
4827
+ keep();
4828
+ },
4829
+ children: trigger
4830
+ }
4831
+ ),
4832
+ label,
4833
+ side,
4834
+ align,
4835
+ open: hovered || kept,
4836
+ onOpenChange: (next) => {
4837
+ setHovered(next);
4838
+ if (!next && (sheet || !kept)) close();
4839
+ },
4840
+ ...presentation ? { presentation } : {},
4841
+ children: /* @__PURE__ */ jsx25("div", { ref: card, onPointerDownCapture: keep, onFocusCapture: keep, children: children(close) })
4842
+ }
4843
+ );
4844
+ }
4845
+
4846
+ // src/radio-group.tsx
4847
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
4848
+ import * as React22 from "react";
4849
+ import { jsx as jsx26, jsxs as jsxs15 } from "react/jsx-runtime";
4850
+ var RadioGroupSizeContext = React22.createContext("md");
4682
4851
  var CONTROL_CLASSES = {
4683
4852
  sm: "h-3.5 w-3.5",
4684
4853
  md: "h-4 w-4",
@@ -4689,7 +4858,7 @@ var DOT_CLASSES = {
4689
4858
  md: "h-1.5 w-1.5",
4690
4859
  lg: "h-2 w-2"
4691
4860
  };
4692
- var RadioGroup = React21.forwardRef(({ className, size = "md", ...props }, ref) => /* @__PURE__ */ jsx25(RadioGroupSizeContext.Provider, { value: size, children: /* @__PURE__ */ jsx25(
4861
+ var RadioGroup = React22.forwardRef(({ className, size = "md", ...props }, ref) => /* @__PURE__ */ jsx26(RadioGroupSizeContext.Provider, { value: size, children: /* @__PURE__ */ jsx26(
4693
4862
  RadioGroupPrimitive.Root,
4694
4863
  {
4695
4864
  ref,
@@ -4699,10 +4868,10 @@ var RadioGroup = React21.forwardRef(({ className, size = "md", ...props }, ref)
4699
4868
  }
4700
4869
  ) }));
4701
4870
  RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
4702
- var RadioGroupItem = React21.forwardRef(({ className, size, ...props }, ref) => {
4703
- const groupSize = React21.useContext(RadioGroupSizeContext);
4871
+ var RadioGroupItem = React22.forwardRef(({ className, size, ...props }, ref) => {
4872
+ const groupSize = React22.useContext(RadioGroupSizeContext);
4704
4873
  const resolved = size ?? groupSize;
4705
- return /* @__PURE__ */ jsx25(
4874
+ return /* @__PURE__ */ jsx26(
4706
4875
  RadioGroupPrimitive.Item,
4707
4876
  {
4708
4877
  ref,
@@ -4719,7 +4888,7 @@ var RadioGroupItem = React21.forwardRef(({ className, size, ...props }, ref) =>
4719
4888
  className
4720
4889
  ),
4721
4890
  ...props,
4722
- children: /* @__PURE__ */ jsx25(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx25(
4891
+ children: /* @__PURE__ */ jsx26(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx26(
4723
4892
  "div",
4724
4893
  {
4725
4894
  className: cn("rounded-full bg-primary-foreground", DOT_CLASSES[resolved])
@@ -4737,8 +4906,8 @@ function RadioList({
4737
4906
  className,
4738
4907
  "aria-label": ariaLabel
4739
4908
  }) {
4740
- const baseId = React21.useId();
4741
- return /* @__PURE__ */ jsx25(
4909
+ const baseId = React22.useId();
4910
+ return /* @__PURE__ */ jsx26(
4742
4911
  RadioGroup,
4743
4912
  {
4744
4913
  value,
@@ -4749,7 +4918,7 @@ function RadioList({
4749
4918
  children: options.map((opt, i) => {
4750
4919
  const selected = value === opt.value;
4751
4920
  const id = `${baseId}-${i}`;
4752
- return /* @__PURE__ */ jsxs14(
4921
+ return /* @__PURE__ */ jsxs15(
4753
4922
  "label",
4754
4923
  {
4755
4924
  htmlFor: id,
@@ -4760,9 +4929,9 @@ function RadioList({
4760
4929
  opt.disabled && "cursor-not-allowed text-disabled-foreground"
4761
4930
  ),
4762
4931
  children: [
4763
- /* @__PURE__ */ jsx25(RadioGroupItem, { id, value: opt.value, disabled: opt.disabled }),
4764
- /* @__PURE__ */ jsx25("span", { className: "flex-1 truncate", children: opt.label }),
4765
- opt.hint != null && opt.hint !== "" ? /* @__PURE__ */ jsx25("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", children: opt.hint }) : null
4932
+ /* @__PURE__ */ jsx26(RadioGroupItem, { id, value: opt.value, disabled: opt.disabled }),
4933
+ /* @__PURE__ */ jsx26("span", { className: "flex-1 truncate", children: opt.label }),
4934
+ opt.hint != null && opt.hint !== "" ? /* @__PURE__ */ jsx26("span", { className: "shrink-0 text-xs tabular-nums text-muted-foreground", children: opt.hint }) : null
4766
4935
  ]
4767
4936
  },
4768
4937
  opt.value
@@ -4776,8 +4945,8 @@ function RadioList({
4776
4945
  import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
4777
4946
  import * as TogglePrimitive from "@radix-ui/react-toggle";
4778
4947
  import { cva as cva4 } from "class-variance-authority";
4779
- import * as React22 from "react";
4780
- import { jsx as jsx26 } from "react/jsx-runtime";
4948
+ import * as React23 from "react";
4949
+ import { jsx as jsx27 } from "react/jsx-runtime";
4781
4950
  var toggleVariants = cva4(
4782
4951
  "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
4783
4952
  {
@@ -4803,7 +4972,7 @@ var toggleVariants = cva4(
4803
4972
  }
4804
4973
  }
4805
4974
  );
4806
- var Toggle = React22.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ jsx26(
4975
+ var Toggle = React23.forwardRef(({ className, variant, size, ...props }, ref) => /* @__PURE__ */ jsx27(
4807
4976
  TogglePrimitive.Root,
4808
4977
  {
4809
4978
  ref,
@@ -4813,21 +4982,21 @@ var Toggle = React22.forwardRef(({ className, variant, size, ...props }, ref) =>
4813
4982
  }
4814
4983
  ));
4815
4984
  Toggle.displayName = TogglePrimitive.Root.displayName;
4816
- var ToggleGroupContext = React22.createContext({ size: "default", variant: "default" });
4817
- var ToggleGroup = React22.forwardRef(({ className, variant, size, children, ...props }, ref) => /* @__PURE__ */ jsx26(
4985
+ var ToggleGroupContext = React23.createContext({ size: "default", variant: "default" });
4986
+ var ToggleGroup = React23.forwardRef(({ className, variant, size, children, ...props }, ref) => /* @__PURE__ */ jsx27(
4818
4987
  ToggleGroupPrimitive.Root,
4819
4988
  {
4820
4989
  ref,
4821
4990
  "data-slot": "toggle-group",
4822
4991
  className: cn("flex items-center justify-center gap-1", className),
4823
4992
  ...props,
4824
- children: /* @__PURE__ */ jsx26(ToggleGroupContext.Provider, { value: { variant, size }, children })
4993
+ children: /* @__PURE__ */ jsx27(ToggleGroupContext.Provider, { value: { variant, size }, children })
4825
4994
  }
4826
4995
  ));
4827
4996
  ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
4828
- var ToggleGroupItem = React22.forwardRef(({ className, children, variant, size, ...props }, ref) => {
4829
- const context = React22.useContext(ToggleGroupContext);
4830
- return /* @__PURE__ */ jsx26(
4997
+ var ToggleGroupItem = React23.forwardRef(({ className, children, variant, size, ...props }, ref) => {
4998
+ const context = React23.useContext(ToggleGroupContext);
4999
+ return /* @__PURE__ */ jsx27(
4831
5000
  ToggleGroupPrimitive.Item,
4832
5001
  {
4833
5002
  ref,
@@ -4847,8 +5016,8 @@ var ToggleGroupItem = React22.forwardRef(({ className, children, variant, size,
4847
5016
  ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
4848
5017
 
4849
5018
  // src/floating-dock.tsx
4850
- import * as React23 from "react";
4851
- import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
5019
+ import * as React24 from "react";
5020
+ import { jsx as jsx28, jsxs as jsxs16 } from "react/jsx-runtime";
4852
5021
  var BASE_SIZE = 40;
4853
5022
  var BASE_ICON = 20;
4854
5023
  var REACH = 150;
@@ -4868,29 +5037,29 @@ function FloatingDock({
4868
5037
  growthFactor = 2,
4869
5038
  labelPosition = "top"
4870
5039
  }) {
4871
- return /* @__PURE__ */ jsxs15("div", { className: cn("flex w-auto items-center justify-center bg-background", className), children: [
4872
- /* @__PURE__ */ jsx27(FloatingDockPhone, { items }),
4873
- /* @__PURE__ */ jsx27(FloatingDockDesktop, { items, growthFactor, labelPosition })
5040
+ return /* @__PURE__ */ jsxs16("div", { className: cn("flex w-auto items-center justify-center bg-background", className), children: [
5041
+ /* @__PURE__ */ jsx28(FloatingDockPhone, { items }),
5042
+ /* @__PURE__ */ jsx28(FloatingDockDesktop, { items, growthFactor, labelPosition })
4874
5043
  ] });
4875
5044
  }
4876
5045
  function BalancedFloatingDock(props) {
4877
- return /* @__PURE__ */ jsx27(FloatingDock, { growthFactor: 1.8, labelPosition: "side", ...props });
5046
+ return /* @__PURE__ */ jsx28(FloatingDock, { growthFactor: 1.8, labelPosition: "side", ...props });
4878
5047
  }
4879
5048
  function FloatingDockPhone({ items }) {
4880
- const [open, setOpen] = React23.useState(false);
4881
- return /* @__PURE__ */ jsxs15("div", { className: "relative block md:hidden", children: [
4882
- /* @__PURE__ */ jsx27(
5049
+ const [open, setOpen] = React24.useState(false);
5050
+ return /* @__PURE__ */ jsxs16("div", { className: "relative block md:hidden", children: [
5051
+ /* @__PURE__ */ jsx28(
4883
5052
  Button2,
4884
5053
  {
4885
5054
  type: "button",
4886
5055
  variant: "quiet",
4887
5056
  "aria-label": open ? "Close menu" : "Open menu",
4888
- icon: open ? /* @__PURE__ */ jsx27(PanelTopCloseIcon, { className: "h-5 w-5" }) : /* @__PURE__ */ jsx27(PanelTopOpenIcon, { className: "h-5 w-5" }),
5057
+ icon: open ? /* @__PURE__ */ jsx28(PanelTopCloseIcon, { className: "h-5 w-5" }) : /* @__PURE__ */ jsx28(PanelTopOpenIcon, { className: "h-5 w-5" }),
4889
5058
  "aria-expanded": open,
4890
5059
  onClick: () => setOpen(!open)
4891
5060
  }
4892
5061
  ),
4893
- /* @__PURE__ */ jsx27(
5062
+ /* @__PURE__ */ jsx28(
4894
5063
  "div",
4895
5064
  {
4896
5065
  "data-open": open,
@@ -4900,32 +5069,32 @@ function FloatingDockPhone({ items }) {
4900
5069
  PANEL_MOTION_CLASS,
4901
5070
  open ? "translate-y-0" : "pointer-events-none -translate-y-full"
4902
5071
  ),
4903
- children: /* @__PURE__ */ jsxs15("div", { className: "flex h-full flex-col", children: [
4904
- /* @__PURE__ */ jsxs15("div", { className: "flex items-center justify-between border-b border-border p-4", children: [
4905
- /* @__PURE__ */ jsx27("h2", { className: "text-lg font-medium", children: "Menu" }),
4906
- /* @__PURE__ */ jsx27(
5072
+ children: /* @__PURE__ */ jsxs16("div", { className: "flex h-full flex-col", children: [
5073
+ /* @__PURE__ */ jsxs16("div", { className: "flex items-center justify-between border-b border-border p-4", children: [
5074
+ /* @__PURE__ */ jsx28("h2", { className: "text-lg font-medium", children: "Menu" }),
5075
+ /* @__PURE__ */ jsx28(
4907
5076
  Button2,
4908
5077
  {
4909
5078
  type: "button",
4910
5079
  variant: "quiet",
4911
5080
  "aria-label": "Close menu",
4912
- icon: /* @__PURE__ */ jsx27(XIcon, { className: "h-6 w-6" }),
5081
+ icon: /* @__PURE__ */ jsx28(XIcon, { className: "h-6 w-6" }),
4913
5082
  onClick: () => setOpen(false)
4914
5083
  }
4915
5084
  )
4916
5085
  ] }),
4917
- /* @__PURE__ */ jsx27("div", { className: "flex-1 overflow-y-auto", children: items.map((item) => /* @__PURE__ */ jsxs15(
5086
+ /* @__PURE__ */ jsx28("div", { className: "flex-1 overflow-y-auto", children: items.map((item) => /* @__PURE__ */ jsxs16(
4918
5087
  HostLink,
4919
5088
  {
4920
5089
  href: item.href,
4921
5090
  className: "flex items-center justify-between border-b border-border p-4",
4922
5091
  onClick: () => setOpen(false),
4923
5092
  children: [
4924
- /* @__PURE__ */ jsxs15("div", { className: "flex items-center space-x-4", children: [
4925
- /* @__PURE__ */ jsx27("div", { className: "flex h-10 w-10 items-center justify-center rounded-full bg-muted", children: /* @__PURE__ */ jsx27("div", { className: "h-5 w-5 [&>svg]:h-full [&>svg]:w-full", children: item.icon }) }),
4926
- /* @__PURE__ */ jsx27("span", { className: "font-medium", children: item.label })
5093
+ /* @__PURE__ */ jsxs16("div", { className: "flex items-center space-x-4", children: [
5094
+ /* @__PURE__ */ jsx28("div", { className: "flex h-10 w-10 items-center justify-center rounded-full bg-muted", children: /* @__PURE__ */ jsx28("div", { className: "h-5 w-5 [&>svg]:h-full [&>svg]:w-full", children: item.icon }) }),
5095
+ /* @__PURE__ */ jsx28("span", { className: "font-medium", children: item.label })
4927
5096
  ] }),
4928
- /* @__PURE__ */ jsx27(ChevronRightIcon, { className: "h-5 w-5 text-muted-foreground" })
5097
+ /* @__PURE__ */ jsx28(ChevronRightIcon, { className: "h-5 w-5 text-muted-foreground" })
4929
5098
  ]
4930
5099
  },
4931
5100
  item.label
@@ -4940,9 +5109,9 @@ function FloatingDockDesktop({
4940
5109
  growthFactor,
4941
5110
  labelPosition
4942
5111
  }) {
4943
- const circles = React23.useRef([]);
4944
- const [pointerX, setPointerX] = React23.useState(null);
4945
- const [centers, setCenters] = React23.useState([]);
5112
+ const circles = React24.useRef([]);
5113
+ const [pointerX, setPointerX] = React24.useState(null);
5114
+ const [centers, setCenters] = React24.useState([]);
4946
5115
  const measure = (x) => {
4947
5116
  setPointerX(x);
4948
5117
  setCenters(
@@ -4952,7 +5121,7 @@ function FloatingDockDesktop({
4952
5121
  })
4953
5122
  );
4954
5123
  };
4955
- return /* @__PURE__ */ jsx27(
5124
+ return /* @__PURE__ */ jsx28(
4956
5125
  "div",
4957
5126
  {
4958
5127
  onMouseMove: (e) => measure(e.clientX),
@@ -4966,8 +5135,8 @@ function FloatingDockDesktop({
4966
5135
  const size = dockSize(BASE_SIZE, growthFactor, distance);
4967
5136
  const icon = dockSize(BASE_ICON, growthFactor, distance);
4968
5137
  const under = Number.isFinite(distance) && Math.abs(distance) < BASE_SIZE / 2;
4969
- return /* @__PURE__ */ jsx27(HostLink, { href: item.href, "aria-label": item.label, children: /* @__PURE__ */ jsxs15("div", { className: "relative", children: [
4970
- /* @__PURE__ */ jsx27(
5138
+ return /* @__PURE__ */ jsx28(HostLink, { href: item.href, "aria-label": item.label, children: /* @__PURE__ */ jsxs16("div", { className: "relative", children: [
5139
+ /* @__PURE__ */ jsx28(
4971
5140
  "div",
4972
5141
  {
4973
5142
  ref: (el) => {
@@ -4978,7 +5147,7 @@ function FloatingDockDesktop({
4978
5147
  "relative flex aspect-square items-center justify-center rounded-full bg-muted transition-[width,height]",
4979
5148
  MAGNIFY_MOTION
4980
5149
  ),
4981
- children: /* @__PURE__ */ jsx27(
5150
+ children: /* @__PURE__ */ jsx28(
4982
5151
  "div",
4983
5152
  {
4984
5153
  style: { width: icon, height: icon },
@@ -4991,7 +5160,7 @@ function FloatingDockDesktop({
4991
5160
  )
4992
5161
  }
4993
5162
  ),
4994
- /* @__PURE__ */ jsx27(
5163
+ /* @__PURE__ */ jsx28(
4995
5164
  "div",
4996
5165
  {
4997
5166
  "data-shown": under,
@@ -5012,18 +5181,18 @@ function FloatingDockDesktop({
5012
5181
  }
5013
5182
 
5014
5183
  // src/deferred-dialog.tsx
5015
- import * as React24 from "react";
5016
- import { jsx as jsx28 } from "react/jsx-runtime";
5184
+ import * as React25 from "react";
5185
+ import { jsx as jsx29 } from "react/jsx-runtime";
5017
5186
  function deferredDialog(name, load, isOpen) {
5018
5187
  let pending = null;
5019
5188
  const preload = () => pending ??= load().then((component) => ({ default: component }));
5020
- const Body = React24.lazy(preload);
5189
+ const Body = React25.lazy(preload);
5021
5190
  function Deferred(props) {
5022
5191
  const open = isOpen(props);
5023
- const [opened, setOpened] = React24.useState(open);
5192
+ const [opened, setOpened] = React25.useState(open);
5024
5193
  if (open && !opened) setOpened(true);
5025
5194
  if (!open && !opened) return null;
5026
- return /* @__PURE__ */ jsx28(React24.Suspense, { fallback: null, children: /* @__PURE__ */ jsx28(Body, { ...props }) });
5195
+ return /* @__PURE__ */ jsx29(React25.Suspense, { fallback: null, children: /* @__PURE__ */ jsx29(Body, { ...props }) });
5027
5196
  }
5028
5197
  Deferred.displayName = name;
5029
5198
  return Object.assign(Deferred, { preload });
@@ -5069,10 +5238,10 @@ var TextInputDialog = deferredDialog(
5069
5238
  // src/clipboard-fallback-host.tsx
5070
5239
  import { clipboardFallbackOpener } from "@ai-matrx/kit/clipboard-fallback-opener";
5071
5240
  import { useOpenerHost } from "@ai-matrx/kit/opener-react";
5072
- import { jsx as jsx29 } from "react/jsx-runtime";
5241
+ import { jsx as jsx30 } from "react/jsx-runtime";
5073
5242
  function ClipboardFallbackHost() {
5074
5243
  const { open, shown, settle } = useOpenerHost(clipboardFallbackOpener);
5075
- return /* @__PURE__ */ jsx29(
5244
+ return /* @__PURE__ */ jsx30(
5076
5245
  ClipboardFallbackDialog,
5077
5246
  {
5078
5247
  open,
@@ -5087,8 +5256,8 @@ function ClipboardFallbackHost() {
5087
5256
  }
5088
5257
 
5089
5258
  // src/floating-sheet.tsx
5090
- import { useState as useState14, useEffect as useEffect8, useCallback as useCallback6, useRef as useRef8 } from "react";
5091
- import { Fragment as Fragment5, jsx as jsx30, jsxs as jsxs16 } from "react/jsx-runtime";
5259
+ import { useState as useState15, useEffect as useEffect9, useCallback as useCallback7, useRef as useRef9 } from "react";
5260
+ import { Fragment as Fragment6, jsx as jsx31, jsxs as jsxs17 } from "react/jsx-runtime";
5092
5261
  var FloatingSheet = ({
5093
5262
  children,
5094
5263
  isOpen,
@@ -5123,16 +5292,16 @@ var FloatingSheet = ({
5123
5292
  respectHeader = true
5124
5293
  // Default to true - sheets should respect the header by default
5125
5294
  }) => {
5126
- const [hasRendered, setHasRendered] = useState14(false);
5127
- const sheetRef = useRef8(null);
5128
- const contentRef = useRef8(null);
5129
- const [scrollPosition, setScrollPosition] = useState14(0);
5130
- useEffect8(() => {
5295
+ const [hasRendered, setHasRendered] = useState15(false);
5296
+ const sheetRef = useRef9(null);
5297
+ const contentRef = useRef9(null);
5298
+ const [scrollPosition, setScrollPosition] = useState15(0);
5299
+ useEffect9(() => {
5131
5300
  if (!hasRendered) {
5132
5301
  setHasRendered(true);
5133
5302
  }
5134
5303
  }, []);
5135
- useEffect8(() => {
5304
+ useEffect9(() => {
5136
5305
  if (!lockScroll) return void 0;
5137
5306
  if (isOpen) {
5138
5307
  const scrollY = window.scrollY;
@@ -5157,7 +5326,7 @@ var FloatingSheet = ({
5157
5326
  document.body.style.overflow = "";
5158
5327
  };
5159
5328
  }, [isOpen, lockScroll]);
5160
- useEffect8(() => {
5329
+ useEffect9(() => {
5161
5330
  const handleKeyDown = (e) => {
5162
5331
  if (e.key === "Escape" && isOpen && closeOnEsc && !e.defaultPrevented) {
5163
5332
  if (holdsUnsentWork) {
@@ -5174,22 +5343,22 @@ var FloatingSheet = ({
5174
5343
  document.removeEventListener("keydown", handleKeyDown);
5175
5344
  };
5176
5345
  }, [isOpen, closeOnEsc, holdsUnsentWork, onClose]);
5177
- useEffect8(() => {
5346
+ useEffect9(() => {
5178
5347
  if (isOpen && initialFocus && sheetRef.current) {
5179
5348
  sheetRef.current.focus();
5180
5349
  }
5181
5350
  }, [isOpen, initialFocus]);
5182
- useEffect8(() => {
5351
+ useEffect9(() => {
5183
5352
  if (isOpen && contentRef.current && preserveScrollPosition) {
5184
5353
  contentRef.current.scrollTop = scrollPosition;
5185
5354
  }
5186
5355
  }, [isOpen, preserveScrollPosition, scrollPosition]);
5187
- useEffect8(() => {
5356
+ useEffect9(() => {
5188
5357
  if (!isOpen && contentRef.current && preserveScrollPosition) {
5189
5358
  setScrollPosition(contentRef.current.scrollTop);
5190
5359
  }
5191
5360
  }, [isOpen, preserveScrollPosition]);
5192
- const handleBackdropClick = useCallback6(() => {
5361
+ const handleBackdropClick = useCallback7(() => {
5193
5362
  if (holdsUnsentWork) return;
5194
5363
  if (onBackdropClick) {
5195
5364
  onBackdropClick();
@@ -5394,8 +5563,8 @@ var FloatingSheet = ({
5394
5563
  const bottomPadding = showFooter ? "" : "pb-safe";
5395
5564
  return `${basePadding} ${bottomPadding}`.trim();
5396
5565
  };
5397
- return /* @__PURE__ */ jsxs16(Fragment5, { children: [
5398
- isOpen && hasBackdrop && /* @__PURE__ */ jsx30(
5566
+ return /* @__PURE__ */ jsxs17(Fragment6, { children: [
5567
+ isOpen && hasBackdrop && /* @__PURE__ */ jsx31(
5399
5568
  "div",
5400
5569
  {
5401
5570
  className: `fixed ${respectHeader ? "left-0 right-0 top-10 bottom-0" : "inset-0"} bg-[var(--matrx-overlay-scrim-soft)] z-40 ${isMobile ? "backdrop-blur-sm" : ""} transition-opacity ${durationClass} ${backdropClassName}`,
@@ -5404,7 +5573,7 @@ var FloatingSheet = ({
5404
5573
  "data-testid": "floating-sheet-backdrop"
5405
5574
  }
5406
5575
  ),
5407
- /* @__PURE__ */ jsx30(
5576
+ /* @__PURE__ */ jsx31(
5408
5577
  "div",
5409
5578
  {
5410
5579
  ref: sheetRef,
@@ -5416,25 +5585,25 @@ var FloatingSheet = ({
5416
5585
  "aria-labelledby": "sheet-title",
5417
5586
  tabIndex: -1,
5418
5587
  "data-testid": "floating-sheet",
5419
- children: /* @__PURE__ */ jsxs16("div", { className: "flex flex-col h-full overflow-hidden", children: [
5420
- showHeader && /* @__PURE__ */ jsxs16(
5588
+ children: /* @__PURE__ */ jsxs17("div", { className: "flex flex-col h-full overflow-hidden", children: [
5589
+ showHeader && /* @__PURE__ */ jsxs17(
5421
5590
  "div",
5422
5591
  {
5423
5592
  className: `flex items-center justify-between border-b border-border ${getMobileHeaderClass()} ${headerClassName}`,
5424
5593
  children: [
5425
- /* @__PURE__ */ jsxs16("div", { className: "flex-1 min-w-0", children: [
5426
- typeof title === "string" ? /* @__PURE__ */ jsx30("h2", { id: "sheet-title", className: `${isMobile ? "text-xl" : "text-lg"} font-semibold text-foreground`, children: title }) : /* @__PURE__ */ jsx30("div", { id: "sheet-title", children: title }),
5427
- description && (typeof description === "string" ? /* @__PURE__ */ jsx30("p", { className: "type-body text-muted-foreground mt-1", children: description }) : /* @__PURE__ */ jsx30("div", { className: "mt-1", children: description }))
5594
+ /* @__PURE__ */ jsxs17("div", { className: "flex-1 min-w-0", children: [
5595
+ typeof title === "string" ? /* @__PURE__ */ jsx31("h2", { id: "sheet-title", className: `${isMobile ? "text-xl" : "text-lg"} font-semibold text-foreground`, children: title }) : /* @__PURE__ */ jsx31("div", { id: "sheet-title", children: title }),
5596
+ description && (typeof description === "string" ? /* @__PURE__ */ jsx31("p", { className: "type-body text-muted-foreground mt-1", children: description }) : /* @__PURE__ */ jsx31("div", { className: "mt-1", children: description }))
5428
5597
  ] }),
5429
- headerContent && /* @__PURE__ */ jsx30("div", { className: "ml-4 flex items-center", children: headerContent }),
5430
- showCloseButton && /* @__PURE__ */ jsx30(
5598
+ headerContent && /* @__PURE__ */ jsx31("div", { className: "ml-4 flex items-center", children: headerContent }),
5599
+ showCloseButton && /* @__PURE__ */ jsx31(
5431
5600
  "button",
5432
5601
  {
5433
5602
  onClick: onClose,
5434
5603
  className: `ml-4 rounded-full ${isMobile ? "p-2" : "p-1.5"} text-muted-foreground hover:text-foreground bg-transparent hover:bg-accent focus:outline-none focus:ring-2 focus:ring-ring`,
5435
5604
  "aria-label": "Close",
5436
5605
  "data-testid": "floating-sheet-close",
5437
- children: closeButton || /* @__PURE__ */ jsxs16(
5606
+ children: closeButton || /* @__PURE__ */ jsxs17(
5438
5607
  "svg",
5439
5608
  {
5440
5609
  xmlns: "http://www.w3.org/2000/svg",
@@ -5446,8 +5615,8 @@ var FloatingSheet = ({
5446
5615
  strokeLinecap: "round",
5447
5616
  strokeLinejoin: "round",
5448
5617
  children: [
5449
- /* @__PURE__ */ jsx30("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
5450
- /* @__PURE__ */ jsx30("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
5618
+ /* @__PURE__ */ jsx31("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
5619
+ /* @__PURE__ */ jsx31("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
5451
5620
  ]
5452
5621
  }
5453
5622
  )
@@ -5456,7 +5625,7 @@ var FloatingSheet = ({
5456
5625
  ]
5457
5626
  }
5458
5627
  ),
5459
- /* @__PURE__ */ jsx30(
5628
+ /* @__PURE__ */ jsx31(
5460
5629
  "div",
5461
5630
  {
5462
5631
  ref: contentRef,
@@ -5465,7 +5634,7 @@ var FloatingSheet = ({
5465
5634
  children
5466
5635
  }
5467
5636
  ),
5468
- showFooter && /* @__PURE__ */ jsx30(
5637
+ showFooter && /* @__PURE__ */ jsx31(
5469
5638
  "div",
5470
5639
  {
5471
5640
  className: `border-t border-border ${getMobileFooterClass()} ${footerClassName}`,
@@ -5480,12 +5649,12 @@ var FloatingSheet = ({
5480
5649
  };
5481
5650
 
5482
5651
  // src/simple-tooltip.tsx
5483
- import { jsx as jsx31, jsxs as jsxs17 } from "react/jsx-runtime";
5652
+ import { jsx as jsx32, jsxs as jsxs18 } from "react/jsx-runtime";
5484
5653
  var SimpleTooltip = ({ children, text }) => {
5485
5654
  if (!text) return children;
5486
- return /* @__PURE__ */ jsxs17(Tooltip, { children: [
5487
- /* @__PURE__ */ jsx31(TooltipTrigger, { asChild: true, children }),
5488
- /* @__PURE__ */ jsx31(TooltipContent, { children: /* @__PURE__ */ jsx31("p", { children: text }) })
5655
+ return /* @__PURE__ */ jsxs18(Tooltip, { children: [
5656
+ /* @__PURE__ */ jsx32(TooltipTrigger, { asChild: true, children }),
5657
+ /* @__PURE__ */ jsx32(TooltipContent, { children: /* @__PURE__ */ jsx32("p", { children: text }) })
5489
5658
  ] });
5490
5659
  };
5491
5660
  var AdvancedTooltip = ({
@@ -5508,24 +5677,24 @@ var AdvancedTooltip = ({
5508
5677
  success: "bg-success text-success-foreground"
5509
5678
  };
5510
5679
  const baseContentClasses = "rounded-md px-3 py-1.5 text-sm shadow-md";
5511
- return /* @__PURE__ */ jsxs17(Tooltip, { delayDuration, children: [
5512
- /* @__PURE__ */ jsx31(TooltipTrigger, { asChild: true, className, children }),
5513
- /* @__PURE__ */ jsx31(
5680
+ return /* @__PURE__ */ jsxs18(Tooltip, { delayDuration, children: [
5681
+ /* @__PURE__ */ jsx32(TooltipTrigger, { asChild: true, className, children }),
5682
+ /* @__PURE__ */ jsx32(
5514
5683
  TooltipContent,
5515
5684
  {
5516
5685
  side,
5517
5686
  align,
5518
5687
  sideOffset,
5519
5688
  className: `${baseContentClasses} ${variantStyles[variant]} ${contentClassName}`,
5520
- children: /* @__PURE__ */ jsx31("p", { className: "leading-none whitespace-pre-wrap", children: text })
5689
+ children: /* @__PURE__ */ jsx32("p", { className: "leading-none whitespace-pre-wrap", children: text })
5521
5690
  }
5522
5691
  )
5523
5692
  ] });
5524
5693
  };
5525
5694
 
5526
5695
  // src/loading-spinner.tsx
5527
- import React26 from "react";
5528
- import { Fragment as Fragment6, jsx as jsx32, jsxs as jsxs18 } from "react/jsx-runtime";
5696
+ import React27 from "react";
5697
+ import { Fragment as Fragment7, jsx as jsx33, jsxs as jsxs19 } from "react/jsx-runtime";
5529
5698
  var animationStyles = `
5530
5699
  @keyframes pulseWave {
5531
5700
  0% { opacity: 0.3; transform: scale(0.8); }
@@ -5582,7 +5751,7 @@ var LoadingSpinner = ({
5582
5751
  subtitle,
5583
5752
  showProgressSteps = true
5584
5753
  }) => {
5585
- React26.useEffect(() => {
5754
+ React27.useEffect(() => {
5586
5755
  const styleId = "loading-spinner-styles";
5587
5756
  if (!document.getElementById(styleId)) {
5588
5757
  const style = document.createElement("style");
@@ -5602,19 +5771,19 @@ var LoadingSpinner = ({
5602
5771
  }
5603
5772
  };
5604
5773
  const sizeClasses2 = getSizeClasses();
5605
- const renderDots = () => /* @__PURE__ */ jsxs18("div", { className: cn("flex items-center", sizeClasses2.container), children: [
5606
- /* @__PURE__ */ jsx32("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-1") }),
5607
- /* @__PURE__ */ jsx32("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-2") }),
5608
- /* @__PURE__ */ jsx32("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-3") })
5774
+ const renderDots = () => /* @__PURE__ */ jsxs19("div", { className: cn("flex items-center", sizeClasses2.container), children: [
5775
+ /* @__PURE__ */ jsx33("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-1") }),
5776
+ /* @__PURE__ */ jsx33("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-2") }),
5777
+ /* @__PURE__ */ jsx33("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-3") })
5609
5778
  ] });
5610
- const renderBars = () => /* @__PURE__ */ jsxs18("div", { className: cn("flex items-center", sizeClasses2.container), children: [
5611
- /* @__PURE__ */ jsx32("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-1") }),
5612
- /* @__PURE__ */ jsx32("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-2") }),
5613
- /* @__PURE__ */ jsx32("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-3") }),
5614
- /* @__PURE__ */ jsx32("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-4") })
5779
+ const renderBars = () => /* @__PURE__ */ jsxs19("div", { className: cn("flex items-center", sizeClasses2.container), children: [
5780
+ /* @__PURE__ */ jsx33("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-1") }),
5781
+ /* @__PURE__ */ jsx33("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-2") }),
5782
+ /* @__PURE__ */ jsx33("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-3") }),
5783
+ /* @__PURE__ */ jsx33("div", { className: cn(sizeClasses2.bar, "bg-primary dark:bg-primary-foreground rounded-sm loading-bounce-4") })
5615
5784
  ] });
5616
- const renderBrain = () => /* @__PURE__ */ jsxs18("div", { className: "relative w-6 h-6 flex items-center justify-center", children: [
5617
- /* @__PURE__ */ jsx32("div", { className: "absolute", children: /* @__PURE__ */ jsx32(
5785
+ const renderBrain = () => /* @__PURE__ */ jsxs19("div", { className: "relative w-6 h-6 flex items-center justify-center", children: [
5786
+ /* @__PURE__ */ jsx33("div", { className: "absolute", children: /* @__PURE__ */ jsx33(
5618
5787
  "svg",
5619
5788
  {
5620
5789
  width: "24",
@@ -5622,7 +5791,7 @@ var LoadingSpinner = ({
5622
5791
  viewBox: "0 0 24 24",
5623
5792
  fill: "none",
5624
5793
  className: "w-5 h-5 text-primary dark:text-primary-foreground",
5625
- children: /* @__PURE__ */ jsx32(
5794
+ children: /* @__PURE__ */ jsx33(
5626
5795
  "path",
5627
5796
  {
5628
5797
  d: "M12 4C9.5 4 7.5 5.5 7.5 8C7.5 9 7.5 9.5 7 10.5C6.5 11.5 6 12 6 13.5C6 15.5 7.5 17 9.5 17C10.5 17 11 16.5 12 16.5C13 16.5 13.5 17 14.5 17C16.5 17 18 15.5 18 13.5C18 12 17.5 11.5 17 10.5C16.5 9.5 16.5 9 16.5 8C16.5 5.5 14.5 4 12 4Z",
@@ -5633,44 +5802,44 @@ var LoadingSpinner = ({
5633
5802
  )
5634
5803
  }
5635
5804
  ) }),
5636
- /* @__PURE__ */ jsxs18("div", { className: "absolute inset-0", children: [
5637
- /* @__PURE__ */ jsx32("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[8px] top-[10px] loading-neuron-1" }),
5638
- /* @__PURE__ */ jsx32("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[12px] top-[8px] loading-neuron-2" }),
5639
- /* @__PURE__ */ jsx32("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[16px] top-[10px] loading-neuron-3" }),
5640
- /* @__PURE__ */ jsx32("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[10px] top-[14px] loading-neuron-4" }),
5641
- /* @__PURE__ */ jsx32("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[14px] top-[14px] loading-neuron-5" })
5805
+ /* @__PURE__ */ jsxs19("div", { className: "absolute inset-0", children: [
5806
+ /* @__PURE__ */ jsx33("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[8px] top-[10px] loading-neuron-1" }),
5807
+ /* @__PURE__ */ jsx33("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[12px] top-[8px] loading-neuron-2" }),
5808
+ /* @__PURE__ */ jsx33("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[16px] top-[10px] loading-neuron-3" }),
5809
+ /* @__PURE__ */ jsx33("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[10px] top-[14px] loading-neuron-4" }),
5810
+ /* @__PURE__ */ jsx33("div", { className: "absolute w-1 h-1 bg-primary/60 dark:bg-primary-foreground/60 rounded-full left-[14px] top-[14px] loading-neuron-5" })
5642
5811
  ] }),
5643
- /* @__PURE__ */ jsx32("div", { className: "absolute w-full h-full rounded-full border border-primary/30 dark:border-primary-foreground/30 loading-brain-pulse-1" }),
5644
- /* @__PURE__ */ jsx32("div", { className: "absolute w-full h-full rounded-full border border-primary/30 dark:border-primary-foreground/30 loading-brain-pulse-2" })
5812
+ /* @__PURE__ */ jsx33("div", { className: "absolute w-full h-full rounded-full border border-primary/30 dark:border-primary-foreground/30 loading-brain-pulse-1" }),
5813
+ /* @__PURE__ */ jsx33("div", { className: "absolute w-full h-full rounded-full border border-primary/30 dark:border-primary-foreground/30 loading-brain-pulse-2" })
5645
5814
  ] });
5646
- const renderMinimal = () => /* @__PURE__ */ jsx32("div", { className: "relative", children: /* @__PURE__ */ jsx32("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-1") }) });
5647
- const renderWorkflow = () => /* @__PURE__ */ jsxs18("div", { className: "flex flex-col items-center justify-center space-y-6", children: [
5648
- /* @__PURE__ */ jsxs18("div", { className: "relative", children: [
5649
- /* @__PURE__ */ jsx32("div", { className: "w-16 h-16 bg-primary/10 dark:bg-primary-foreground/10 rounded-full flex items-center justify-center", children: /* @__PURE__ */ jsx32(WorkflowIcon, { className: "w-8 h-8 text-primary dark:text-primary-foreground" }) }),
5650
- /* @__PURE__ */ jsx32("div", { className: "absolute -top-1 -right-1 w-6 h-6 bg-primary dark:bg-primary-foreground rounded-full flex items-center justify-center", children: /* @__PURE__ */ jsx32(PlusIcon, { className: "w-3 h-3 text-primary-foreground dark:text-primary" }) }),
5651
- /* @__PURE__ */ jsx32("div", { className: "absolute inset-0 border-2 border-transparent border-t-primary dark:border-t-primary-foreground rounded-full matrx-spin" })
5815
+ const renderMinimal = () => /* @__PURE__ */ jsx33("div", { className: "relative", children: /* @__PURE__ */ jsx33("div", { className: cn(sizeClasses2.dot, "bg-primary dark:bg-primary-foreground rounded-full loading-pulse-1") }) });
5816
+ const renderWorkflow = () => /* @__PURE__ */ jsxs19("div", { className: "flex flex-col items-center justify-center space-y-6", children: [
5817
+ /* @__PURE__ */ jsxs19("div", { className: "relative", children: [
5818
+ /* @__PURE__ */ jsx33("div", { className: "w-16 h-16 bg-primary/10 dark:bg-primary-foreground/10 rounded-full flex items-center justify-center", children: /* @__PURE__ */ jsx33(WorkflowIcon, { className: "w-8 h-8 text-primary dark:text-primary-foreground" }) }),
5819
+ /* @__PURE__ */ jsx33("div", { className: "absolute -top-1 -right-1 w-6 h-6 bg-primary dark:bg-primary-foreground rounded-full flex items-center justify-center", children: /* @__PURE__ */ jsx33(PlusIcon, { className: "w-3 h-3 text-primary-foreground dark:text-primary" }) }),
5820
+ /* @__PURE__ */ jsx33("div", { className: "absolute inset-0 border-2 border-transparent border-t-primary dark:border-t-primary-foreground rounded-full matrx-spin" })
5652
5821
  ] }),
5653
- /* @__PURE__ */ jsxs18("div", { className: "text-center space-y-2", children: [
5654
- /* @__PURE__ */ jsxs18("h2", { className: "text-lg font-semibold text-foreground flex items-center gap-2 justify-center", children: [
5655
- /* @__PURE__ */ jsx32(Loader2Icon, { className: "w-4 h-4 matrx-spin" }),
5822
+ /* @__PURE__ */ jsxs19("div", { className: "text-center space-y-2", children: [
5823
+ /* @__PURE__ */ jsxs19("h2", { className: "text-lg font-semibold text-foreground flex items-center gap-2 justify-center", children: [
5824
+ /* @__PURE__ */ jsx33(Loader2Icon, { className: "w-4 h-4 matrx-spin" }),
5656
5825
  title || "Loading Workflow"
5657
5826
  ] }),
5658
- /* @__PURE__ */ jsx32("p", { className: "type-body text-muted-foreground max-w-sm", children: subtitle || message || "Setting up your workflow..." })
5827
+ /* @__PURE__ */ jsx33("p", { className: "type-body text-muted-foreground max-w-sm", children: subtitle || message || "Setting up your workflow..." })
5659
5828
  ] }),
5660
- showProgressSteps && /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-2 type-secondary text-muted-foreground", children: [
5661
- /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-1", children: [
5662
- /* @__PURE__ */ jsx32("div", { className: "w-2 h-2 bg-primary dark:bg-primary-foreground rounded-full matrx-pulse" }),
5663
- /* @__PURE__ */ jsx32("span", { children: "Loading" })
5829
+ showProgressSteps && /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-2 type-secondary text-muted-foreground", children: [
5830
+ /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-1", children: [
5831
+ /* @__PURE__ */ jsx33("div", { className: "w-2 h-2 bg-primary dark:bg-primary-foreground rounded-full matrx-pulse" }),
5832
+ /* @__PURE__ */ jsx33("span", { children: "Loading" })
5664
5833
  ] }),
5665
- /* @__PURE__ */ jsx32("div", { className: "w-4 h-px bg-muted-foreground/30" }),
5666
- /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-1", children: [
5667
- /* @__PURE__ */ jsx32("div", { className: "w-2 h-2 bg-muted-foreground/30 rounded-full" }),
5668
- /* @__PURE__ */ jsx32("span", { children: "Initializing" })
5834
+ /* @__PURE__ */ jsx33("div", { className: "w-4 h-px bg-muted-foreground/30" }),
5835
+ /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-1", children: [
5836
+ /* @__PURE__ */ jsx33("div", { className: "w-2 h-2 bg-muted-foreground/30 rounded-full" }),
5837
+ /* @__PURE__ */ jsx33("span", { children: "Initializing" })
5669
5838
  ] }),
5670
- /* @__PURE__ */ jsx32("div", { className: "w-4 h-px bg-muted-foreground/30" }),
5671
- /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-1", children: [
5672
- /* @__PURE__ */ jsx32("div", { className: "w-2 h-2 bg-muted-foreground/30 rounded-full" }),
5673
- /* @__PURE__ */ jsx32("span", { children: "Ready" })
5839
+ /* @__PURE__ */ jsx33("div", { className: "w-4 h-px bg-muted-foreground/30" }),
5840
+ /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-1", children: [
5841
+ /* @__PURE__ */ jsx33("div", { className: "w-2 h-2 bg-muted-foreground/30 rounded-full" }),
5842
+ /* @__PURE__ */ jsx33("span", { children: "Ready" })
5674
5843
  ] })
5675
5844
  ] })
5676
5845
  ] });
@@ -5699,32 +5868,32 @@ var LoadingSpinner = ({
5699
5868
  }
5700
5869
  };
5701
5870
  if (variant === "workflow" && (fullscreen || overlay)) {
5702
- return /* @__PURE__ */ jsxs18("div", { className: cn(
5871
+ return /* @__PURE__ */ jsxs19("div", { className: cn(
5703
5872
  "flex items-center justify-center bg-background",
5704
5873
  fullscreen && "h-dvh w-full",
5705
5874
  className
5706
5875
  ), children: [
5707
- overlay && /* @__PURE__ */ jsx32("div", { className: "absolute inset-0 bg-background/80 backdrop-blur-sm z-50" }),
5708
- /* @__PURE__ */ jsx32("div", { className: cn(
5876
+ overlay && /* @__PURE__ */ jsx33("div", { className: "absolute inset-0 bg-background/80 backdrop-blur-sm z-50" }),
5877
+ /* @__PURE__ */ jsx33("div", { className: cn(
5709
5878
  "flex flex-col items-center justify-center",
5710
5879
  overlay && "relative z-50"
5711
5880
  ), children: renderWorkflow() })
5712
5881
  ] });
5713
5882
  }
5714
- return /* @__PURE__ */ jsx32("div", { className: cn("flex items-center", className), children: variant === "workflow" ? renderWorkflow() : /* @__PURE__ */ jsxs18(Fragment6, { children: [
5883
+ return /* @__PURE__ */ jsx33("div", { className: cn("flex items-center", className), children: variant === "workflow" ? renderWorkflow() : /* @__PURE__ */ jsxs19(Fragment7, { children: [
5715
5884
  renderSpinner(),
5716
- showMessage && /* @__PURE__ */ jsx32("span", { className: cn("ml-3 text-muted-foreground", sizeClasses2.text), children: message || getDefaultMessage() })
5885
+ showMessage && /* @__PURE__ */ jsx33("span", { className: cn("ml-3 text-muted-foreground", sizeClasses2.text), children: message || getDefaultMessage() })
5717
5886
  ] }) });
5718
5887
  };
5719
5888
 
5720
5889
  // src/mini-loader.tsx
5721
- import { jsx as jsx33 } from "react/jsx-runtime";
5890
+ import { jsx as jsx34 } from "react/jsx-runtime";
5722
5891
  function MatrxMiniLoader() {
5723
- return /* @__PURE__ */ jsx33(LoadingSpinner, { variant: "dots", message: "Initializing Matrx...", size: "md" });
5892
+ return /* @__PURE__ */ jsx34(LoadingSpinner, { variant: "dots", message: "Initializing Matrx...", size: "md" });
5724
5893
  }
5725
5894
 
5726
5895
  // src/suspense-loader.tsx
5727
- import { jsx as jsx34, jsxs as jsxs19 } from "react/jsx-runtime";
5896
+ import { jsx as jsx35, jsxs as jsxs20 } from "react/jsx-runtime";
5728
5897
  var sizeClasses = {
5729
5898
  xs: "h-3 w-3",
5730
5899
  sm: "h-4 w-4",
@@ -5737,7 +5906,7 @@ function SuspenseLoader({
5737
5906
  message,
5738
5907
  className = ""
5739
5908
  }) {
5740
- const spinner = /* @__PURE__ */ jsx34(
5909
+ const spinner = /* @__PURE__ */ jsx35(
5741
5910
  Loader2Icon,
5742
5911
  {
5743
5912
  className: `${sizeClasses[size]} matrx-spin text-disabled-foreground ${className}`,
@@ -5745,7 +5914,7 @@ function SuspenseLoader({
5745
5914
  "aria-label": message ? void 0 : "Loading"
5746
5915
  }
5747
5916
  );
5748
- const content = message ? /* @__PURE__ */ jsxs19(
5917
+ const content = message ? /* @__PURE__ */ jsxs20(
5749
5918
  "span",
5750
5919
  {
5751
5920
  className: "inline-flex items-center gap-2",
@@ -5753,19 +5922,19 @@ function SuspenseLoader({
5753
5922
  "aria-live": "polite",
5754
5923
  children: [
5755
5924
  spinner,
5756
- /* @__PURE__ */ jsx34("span", { children: message })
5925
+ /* @__PURE__ */ jsx35("span", { children: message })
5757
5926
  ]
5758
5927
  }
5759
5928
  ) : spinner;
5760
5929
  if (centered) {
5761
- return /* @__PURE__ */ jsx34("div", { className: "flex items-center justify-center w-full h-full min-h-[2rem]", children: content });
5930
+ return /* @__PURE__ */ jsx35("div", { className: "flex items-center justify-center w-full h-full min-h-[2rem]", children: content });
5762
5931
  }
5763
5932
  return content;
5764
5933
  }
5765
5934
 
5766
5935
  // src/shimmer-text.tsx
5767
- import { useCallback as useCallback7, useRef as useRef9 } from "react";
5768
- import { jsx as jsx35 } from "react/jsx-runtime";
5936
+ import { useCallback as useCallback8, useRef as useRef10 } from "react";
5937
+ import { jsx as jsx36 } from "react/jsx-runtime";
5769
5938
  var SHIMMER_STYLE = {
5770
5939
  backgroundImage: "linear-gradient(90deg, color-mix(in srgb, currentColor 18%, transparent) 0%, currentColor 50%, color-mix(in srgb, currentColor 18%, transparent) 100%)",
5771
5940
  backgroundSize: "200% 100%",
@@ -5774,8 +5943,8 @@ var SHIMMER_STYLE = {
5774
5943
  WebkitTextFillColor: "transparent"
5775
5944
  };
5776
5945
  function useShimmerSweep(durationMs = 2e3) {
5777
- const animationRef = useRef9(null);
5778
- return useCallback7(
5946
+ const animationRef = useRef10(null);
5947
+ return useCallback8(
5779
5948
  (el) => {
5780
5949
  animationRef.current?.cancel();
5781
5950
  animationRef.current = null;
@@ -5793,7 +5962,7 @@ function useShimmerSweep(durationMs = 2e3) {
5793
5962
  }
5794
5963
  function ShimmerText({ text, className }) {
5795
5964
  const ref = useShimmerSweep();
5796
- return /* @__PURE__ */ jsx35(
5965
+ return /* @__PURE__ */ jsx36(
5797
5966
  "span",
5798
5967
  {
5799
5968
  ref,
@@ -5850,24 +6019,24 @@ function formThemeClasses(theme) {
5850
6019
 
5851
6020
  // src/first-use-hint.tsx
5852
6021
  import * as PopoverPrimitive2 from "@radix-ui/react-popover";
5853
- import { Slot as Slot3 } from "@radix-ui/react-slot";
5854
- import * as React27 from "react";
5855
- import { Fragment as Fragment7, jsx as jsx36, jsxs as jsxs20 } from "react/jsx-runtime";
6022
+ import { Slot as Slot4 } from "@radix-ui/react-slot";
6023
+ import * as React28 from "react";
6024
+ import { Fragment as Fragment8, jsx as jsx37, jsxs as jsxs21 } from "react/jsx-runtime";
5856
6025
  var FIRST_USE_HINT_TITLE_MAX = 32;
5857
6026
  var FIRST_USE_HINT_DETAIL_MAX = 60;
5858
- var FirstUseHintContext = React27.createContext(null);
6027
+ var FirstUseHintContext = React28.createContext(null);
5859
6028
  function FirstUseHintProvider({
5860
6029
  store,
5861
6030
  children
5862
6031
  }) {
5863
- return /* @__PURE__ */ jsx36(FirstUseHintContext.Provider, { value: store, children });
6032
+ return /* @__PURE__ */ jsx37(FirstUseHintContext.Provider, { value: store, children });
5864
6033
  }
5865
6034
  var sessionLearned = /* @__PURE__ */ new Set();
5866
6035
  var warnedNoProvider = false;
5867
6036
  function useFirstUseHint(id) {
5868
- const store = React27.useContext(FirstUseHintContext);
5869
- const [, rerender] = React27.useReducer((n) => n + 1, 0);
5870
- const [dismissed, setDismissed] = React27.useState(false);
6037
+ const store = React28.useContext(FirstUseHintContext);
6038
+ const [, rerender] = React28.useReducer((n) => n + 1, 0);
6039
+ const [dismissed, setDismissed] = React28.useState(false);
5871
6040
  if (!store && !warnedNoProvider) {
5872
6041
  warnedNoProvider = true;
5873
6042
  console.warn(
@@ -5876,7 +6045,7 @@ function useFirstUseHint(id) {
5876
6045
  }
5877
6046
  const learned = store ? store.learned.includes(id) : sessionLearned.has(id);
5878
6047
  const ready = store ? store.ready : true;
5879
- const learn = React27.useCallback(() => {
6048
+ const learn = React28.useCallback(() => {
5880
6049
  setDismissed(true);
5881
6050
  if (store) {
5882
6051
  if (!store.learned.includes(id)) store.learn(id);
@@ -5899,11 +6068,11 @@ function FirstUseHint({
5899
6068
  pulse,
5900
6069
  children
5901
6070
  }) {
5902
- const hostRef = React27.useRef(null);
6071
+ const hostRef = React28.useRef(null);
5903
6072
  const { visible, learn } = useFirstUseHint(id);
5904
6073
  const eligible = visible && when;
5905
- const [shown, setShown] = React27.useState(false);
5906
- React27.useEffect(() => {
6074
+ const [shown, setShown] = React28.useState(false);
6075
+ React28.useEffect(() => {
5907
6076
  if (!eligible) {
5908
6077
  setShown(false);
5909
6078
  return void 0;
@@ -5920,11 +6089,11 @@ function FirstUseHint({
5920
6089
  }
5921
6090
  const open = eligible && shown;
5922
6091
  const beaconOn = open && beacon !== "none";
5923
- const target = React27.useCallback(
6092
+ const target = React28.useCallback(
5924
6093
  () => pulse ? hostRef.current?.querySelector(pulse) ?? hostRef.current : hostRef.current,
5925
6094
  [pulse]
5926
6095
  );
5927
- React27.useEffect(() => {
6096
+ React28.useEffect(() => {
5928
6097
  if (!pulse || !beaconOn) return void 0;
5929
6098
  const el = target();
5930
6099
  if (!el || el === hostRef.current) return void 0;
@@ -5935,7 +6104,7 @@ function FirstUseHint({
5935
6104
  el.removeAttribute("data-matrx-hint-beacon");
5936
6105
  };
5937
6106
  }, [pulse, beaconOn, beacon, target]);
5938
- const virtualRef = React27.useMemo(
6107
+ const virtualRef = React28.useMemo(
5939
6108
  () => ({
5940
6109
  current: {
5941
6110
  getBoundingClientRect: () => target()?.getBoundingClientRect() ?? new DOMRect()
@@ -5943,10 +6112,10 @@ function FirstUseHint({
5943
6112
  }),
5944
6113
  [target]
5945
6114
  );
5946
- return /* @__PURE__ */ jsxs20(Popover, { open, children: [
5947
- pulse ? /* @__PURE__ */ jsxs20(Fragment7, { children: [
5948
- /* @__PURE__ */ jsx36(
5949
- Slot3,
6115
+ return /* @__PURE__ */ jsxs21(Popover, { open, children: [
6116
+ pulse ? /* @__PURE__ */ jsxs21(Fragment8, { children: [
6117
+ /* @__PURE__ */ jsx37(
6118
+ Slot4,
5950
6119
  {
5951
6120
  ref: hostRef,
5952
6121
  "data-matrx-first-use-hint": open ? id : void 0,
@@ -5954,8 +6123,8 @@ function FirstUseHint({
5954
6123
  children
5955
6124
  }
5956
6125
  ),
5957
- /* @__PURE__ */ jsx36(PopoverAnchor, { virtualRef })
5958
- ] }) : /* @__PURE__ */ jsx36(
6126
+ /* @__PURE__ */ jsx37(PopoverAnchor, { virtualRef })
6127
+ ] }) : /* @__PURE__ */ jsx37(
5959
6128
  PopoverAnchor,
5960
6129
  {
5961
6130
  asChild: true,
@@ -5967,7 +6136,7 @@ function FirstUseHint({
5967
6136
  children
5968
6137
  }
5969
6138
  ),
5970
- /* @__PURE__ */ jsxs20(
6139
+ /* @__PURE__ */ jsxs21(
5971
6140
  PopoverContent,
5972
6141
  {
5973
6142
  side,
@@ -5984,17 +6153,17 @@ function FirstUseHint({
5984
6153
  onInteractOutside: (e) => e.preventDefault(),
5985
6154
  onEscapeKeyDown: learn,
5986
6155
  children: [
5987
- /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-1 py-0.5 pl-3 pr-0.5", children: [
5988
- /* @__PURE__ */ jsxs20("div", { className: "flex min-w-0 flex-col py-1", children: [
5989
- /* @__PURE__ */ jsx36("span", { className: "type-secondary truncate font-medium text-foreground", children: title }),
6156
+ /* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-1 py-0.5 pl-3 pr-0.5", children: [
6157
+ /* @__PURE__ */ jsxs21("div", { className: "flex min-w-0 flex-col py-1", children: [
6158
+ /* @__PURE__ */ jsx37("span", { className: "type-secondary truncate font-medium text-foreground", children: title }),
5990
6159
  detail ? (
5991
6160
  // Two lines at most: on a 375px phone a full 60-character line can wrap once.
5992
- /* @__PURE__ */ jsx36("span", { className: "type-secondary line-clamp-2 text-muted-foreground", children: detail })
6161
+ /* @__PURE__ */ jsx37("span", { className: "type-secondary line-clamp-2 text-muted-foreground", children: detail })
5993
6162
  ) : null
5994
6163
  ] }),
5995
- /* @__PURE__ */ jsx36(IconButton, { icon: XIcon, "aria-label": "Dismiss tip", className: "shrink-0", onClick: learn })
6164
+ /* @__PURE__ */ jsx37(IconButton, { icon: XIcon, "aria-label": "Dismiss tip", className: "shrink-0", onClick: learn })
5996
6165
  ] }),
5997
- /* @__PURE__ */ jsx36(PopoverPrimitive2.Arrow, { className: "fill-popover", width: 10, height: 5 })
6166
+ /* @__PURE__ */ jsx37(PopoverPrimitive2.Arrow, { className: "fill-popover", width: 10, height: 5 })
5998
6167
  ]
5999
6168
  }
6000
6169
  )
@@ -6002,8 +6171,8 @@ function FirstUseHint({
6002
6171
  }
6003
6172
 
6004
6173
  // src/review-changes.tsx
6005
- import * as React28 from "react";
6006
- import { jsx as jsx37, jsxs as jsxs21 } from "react/jsx-runtime";
6174
+ import * as React29 from "react";
6175
+ import { jsx as jsx38, jsxs as jsxs22 } from "react/jsx-runtime";
6007
6176
  var SKIP = "skip";
6008
6177
  function unansweredQuestions(preview, answers) {
6009
6178
  return preview.questions.filter((q) => !answers[q.id]);
@@ -6016,16 +6185,16 @@ function acceptSuggestions(preview, answers) {
6016
6185
  for (const q of preview.questions) if (!next[q.id] && q.suggested) next[q.id] = q.suggested;
6017
6186
  return next;
6018
6187
  }
6019
- var RenderItemContext = React28.createContext(void 0);
6188
+ var RenderItemContext = React29.createContext(void 0);
6020
6189
  function ItemDoor({ item, onOpenItem }) {
6021
- const renderItem = React28.useContext(RenderItemContext);
6190
+ const renderItem = React29.useContext(RenderItemContext);
6022
6191
  const hosted = renderItem ? renderItem(item) : null;
6023
6192
  if (hosted != null) {
6024
- return /* @__PURE__ */ jsx37("span", { "data-change-item": item.id, className: "inline-flex max-w-full items-center", children: hosted });
6193
+ return /* @__PURE__ */ jsx38("span", { "data-change-item": item.id, className: "inline-flex max-w-full items-center", children: hosted });
6025
6194
  }
6026
6195
  const title = item.title?.trim() || "Untitled";
6027
- return /* @__PURE__ */ jsxs21("span", { "data-change-item": item.id, className: "inline-flex max-w-full items-center gap-0.5", children: [
6028
- /* @__PURE__ */ jsx37(
6196
+ return /* @__PURE__ */ jsxs22("span", { "data-change-item": item.id, className: "inline-flex max-w-full items-center gap-0.5", children: [
6197
+ /* @__PURE__ */ jsx38(
6029
6198
  Button2,
6030
6199
  {
6031
6200
  type: "button",
@@ -6036,12 +6205,12 @@ function ItemDoor({ item, onOpenItem }) {
6036
6205
  children: title
6037
6206
  }
6038
6207
  ),
6039
- /* @__PURE__ */ jsx37(
6208
+ /* @__PURE__ */ jsx38(
6040
6209
  Button2,
6041
6210
  {
6042
6211
  type: "button",
6043
6212
  variant: "quiet",
6044
- icon: /* @__PURE__ */ jsx37(ExternalLinkIcon, {}),
6213
+ icon: /* @__PURE__ */ jsx38(ExternalLinkIcon, {}),
6045
6214
  "data-clickable": "",
6046
6215
  "aria-label": `Open ${title} in a new tab`,
6047
6216
  className: "shrink-0",
@@ -6053,9 +6222,9 @@ function ItemDoor({ item, onOpenItem }) {
6053
6222
  function Doors({ items, total, onOpenItem }) {
6054
6223
  if (!items.length) return null;
6055
6224
  const more = (total ?? items.length) - items.length;
6056
- return /* @__PURE__ */ jsxs21("span", { className: "flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1", children: [
6057
- items.map((item) => /* @__PURE__ */ jsx37(ItemDoor, { item, onOpenItem }, `${item.table ?? item.type}:${item.id}`)),
6058
- more > 0 ? /* @__PURE__ */ jsxs21("span", { className: "text-xs text-muted-foreground", children: [
6225
+ return /* @__PURE__ */ jsxs22("span", { className: "flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1", children: [
6226
+ items.map((item) => /* @__PURE__ */ jsx38(ItemDoor, { item, onOpenItem }, `${item.table ?? item.type}:${item.id}`)),
6227
+ more > 0 ? /* @__PURE__ */ jsxs22("span", { className: "text-xs text-muted-foreground", children: [
6059
6228
  "+",
6060
6229
  more,
6061
6230
  " more"
@@ -6063,17 +6232,17 @@ function Doors({ items, total, onOpenItem }) {
6063
6232
  ] });
6064
6233
  }
6065
6234
  function Row({ title, meta, children }) {
6066
- return /* @__PURE__ */ jsxs21("div", { "data-change-row": "", className: "flex flex-col gap-1 px-3 py-2", children: [
6067
- /* @__PURE__ */ jsxs21("div", { className: "flex items-baseline justify-between gap-3", children: [
6068
- /* @__PURE__ */ jsx37("span", { className: "min-w-0 text-sm text-foreground", children: title }),
6069
- meta ? /* @__PURE__ */ jsx37("span", { className: "shrink-0 text-xs text-muted-foreground", children: meta }) : null
6235
+ return /* @__PURE__ */ jsxs22("div", { "data-change-row": "", className: "flex flex-col gap-1 px-3 py-2", children: [
6236
+ /* @__PURE__ */ jsxs22("div", { className: "flex items-baseline justify-between gap-3", children: [
6237
+ /* @__PURE__ */ jsx38("span", { className: "min-w-0 text-sm text-foreground", children: title }),
6238
+ meta ? /* @__PURE__ */ jsx38("span", { className: "shrink-0 text-xs text-muted-foreground", children: meta }) : null
6070
6239
  ] }),
6071
6240
  children
6072
6241
  ] });
6073
6242
  }
6074
6243
  function Alarm({ warning, onOpenItem }) {
6075
6244
  const items = [...warning.items ?? [], ...warning.users ?? []];
6076
- return /* @__PURE__ */ jsxs21(
6245
+ return /* @__PURE__ */ jsxs22(
6077
6246
  "div",
6078
6247
  {
6079
6248
  role: "alert",
@@ -6081,8 +6250,8 @@ function Alarm({ warning, onOpenItem }) {
6081
6250
  "data-severity": warning.severity,
6082
6251
  className: "flex flex-col gap-1.5 rounded-group border border-destructive bg-destructive/10 px-3 py-2",
6083
6252
  children: [
6084
- /* @__PURE__ */ jsx37("span", { className: "text-sm font-medium text-foreground", children: warning.message }),
6085
- /* @__PURE__ */ jsx37(Doors, { items, total: warning.count ?? items.length, onOpenItem })
6253
+ /* @__PURE__ */ jsx38("span", { className: "text-sm font-medium text-foreground", children: warning.message }),
6254
+ /* @__PURE__ */ jsx38(Doors, { items, total: warning.count ?? items.length, onOpenItem })
6086
6255
  ]
6087
6256
  }
6088
6257
  );
@@ -6099,10 +6268,10 @@ function Question({ question, answer, onAnswer, onOpenItem, disabled }) {
6099
6268
  const suggested = !question.suggested ? null : yes && question.suggested === yes.value ? "yes" : noOption && question.suggested === noOption.value ? "no" : "other";
6100
6269
  const wayOut = rest.map((o) => ({ value: o.value, label: o.label }));
6101
6270
  const chosen = [...question.options, ...question.way_out].find((o) => o.value === answer);
6102
- return /* @__PURE__ */ jsxs21("div", { "data-change-question": question.id, "data-kind": question.kind, className: "flex flex-col gap-1.5 px-3 py-2", children: [
6103
- /* @__PURE__ */ jsx37("span", { className: "text-sm text-foreground", children: question.prompt }),
6104
- /* @__PURE__ */ jsx37(Doors, { items: question.items.sample, total: question.items.count, onOpenItem }),
6105
- /* @__PURE__ */ jsx37(
6271
+ return /* @__PURE__ */ jsxs22("div", { "data-change-question": question.id, "data-kind": question.kind, className: "flex flex-col gap-1.5 px-3 py-2", children: [
6272
+ /* @__PURE__ */ jsx38("span", { className: "text-sm text-foreground", children: question.prompt }),
6273
+ /* @__PURE__ */ jsx38(Doors, { items: question.items.sample, total: question.items.count, onOpenItem }),
6274
+ /* @__PURE__ */ jsx38(
6106
6275
  DecisionControl,
6107
6276
  {
6108
6277
  value,
@@ -6124,7 +6293,7 @@ function Question({ question, answer, onAnswer, onOpenItem, disabled }) {
6124
6293
  "aria-label": question.prompt
6125
6294
  }
6126
6295
  ),
6127
- chosen?.consequence ? /* @__PURE__ */ jsx37("span", { className: "text-xs text-muted-foreground", children: chosen.consequence }) : null
6296
+ chosen?.consequence ? /* @__PURE__ */ jsx38("span", { className: "text-xs text-muted-foreground", children: chosen.consequence }) : null
6128
6297
  ] });
6129
6298
  }
6130
6299
  var VERB_WORDS = {
@@ -6133,7 +6302,7 @@ var VERB_WORDS = {
6133
6302
  move: { goes: "Moves with it", commit: "Move" }
6134
6303
  };
6135
6304
  function ReviewChanges({ renderItem, ...props }) {
6136
- return /* @__PURE__ */ jsx37(RenderItemContext.Provider, { value: renderItem, children: /* @__PURE__ */ jsx37(ReviewChangesBody, { ...props }) });
6305
+ return /* @__PURE__ */ jsx38(RenderItemContext.Provider, { value: renderItem, children: /* @__PURE__ */ jsx38(ReviewChangesBody, { ...props }) });
6137
6306
  }
6138
6307
  function ReviewChangesBody({ preview, answers, onAnswer, onOpenItem, onCommit, onCancel, busy, commitLabel, className }) {
6139
6308
  const words = VERB_WORDS[preview.verb] ?? { goes: "Changes with it", commit: "Apply" };
@@ -6147,33 +6316,33 @@ function ReviewChangesBody({ preview, answers, onAnswer, onOpenItem, onCommit, o
6147
6316
  const suggestible = pending.filter((q) => q.suggested);
6148
6317
  const ready = canCommitChanges(preview, answers);
6149
6318
  const target = preview.target_organization?.name;
6150
- return /* @__PURE__ */ jsxs21("div", { "data-review-changes": "", "data-verb": preview.verb, className: cn("flex min-h-0 flex-col gap-3", className), children: [
6151
- alarms.map((w, i) => /* @__PURE__ */ jsx37(Alarm, { warning: w, onOpenItem }, `${w.kind}:${i}`)),
6152
- /* @__PURE__ */ jsx37(RowGroup, { title: preview.verb === "move" && target ? `Moving to ${target}` : void 0, children: /* @__PURE__ */ jsx37(Row, { title: /* @__PURE__ */ jsx37(Doors, { items: preview.roots, onOpenItem }) }) }),
6153
- moving.length ? /* @__PURE__ */ jsx37(RowGroup, { title: words.goes, children: moving.map((g) => /* @__PURE__ */ jsx37(Row, { title: g.noun, meta: `${g.count_is_estimate ? "about " : ""}${g.count}`, children: /* @__PURE__ */ jsx37(Doors, { items: g.sample, total: g.count, onOpenItem }) }, `${g.rule_id ?? "root"}:${g.table ?? g.type}`)) }) : null,
6154
- kept.length || staying.length ? /* @__PURE__ */ jsxs21(RowGroup, { title: "Stays where it is", children: [
6155
- kept.map((w, i) => /* @__PURE__ */ jsx37(Row, { title: w.message ?? w.noun ?? "Used elsewhere", meta: w.count ?? void 0, children: /* @__PURE__ */ jsx37(Doors, { items: w.items ?? [], total: w.count, onOpenItem }) }, `kept:${i}`)),
6156
- staying.map((g) => /* @__PURE__ */ jsx37(Row, { title: g.noun, meta: g.count, children: /* @__PURE__ */ jsx37(Doors, { items: g.sample, total: g.count, onOpenItem }) }, `stay:${g.table ?? g.type}`))
6319
+ return /* @__PURE__ */ jsxs22("div", { "data-review-changes": "", "data-verb": preview.verb, className: cn("flex min-h-0 flex-col gap-3", className), children: [
6320
+ alarms.map((w, i) => /* @__PURE__ */ jsx38(Alarm, { warning: w, onOpenItem }, `${w.kind}:${i}`)),
6321
+ /* @__PURE__ */ jsx38(RowGroup, { title: preview.verb === "move" && target ? `Moving to ${target}` : void 0, children: /* @__PURE__ */ jsx38(Row, { title: /* @__PURE__ */ jsx38(Doors, { items: preview.roots, onOpenItem }) }) }),
6322
+ moving.length ? /* @__PURE__ */ jsx38(RowGroup, { title: words.goes, children: moving.map((g) => /* @__PURE__ */ jsx38(Row, { title: g.noun, meta: `${g.count_is_estimate ? "about " : ""}${g.count}`, children: /* @__PURE__ */ jsx38(Doors, { items: g.sample, total: g.count, onOpenItem }) }, `${g.rule_id ?? "root"}:${g.table ?? g.type}`)) }) : null,
6323
+ kept.length || staying.length ? /* @__PURE__ */ jsxs22(RowGroup, { title: "Stays where it is", children: [
6324
+ kept.map((w, i) => /* @__PURE__ */ jsx38(Row, { title: w.message ?? w.noun ?? "Used elsewhere", meta: w.count ?? void 0, children: /* @__PURE__ */ jsx38(Doors, { items: w.items ?? [], total: w.count, onOpenItem }) }, `kept:${i}`)),
6325
+ staying.map((g) => /* @__PURE__ */ jsx38(Row, { title: g.noun, meta: g.count, children: /* @__PURE__ */ jsx38(Doors, { items: g.sample, total: g.count, onOpenItem }) }, `stay:${g.table ?? g.type}`))
6157
6326
  ] }) : null,
6158
- preview.questions.length ? /* @__PURE__ */ jsx37(RowGroup, { title: "Decide", children: preview.questions.map((q) => /* @__PURE__ */ jsx37(Question, { question: q, answer: answers[q.id], onAnswer, onOpenItem, disabled: busy }, q.id)) }) : null,
6159
- auto || unchecked ? /* @__PURE__ */ jsxs21("div", { className: "flex flex-wrap gap-2 px-1", children: [
6160
- auto ? /* @__PURE__ */ jsx37(Badge, { tone: "neutral", children: `${auto.count ?? ""} decided automatically`.trim() }) : null,
6161
- unchecked ? /* @__PURE__ */ jsx37(Badge, { tone: "neutral", children: "Links inside text not checked" }) : null
6327
+ preview.questions.length ? /* @__PURE__ */ jsx38(RowGroup, { title: "Decide", children: preview.questions.map((q) => /* @__PURE__ */ jsx38(Question, { question: q, answer: answers[q.id], onAnswer, onOpenItem, disabled: busy }, q.id)) }) : null,
6328
+ auto || unchecked ? /* @__PURE__ */ jsxs22("div", { className: "flex flex-wrap gap-2 px-1", children: [
6329
+ auto ? /* @__PURE__ */ jsx38(Badge, { tone: "neutral", children: `${auto.count ?? ""} decided automatically`.trim() }) : null,
6330
+ unchecked ? /* @__PURE__ */ jsx38(Badge, { tone: "neutral", children: "Links inside text not checked" }) : null
6162
6331
  ] }) : null,
6163
- /* @__PURE__ */ jsxs21("div", { "data-review-changes-actions": "", className: "flex flex-wrap items-center justify-end gap-2", children: [
6164
- suggestible.length ? /* @__PURE__ */ jsx37(Button2, { variant: "quiet", disabled: busy, onClick: () => suggestible.forEach((q) => onAnswer(q.id, q.suggested)), children: "Accept suggestions" }) : null,
6165
- /* @__PURE__ */ jsx37(Button2, { variant: "outline", disabled: busy, onClick: onCancel, children: "Cancel" }),
6166
- /* @__PURE__ */ jsx37(Button2, { variant: preview.verb === "delete" ? "danger" : "primary", disabled: busy || !ready, onClick: onCommit, children: commitLabel ?? words.commit })
6332
+ /* @__PURE__ */ jsxs22("div", { "data-review-changes-actions": "", className: "flex flex-wrap items-center justify-end gap-2", children: [
6333
+ suggestible.length ? /* @__PURE__ */ jsx38(Button2, { variant: "quiet", disabled: busy, onClick: () => suggestible.forEach((q) => onAnswer(q.id, q.suggested)), children: "Accept suggestions" }) : null,
6334
+ /* @__PURE__ */ jsx38(Button2, { variant: "outline", disabled: busy, onClick: onCancel, children: "Cancel" }),
6335
+ /* @__PURE__ */ jsx38(Button2, { variant: preview.verb === "delete" ? "danger" : "primary", disabled: busy || !ready, onClick: onCommit, children: commitLabel ?? words.commit })
6167
6336
  ] })
6168
6337
  ] });
6169
6338
  }
6170
6339
 
6171
6340
  // src/grid-canvas/grid-canvas.tsx
6172
6341
  import {
6173
- useEffect as useEffect10,
6342
+ useEffect as useEffect11,
6174
6343
  useLayoutEffect as useLayoutEffect3,
6175
- useRef as useRef11,
6176
- useState as useState16
6344
+ useRef as useRef12,
6345
+ useState as useState17
6177
6346
  } from "react";
6178
6347
 
6179
6348
  // src/grid-canvas/layout.ts
@@ -6334,7 +6503,7 @@ function insertLines(boxes, id, line, col, cols) {
6334
6503
  }
6335
6504
 
6336
6505
  // src/grid-canvas/grid-canvas.tsx
6337
- import { jsx as jsx38, jsxs as jsxs22 } from "react/jsx-runtime";
6506
+ import { jsx as jsx39, jsxs as jsxs23 } from "react/jsx-runtime";
6338
6507
  var GRID_CANVAS_COLUMNS = { lg: 12, sm: 4 };
6339
6508
  var GRID_CANVAS_PHONE_MAX_PX = 640;
6340
6509
  var GRID_CANVAS_ROW_PX = 24;
@@ -6378,7 +6547,7 @@ function resolveGridCanvas(items, fit = "cells") {
6378
6547
  }
6379
6548
  var sameGrid = (a, b) => a.length === b.length && a.every((x, i) => x.x === b[i].x && x.y === b[i].y && x.w === b[i].w && x.h === b[i].h);
6380
6549
  function useBreakpoint(ref) {
6381
- const [breakpoint, setBreakpoint] = useState16("lg");
6550
+ const [breakpoint, setBreakpoint] = useState17("lg");
6382
6551
  useLayoutEffect3(() => {
6383
6552
  const el = ref.current;
6384
6553
  if (!el) return;
@@ -6406,14 +6575,14 @@ function GridCanvas({
6406
6575
  className,
6407
6576
  "aria-label": ariaLabel
6408
6577
  }) {
6409
- const rootRef = useRef11(null);
6578
+ const rootRef = useRef12(null);
6410
6579
  const breakpoint = useBreakpoint(rootRef);
6411
6580
  const resolved = resolveGridCanvas(items, fit);
6412
- const [preview, setPreview] = useState16(null);
6413
- const gesture = useRef11(null);
6414
- const itemEls = useRef11(/* @__PURE__ */ new Map());
6415
- const [announcement, setAnnouncement] = useState16("");
6416
- useEffect10(() => () => gesture.current?.handle.cancel(), []);
6581
+ const [preview, setPreview] = useState17(null);
6582
+ const gesture = useRef12(null);
6583
+ const itemEls = useRef12(/* @__PURE__ */ new Map());
6584
+ const [announcement, setAnnouncement] = useState17("");
6585
+ useEffect11(() => () => gesture.current?.handle.cancel(), []);
6417
6586
  const grids = {
6418
6587
  lg: preview?.breakpoint === "lg" ? preview.boxes : resolved.lg,
6419
6588
  sm: preview?.breakpoint === "sm" ? preview.boxes : resolved.sm
@@ -6509,7 +6678,7 @@ function GridCanvas({
6509
6678
  };
6510
6679
  const rows = { lg: gridRows(grids.lg), sm: gridRows(grids.sm) };
6511
6680
  const active = preview ? preview.boxes.find((b) => b.id === preview.id) : void 0;
6512
- return /* @__PURE__ */ jsxs22(
6681
+ return /* @__PURE__ */ jsxs23(
6513
6682
  "div",
6514
6683
  {
6515
6684
  ref: rootRef,
@@ -6529,8 +6698,8 @@ function GridCanvas({
6529
6698
  "--grid-rows-sm": preview?.breakpoint === "sm" ? rows.sm + 1 : rows.sm
6530
6699
  },
6531
6700
  children: [
6532
- /* @__PURE__ */ jsxs22("div", { className: "matrx-grid-canvas-field", children: [
6533
- active && preview ? /* @__PURE__ */ jsx38("div", { className: "matrx-grid-canvas-placeholder", "aria-hidden": true, style: placementVars(active, active) }) : null,
6701
+ /* @__PURE__ */ jsxs23("div", { className: "matrx-grid-canvas-field", children: [
6702
+ active && preview ? /* @__PURE__ */ jsx39("div", { className: "matrx-grid-canvas-placeholder", "aria-hidden": true, style: placementVars(active, active) }) : null,
6534
6703
  items.map((item, n) => {
6535
6704
  const lg = grids.lg[n];
6536
6705
  const sm = grids.sm[n];
@@ -6539,7 +6708,7 @@ function GridCanvas({
6539
6708
  const drawLg = moving && preview.breakpoint === "lg" ? startBox : lg;
6540
6709
  const drawSm = moving && preview.breakpoint === "sm" ? startBox : sm;
6541
6710
  const label = itemLabel?.(item.id);
6542
- return /* @__PURE__ */ jsxs22(
6711
+ return /* @__PURE__ */ jsxs23(
6543
6712
  "div",
6544
6713
  {
6545
6714
  ref: (el) => {
@@ -6555,8 +6724,8 @@ function GridCanvas({
6555
6724
  onPointerDown: editable ? (e) => onItemPointerDown(e, item.id) : void 0,
6556
6725
  onKeyDown: editable ? (e) => onItemKeyDown(e, item.id) : void 0,
6557
6726
  children: [
6558
- /* @__PURE__ */ jsx38("div", { className: "matrx-grid-canvas-content", children: renderItem(item.id, { breakpoint, editing: editable }) }),
6559
- editable ? /* @__PURE__ */ jsx38(
6727
+ /* @__PURE__ */ jsx39("div", { className: "matrx-grid-canvas-content", children: renderItem(item.id, { breakpoint, editing: editable }) }),
6728
+ editable ? /* @__PURE__ */ jsx39(
6560
6729
  "span",
6561
6730
  {
6562
6731
  className: "matrx-grid-canvas-resize",
@@ -6571,7 +6740,7 @@ function GridCanvas({
6571
6740
  );
6572
6741
  })
6573
6742
  ] }),
6574
- /* @__PURE__ */ jsx38("span", { className: "matrx-grid-canvas-live", "aria-live": "polite", children: announcement })
6743
+ /* @__PURE__ */ jsx39("span", { className: "matrx-grid-canvas-live", "aria-live": "polite", children: announcement })
6575
6744
  ]
6576
6745
  }
6577
6746
  );
@@ -6641,6 +6810,8 @@ export {
6641
6810
  AppRailSpacer,
6642
6811
  ArchiveFilter,
6643
6812
  ArchivedDisclosure,
6813
+ AssistPeekCard,
6814
+ AssistPeekHover,
6644
6815
  AuthGateDialog,
6645
6816
  Avatar,
6646
6817
  AvatarFallback,