@weasel-js/ui 1.6.1 → 1.7.0

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 (340) hide show
  1. package/dist/chunks/Badge-CTc9Lkwn.js +14 -0
  2. package/dist/chunks/Badge-CTc9Lkwn.js.map +1 -0
  3. package/dist/chunks/{Badge-CyAIZSDo.js → Badge-D2aD7xVL.js} +277 -228
  4. package/dist/chunks/Badge-D2aD7xVL.js.map +1 -0
  5. package/dist/chunks/BandEditor-Dd0egAgE.js +292 -0
  6. package/dist/chunks/BandEditor-Dd0egAgE.js.map +1 -0
  7. package/dist/chunks/{ButtonBar-D5Vi0aj_.js → ButtonBar-DIQTe5GQ.js} +2 -2
  8. package/dist/chunks/{ButtonBar-D5Vi0aj_.js.map → ButtonBar-DIQTe5GQ.js.map} +1 -1
  9. package/dist/chunks/Callout-ndW5_Bqx.js +116 -0
  10. package/dist/chunks/Callout-ndW5_Bqx.js.map +1 -0
  11. package/dist/chunks/CloseButton-C2J7wVfo.js +26 -0
  12. package/dist/chunks/CloseButton-C2J7wVfo.js.map +1 -0
  13. package/dist/chunks/ColorField-Yz_BkcCT.js +69 -0
  14. package/dist/chunks/ColorField-Yz_BkcCT.js.map +1 -0
  15. package/dist/chunks/{ColorModeControl-ke5PXbBa.js → ColorModeControl-BewxA0rX.js} +3 -3
  16. package/dist/chunks/{ColorModeControl-ke5PXbBa.js.map → ColorModeControl-BewxA0rX.js.map} +1 -1
  17. package/dist/chunks/{ComboBox-DpT8lc3p.js → ComboBox-B34H76CW.js} +12 -12
  18. package/dist/chunks/ComboBox-B34H76CW.js.map +1 -0
  19. package/dist/chunks/{CurveEditor-BDJXjEvK.js → CurveEditor-DUVjd25R.js} +2 -2
  20. package/dist/chunks/{CurveEditor-BDJXjEvK.js.map → CurveEditor-DUVjd25R.js.map} +1 -1
  21. package/dist/chunks/{DataGrid-D-dZj1BD.js → DataGrid-LZ2JgY2Y.js} +17 -17
  22. package/dist/chunks/DataGrid-LZ2JgY2Y.js.map +1 -0
  23. package/dist/chunks/DetailList-BKomDzg5.js +52 -0
  24. package/dist/chunks/DetailList-BKomDzg5.js.map +1 -0
  25. package/dist/chunks/{DetentSlider-CL8TlX3S.js → DetentSlider-5uQPFucv.js} +2 -2
  26. package/dist/chunks/{DetentSlider-CL8TlX3S.js.map → DetentSlider-5uQPFucv.js.map} +1 -1
  27. package/dist/chunks/Dialog-DGFutQ--.js +63 -0
  28. package/dist/chunks/Dialog-DGFutQ--.js.map +1 -0
  29. package/dist/chunks/{Disclosure-0G0uh2fa.js → Disclosure-Ch2KxYuB.js} +7 -7
  30. package/dist/chunks/Disclosure-Ch2KxYuB.js.map +1 -0
  31. package/dist/chunks/{DragHandleGlyph-Dr7Fgo0I.js → DragGrip-AoIZXfZb.js} +2 -2
  32. package/dist/chunks/DragGrip-AoIZXfZb.js.map +1 -0
  33. package/dist/chunks/FallthroughDiagram-BEHiM5IS.js +284 -0
  34. package/dist/chunks/FallthroughDiagram-BEHiM5IS.js.map +1 -0
  35. package/dist/chunks/{FontFamilySelect-DXlMKWfK.js → FontFamilySelect-DkRgNtag.js} +2 -2
  36. package/dist/chunks/{FontFamilySelect-DXlMKWfK.js.map → FontFamilySelect-DkRgNtag.js.map} +1 -1
  37. package/dist/chunks/GestureRoute-C_YGl7bJ.js +82 -0
  38. package/dist/chunks/GestureRoute-C_YGl7bJ.js.map +1 -0
  39. package/dist/chunks/GradientEditor-b7v4Ph3i.js +363 -0
  40. package/dist/chunks/GradientEditor-b7v4Ph3i.js.map +1 -0
  41. package/dist/chunks/{Icon-Cgzy8VgC.js → Icon-CcVjdq2C.js} +31 -1
  42. package/dist/chunks/Icon-CcVjdq2C.js.map +1 -0
  43. package/dist/chunks/{InlineRange-eOj6JpJl.js → InlineRange-P01ABSzo.js} +3 -3
  44. package/dist/chunks/InlineRange-P01ABSzo.js.map +1 -0
  45. package/dist/chunks/{Jog-DESxZ44P.js → Jog-DRmfrkCg.js} +3 -3
  46. package/dist/chunks/{Jog-DESxZ44P.js.map → Jog-DRmfrkCg.js.map} +1 -1
  47. package/dist/chunks/{Keycaps-C0H_v2gO.js → Keycaps-C-FJyG8k.js} +14 -14
  48. package/dist/chunks/Keycaps-C-FJyG8k.js.map +1 -0
  49. package/dist/chunks/{LayerList-nz-QYvTF.js → LayerList-wCI1EueM.js} +148 -152
  50. package/dist/chunks/LayerList-wCI1EueM.js.map +1 -0
  51. package/dist/chunks/ListEditor-BeA60TAA.js +71 -0
  52. package/dist/chunks/ListEditor-BeA60TAA.js.map +1 -0
  53. package/dist/chunks/{MenuButton-DtaGenKf.js → MenuButton-BSqEChJE.js} +7 -7
  54. package/dist/chunks/MenuButton-BSqEChJE.js.map +1 -0
  55. package/dist/chunks/{MeshEditor-qqGc6hlD.js → MeshEditor-D1HLZcAh.js} +3 -3
  56. package/dist/chunks/{MeshEditor-qqGc6hlD.js.map → MeshEditor-D1HLZcAh.js.map} +1 -1
  57. package/dist/chunks/NumberField-BnJxcazc.js +206 -0
  58. package/dist/chunks/NumberField-BnJxcazc.js.map +1 -0
  59. package/dist/chunks/{OptionsBar-DbzAgIln.js → OptionsBar-ujxYidhj.js} +2 -2
  60. package/dist/chunks/{OptionsBar-DbzAgIln.js.map → OptionsBar-ujxYidhj.js.map} +1 -1
  61. package/dist/chunks/{PaintField-DaJukRc6.js → PaintField-DadOELMg.js} +2 -2
  62. package/dist/chunks/{PaintField-DaJukRc6.js.map → PaintField-DadOELMg.js.map} +1 -1
  63. package/dist/chunks/PaintInput-v8Y7MDbH.js +121 -0
  64. package/dist/chunks/PaintInput-v8Y7MDbH.js.map +1 -0
  65. package/dist/chunks/{PatternPicker-B-cUt-JT.js → PatternPicker-R_EQtw2Q.js} +2 -2
  66. package/dist/chunks/{PatternPicker-B-cUt-JT.js.map → PatternPicker-R_EQtw2Q.js.map} +1 -1
  67. package/dist/chunks/{PointPlotter-Bxo6haKe.js → PointPlotter-ldI4RrU1.js} +2 -2
  68. package/dist/chunks/{PointPlotter-Bxo6haKe.js.map → PointPlotter-ldI4RrU1.js.map} +1 -1
  69. package/dist/chunks/{Powerline-ExO5GwEr.js → Powerline-DNyH885r.js} +2 -2
  70. package/dist/chunks/{Powerline-ExO5GwEr.js.map → Powerline-DNyH885r.js.map} +1 -1
  71. package/dist/chunks/{Prefs-DpqFKiwY.js → Prefs-ByA-x51i.js} +46 -34
  72. package/dist/chunks/Prefs-ByA-x51i.js.map +1 -0
  73. package/dist/chunks/{Properties-D_KzDN9K.js → Properties-DmAeQ3mk.js} +35 -29
  74. package/dist/chunks/Properties-DmAeQ3mk.js.map +1 -0
  75. package/dist/chunks/PropertyField-DfIJJ5GS.js +673 -0
  76. package/dist/chunks/PropertyField-DfIJJ5GS.js.map +1 -0
  77. package/dist/chunks/{RangeSlider-BKRRTPTZ.js → RangeSlider-SEGE-7VF.js} +8 -8
  78. package/dist/chunks/RangeSlider-SEGE-7VF.js.map +1 -0
  79. package/dist/chunks/{ResizeHandle-BKT0XYpx.js → ResizeHandle-rKVWyeTG.js} +3 -3
  80. package/dist/chunks/ResizeHandle-rKVWyeTG.js.map +1 -0
  81. package/dist/chunks/Select-ClmKtyWg.js +229 -0
  82. package/dist/chunks/Select-ClmKtyWg.js.map +1 -0
  83. package/dist/chunks/SelectionPanel-BaQnX4Bs.js +106 -0
  84. package/dist/chunks/SelectionPanel-BaQnX4Bs.js.map +1 -0
  85. package/dist/chunks/SidebarPanel-BblDEz4G.js +53 -0
  86. package/dist/chunks/SidebarPanel-BblDEz4G.js.map +1 -0
  87. package/dist/chunks/Slider-YofwGOI4.js +389 -0
  88. package/dist/chunks/Slider-YofwGOI4.js.map +1 -0
  89. package/dist/chunks/{StatusBar-DzoPDY4k.js → StatusBar-Ca9Dvhhq.js} +6 -6
  90. package/dist/chunks/StatusBar-Ca9Dvhhq.js.map +1 -0
  91. package/dist/chunks/{SwatchGrid-BARC3rnF.js → SwatchGrid-BYvA8Bmh.js} +3 -3
  92. package/dist/chunks/SwatchGrid-BYvA8Bmh.js.map +1 -0
  93. package/dist/chunks/ThemeSwitcher-BlsInAmR.js +38 -0
  94. package/dist/chunks/ThemeSwitcher-BlsInAmR.js.map +1 -0
  95. package/dist/chunks/{Timeline--58F7MED.js → Timeline-B39cwfMB.js} +207 -203
  96. package/dist/chunks/Timeline-B39cwfMB.js.map +1 -0
  97. package/dist/chunks/{Toast-DNBb-24H.js → Toast-BF9GE0HC.js} +25 -27
  98. package/dist/chunks/Toast-BF9GE0HC.js.map +1 -0
  99. package/dist/chunks/{ToggleBar-DTjGeS0Q.js → ToggleBar-BTYkBXU9.js} +8 -8
  100. package/dist/chunks/ToggleBar-BTYkBXU9.js.map +1 -0
  101. package/dist/chunks/{TokenPanel-CMq7uydV.js → TokenPanel-CMDAOfYH.js} +5 -5
  102. package/dist/chunks/{TokenPanel-CMq7uydV.js.map → TokenPanel-CMDAOfYH.js.map} +1 -1
  103. package/dist/chunks/{ToolButton-CR4sQlxF.js → ToolButton-CAHBa08P.js} +6 -6
  104. package/dist/chunks/ToolButton-CAHBa08P.js.map +1 -0
  105. package/dist/chunks/{ToolOptionsBar-CtzTlaN2.js → ToolOptionsBar-D_GCrBAN.js} +8 -7
  106. package/dist/chunks/ToolOptionsBar-D_GCrBAN.js.map +1 -0
  107. package/dist/chunks/{ToolPalette-CKG9qY6P.js → ToolPalette-OOWN51Xx.js} +3 -3
  108. package/dist/chunks/ToolPalette-OOWN51Xx.js.map +1 -0
  109. package/dist/chunks/{Tree-DVOtc9R5.js → Tree-Cc8lIzgM.js} +2 -2
  110. package/dist/chunks/{Tree-DVOtc9R5.js.map → Tree-Cc8lIzgM.js.map} +1 -1
  111. package/dist/chunks/{createKeyframeLayer-Czj6Y235.js → createKeyframeLayer-DVl321_l.js} +15 -16
  112. package/dist/chunks/createKeyframeLayer-DVl321_l.js.map +1 -0
  113. package/dist/chunks/{icons-Dk8SRS8g.js → icons-BhcR1l64.js} +2 -2
  114. package/dist/chunks/icons-BhcR1l64.js.map +1 -0
  115. package/dist/chunks/{model-Du7Lta4C.js → model-BaF65rnX.js} +95 -90
  116. package/dist/chunks/model-BaF65rnX.js.map +1 -0
  117. package/dist/chunks/{prefField-Dnl7nmjQ.js → prefField-BopW9bjx.js} +17 -13
  118. package/dist/chunks/prefField-BopW9bjx.js.map +1 -0
  119. package/dist/chunks/segmentedControl.module-D6SzYJD7.js +11 -0
  120. package/dist/chunks/segmentedControl.module-D6SzYJD7.js.map +1 -0
  121. package/dist/chunks/{useReorderDragList-B_-5L5Gu.js → useReorderDragList-FCMoFIzH.js} +2 -2
  122. package/dist/chunks/useReorderDragList-FCMoFIzH.js.map +1 -0
  123. package/dist/components/Badge/bases/Powerline.d.ts.map +1 -1
  124. package/dist/components/Badge/bases/edgeProfiles.d.ts +31 -4
  125. package/dist/components/Badge/bases/edgeProfiles.d.ts.map +1 -1
  126. package/dist/components/Badge/index.d.ts +1 -0
  127. package/dist/components/Badge/index.d.ts.map +1 -1
  128. package/dist/components/Badge/index.js +3 -2
  129. package/dist/components/Badge/statusIcons.d.ts +5 -0
  130. package/dist/components/Badge/statusIcons.d.ts.map +1 -0
  131. package/dist/components/BandEditor/BandEditor.d.ts +16 -7
  132. package/dist/components/BandEditor/BandEditor.d.ts.map +1 -1
  133. package/dist/components/BandEditor/bands.d.ts +5 -2
  134. package/dist/components/BandEditor/bands.d.ts.map +1 -1
  135. package/dist/components/BandEditor/index.js +1 -1
  136. package/dist/components/ButtonBar/index.js +1 -1
  137. package/dist/components/Callout/Callout.d.ts +2 -2
  138. package/dist/components/Callout/Callout.d.ts.map +1 -1
  139. package/dist/components/Callout/index.js +1 -1
  140. package/dist/components/CloseButton/CloseButton.d.ts +21 -0
  141. package/dist/components/CloseButton/CloseButton.d.ts.map +1 -0
  142. package/dist/components/CloseButton/index.d.ts +3 -0
  143. package/dist/components/CloseButton/index.d.ts.map +1 -0
  144. package/dist/components/CloseButton/index.js +2 -0
  145. package/dist/components/ColorField/ColorField.d.ts +5 -1
  146. package/dist/components/ColorField/ColorField.d.ts.map +1 -1
  147. package/dist/components/ColorField/index.js +1 -1
  148. package/dist/components/ColorModeControl/index.js +1 -1
  149. package/dist/components/ComboBox/index.js +1 -1
  150. package/dist/components/CurveEditor/index.js +2 -2
  151. package/dist/components/DataGrid/index.js +1 -1
  152. package/dist/components/DetailList/DetailList.d.ts +31 -5
  153. package/dist/components/DetailList/DetailList.d.ts.map +1 -1
  154. package/dist/components/DetailList/index.d.ts +1 -1
  155. package/dist/components/DetailList/index.d.ts.map +1 -1
  156. package/dist/components/DetailList/index.js +1 -1
  157. package/dist/components/DetentSlider/index.js +1 -1
  158. package/dist/components/Dialog/Dialog.d.ts.map +1 -1
  159. package/dist/components/Dialog/index.js +1 -1
  160. package/dist/components/Disclosure/Disclosure.d.ts +1 -1
  161. package/dist/components/Disclosure/index.js +1 -1
  162. package/dist/components/{DragHandleGlyph/DragHandleGlyph.d.ts → DragGrip/DragGrip.d.ts} +4 -4
  163. package/dist/components/DragGrip/DragGrip.d.ts.map +1 -0
  164. package/dist/components/DragGrip/index.d.ts +3 -0
  165. package/dist/components/DragGrip/index.d.ts.map +1 -0
  166. package/dist/components/DragGrip/index.js +2 -0
  167. package/dist/components/FallthroughDiagram/FallthroughDiagram.d.ts +14 -0
  168. package/dist/components/FallthroughDiagram/FallthroughDiagram.d.ts.map +1 -0
  169. package/dist/components/FallthroughDiagram/fixtures.d.ts +17 -0
  170. package/dist/components/FallthroughDiagram/fixtures.d.ts.map +1 -0
  171. package/dist/components/FallthroughDiagram/index.d.ts +3 -0
  172. package/dist/components/FallthroughDiagram/index.d.ts.map +1 -0
  173. package/dist/components/FallthroughDiagram/index.js +2 -0
  174. package/dist/components/FontFamilySelect/index.js +1 -1
  175. package/dist/components/GestureRoute/GestureRoute.d.ts +19 -0
  176. package/dist/components/GestureRoute/GestureRoute.d.ts.map +1 -0
  177. package/dist/components/GestureRoute/index.d.ts +3 -0
  178. package/dist/components/GestureRoute/index.d.ts.map +1 -0
  179. package/dist/components/GestureRoute/index.js +2 -0
  180. package/dist/components/GradientEditor/GradientEditor.d.ts +22 -8
  181. package/dist/components/GradientEditor/GradientEditor.d.ts.map +1 -1
  182. package/dist/components/GradientEditor/index.js +1 -1
  183. package/dist/components/InlineRange/index.js +1 -1
  184. package/dist/components/Jog/index.js +1 -1
  185. package/dist/components/Keycaps/Keycaps.d.ts +11 -5
  186. package/dist/components/Keycaps/Keycaps.d.ts.map +1 -1
  187. package/dist/components/Keycaps/index.d.ts +1 -1
  188. package/dist/components/Keycaps/index.d.ts.map +1 -1
  189. package/dist/components/Keycaps/index.js +1 -1
  190. package/dist/components/LayerList/LayerList.d.ts +1 -1
  191. package/dist/components/LayerList/LayerList.d.ts.map +1 -1
  192. package/dist/components/LayerList/index.js +1 -1
  193. package/dist/components/ListEditor/ListEditor.d.ts.map +1 -1
  194. package/dist/components/ListEditor/index.js +1 -1
  195. package/dist/components/MenuButton/index.js +1 -1
  196. package/dist/components/MeshEditor/index.js +1 -1
  197. package/dist/components/NumberField/UnitField.d.ts +20 -7
  198. package/dist/components/NumberField/UnitField.d.ts.map +1 -1
  199. package/dist/components/NumberField/index.js +1 -1
  200. package/dist/components/OptionsBar/index.js +1 -1
  201. package/dist/components/PaintField/index.js +1 -1
  202. package/dist/components/PaintInput/PaintInput.d.ts.map +1 -1
  203. package/dist/components/PaintInput/index.js +1 -1
  204. package/dist/components/PatternPicker/index.js +1 -1
  205. package/dist/components/PointPlotter/index.js +1 -1
  206. package/dist/components/Powerline/index.d.ts +1 -1
  207. package/dist/components/Powerline/index.d.ts.map +1 -1
  208. package/dist/components/Powerline/index.js +2 -2
  209. package/dist/components/Prefs/PrefsRow.d.ts.map +1 -1
  210. package/dist/components/Prefs/index.d.ts +1 -1
  211. package/dist/components/Prefs/index.d.ts.map +1 -1
  212. package/dist/components/Prefs/index.js +2 -2
  213. package/dist/components/Prefs/prefField.d.ts.map +1 -1
  214. package/dist/components/Prefs/schema.d.ts +2 -2
  215. package/dist/components/Prefs/schema.d.ts.map +1 -1
  216. package/dist/components/Properties/PropertyField.d.ts +22 -30
  217. package/dist/components/Properties/PropertyField.d.ts.map +1 -1
  218. package/dist/components/Properties/PropertyGroup.d.ts.map +1 -1
  219. package/dist/components/Properties/PropertyPanel.d.ts +1 -8
  220. package/dist/components/Properties/PropertyPanel.d.ts.map +1 -1
  221. package/dist/components/Properties/index.d.ts +1 -1
  222. package/dist/components/Properties/index.d.ts.map +1 -1
  223. package/dist/components/Properties/index.js +2 -2
  224. package/dist/components/RangeSlider/index.js +1 -1
  225. package/dist/components/ResizeHandle/index.js +1 -1
  226. package/dist/components/Select/Select.d.ts.map +1 -1
  227. package/dist/components/Select/index.js +1 -1
  228. package/dist/components/SelectionPanel/SelectionPanel.d.ts.map +1 -1
  229. package/dist/components/SelectionPanel/index.js +2 -2
  230. package/dist/components/SelectionPanel/renderLeaf.d.ts +7 -0
  231. package/dist/components/SelectionPanel/renderLeaf.d.ts.map +1 -1
  232. package/dist/components/SidebarPanel/SidebarPanel.d.ts +1 -1
  233. package/dist/components/SidebarPanel/SidebarPanel.d.ts.map +1 -1
  234. package/dist/components/SidebarPanel/index.js +1 -1
  235. package/dist/components/Slider/Slider.d.ts +19 -2
  236. package/dist/components/Slider/Slider.d.ts.map +1 -1
  237. package/dist/components/Slider/index.js +1 -1
  238. package/dist/components/StatusBar/index.js +1 -1
  239. package/dist/components/SwatchGrid/index.js +1 -1
  240. package/dist/components/ThemeSwitcher/ThemeSwitcher.d.ts +38 -0
  241. package/dist/components/ThemeSwitcher/ThemeSwitcher.d.ts.map +1 -0
  242. package/dist/components/ThemeSwitcher/index.d.ts +3 -0
  243. package/dist/components/ThemeSwitcher/index.d.ts.map +1 -0
  244. package/dist/components/ThemeSwitcher/index.js +2 -0
  245. package/dist/components/Timeline/Transport.d.ts.map +1 -1
  246. package/dist/components/Timeline/index.js +1 -1
  247. package/dist/components/Toast/Toast.d.ts.map +1 -1
  248. package/dist/components/Toast/index.js +1 -1
  249. package/dist/components/ToggleBar/index.js +1 -1
  250. package/dist/components/TokenPanel/index.js +1 -1
  251. package/dist/components/ToolButton/index.js +1 -1
  252. package/dist/components/ToolOptionsBar/index.js +1 -1
  253. package/dist/components/ToolPalette/ToolPalette.d.ts +2 -1
  254. package/dist/components/ToolPalette/ToolPalette.d.ts.map +1 -1
  255. package/dist/components/ToolPalette/index.js +1 -1
  256. package/dist/components/Tree/index.js +1 -1
  257. package/dist/components/spin.d.ts +16 -0
  258. package/dist/components/spin.d.ts.map +1 -0
  259. package/dist/components/stanceSurfaces.d.ts.map +1 -1
  260. package/dist/icons/index.d.ts +0 -2
  261. package/dist/icons/index.d.ts.map +1 -1
  262. package/dist/icons/paths.d.ts +10 -0
  263. package/dist/icons/paths.d.ts.map +1 -1
  264. package/dist/index.d.ts +5 -2
  265. package/dist/index.d.ts.map +1 -1
  266. package/dist/index.js +83 -99
  267. package/dist/index.js.map +1 -1
  268. package/dist/paintGradientTrack.d.ts +5 -2
  269. package/dist/paintGradientTrack.d.ts.map +1 -1
  270. package/dist/style.css +1 -1
  271. package/dist/useReorderDragList.d.ts +1 -1
  272. package/dist/useReorderDragList.d.ts.map +1 -1
  273. package/package.json +9 -8
  274. package/dist/chunks/Badge-CyAIZSDo.js.map +0 -1
  275. package/dist/chunks/BandEditor-Dhm_Xrlr.js +0 -248
  276. package/dist/chunks/BandEditor-Dhm_Xrlr.js.map +0 -1
  277. package/dist/chunks/Callout-yEn9iPlh.js +0 -119
  278. package/dist/chunks/Callout-yEn9iPlh.js.map +0 -1
  279. package/dist/chunks/ColorField-BcMcW8Sa.js +0 -60
  280. package/dist/chunks/ColorField-BcMcW8Sa.js.map +0 -1
  281. package/dist/chunks/ComboBox-DpT8lc3p.js.map +0 -1
  282. package/dist/chunks/DataGrid-D-dZj1BD.js.map +0 -1
  283. package/dist/chunks/DetailList-BMER1LUZ.js +0 -43
  284. package/dist/chunks/DetailList-BMER1LUZ.js.map +0 -1
  285. package/dist/chunks/Dialog-BWyNMgpf.js +0 -66
  286. package/dist/chunks/Dialog-BWyNMgpf.js.map +0 -1
  287. package/dist/chunks/Disclosure-0G0uh2fa.js.map +0 -1
  288. package/dist/chunks/DragHandleGlyph-Dr7Fgo0I.js.map +0 -1
  289. package/dist/chunks/GradientEditor-B3a-MsVJ.js +0 -335
  290. package/dist/chunks/GradientEditor-B3a-MsVJ.js.map +0 -1
  291. package/dist/chunks/Icon-Cgzy8VgC.js.map +0 -1
  292. package/dist/chunks/InlineRange-eOj6JpJl.js.map +0 -1
  293. package/dist/chunks/Keycaps-C0H_v2gO.js.map +0 -1
  294. package/dist/chunks/LayerList-nz-QYvTF.js.map +0 -1
  295. package/dist/chunks/ListEditor-BQ6AV3Ac.js +0 -74
  296. package/dist/chunks/ListEditor-BQ6AV3Ac.js.map +0 -1
  297. package/dist/chunks/MenuButton-DtaGenKf.js.map +0 -1
  298. package/dist/chunks/NumberField-CwJOMmQR.js +0 -117
  299. package/dist/chunks/NumberField-CwJOMmQR.js.map +0 -1
  300. package/dist/chunks/PaintInput-Byhna3H-.js +0 -131
  301. package/dist/chunks/PaintInput-Byhna3H-.js.map +0 -1
  302. package/dist/chunks/Prefs-DpqFKiwY.js.map +0 -1
  303. package/dist/chunks/Properties-D_KzDN9K.js.map +0 -1
  304. package/dist/chunks/PropertyField-DGCecAnV.js +0 -758
  305. package/dist/chunks/PropertyField-DGCecAnV.js.map +0 -1
  306. package/dist/chunks/RangeSlider-BKRRTPTZ.js.map +0 -1
  307. package/dist/chunks/ResizeHandle-BKT0XYpx.js.map +0 -1
  308. package/dist/chunks/Select-CzyfaXzp.js +0 -225
  309. package/dist/chunks/Select-CzyfaXzp.js.map +0 -1
  310. package/dist/chunks/SelectionPanel-BgUM1h03.js +0 -103
  311. package/dist/chunks/SelectionPanel-BgUM1h03.js.map +0 -1
  312. package/dist/chunks/SidebarPanel-aoIqxbtq.js +0 -55
  313. package/dist/chunks/SidebarPanel-aoIqxbtq.js.map +0 -1
  314. package/dist/chunks/Slider-CFwQYQ10.js +0 -383
  315. package/dist/chunks/Slider-CFwQYQ10.js.map +0 -1
  316. package/dist/chunks/StatusBar-DzoPDY4k.js.map +0 -1
  317. package/dist/chunks/SwatchGrid-BARC3rnF.js.map +0 -1
  318. package/dist/chunks/Timeline--58F7MED.js.map +0 -1
  319. package/dist/chunks/Toast-DNBb-24H.js.map +0 -1
  320. package/dist/chunks/ToggleBar-DTjGeS0Q.js.map +0 -1
  321. package/dist/chunks/ToolButton-CR4sQlxF.js.map +0 -1
  322. package/dist/chunks/ToolOptionsBar-CtzTlaN2.js.map +0 -1
  323. package/dist/chunks/ToolPalette-CKG9qY6P.js.map +0 -1
  324. package/dist/chunks/createKeyframeLayer-Czj6Y235.js.map +0 -1
  325. package/dist/chunks/icons-Dk8SRS8g.js.map +0 -1
  326. package/dist/chunks/model-Du7Lta4C.js.map +0 -1
  327. package/dist/chunks/number-D3NEx_8r.js +0 -89
  328. package/dist/chunks/number-D3NEx_8r.js.map +0 -1
  329. package/dist/chunks/prefField-Dnl7nmjQ.js.map +0 -1
  330. package/dist/chunks/segmentedControl.module-Bv7DEg8f.js +0 -11
  331. package/dist/chunks/segmentedControl.module-Bv7DEg8f.js.map +0 -1
  332. package/dist/chunks/useReorderDragList-B_-5L5Gu.js.map +0 -1
  333. package/dist/components/DragHandleGlyph/DragHandleGlyph.d.ts.map +0 -1
  334. package/dist/components/DragHandleGlyph/index.d.ts +0 -3
  335. package/dist/components/DragHandleGlyph/index.d.ts.map +0 -1
  336. package/dist/components/DragHandleGlyph/index.js +0 -2
  337. package/dist/format/number.d.ts +0 -56
  338. package/dist/format/number.d.ts.map +0 -1
  339. package/dist/icons/ShapeKindIcon.d.ts +0 -10
  340. package/dist/icons/ShapeKindIcon.d.ts.map +0 -1
@@ -0,0 +1,52 @@
1
+ import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
+ import { useId as n } from "react";
3
+ var r = {
4
+ list: "_list_am8mx_1",
5
+ row: "_row_am8mx_14",
6
+ label: "_label_am8mx_22",
7
+ value: "_value_am8mx_36",
8
+ dot: "_dot_am8mx_70",
9
+ title: "_title_am8mx_82"
10
+ };
11
+ //#endregion
12
+ //#region src/components/DetailList/DetailList.tsx
13
+ function i({ children: i, title: a, layout: o = "inline", values: s = "text", className: c }) {
14
+ let l = n(), u = /* @__PURE__ */ e("dl", {
15
+ className: c && a == null ? `${r.list} ${c}` : r.list,
16
+ "data-layout": o,
17
+ "data-values": s,
18
+ "aria-labelledby": a == null ? void 0 : l,
19
+ children: i
20
+ });
21
+ return a == null ? u : /* @__PURE__ */ t("section", {
22
+ className: c,
23
+ children: [/* @__PURE__ */ e("h3", {
24
+ id: l,
25
+ className: r.title,
26
+ children: a
27
+ }), u]
28
+ });
29
+ }
30
+ function a({ label: n, children: i, placeholder: a = "–", status: o, values: s, className: c }) {
31
+ let l = i == null;
32
+ return /* @__PURE__ */ t("div", {
33
+ className: c ? `${r.row} ${c}` : r.row,
34
+ "data-status": o,
35
+ "data-values": s,
36
+ children: [/* @__PURE__ */ e("dt", {
37
+ className: r.label,
38
+ children: n
39
+ }), /* @__PURE__ */ t("dd", {
40
+ className: r.value,
41
+ "data-empty": l || void 0,
42
+ children: [o && /* @__PURE__ */ e("span", {
43
+ className: r.dot,
44
+ "aria-hidden": "true"
45
+ }), l ? a : i]
46
+ })]
47
+ });
48
+ }
49
+ //#endregion
50
+ export { a as n, i as t };
51
+
52
+ //# sourceMappingURL=DetailList-BKomDzg5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DetailList-BKomDzg5.js","names":["s","DetailList_module_default","DetailList","titleId","useId","list","className","title","layout","values","DetailRow","empty","children","status","label","placeholder"],"sources":["../../src/components/DetailList/DetailList.module.css","../../src/components/DetailList/DetailList.tsx"],"sourcesContent":[".list {\n display: grid;\n grid-template-columns: var(--wzl-params-label-width, auto) minmax(0, 1fr);\n column-gap: var(--wzl-space-6);\n row-gap: var(--wzl-space-1);\n margin: 0;\n font-size: var(--wzl-font-size-md);\n}\n\n.list[data-layout='block'] {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.row {\n display: grid;\n grid-column: 1 / -1;\n grid-template-columns: subgrid;\n /* A label meets the first line of its value, however many lines that runs to. */\n align-items: baseline;\n}\n\n.label {\n display: flex;\n align-items: baseline;\n justify-content: var(--wzl-params-label-align, start);\n gap: var(--wzl-space-2);\n font-family: var(--wzl-font-display);\n font-weight: var(--wzl-font-weight-light);\n font-size: var(--wzl-font-size-sm);\n line-height: var(--wzl-leading-snug);\n color: var(--wzl-fg-muted);\n text-transform: var(--wzl-params-label-case, uppercase);\n letter-spacing: var(--wzl-params-label-tracking, var(--wzl-tracking-wide));\n}\n\n.value {\n margin: 0;\n min-width: 0;\n /* The floor a property row stands on, so the two share a rhythm side by side. */\n min-height: var(--wzl-prop-row-h, var(--wzl-field-h, var(--wzl-control-h)));\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wzl-space-2);\n overflow-wrap: anywhere;\n color: var(--wzl-fg);\n}\n\n.value[data-empty] {\n color: var(--wzl-fg-muted);\n}\n\n.list[data-values='figures'] {\n grid-template-columns: var(--wzl-params-label-width, auto) minmax(min-content, 1fr);\n}\n\n.list[data-values='figures'] .row:not([data-values='text']) .value,\n.row[data-values='figures'] .value {\n justify-content: flex-end;\n text-align: end;\n /* The display face (Oswald) has no tabular figures, so tabular-nums alone aligns nothing. */\n font-family: var(--wzl-font-mono);\n font-variant-numeric: tabular-nums;\n /* On the cell, not the track, so ch measures the figures' own face. */\n min-width: var(--wzl-detail-figure-min-width, 8ch);\n white-space: pre;\n overflow-wrap: normal;\n}\n\n.dot {\n flex: none;\n width: 0.5em;\n height: 0.5em;\n border-radius: 50%;\n background: currentColor;\n}\n\n.row[data-status='success'] .dot { background: var(--wzl-success); }\n.row[data-status='warn'] .dot { background: var(--wzl-warning); }\n.row[data-status='danger'] .dot { background: var(--wzl-danger); }\n\n.title {\n margin: 0 0 var(--wzl-space-3);\n font-family: var(--wzl-font-display);\n font-weight: var(--wzl-font-weight-light);\n font-size: var(--wzl-font-size-sm);\n color: var(--wzl-fg-muted);\n text-transform: var(--wzl-params-label-case, uppercase);\n letter-spacing: var(--wzl-params-label-tracking, var(--wzl-tracking-wide));\n}\n","import { type ReactNode, useId } from 'react';\nimport s from './DetailList.module.css';\n\n/** Whether a row's label sits beside its value or above it. */\nexport type DetailListLayout = 'inline' | 'block';\n\n/**\n * How a list sets its values. `text` starts each value at the column's edge\n * and wraps it; `figures` right-aligns it in a column at least\n * `--wzl-detail-figure-min-width` (default `8ch`) wide, in the mono face,\n * with spaces kept, so figure-space padding lines a column up on its decimal\n * point.\n */\nexport type DetailListValues = 'text' | 'figures';\n\n/** The state a row's status dot reports, painted from `--wzl-success`,\n * `--wzl-warning` or `--wzl-danger`. */\nexport type DetailRowStatus = 'success' | 'warn' | 'danger';\n\n/** Props for {@link DetailList}. */\nexport interface DetailListProps {\n /** {@link DetailRow}s. */\n children: ReactNode;\n /** Heading drawn above the list, which also names it. */\n title?: ReactNode;\n /**\n * `inline` puts every label in one rail beside the values; `block` stacks\n * each label over its value, for a column too narrow to hold both.\n */\n layout?: DetailListLayout;\n /** `text` by default. See {@link DetailListValues}. */\n values?: DetailListValues;\n /** Class on the outermost element: the `<dl>`, or the `<section>` holding\n * the heading and the list when there is a `title`. */\n className?: string;\n}\n\n/** Props for {@link DetailRow}. */\nexport interface DetailRowProps {\n label: ReactNode;\n /** The value: text, or any run of elements — code chips, badges, keycaps,\n * links. Several children wrap as a line of items. `null` or `undefined`\n * keeps the row in place showing `placeholder`, so a list whose values\n * come and go holds its height. */\n children?: ReactNode;\n /** Shown while there is no value. An en dash by default. */\n placeholder?: ReactNode;\n /**\n * Draws a dot in the status color before the value. The dot is hidden from\n * assistive technology and color is never the only signal, so the value\n * itself has to say the same thing — \"locked\", not just a green dot.\n */\n status?: DetailRowStatus;\n /** Sets this row's value as `text` or `figures`, whatever the list's\n * `values` says — a sentence among figures, or one figure among text. */\n values?: DetailListValues;\n className?: string;\n}\n\n/**\n * A read-only list of labeled values — the `<dl>` a property panel would be\n * if its rows held facts instead of controls. Labels take the params label\n * recipe and rail: `--wzl-params-label-width` sets the rail, so a detail list\n * and a property panel beside it line their labels up from one declaration.\n */\nexport function DetailList({ children, title, layout = 'inline', values = 'text', className }: DetailListProps) {\n const titleId = useId();\n const list = (\n <dl\n className={className && title == null ? `${s.list} ${className}` : s.list}\n data-layout={layout}\n data-values={values}\n aria-labelledby={title != null ? titleId : undefined}\n >\n {children}\n </dl>\n );\n if (title == null) return list;\n return (\n <section className={className}>\n <h3 id={titleId} className={s.title}>{title}</h3>\n {list}\n </section>\n );\n}\n\n/** One label and its value in a {@link DetailList}. */\nexport function DetailRow({ label, children, placeholder = '–', status, values, className }: DetailRowProps) {\n const empty = children == null;\n return (\n <div className={className ? `${s.row} ${className}` : s.row} data-status={status} data-values={values}>\n <dt className={s.label}>{label}</dt>\n <dd className={s.value} data-empty={empty || undefined}>\n {status && <span className={s.dot} aria-hidden=\"true\" />}\n {empty ? placeholder : children}\n </dd>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;ACiEA,SAAgBE,EAAW,EAAE,aAAU,UAAO,YAAS,UAAU,YAAS,QAAQ,gBAA8B;CAC9G,IAAMC,IAAUC,EAAM,GAChBC,IACJ,kBAAC,MAAD;EACE,WAAWC,KAAaC,KAAS,OAAO,GAAGP,EAAE,KAAK,GAAGM,MAAcN,EAAE;EACrE,eAAaQ;EACb,eAAaC;EACb,mBAAiBF,KAAS,OAAiB,KAAA,IAAVJ;EAEhC;CACC,CAAA;CAGN,OADII,KAAS,OAAaF,IAExB,kBAAC,WAAD;EAAoB;EAApB,UAAA,CACE,kBAAC,MAAD;GAAI,IAAIF;GAAS,WAAWH,EAAE;GAAQ,UAAAO;EAAU,CAAA,GAC/CF,CACM;;AAEb;AAGA,SAAgBK,EAAU,EAAE,UAAO,aAAU,iBAAc,KAAK,WAAQ,WAAQ,gBAA6B;CAC3G,IAAMC,IAAQC,KAAY;CAC1B,OACE,kBAAC,OAAD;EAAK,WAAWN,IAAY,GAAGN,EAAE,IAAI,GAAGM,MAAcN,EAAE;EAAK,eAAaa;EAAQ,eAAaJ;EAA/F,UAAA,CACE,kBAAC,MAAD;GAAI,WAAWT,EAAE;GAAQ,UAAAc;EAAU,CAAA,GACnC,kBAAC,MAAD;GAAI,WAAWd,EAAE;GAAO,cAAYW,KAAS,KAAA;GAA7C,UAAA,CACGE,KAAU,kBAAC,QAAD;IAAM,WAAWb,EAAE;IAAK,eAAY;GAAQ,CAAA,GACtDW,IAAQI,IAAcH,CACrB;EACD,CAAA,CAAA;;AAET"}
@@ -1,4 +1,4 @@
1
- import { t as e } from "./Slider-CFwQYQ10.js";
1
+ import { t as e } from "./Slider-YofwGOI4.js";
2
2
  import { jsx as t } from "react/jsx-runtime";
3
3
  import { useEffect as n, useRef as r } from "react";
4
4
  var i = {
@@ -69,4 +69,4 @@ function c(c) {
69
69
  //#endregion
70
70
  export { c as t };
71
71
 
72
- //# sourceMappingURL=DetentSlider-CL8TlX3S.js.map
72
+ //# sourceMappingURL=DetentSlider-5uQPFucv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DetentSlider-CL8TlX3S.js","names":["s","Slider","DetentSlider_module_default","normalize","items","it","resolveIndex","exact","value","best","bestGap","i","v","gap","plainText","label","fallback","DetentSlider","props","index","lastIndex","labelOf","item","formatLabel","liveRef","useRef","changedRef","handleInput","next","onChange","handleCommit","current","className","thumbs","stops"],"sources":["../../src/components/DetentSlider/DetentSlider.module.css","../../src/components/DetentSlider/DetentSlider.tsx"],"sourcesContent":[".root {\n position: relative;\n /* Read by Slider's track and stop marks. Detents run the full height of the\n * track so they read as notches rather than as tally marks beside it. */\n --rp-tick-inset: 0;\n --rp-tick-width: 1px;\n --rp-tick-color: var(--wzl-border-strong);\n --rp-track-cursor: pointer;\n font-family: var(--wzl-font-ui);\n}\n\n.slider {\n width: 100%;\n}\n\n","import { useEffect, useRef, type ReactElement, type ReactNode } from 'react';\nimport { Slider, type SliderStop, type Thumb } from '../Slider/Slider';\nimport s from './DetentSlider.module.css';\n\n/** What a detent can carry. Narrowed so identity comparison and React keys\n * both work without a keying callback. */\nexport type DetentValue = string | number;\n\n/** One detent on a {@link DetentSlider}. */\nexport type DetentItem<V extends DetentValue = number> = {\n value: V;\n /** Drawn under the detent. Defaults to `formatLabel(value)`, then `value`. */\n label?: ReactNode;\n /** Spoken form, when the drawn label is not the right thing to say. */\n ariaLabel?: string;\n};\n\n/**\n * Props for {@link DetentSlider}.\n *\n * `items` takes bare values or `DetentItem`s interchangeably — a bare value is\n * a detent with no label of its own.\n *\n * `onChange` fires on every detent the control passes through, including\n * mid-drag: each one is a complete, legal choice, so there is no in-flight\n * value to withhold. `onCommit` fires once the gesture that changed things\n * ends, and is the one to write to history.\n */\nexport type DetentSliderProps<V extends DetentValue = number> = {\n items: readonly (V | DetentItem<V>)[];\n value: V;\n onChange: (value: V, index: number) => void;\n onCommit?: (value: V, index: number) => void;\n formatLabel?: (value: V, index: number) => ReactNode;\n labels?: 'all' | 'ends' | 'none';\n trackHeight?: number;\n ariaLabel?: string;\n className?: string;\n};\n\nfunction normalize<V extends DetentValue>(items: readonly (V | DetentItem<V>)[]): DetentItem<V>[] {\n return items.map(it => (typeof it === 'object' && it !== null ? it : ({ value: it } as DetentItem<V>)));\n}\n\n/**\n * The detent `value` selects. An exact match wins; a number that matches none\n * lands on the nearest one, so a value arriving from a numeric field or an\n * older save renders where it belongs rather than silently reading as the\n * first detent.\n */\nfunction resolveIndex<V extends DetentValue>(items: readonly DetentItem<V>[], value: V): number {\n const exact = items.findIndex(it => it.value === value);\n if (exact !== -1) return exact;\n if (typeof value !== 'number') return 0;\n let best = 0;\n let bestGap = Infinity;\n for (let i = 0; i < items.length; i++) {\n const v = items[i].value;\n if (typeof v !== 'number') continue;\n const gap = Math.abs(v - value);\n if (gap < bestGap) {\n bestGap = gap;\n best = i;\n }\n }\n return best;\n}\n\nfunction plainText(label: ReactNode, fallback: DetentValue): string {\n return typeof label === 'string' || typeof label === 'number' ? String(label) : String(fallback);\n}\n\n/**\n * Slider over a fixed list of values: one detent per value, evenly spaced, the\n * thumb resting on one of them.\n *\n * This is the shape to reach for when an option has a small set of allowed\n * values along a line — playback rate, zoom step, quality — in place of a\n * dropdown, which hides the ordering and the extent of the range behind a\n * click. The values need only be ordered, not numeric.\n *\n * It is a strict {@link Slider} over the *index* of `items`, which keeps the\n * detents evenly spaced however the values are distributed. Since the index is\n * meaningless to a screen reader, the value is published as `aria-valuetext`.\n * For numbers that may also rest between the detents, use `Slider` directly\n * with `spacing=\"even\"` and magnetic stops.\n */\nexport function DetentSlider<V extends DetentValue = number>(props: DetentSliderProps<V>): ReactElement {\n const { value, onChange, onCommit, formatLabel, ariaLabel, className } = props;\n const items = normalize(props.items);\n const index = resolveIndex(items, value);\n const lastIndex = Math.max(0, items.length - 1);\n\n const labelOf = (item: DetentItem<V>, i: number): ReactNode =>\n item.label ?? formatLabel?.(item.value, i) ?? String(item.value);\n\n // Deduped separately: `live` suppresses the repeat reports a drag produces\n // while the pointer crosses one detent, `changed` keeps a press that chose\n // nothing from landing a no-op entry in the consumer's history.\n const liveRef = useRef(index);\n const changedRef = useRef(false);\n useEffect(() => {\n liveRef.current = index;\n }, [index]);\n\n const handleInput = (next: Thumb[]) => {\n const i = next[0].value;\n if (i === liveRef.current) return;\n liveRef.current = i;\n changedRef.current = true;\n onChange(items[i].value, i);\n };\n\n const handleCommit = (next: Thumb[]) => {\n if (!changedRef.current) return;\n changedRef.current = false;\n const i = next[0].value;\n onCommit?.(items[i].value, i);\n };\n\n const current = items[index];\n if (!current) return <div className={className ? `${s.root} ${className}` : s.root} />;\n\n const thumbs: Thumb[] = [\n { value: index, valueText: current.ariaLabel ?? plainText(labelOf(current, index), current.value) },\n ];\n\n const stops: SliderStop[] = items.map((item, i) => ({ value: i, label: labelOf(item, i) }));\n\n return (\n <div className={className ? `${s.root} ${className}` : s.root}>\n <Slider\n className={s.slider}\n min={0}\n max={lastIndex}\n stops={stops}\n snap=\"strict\"\n stopLabels={props.labels ?? 'all'}\n trackClick=\"move-nearest\"\n trackHeight={props.trackHeight ?? 8}\n ariaLabel={ariaLabel}\n thumbs={thumbs}\n onInput={handleInput}\n onChange={handleCommit}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;ACwCA,SAASG,EAAiC,GAAwD;CAChG,OAAOC,EAAM,KAAI,MAAO,OAAOC,KAAO,YAAYA,IAAcA,IAAM,EAAE,OAAOA,EAAG,CAAoB;AACxG;AAQA,SAASC,EAAoC,GAAiC,GAAkB;CAC9F,IAAMC,IAAQH,EAAM,WAAU,MAAMC,EAAG,UAAUG,CAAK;CACtD,IAAID,MAAU,IAAI,OAAOA;CACzB,IAAI,OAAOC,KAAU,UAAU,OAAO;CACtC,IAAIC,IAAO,GACPC,IAAU;CACd,KAAK,IAAIC,IAAI,GAAGA,IAAIP,EAAM,QAAQ,KAAK;EACrC,IAAMQ,IAAIR,EAAMO,EAAE,CAAC;EACnB,IAAI,OAAOC,KAAM,UAAU;EAC3B,IAAMC,IAAM,KAAK,IAAID,IAAIJ,CAAK;EAC9B,AAAIK,IAAMH,MACR,IAAUG,GACV,IAAOF;CAEX;CACA,OAAOF;AACT;AAEA,SAASK,EAAU,GAAkB,GAA+B;CAClE,OAAgE,OAAzD,OAAOC,KAAU,YAAY,OAAOA,KAAU,WAAkBA,IAAgBC,CAAQ;AACjG;AAiBA,SAAgBC,EAA6C,GAA2C;CACtG,IAAM,EAAE,UAAO,aAAU,aAAU,gBAAa,cAAW,iBAAcC,GACnEd,IAAQD,EAAUe,EAAM,KAAK,GAC7BC,IAAQb,EAAaF,GAAOI,CAAK,GACjCY,IAAY,KAAK,IAAI,GAAGhB,EAAM,SAAS,CAAC,GAExCiB,KAAW,GAAqB,MACpCC,EAAK,SAASC,IAAcD,EAAK,OAAOX,CAAC,KAAK,OAAOW,EAAK,KAAK,GAK3DE,IAAUC,EAAON,CAAK,GACtBO,IAAaD,EAAO,EAAK;CAC/B,QAAgB;EACd,EAAQ,UAAUN;CACpB,GAAG,CAACA,CAAK,CAAC;CAEV,IAAMQ,KAAe,MAAkB;EACrC,IAAMhB,IAAIiB,EAAK,EAAE,CAAC;EAClB,AAAIjB,MAAMa,EAAQ,YAClB,EAAQ,UAAUb,GAClB,EAAW,UAAU,IACrBkB,EAASzB,EAAMO,EAAE,CAAC,OAAOA,CAAC;CAC5B,GAEMmB,KAAgB,MAAkB;EACtC,IAAI,CAACJ,EAAW,SAAS;EACzB,EAAW,UAAU;EACrB,IAAMf,IAAIiB,EAAK,EAAE,CAAC;EAClB,IAAWxB,EAAMO,EAAE,CAAC,OAAOA,CAAC;CAC9B,GAEMoB,IAAU3B,EAAMe;CACtB,IAAI,CAACY,GAAS,OAAO,kBAAC,OAAD,EAAK,WAAWC,IAAY,GAAGhC,EAAE,KAAK,GAAGgC,MAAchC,EAAE,KAAO,CAAA;CAErF,IAAMiC,IAAkB,CACtB;EAAE,OAAOd;EAAO,WAAWY,EAAQ,aAAajB,EAAUO,EAAQU,GAASZ,CAAK,GAAGY,EAAQ,KAAK;CAAE,CACpG,GAEMG,IAAsB9B,EAAM,KAAK,GAAM,OAAO;EAAE,OAAOO;EAAG,OAAOU,EAAQC,GAAMX,CAAC;CAAE,EAAE;CAE1F,OACE,kBAAC,OAAD;EAAK,WAAWqB,IAAY,GAAGhC,EAAE,KAAK,GAAGgC,MAAchC,EAAE;EACvD,UAAA,kBAACC,GAAD;GACE,WAAWD,EAAE;GACb,KAAK;GACL,KAAKoB;GACE;GACP,MAAK;GACL,YAAYF,EAAM,UAAU;GAC5B,YAAW;GACX,aAAaA,EAAM,eAAe;GACvB;GACH;GACR,SAASS;GACT,UAAUG;EACX,CAAA;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"DetentSlider-5uQPFucv.js","names":["s","Slider","DetentSlider_module_default","normalize","items","it","resolveIndex","exact","value","best","bestGap","i","v","gap","plainText","label","fallback","DetentSlider","props","index","lastIndex","labelOf","item","formatLabel","liveRef","useRef","changedRef","handleInput","next","onChange","handleCommit","current","className","thumbs","stops"],"sources":["../../src/components/DetentSlider/DetentSlider.module.css","../../src/components/DetentSlider/DetentSlider.tsx"],"sourcesContent":[".root {\n position: relative;\n /* Read by Slider's track and stop marks. Detents run the full height of the\n * track so they read as notches rather than as tally marks beside it. */\n --rp-tick-inset: 0;\n --rp-tick-width: 1px;\n --rp-tick-color: var(--wzl-border-strong);\n --rp-track-cursor: pointer;\n font-family: var(--wzl-font-ui);\n}\n\n.slider {\n width: 100%;\n}\n\n","import { useEffect, useRef, type ReactElement, type ReactNode } from 'react';\nimport { Slider, type SliderStop, type Thumb } from '../Slider/Slider';\nimport s from './DetentSlider.module.css';\n\n/** What a detent can carry. Narrowed so identity comparison and React keys\n * both work without a keying callback. */\nexport type DetentValue = string | number;\n\n/** One detent on a {@link DetentSlider}. */\nexport type DetentItem<V extends DetentValue = number> = {\n value: V;\n /** Drawn under the detent. Defaults to `formatLabel(value)`, then `value`. */\n label?: ReactNode;\n /** Spoken form, when the drawn label is not the right thing to say. */\n ariaLabel?: string;\n};\n\n/**\n * Props for {@link DetentSlider}.\n *\n * `items` takes bare values or `DetentItem`s interchangeably — a bare value is\n * a detent with no label of its own.\n *\n * `onChange` fires on every detent the control passes through, including\n * mid-drag: each one is a complete, legal choice, so there is no in-flight\n * value to withhold. `onCommit` fires once the gesture that changed things\n * ends, and is the one to write to history.\n */\nexport type DetentSliderProps<V extends DetentValue = number> = {\n items: readonly (V | DetentItem<V>)[];\n value: V;\n onChange: (value: V, index: number) => void;\n onCommit?: (value: V, index: number) => void;\n formatLabel?: (value: V, index: number) => ReactNode;\n labels?: 'all' | 'ends' | 'none';\n trackHeight?: number;\n ariaLabel?: string;\n className?: string;\n};\n\nfunction normalize<V extends DetentValue>(items: readonly (V | DetentItem<V>)[]): DetentItem<V>[] {\n return items.map(it => (typeof it === 'object' && it !== null ? it : ({ value: it } as DetentItem<V>)));\n}\n\n/**\n * The detent `value` selects. An exact match wins; a number that matches none\n * lands on the nearest one, so a value arriving from a numeric field or an\n * older save renders where it belongs rather than silently reading as the\n * first detent.\n */\nfunction resolveIndex<V extends DetentValue>(items: readonly DetentItem<V>[], value: V): number {\n const exact = items.findIndex(it => it.value === value);\n if (exact !== -1) return exact;\n if (typeof value !== 'number') return 0;\n let best = 0;\n let bestGap = Infinity;\n for (let i = 0; i < items.length; i++) {\n const v = items[i].value;\n if (typeof v !== 'number') continue;\n const gap = Math.abs(v - value);\n if (gap < bestGap) {\n bestGap = gap;\n best = i;\n }\n }\n return best;\n}\n\nfunction plainText(label: ReactNode, fallback: DetentValue): string {\n return typeof label === 'string' || typeof label === 'number' ? String(label) : String(fallback);\n}\n\n/**\n * Slider over a fixed list of values: one detent per value, evenly spaced, the\n * thumb resting on one of them.\n *\n * This is the shape to reach for when an option has a small set of allowed\n * values along a line — playback rate, zoom step, quality — in place of a\n * dropdown, which hides the ordering and the extent of the range behind a\n * click. The values need only be ordered, not numeric.\n *\n * It is a strict {@link Slider} over the *index* of `items`, which keeps the\n * detents evenly spaced however the values are distributed. Since the index is\n * meaningless to a screen reader, the value is published as `aria-valuetext`.\n * For numbers that may also rest between the detents, use `Slider` directly\n * with `spacing=\"even\"` and magnetic stops.\n */\nexport function DetentSlider<V extends DetentValue = number>(props: DetentSliderProps<V>): ReactElement {\n const { value, onChange, onCommit, formatLabel, ariaLabel, className } = props;\n const items = normalize(props.items);\n const index = resolveIndex(items, value);\n const lastIndex = Math.max(0, items.length - 1);\n\n const labelOf = (item: DetentItem<V>, i: number): ReactNode =>\n item.label ?? formatLabel?.(item.value, i) ?? String(item.value);\n\n // Deduped separately: `live` suppresses the repeat reports a drag produces\n // while the pointer crosses one detent, `changed` keeps a press that chose\n // nothing from landing a no-op entry in the consumer's history.\n const liveRef = useRef(index);\n const changedRef = useRef(false);\n useEffect(() => {\n liveRef.current = index;\n }, [index]);\n\n const handleInput = (next: Thumb[]) => {\n const i = next[0].value;\n if (i === liveRef.current) return;\n liveRef.current = i;\n changedRef.current = true;\n onChange(items[i].value, i);\n };\n\n const handleCommit = (next: Thumb[]) => {\n if (!changedRef.current) return;\n changedRef.current = false;\n const i = next[0].value;\n onCommit?.(items[i].value, i);\n };\n\n const current = items[index];\n if (!current) return <div className={className ? `${s.root} ${className}` : s.root} />;\n\n const thumbs: Thumb[] = [\n { value: index, valueText: current.ariaLabel ?? plainText(labelOf(current, index), current.value) },\n ];\n\n const stops: SliderStop[] = items.map((item, i) => ({ value: i, label: labelOf(item, i) }));\n\n return (\n <div className={className ? `${s.root} ${className}` : s.root}>\n <Slider\n className={s.slider}\n min={0}\n max={lastIndex}\n stops={stops}\n snap=\"strict\"\n stopLabels={props.labels ?? 'all'}\n trackClick=\"move-nearest\"\n trackHeight={props.trackHeight ?? 8}\n ariaLabel={ariaLabel}\n thumbs={thumbs}\n onInput={handleInput}\n onChange={handleCommit}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;ACwCA,SAASG,EAAiC,GAAwD;CAChG,OAAOC,EAAM,KAAI,MAAO,OAAOC,KAAO,YAAYA,IAAcA,IAAM,EAAE,OAAOA,EAAG,CAAoB;AACxG;AAQA,SAASC,EAAoC,GAAiC,GAAkB;CAC9F,IAAMC,IAAQH,EAAM,WAAU,MAAMC,EAAG,UAAUG,CAAK;CACtD,IAAID,MAAU,IAAI,OAAOA;CACzB,IAAI,OAAOC,KAAU,UAAU,OAAO;CACtC,IAAIC,IAAO,GACPC,IAAU;CACd,KAAK,IAAIC,IAAI,GAAGA,IAAIP,EAAM,QAAQ,KAAK;EACrC,IAAMQ,IAAIR,EAAMO,EAAE,CAAC;EACnB,IAAI,OAAOC,KAAM,UAAU;EAC3B,IAAMC,IAAM,KAAK,IAAID,IAAIJ,CAAK;EAC9B,AAAIK,IAAMH,MACR,IAAUG,GACV,IAAOF;CAEX;CACA,OAAOF;AACT;AAEA,SAASK,EAAU,GAAkB,GAA+B;CAClE,OAAgE,OAAzD,OAAOC,KAAU,YAAY,OAAOA,KAAU,WAAkBA,IAAgBC,CAAQ;AACjG;AAiBA,SAAgBC,EAA6C,GAA2C;CACtG,IAAM,EAAE,UAAO,aAAU,aAAU,gBAAa,cAAW,iBAAcC,GACnEd,IAAQD,EAAUe,EAAM,KAAK,GAC7BC,IAAQb,EAAaF,GAAOI,CAAK,GACjCY,IAAY,KAAK,IAAI,GAAGhB,EAAM,SAAS,CAAC,GAExCiB,KAAW,GAAqB,MACpCC,EAAK,SAASC,IAAcD,EAAK,OAAOX,CAAC,KAAK,OAAOW,EAAK,KAAK,GAK3DE,IAAUC,EAAON,CAAK,GACtBO,IAAaD,EAAO,EAAK;CAC/B,QAAgB;EACd,EAAQ,UAAUN;CACpB,GAAG,CAACA,CAAK,CAAC;CAEV,IAAMQ,KAAe,MAAkB;EACrC,IAAMhB,IAAIiB,EAAK,EAAE,CAAC;EAClB,AAAIjB,MAAMa,EAAQ,YAClB,EAAQ,UAAUb,GAClB,EAAW,UAAU,IACrBkB,EAASzB,EAAMO,EAAE,CAAC,OAAOA,CAAC;CAC5B,GAEMmB,KAAgB,MAAkB;EACtC,IAAI,CAACJ,EAAW,SAAS;EACzB,EAAW,UAAU;EACrB,IAAMf,IAAIiB,EAAK,EAAE,CAAC;EAClB,IAAWxB,EAAMO,EAAE,CAAC,OAAOA,CAAC;CAC9B,GAEMoB,IAAU3B,EAAMe;CACtB,IAAI,CAACY,GAAS,OAAO,kBAAC,OAAD,EAAK,WAAWC,IAAY,GAAGhC,EAAE,KAAK,GAAGgC,MAAchC,EAAE,KAAO,CAAA;CAErF,IAAMiC,IAAkB,CACtB;EAAE,OAAOd;EAAO,WAAWY,EAAQ,aAAajB,EAAUO,EAAQU,GAASZ,CAAK,GAAGY,EAAQ,KAAK;CAAE,CACpG,GAEMG,IAAsB9B,EAAM,KAAK,GAAM,OAAO;EAAE,OAAOO;EAAG,OAAOU,EAAQC,GAAMX,CAAC;CAAE,EAAE;CAE1F,OACE,kBAAC,OAAD;EAAK,WAAWqB,IAAY,GAAGhC,EAAE,KAAK,GAAGgC,MAAchC,EAAE;EACvD,UAAA,kBAACC,GAAD;GACE,WAAWD,EAAE;GACb,KAAK;GACL,KAAKoB;GACE;GACP,MAAK;GACL,YAAYF,EAAM,UAAU;GAC5B,YAAW;GACX,aAAaA,EAAM,eAAe;GACvB;GACH;GACR,SAASS;GACT,UAAUG;EACX,CAAA;CACE,CAAA;AAET"}
@@ -0,0 +1,63 @@
1
+ import { r as e } from "./portalHost-yTOVuCej.js";
2
+ import { t } from "./stance-BFQpS_fL.js";
3
+ import { t as n } from "./CloseButton-C2J7wVfo.js";
4
+ import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
5
+ import { Dialog as o, Heading as s, Modal as c, ModalOverlay as l } from "react-aria-components";
6
+ var u = {
7
+ overlay: "_overlay_153uj_1",
8
+ modal: "_modal_153uj_29",
9
+ dialog: "_dialog_153uj_223",
10
+ header: "_header_153uj_231",
11
+ title: "_title_153uj_240",
12
+ body: "_body_153uj_251",
13
+ footer: "_footer_153uj_266"
14
+ };
15
+ //#endregion
16
+ //#region src/components/Dialog/Dialog.tsx
17
+ function d(d) {
18
+ let { title: f, showCloseButton: p, children: m, footer: h, role: g = "dialog", className: _, bodyClassName: v, isOpen: y, onOpenChange: b, portalContainer: x, stance: S, tone: C, ...w } = d, T = t({
19
+ stance: S,
20
+ tone: C
21
+ }), E = p ?? !!b, { anchor: D, portalProps: O } = e(x);
22
+ return /* @__PURE__ */ a(r, { children: [D, /* @__PURE__ */ i(l, {
23
+ ...w,
24
+ isOpen: y,
25
+ onOpenChange: b,
26
+ className: u.overlay,
27
+ "data-weasel-overlay": "",
28
+ ...O,
29
+ children: /* @__PURE__ */ i(c, {
30
+ className: [u.modal, _].filter(Boolean).join(" "),
31
+ ...T,
32
+ children: /* @__PURE__ */ i(o, {
33
+ role: g,
34
+ className: u.dialog,
35
+ children: ({ close: e }) => /* @__PURE__ */ a(r, { children: [
36
+ (f !== void 0 || E) && /* @__PURE__ */ a("header", {
37
+ className: u.header,
38
+ children: [f !== void 0 && /* @__PURE__ */ i(s, {
39
+ slot: "title",
40
+ className: u.title,
41
+ children: f
42
+ }), E && /* @__PURE__ */ i(n, {
43
+ ariaLabel: "Close dialog",
44
+ onClick: e
45
+ })]
46
+ }),
47
+ /* @__PURE__ */ i("div", {
48
+ className: [u.body, v].filter(Boolean).join(" "),
49
+ children: m
50
+ }),
51
+ h !== void 0 && /* @__PURE__ */ i("footer", {
52
+ className: u.footer,
53
+ children: h
54
+ })
55
+ ] })
56
+ })
57
+ })
58
+ })] });
59
+ }
60
+ //#endregion
61
+ export { d as t };
62
+
63
+ //# sourceMappingURL=Dialog-DGFutQ--.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dialog-DGFutQ--.js","names":["Dialog","_Fragment","s","RACModal","RACDialog","useOverlayPortal","CloseButton","Dialog_module_default","Dialog$1","rest","props","stanced","useStance","showClose","showCloseButton","onOpenChange","portalContainer","Fragment","anchor","ModalOverlay","portalProps","Modal","className","Dialog","title","Heading","close","bodyClassName","footer"],"sources":["../../src/components/Dialog/Dialog.module.css","../../src/components/Dialog/Dialog.tsx"],"sourcesContent":[".overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n opacity: 0;\n transition: opacity var(--wzl-motion-fast);\n}\n\n.overlay[data-entering] {\n opacity: 0;\n}\n\n.overlay[data-entering][data-rac] {\n opacity: 1;\n}\n\n.overlay[data-exiting] {\n opacity: 0;\n}\n\n.overlay[data-rac]:not([data-entering]):not([data-exiting]) {\n opacity: 1;\n}\n\n.modal {\n background: var(--_s-fill);\n border: var(--_s-border-width) var(--_s-border-style) var(--_s-border-color);\n border-radius: var(--_s-radius);\n box-shadow: 0 24px 64px rgba(0, 0, 0, 0.45);\n color: var(--wzl-fg);\n font-family: var(--wzl-font-ui);\n max-width: min(900px, calc(100vw - 32px));\n max-height: calc(100vh - 32px);\n display: flex;\n flex-direction: column;\n outline: none;\n}\n\n/* BEGIN GENERATED stance rules: dialog — `npm run gen:stances`, do not edit. */\n\n.modal {\n --wzl-tone: initial;\n}\n\n.modal {\n --_s-surface: var(--wzl-surface);\n --_s-border-color: var(--wzl-border);\n --_s-border-style: solid;\n --_s-border-width: 1px;\n --_s-radius: var(--wzl-radius-md);\n --_s-tone-mix: var(--wzl-panel-tone-mix);\n --_s-tone: var(--wzl-tone, var(--_s-surface));\n --_s-accent: var(--wzl-tone);\n --_s-title-font: var(--wzl-font-ui);\n --_s-title-weight: var(--wzl-font-weight-bold);\n --_s-title-size: var(--wzl-font-size);\n --_s-title-case: none;\n --_s-title-tracking: normal;\n --_s-title-color: var(--wzl-fg);\n}\n\n.modal[data-stance='scope'] {\n --_s-surface: var(--wzl-stance-scope-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-scope-border-color, var(--wzl-border));\n --_s-border-style: var(--wzl-stance-scope-border-style, solid);\n --_s-border-width: var(--wzl-stance-scope-border-width, 1px);\n --_s-radius: var(--wzl-stance-scope-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-scope-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-scope-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-scope-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-scope-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-scope-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-scope-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-scope-title-case, none);\n --_s-title-tracking: var(--wzl-stance-scope-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-scope-title-color, var(--wzl-fg));\n}\n\n.modal[data-stance='aside'] {\n --_s-surface: var(--wzl-stance-aside-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-aside-border-color, var(--wzl-border));\n --_s-border-style: var(--wzl-stance-aside-border-style, solid);\n --_s-border-width: var(--wzl-stance-aside-border-width, 1px);\n --_s-radius: var(--wzl-stance-aside-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-aside-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-aside-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-aside-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-aside-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-aside-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-aside-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-aside-title-case, none);\n --_s-title-tracking: var(--wzl-stance-aside-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-aside-title-color, var(--wzl-fg));\n}\n\n.modal[data-stance='advanced'] {\n --_s-surface: var(--wzl-stance-advanced-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-advanced-border-color, var(--wzl-border));\n --_s-border-style: var(--wzl-stance-advanced-border-style, solid);\n --_s-border-width: var(--wzl-stance-advanced-border-width, 1px);\n --_s-radius: var(--wzl-stance-advanced-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-advanced-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-advanced-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-advanced-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-advanced-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-advanced-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-advanced-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-advanced-title-case, none);\n --_s-title-tracking: var(--wzl-stance-advanced-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-advanced-title-color, var(--wzl-fg));\n}\n\n.modal[data-stance='debug'] {\n --_s-surface: var(--wzl-stance-debug-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-debug-border-color, var(--wzl-border));\n --_s-border-style: var(--wzl-stance-debug-border-style, solid);\n --_s-border-width: var(--wzl-stance-debug-border-width, 1px);\n --_s-radius: var(--wzl-stance-debug-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-debug-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-debug-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-debug-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-debug-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-debug-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-debug-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-debug-title-case, none);\n --_s-title-tracking: var(--wzl-stance-debug-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-debug-title-color, var(--wzl-fg));\n}\n\n.modal[data-stance='danger'] {\n --_s-surface: var(--wzl-stance-danger-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-danger-border-color, var(--wzl-border));\n --_s-border-style: var(--wzl-stance-danger-border-style, solid);\n --_s-border-width: var(--wzl-stance-danger-border-width, 1px);\n --_s-radius: var(--wzl-stance-danger-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-danger-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-danger-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-danger-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-danger-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-danger-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-danger-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-danger-title-case, none);\n --_s-title-tracking: var(--wzl-stance-danger-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-danger-title-color, var(--wzl-fg));\n}\n\n.modal[data-stance='notice'] {\n --_s-surface: var(--wzl-stance-notice-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-notice-border-color, var(--wzl-border));\n --_s-border-style: var(--wzl-stance-notice-border-style, solid);\n --_s-border-width: var(--wzl-stance-notice-border-width, 1px);\n --_s-radius: var(--wzl-stance-notice-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-notice-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-notice-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-notice-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-notice-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-notice-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-notice-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-notice-title-case, none);\n --_s-title-tracking: var(--wzl-stance-notice-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-notice-title-color, var(--wzl-fg));\n}\n\n.modal[data-stance='important'] {\n --_s-surface: var(--wzl-stance-important-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-important-border-color, var(--wzl-border));\n --_s-border-style: var(--wzl-stance-important-border-style, solid);\n --_s-border-width: var(--wzl-stance-important-border-width, 1px);\n --_s-radius: var(--wzl-stance-important-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-important-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-important-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-important-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-important-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-important-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-important-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-important-title-case, none);\n --_s-title-tracking: var(--wzl-stance-important-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-important-title-color, var(--wzl-fg));\n}\n\n.modal[data-stance='preview'] {\n --_s-surface: var(--wzl-stance-preview-surface, var(--wzl-surface));\n --_s-border-color: var(--wzl-stance-preview-border-color, var(--wzl-border));\n --_s-border-style: var(--wzl-stance-preview-border-style, solid);\n --_s-border-width: var(--wzl-stance-preview-border-width, 1px);\n --_s-radius: var(--wzl-stance-preview-radius, var(--wzl-radius-md));\n --_s-tone-mix: var(--wzl-stance-preview-tone-mix, var(--wzl-panel-tone-mix));\n --_s-tone: var(--wzl-tone, var(--wzl-stance-preview-tone, var(--_s-surface)));\n --_s-accent: var(--wzl-stance-preview-accent, var(--wzl-tone));\n --_s-title-font: var(--wzl-stance-preview-title-font, var(--wzl-font-ui));\n --_s-title-weight: var(--wzl-stance-preview-title-weight, var(--wzl-font-weight-bold));\n --_s-title-size: var(--wzl-stance-preview-title-size, var(--wzl-font-size));\n --_s-title-case: var(--wzl-stance-preview-title-case, none);\n --_s-title-tracking: var(--wzl-stance-preview-title-tracking, normal);\n --_s-title-color: var(--wzl-stance-preview-title-color, var(--wzl-fg));\n}\n\n.modal {\n --_s-fill: var(--_s-surface);\n}\n\n.modal[data-tone],\n.modal[data-stance] {\n --_s-fill: color-mix(in oklab, var(--_s-tone) var(--_s-tone-mix), var(--_s-surface));\n}\n\n.modal[data-tone] {\n --wzl-accent: var(--_s-accent);\n --wzl-accent-base: var(--_s-accent);\n --wzl-accent-strong: color-mix(in oklab, var(--_s-accent) 70%, var(--wzl-fg));\n --wzl-accent-soft: color-mix(in oklab, var(--_s-accent) 45%, var(--wzl-surface));\n --wzl-accent-hover: var(--wzl-accent-strong);\n --wzl-accent-fg: var(--wzl-accent-strong);\n --wzl-focus-ring: var(--wzl-accent-strong);\n}\n\n/* END GENERATED stance rules: dialog */\n\n.dialog {\n display: flex;\n flex-direction: column;\n min-height: 0;\n flex: 1;\n outline: none;\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: var(--wzl-space-6);\n padding: var(--wzl-space-7) var(--wzl-space-8);\n border-bottom: 1px solid var(--wzl-border);\n flex: 0 0 auto;\n}\n\n.title {\n flex: 1;\n margin: 0;\n font-family: var(--_s-title-font);\n font-size: var(--_s-title-size);\n font-weight: var(--_s-title-weight);\n text-transform: var(--_s-title-case);\n letter-spacing: var(--_s-title-tracking);\n color: var(--_s-title-color);\n}\n\n.body {\n flex: 1;\n}\n\n/* Defaults, not rules: `bodyClassName` exists to turn these off for content\n that scrolls itself, and a plain class would tie with it on specificity and\n be decided by stylesheet order. `min-height` is here for the same reason —\n left in the rule above it silently beat a consumer class asking the body to\n hold a height, and the dialog resized itself around every pane. */\n:where(.body) {\n min-height: 0;\n overflow: auto;\n padding: var(--wzl-space-8);\n}\n\n.footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--wzl-space-4);\n padding: var(--wzl-space-6) var(--wzl-space-8);\n border-top: 1px solid var(--wzl-border);\n flex: 0 0 auto;\n}\n","import type { ReactNode } from 'react';\nimport {\n Modal as RACModal,\n ModalOverlay,\n Dialog as RACDialog,\n Heading,\n type ModalOverlayProps,\n type DialogProps as RACDialogProps,\n} from 'react-aria-components';\nimport { useOverlayPortal, type OverlayPortalProps, type WithoutPortalTarget } from '../../overlays/portalHost';\nimport { CloseButton } from '../CloseButton';\nimport { type StanceProps, useStance } from '../stance';\nimport s from './Dialog.module.css';\n\n/** Props for {@link Dialog}, on top of React Aria's `ModalOverlay` props. */\nexport type DialogProps = Omit<\n WithoutPortalTarget<ModalOverlayProps>,\n 'children' | 'className'\n> &\n OverlayPortalProps &\n StanceProps & {\n /** Heading rendered in the dialog's default header. Omit when supplying\n * a custom `header` slot via children. */\n title?: ReactNode;\n /** Show the built-in close button. Defaults to true when `onOpenChange`\n * is wired so the user has an escape hatch. */\n showCloseButton?: boolean;\n /** Body content. */\n children?: ReactNode;\n /** Footer slot — typically action buttons. */\n footer?: ReactNode;\n /** ARIA role. Defaults to `dialog`. Use `alertdialog` for confirms. */\n role?: RACDialogProps['role'];\n /** Class applied to the modal box (inside the overlay). */\n className?: string;\n /** Class applied to the scrolling body. For content that owns its own\n * scrolling — a form with a fixed navigation rail beside a scrolling\n * pane — this is where the body's padding and overflow come off. */\n bodyClassName?: string;\n };\n\n/**\n * Modal dialog wrapping React Aria. Supplies a default header (title +\n * close), scrollable body, and footer slot. Pass `isOpen` + `onOpenChange`\n * for controlled visibility, or omit both and use a `<DialogTrigger>` from\n * `react-aria-components` upstream of this component.\n *\n * Escape, click-outside, focus trap, and scroll lock all come from the\n * underlying primitives. `stance` and `tone` work as on `<PropertyPanel>` —\n * a destructive confirm is `stance=\"danger\"`.\n */\nexport function Dialog(props: DialogProps) {\n const {\n title,\n showCloseButton,\n children,\n footer,\n role = 'dialog',\n className,\n bodyClassName,\n isOpen,\n onOpenChange,\n portalContainer,\n stance,\n tone,\n ...rest\n } = props;\n const stanced = useStance({ stance, tone });\n\n const showClose = showCloseButton ?? Boolean(onOpenChange);\n const { anchor, portalProps } = useOverlayPortal(portalContainer);\n\n return (\n <>\n {anchor}\n <ModalOverlay\n {...rest}\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n className={s.overlay}\n data-weasel-overlay=\"\"\n {...portalProps}\n >\n <RACModal className={[s.modal, className].filter(Boolean).join(' ')} {...stanced}>\n <RACDialog role={role} className={s.dialog}>\n {({ close }) => (\n <>\n {(title !== undefined || showClose) && (\n <header className={s.header}>\n {title !== undefined && (\n <Heading slot=\"title\" className={s.title}>{title}</Heading>\n )}\n {showClose && (\n <CloseButton ariaLabel=\"Close dialog\" onClick={close} />\n )}\n </header>\n )}\n <div className={[s.body, bodyClassName].filter(Boolean).join(' ')}>{children}</div>\n {footer !== undefined && <footer className={s.footer}>{footer}</footer>}\n </>\n )}\n </RACDialog>\n </RACModal>\n </ModalOverlay>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;ACmDA,SAAgBA,EAAO,GAAoB;CACzC,IAAM,EACJ,UACA,oBACA,aACA,WACA,UAAO,UACP,cACA,kBACA,WACA,iBACA,oBACA,WACA,SACA,GAAGS,MACDC,GACEC,IAAUC,EAAU;EAAE;EAAQ;CAAK,CAAC,GAEpCC,IAAYC,KAAmB,EAAQC,GACvC,EAAE,WAAQ,mBAAgBV,EAAiBW,CAAe;CAEhE,OACE,kBAAAf,GAAA,EAAA,UAAA,CACGiB,GACD,kBAACC,GAAD;EACE,GAAIV;EACI;EACM;EACd,WAAWP,EAAE;EACb,uBAAoB;EACpB,GAAIkB;EAEJ,UAAA,kBAACjB,GAAD;GAAU,WAAW,CAACD,EAAE,OAAOoB,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;GAAG,GAAIX;GACvE,UAAA,kBAACP,GAAD;IAAiB;IAAM,WAAWF,EAAE;IAChC,WAAA,EAAE,eACF,kBAAAD,GAAA,EAAA,UAAA;MACIuB,MAAU,KAAA,KAAaX,MACvB,kBAAC,UAAD;MAAQ,WAAWX,EAAE;MAArB,UAAA,CACGsB,MAAU,KAAA,KACT,kBAACC,GAAD;OAAS,MAAK;OAAQ,WAAWvB,EAAE;OAAQ,UAAAsB;MAAe,CAAA,GAE3DX,KACC,kBAACP,GAAD;OAAa,WAAU;OAAe,SAASoB;MAAQ,CAAA,CAEnD;;KAEV,kBAAC,OAAD;MAAK,WAAW,CAACxB,EAAE,MAAMyB,CAAa,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;MAAI;KAAc,CAAA;KACjFC,MAAW,KAAA,KAAa,kBAAC,UAAD;MAAQ,WAAW1B,EAAE;MAAS,UAAA0B;KAAe,CAAA;IACtE,EAAA,CAAA;GAEK,CAAA;EACH,CAAA;CACE,CAAA,CACd,EAAA,CAAA;AAEN"}
@@ -1,11 +1,11 @@
1
1
  import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
2
  var n = {
3
- twisty: "_twisty_1ywy2_5",
4
- mark: "_mark_1ywy2_35",
5
- lozenge: "_lozenge_1ywy2_40",
6
- sign: "_sign_1ywy2_53",
7
- row: "_row_1ywy2_65",
8
- rowBody: "_rowBody_1ywy2_73"
3
+ twisty: "_twisty_486xw_1",
4
+ mark: "_mark_486xw_29",
5
+ lozenge: "_lozenge_486xw_34",
6
+ sign: "_sign_486xw_47",
7
+ row: "_row_486xw_59",
8
+ rowBody: "_rowBody_486xw_67"
9
9
  };
10
10
  //#endregion
11
11
  //#region src/components/Disclosure/Disclosure.tsx
@@ -55,4 +55,4 @@ function a({ children: r, className: a, ...o }) {
55
55
  //#endregion
56
56
  export { r as n, a as r, i as t };
57
57
 
58
- //# sourceMappingURL=Disclosure-0G0uh2fa.js.map
58
+ //# sourceMappingURL=Disclosure-Ch2KxYuB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Disclosure-Ch2KxYuB.js","names":["s","Disclosure_module_default","DisclosureMark","className","size","open","Disclosure","controls","label","onToggle","DisclosureRow","twisty"],"sources":["../../src/components/Disclosure/Disclosure.module.css","../../src/components/Disclosure/Disclosure.tsx"],"sourcesContent":[".twisty {\n flex: 0 0 auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n /* A floor, not a size: a control sized to a 12px glyph is a 12px target,\n which is under every pointer-size guideline there is. Stated as a minimum\n so a larger mark grows the target with it rather than being shrunk to fit\n — a flex item's default `flex-shrink: 1` would otherwise crush it. */\n min-width: var(--wzl-disclosure-target, var(--wzl-control-h-sm));\n min-height: var(--wzl-disclosure-target, var(--wzl-control-h-sm));\n padding: 0;\n border: 0;\n border-radius: var(--wzl-radius-sm);\n background: none;\n line-height: 1;\n cursor: pointer;\n}\n\n.twisty:focus-visible {\n outline: 2px solid var(--wzl-focus-ring);\n outline-offset: -2px;\n}\n\n.twisty:disabled {\n cursor: not-allowed;\n}\n\n.mark {\n display: block;\n flex: none;\n}\n\n.lozenge {\n fill: var(--wzl-disclosure-fill, var(--wzl-accent-fg));\n transition: fill var(--wzl-motion-fast) var(--wzl-ease-out-cubic);\n}\n\n.twisty:hover:not(:disabled) .lozenge {\n fill: color-mix(in oklab, var(--wzl-disclosure-fill, var(--wzl-accent-fg)), white 15%);\n}\n\n.twisty:disabled .lozenge {\n fill: var(--wzl-fg-subtle);\n}\n\n.sign {\n fill: none;\n stroke: var(--wzl-fg-on-accent);\n stroke-width: 1;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .lozenge {\n transition: none;\n }\n}\n\n.row {\n display: flex;\n align-items: center;\n gap: var(--wzl-disclosure-gap, 4px);\n}\n\n/* The row's content takes the rest and is allowed to shrink; the twisty is\n not, so a long label truncates rather than crushing the control. */\n.rowBody {\n flex: 1 1 auto;\n min-width: 0;\n}\n","import type { ReactNode } from 'react';\nimport s from './Disclosure.module.css';\n\n/** Props for `<DisclosureMark>`. */\nexport interface DisclosureMarkProps {\n /** Whether the section it stands for is open: `−` when open, `+` when shut. */\n open: boolean;\n /** Mark size in px, square. Default 13. */\n size?: number;\n className?: string;\n}\n\n/**\n * The fold mark alone: a dark violet rounded square holding a `+` while its section is\n * shut and a `−` while it is open. Decorative — it carries no role or label —\n * for a row that is itself the control, such as a tree item or a header\n * button. Anywhere the mark has to be the control, use `<Disclosure>`.\n *\n * Deliberately not part of the icon register, on the same grounds as\n * `DragGrip`: that register is outline strokes at a fixed weight, and\n * this mark is filled.\n */\nexport function DisclosureMark({ open, size = 13, className }: DisclosureMarkProps) {\n return (\n <svg\n className={className ? `${s.mark} ${className}` : s.mark}\n viewBox=\"0 0 13 13\"\n width={size}\n height={size}\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect className={s.lozenge} width=\"13\" height=\"13\" rx=\"3\" />\n {/* One-unit bars centered on 6.5 in an odd box, so at the default size\n both edges land on the pixel grid rather than blurring across it. */}\n <path className={s.sign} d={open ? 'M3 6.5 H10' : 'M3 6.5 H10 M6.5 3 V10'} />\n </svg>\n );\n}\n\n/** Props for `<Disclosure>`. */\nexport interface DisclosureProps {\n /** Whether the section it controls is open. The consumer owns this. */\n open: boolean;\n onToggle: () => void;\n /**\n * Names the section, for a screen reader. The control has no text of its\n * own, so without this it announces as an unlabeled button.\n */\n label: string;\n /**\n * `id` of the element this expands. Sets `aria-controls`, which lets a\n * screen reader move to the revealed content.\n */\n controls?: string;\n /** Mark size in px. The hit target is at least 20px and grows with it.\n * Default 13. */\n size?: number;\n disabled?: boolean;\n className?: string;\n}\n\n/**\n * The twisty on a collapsible section: a `<DisclosureMark>` in a button.\n *\n * Presentational — it holds no open/closed state and renders no children.\n * The consumer owns the state and the panel; this is the control that toggles\n * it, and `aria-expanded` is what ties the two together.\n *\n * Three things it settles that a hand-rolled twisty keeps getting wrong. The\n * mark is drawn rather than typed, because `--wzl-font-ui` carries no ▸/▾ and\n * a text glyph falls back to whatever the system offers at whatever size that\n * font renders it. The hit target is larger than the mark. And it is a sibling\n * of the row's label rather than a child, so clicking to expand does not\n * actuate the label's own control.\n */\nexport function Disclosure({ open, onToggle, label, controls, size = 13, disabled, className }: DisclosureProps) {\n return (\n <button\n type=\"button\"\n className={className ? `${s.twisty} ${className}` : s.twisty}\n aria-expanded={open}\n aria-controls={controls}\n aria-label={label}\n disabled={disabled}\n onClick={onToggle}\n >\n <DisclosureMark open={open} size={size} />\n </button>\n );\n}\n\n/** Props for `<DisclosureRow>`. */\nexport interface DisclosureRowProps extends Omit<DisclosureProps, 'className'> {\n /** The row's own content — a label, a checkbox, a count. */\n children: ReactNode;\n className?: string;\n}\n\n/**\n * A `<Disclosure>` and a row of content beside it, laid out so the twisty\n * leads and the content takes the rest.\n *\n * The layout is the point: the twisty sits *outside* whatever the row puts in\n * it, so a row whose content is a `<label>` wrapping a checkbox stays\n * clickable as a label without the twisty actuating it.\n */\nexport function DisclosureRow({ children, className, ...twisty }: DisclosureRowProps) {\n return (\n <div className={className ? `${s.row} ${className}` : s.row}>\n <Disclosure {...twisty} />\n <div className={s.rowBody}>{children}</div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;ACsBA,SAAgBE,EAAe,EAAE,SAAM,UAAO,IAAI,gBAAkC;CAClF,OACE,kBAAC,OAAD;EACE,WAAWC,IAAY,GAAGH,EAAE,KAAK,GAAGG,MAAcH,EAAE;EACpD,SAAQ;EACR,OAAOI;EACP,QAAQA;EACR,eAAY;EACZ,WAAU;EANZ,UAAA,CAQE,kBAAC,QAAD;GAAM,WAAWJ,EAAE;GAAS,OAAM;GAAK,QAAO;GAAK,IAAG;EAAK,CAAA,GAG3D,kBAAC,QAAD;GAAM,WAAWA,EAAE;GAAM,GAAGK,IAAO,eAAe;EAA0B,CAAA,CACzE;;AAET;AAsCA,SAAgBC,EAAW,EAAE,SAAM,aAAU,UAAO,aAAU,UAAO,IAAI,aAAU,gBAA8B;CAC/G,OACE,kBAAC,UAAD;EACE,MAAK;EACL,WAAWH,IAAY,GAAGH,EAAE,OAAO,GAAGG,MAAcH,EAAE;EACtD,iBAAeK;EACf,iBAAeE;EACf,cAAYC;EACF;EACV,SAASC;EAET,UAAA,kBAACP,GAAD;GAAsB;GAAY;EAAO,CAAA;CACnC,CAAA;AAEZ;AAiBA,SAAgBQ,EAAc,EAAE,aAAU,cAAW,GAAGC,KAA8B;CACpF,OACE,kBAAC,OAAD;EAAK,WAAWR,IAAY,GAAGH,EAAE,IAAI,GAAGG,MAAcH,EAAE;EAAxD,UAAA,CACE,kBAACM,GAAD,EAAY,GAAIK,EAAS,CAAA,GACzB,kBAAC,OAAD;GAAK,WAAWX,EAAE;GAAU;EAAc,CAAA,CACvC;;AAET"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
- //#region src/components/DragHandleGlyph/DragHandleGlyph.tsx
2
+ //#region src/components/DragGrip/DragGrip.tsx
3
3
  function n({ size: n = 16 }) {
4
4
  return /* @__PURE__ */ t("svg", {
5
5
  width: n * 8 / 16,
@@ -44,4 +44,4 @@ function n({ size: n = 16 }) {
44
44
  //#endregion
45
45
  export { n as t };
46
46
 
47
- //# sourceMappingURL=DragHandleGlyph-Dr7Fgo0I.js.map
47
+ //# sourceMappingURL=DragGrip-AoIZXfZb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DragGrip-AoIZXfZb.js","names":["DragGrip","size"],"sources":["../../src/components/DragGrip/DragGrip.tsx"],"sourcesContent":["/** Props for `<DragGrip>`. */\nexport interface DragGripProps {\n /** Height in px; width scales with it. Default 16. */\n size?: number;\n}\n\n/** The two-column dot grip used on anything draggable by a handle.\n *\n * Deliberately not part of the icon register: that register is outline strokes\n * at a fixed weight, and a grip is filled dots. Forcing it in would either\n * break the register's rule or produce a worse glyph. */\nexport function DragGrip({ size = 16 }: DragGripProps) {\n return (\n <svg\n width={(size * 8) / 16}\n height={size}\n viewBox=\"0 0 8 16\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <circle cx=\"2\" cy=\"3\" r=\"1.1\" />\n <circle cx=\"6\" cy=\"3\" r=\"1.1\" />\n <circle cx=\"2\" cy=\"8\" r=\"1.1\" />\n <circle cx=\"6\" cy=\"8\" r=\"1.1\" />\n <circle cx=\"2\" cy=\"13\" r=\"1.1\" />\n <circle cx=\"6\" cy=\"13\" r=\"1.1\" />\n </svg>\n );\n}\n"],"mappings":";;AAWA,SAAgBA,EAAS,EAAE,UAAO,MAAqB;CACrD,OACE,kBAAC,OAAD;EACE,OAAQC,IAAO,IAAK;EACpB,QAAQA;EACR,SAAQ;EACR,MAAK;EACL,eAAY;EALd,UAAA;GAOE,kBAAC,UAAD;IAAQ,IAAG;IAAI,IAAG;IAAI,GAAE;GAAO,CAAA;GAC/B,kBAAC,UAAD;IAAQ,IAAG;IAAI,IAAG;IAAI,GAAE;GAAO,CAAA;GAC/B,kBAAC,UAAD;IAAQ,IAAG;IAAI,IAAG;IAAI,GAAE;GAAO,CAAA;GAC/B,kBAAC,UAAD;IAAQ,IAAG;IAAI,IAAG;IAAI,GAAE;GAAO,CAAA;GAC/B,kBAAC,UAAD;IAAQ,IAAG;IAAI,IAAG;IAAK,GAAE;GAAO,CAAA;GAChC,kBAAC,UAAD;IAAQ,IAAG;IAAI,IAAG;IAAK,GAAE;GAAO,CAAA;EAC7B;;AAET"}
@@ -0,0 +1,284 @@
1
+ import { t as e } from "./Badge-D2aD7xVL.js";
2
+ import { t } from "./Code-AsKpgnv6.js";
3
+ import { n, o as r, r as i, s as a } from "./Keycaps-C-FJyG8k.js";
4
+ import { t as o } from "./GestureRoute-C_YGl7bJ.js";
5
+ import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
6
+ import { useId as u } from "react";
7
+ var d = {
8
+ diagram: "_diagram_1uz8k_1",
9
+ input: "_input_1uz8k_9",
10
+ field: "_field_1uz8k_17",
11
+ stage: "_stage_1uz8k_25",
12
+ stageTitle: "_stageTitle_1uz8k_35",
13
+ table: "_table_1uz8k_44",
14
+ note: "_note_1uz8k_45",
15
+ routes: "_routes_1uz8k_64",
16
+ num: "_num_1uz8k_66",
17
+ muted: "_muted_1uz8k_73",
18
+ walk: "_walk_1uz8k_75",
19
+ winner: "_winner_1uz8k_83",
20
+ nothing: "_nothing_1uz8k_86"
21
+ };
22
+ //#endregion
23
+ //#region src/components/FallthroughDiagram/FallthroughDiagram.tsx
24
+ function f(e) {
25
+ return e.step === "specificity" ? `specificity · ${e.part}` : e.step;
26
+ }
27
+ function p(e) {
28
+ switch (e.kind) {
29
+ case "fired": return "fired";
30
+ case "would-fire": return "would fire";
31
+ case "declined": return /* @__PURE__ */ l(s, { children: ["declined: ", e.reason] });
32
+ case "empty-handle": return "empty handle";
33
+ case "misbound": return "misbound";
34
+ case "duplicate": return "duplicate";
35
+ case "no-such-action": return "no such action";
36
+ case "not-asked": return "not asked";
37
+ case "outranked": return "outranked";
38
+ }
39
+ }
40
+ var m = (e) => e.kind === "fired" || e.kind === "would-fire", h = [
41
+ "shift",
42
+ "alt",
43
+ "ctrl",
44
+ "meta"
45
+ ];
46
+ function g({ input: t, predicted: o }) {
47
+ let s = h.filter((e) => t.modifiers[e]).map((e) => ({ name: e }));
48
+ return /* @__PURE__ */ l("dl", {
49
+ className: d.input,
50
+ "aria-label": "Input",
51
+ children: [
52
+ /* @__PURE__ */ l("div", {
53
+ className: d.field,
54
+ children: [/* @__PURE__ */ c("dt", { children: "Event" }), /* @__PURE__ */ c("dd", { children: t.eventKind })]
55
+ }),
56
+ t.key !== void 0 && /* @__PURE__ */ l("div", {
57
+ className: d.field,
58
+ children: [/* @__PURE__ */ c("dt", { children: "Key" }), /* @__PURE__ */ c("dd", {
59
+ "data-key": t.key,
60
+ children: /* @__PURE__ */ c(i, {
61
+ label: r(t.key, { legend: "text" }).label,
62
+ variant: "minimal"
63
+ })
64
+ })]
65
+ }),
66
+ /* @__PURE__ */ l("div", {
67
+ className: d.field,
68
+ children: [/* @__PURE__ */ c("dt", { children: "Modifiers" }), /* @__PURE__ */ c("dd", { children: s.length > 0 ? /* @__PURE__ */ c(n, {
69
+ keys: a(s),
70
+ variant: "minimal"
71
+ }) : "none" })]
72
+ }),
73
+ t.viewId !== null && /* @__PURE__ */ l("div", {
74
+ className: d.field,
75
+ children: [/* @__PURE__ */ c("dt", { children: "View" }), /* @__PURE__ */ c("dd", { children: t.viewId })]
76
+ }),
77
+ t.mode !== void 0 && /* @__PURE__ */ l("div", {
78
+ className: d.field,
79
+ children: [/* @__PURE__ */ c("dt", { children: "Mode" }), /* @__PURE__ */ c("dd", { children: t.mode })]
80
+ }),
81
+ o && /* @__PURE__ */ c("div", {
82
+ className: d.field,
83
+ children: /* @__PURE__ */ c("dd", { children: /* @__PURE__ */ c(e, {
84
+ size: "xs",
85
+ status: "accent",
86
+ variant: "subtle",
87
+ children: "predicted"
88
+ }) })
89
+ })
90
+ ]
91
+ });
92
+ }
93
+ function _({ candidate: e }) {
94
+ return /* @__PURE__ */ c("span", {
95
+ className: d.routes,
96
+ children: e.routes.map((e) => /* @__PURE__ */ c(o, {
97
+ route: e,
98
+ size: "sm"
99
+ }, e))
100
+ });
101
+ }
102
+ function v({ title: e, note: t, filter: n, children: r }) {
103
+ let i = u();
104
+ return /* @__PURE__ */ l("section", {
105
+ className: d.stage,
106
+ "aria-labelledby": i,
107
+ "data-filter": n,
108
+ children: [/* @__PURE__ */ l("h3", {
109
+ className: d.stageTitle,
110
+ children: [/* @__PURE__ */ c("span", {
111
+ id: i,
112
+ children: e
113
+ }), t && /* @__PURE__ */ c("span", {
114
+ className: d.note,
115
+ children: t
116
+ })]
117
+ }), r]
118
+ });
119
+ }
120
+ function y({ matched: e }) {
121
+ return /* @__PURE__ */ c(v, {
122
+ title: "Matched",
123
+ note: "every binding that fits the input",
124
+ children: /* @__PURE__ */ l("table", {
125
+ className: d.table,
126
+ children: [/* @__PURE__ */ c("thead", { children: /* @__PURE__ */ l("tr", { children: [
127
+ /* @__PURE__ */ c("th", { children: "Action" }),
128
+ /* @__PURE__ */ c("th", { children: "Route" }),
129
+ /* @__PURE__ */ c("th", { children: "Owner" }),
130
+ /* @__PURE__ */ c("th", { children: "Tier" })
131
+ ] }) }), /* @__PURE__ */ c("tbody", { children: e.map((e, n) => /* @__PURE__ */ l("tr", { children: [
132
+ /* @__PURE__ */ c("td", { children: /* @__PURE__ */ c(t, {
133
+ size: "sm",
134
+ children: e.actionId
135
+ }) }),
136
+ /* @__PURE__ */ c("td", { children: /* @__PURE__ */ c(_, { candidate: e }) }),
137
+ /* @__PURE__ */ c("td", {
138
+ className: e.ownerId === null ? d.muted : void 0,
139
+ children: e.ownerId ?? "action"
140
+ }),
141
+ /* @__PURE__ */ c("td", { children: e.scope })
142
+ ] }, n)) })]
143
+ })
144
+ });
145
+ }
146
+ function b(e) {
147
+ return e.filter === "ineligible" ? /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c(t, {
148
+ size: "sm",
149
+ variant: "plain",
150
+ children: e.rule
151
+ }), " does not hold"] }) : e.owner === void 0 ? "barred by an exclusive claim" : /* @__PURE__ */ l(s, { children: ["barred by the exclusive claim of ", /* @__PURE__ */ c(t, {
152
+ size: "sm",
153
+ variant: "plain",
154
+ children: e.owner
155
+ })] });
156
+ }
157
+ function x({ title: e, filter: n, dropped: r }) {
158
+ let i = r.filter((e) => e.filter === n);
159
+ return i.length === 0 ? /* @__PURE__ */ c(v, {
160
+ title: e,
161
+ filter: n,
162
+ note: "dropped nothing"
163
+ }) : /* @__PURE__ */ c(v, {
164
+ title: e,
165
+ filter: n,
166
+ note: "dropped",
167
+ children: /* @__PURE__ */ l("table", {
168
+ className: d.table,
169
+ children: [/* @__PURE__ */ c("thead", { children: /* @__PURE__ */ l("tr", { children: [
170
+ /* @__PURE__ */ c("th", { children: "Action" }),
171
+ /* @__PURE__ */ c("th", { children: "Route" }),
172
+ /* @__PURE__ */ c("th", { children: "Why" })
173
+ ] }) }), /* @__PURE__ */ c("tbody", { children: i.map((e, n) => /* @__PURE__ */ l("tr", { children: [
174
+ /* @__PURE__ */ c("td", { children: /* @__PURE__ */ c(t, {
175
+ size: "sm",
176
+ children: e.candidate.actionId
177
+ }) }),
178
+ /* @__PURE__ */ c("td", { children: /* @__PURE__ */ c(_, { candidate: e.candidate }) }),
179
+ /* @__PURE__ */ c("td", { children: b(e) })
180
+ ] }, n)) })]
181
+ })
182
+ });
183
+ }
184
+ function S({ ranked: n }) {
185
+ return n.length === 0 ? /* @__PURE__ */ c(v, {
186
+ title: "Ranked",
187
+ note: "nothing survived the filters"
188
+ }) : /* @__PURE__ */ c(v, {
189
+ title: "Ranked",
190
+ note: "highest first, with what the walk did at each",
191
+ children: /* @__PURE__ */ l("table", {
192
+ className: d.table,
193
+ children: [/* @__PURE__ */ c("thead", { children: /* @__PURE__ */ l("tr", { children: [
194
+ /* @__PURE__ */ c("th", {
195
+ className: d.num,
196
+ children: "#"
197
+ }),
198
+ /* @__PURE__ */ c("th", { children: "Action" }),
199
+ /* @__PURE__ */ c("th", { children: "Placed by" }),
200
+ /* @__PURE__ */ c("th", { children: "Walk" }),
201
+ /* @__PURE__ */ c("th", { children: "Tier" }),
202
+ /* @__PURE__ */ c("th", { children: "Specificity" }),
203
+ /* @__PURE__ */ c("th", { children: "Rule" }),
204
+ /* @__PURE__ */ c("th", { children: "Route" })
205
+ ] }) }), /* @__PURE__ */ c("tbody", { children: n.map((n, r) => {
206
+ let i = n.candidate, a = m(n.walk);
207
+ return /* @__PURE__ */ l("tr", {
208
+ className: a ? d.winner : void 0,
209
+ "data-walk": n.walk.kind,
210
+ "data-winner": a || void 0,
211
+ "aria-current": a || void 0,
212
+ children: [
213
+ /* @__PURE__ */ c("td", {
214
+ className: d.num,
215
+ children: r + 1
216
+ }),
217
+ /* @__PURE__ */ c("td", { children: /* @__PURE__ */ c(t, {
218
+ size: "sm",
219
+ children: i.actionId
220
+ }) }),
221
+ /* @__PURE__ */ c("td", { children: /* @__PURE__ */ c(e, {
222
+ size: "xs",
223
+ variant: "outline",
224
+ status: n.placedBy.step === "first" ? "muted" : "warn",
225
+ children: f(n.placedBy)
226
+ }) }),
227
+ /* @__PURE__ */ c("td", {
228
+ className: d.walk,
229
+ "data-walk": n.walk.kind,
230
+ children: p(n.walk)
231
+ }),
232
+ /* @__PURE__ */ c("td", { children: i.scope }),
233
+ /* @__PURE__ */ c("td", {
234
+ className: d.num,
235
+ "aria-label": "target, modifiers, phase, exact",
236
+ children: i.specificity.join(" ")
237
+ }),
238
+ /* @__PURE__ */ c("td", { children: i.eligible ? /* @__PURE__ */ c(t, {
239
+ size: "sm",
240
+ variant: "plain",
241
+ children: i.eligible
242
+ }) : /* @__PURE__ */ c("span", {
243
+ className: d.muted,
244
+ children: "none"
245
+ }) }),
246
+ /* @__PURE__ */ c("td", { children: /* @__PURE__ */ c(_, { candidate: i }) })
247
+ ]
248
+ }, r);
249
+ }) })]
250
+ })
251
+ });
252
+ }
253
+ function C({ record: e, className: t }) {
254
+ let n = t ? `${d.diagram} ${t}` : d.diagram;
255
+ return /* @__PURE__ */ l("div", {
256
+ className: n,
257
+ "data-outcome": e.outcome,
258
+ "data-predicted": e.predicted || void 0,
259
+ children: [/* @__PURE__ */ c(g, {
260
+ input: e.input,
261
+ predicted: e.predicted
262
+ }), e.matched.length === 0 ? /* @__PURE__ */ c("p", {
263
+ className: d.nothing,
264
+ children: "Nothing matched this input."
265
+ }) : /* @__PURE__ */ l(s, { children: [
266
+ /* @__PURE__ */ c(y, { matched: e.matched }),
267
+ /* @__PURE__ */ c(x, {
268
+ title: "Claim",
269
+ filter: "claim",
270
+ dropped: e.dropped
271
+ }),
272
+ /* @__PURE__ */ c(x, {
273
+ title: "Eligibility",
274
+ filter: "ineligible",
275
+ dropped: e.dropped
276
+ }),
277
+ /* @__PURE__ */ c(S, { ranked: e.ranked })
278
+ ] })]
279
+ });
280
+ }
281
+ //#endregion
282
+ export { C as t };
283
+
284
+ //# sourceMappingURL=FallthroughDiagram-BEHiM5IS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FallthroughDiagram-BEHiM5IS.js","names":["_Fragment","s","Badge","keySpecFromKey","KeyCap","keySpecsFromMods","GestureRoute","FallthroughDiagram_module_default","placedByLabel","p","walkLabel","w","Fragment","isWinner","MOD_ORDER","InputLine","mods","input","m","KeySequence","predicted","Routes","candidate","r","Stage","id","useId","filter","title","note","children","MatchedStage","matched","Code","c","i","dropReason","d","FilterBand","mine","dropped","RankedStage","ranked","winner","FallthroughDiagram","cls","className","record"],"sources":["../../src/components/FallthroughDiagram/FallthroughDiagram.module.css","../../src/components/FallthroughDiagram/FallthroughDiagram.tsx"],"sourcesContent":[".diagram {\n display: grid;\n gap: var(--wzl-space-3);\n color: var(--wzl-fg);\n font-family: var(--wzl-font-ui);\n font-size: var(--wzl-font-size-sm);\n}\n\n.input {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: var(--wzl-space-2) var(--wzl-space-4);\n margin: 0;\n color: var(--wzl-fg-muted);\n}\n.field { display: flex; align-items: baseline; gap: var(--wzl-space-1); }\n.field dt { margin: 0; }\n.field dd {\n margin: 0;\n color: var(--wzl-fg);\n font-weight: var(--wzl-font-weight-medium);\n}\n\n.stage {\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-md);\n background: var(--wzl-surface);\n padding: var(--wzl-space-2) var(--wzl-space-3);\n /* Ids and rules do not wrap mid-word; a narrow host scrolls the stage instead. */\n overflow-x: auto;\n}\n.stage[data-filter] { background: var(--wzl-surface-sunken); }\n\n.stageTitle {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: var(--wzl-space-2);\n margin: 0;\n font-size: var(--wzl-font-size-sm);\n font-weight: var(--wzl-font-weight-bold);\n}\n.stageTitle + .table { margin-top: var(--wzl-space-2); }\n.note { color: var(--wzl-fg-muted); font-weight: var(--wzl-font-weight-medium); }\n\n.table { width: 100%; border-collapse: collapse; }\n.table th {\n text-align: start;\n color: var(--wzl-fg-muted);\n font-size: var(--wzl-font-size-xs);\n font-weight: var(--wzl-font-weight-bold);\n padding: var(--wzl-space-1) var(--wzl-space-2);\n}\n.table td {\n padding: var(--wzl-space-1) var(--wzl-space-2);\n border-top: 1px solid var(--wzl-border);\n vertical-align: top;\n white-space: nowrap;\n}\n\n.table code { white-space: nowrap; overflow-wrap: normal; }\n\n.routes { display: inline-flex; flex-direction: column; align-items: flex-start; gap: var(--wzl-space-1); }\n\n.num {\n font-family: var(--wzl-font-mono);\n font-variant-numeric: tabular-nums;\n text-align: end;\n white-space: nowrap;\n}\n\n.muted { color: var(--wzl-fg-muted); }\n\n.walk { color: var(--wzl-fg-muted); }\n.walk[data-walk='fired'],\n.walk[data-walk='would-fire'] { color: var(--wzl-success); font-weight: var(--wzl-font-weight-bold); }\n.walk[data-walk='declined'],\n.walk[data-walk='empty-handle'],\n.walk[data-walk='misbound'],\n.walk[data-walk='no-such-action'] { color: var(--wzl-fg); }\n\n.winner td { background: color-mix(in srgb, var(--wzl-success) 12%, transparent); }\n.winner td:first-child { box-shadow: inset 3px 0 var(--wzl-success); }\n\n.nothing { margin: 0; color: var(--wzl-fg-muted); }\n","import { useId, type ReactNode } from 'react';\nimport type {\n DispatchRecord,\n DispatchRecordInput,\n DroppedCandidate,\n PlacedBy,\n RankedCandidate,\n RecordCandidate,\n WalkStep,\n} from '@weasel-js/core/routing';\nimport { Badge } from '../Badge';\nimport { Code } from '../Code';\nimport { GestureRoute } from '../GestureRoute';\nimport { KeyCap, KeySequence, keySpecFromKey, keySpecsFromMods, type LogicalModSpec } from '../Keycaps';\nimport s from './FallthroughDiagram.module.css';\n\nfunction placedByLabel(p: PlacedBy): string {\n return p.step === 'specificity' ? `specificity · ${p.part}` : p.step;\n}\n\nfunction walkLabel(w: WalkStep): ReactNode {\n switch (w.kind) {\n case 'fired': return 'fired';\n case 'would-fire': return 'would fire';\n case 'declined': return <>declined: {w.reason}</>;\n case 'empty-handle': return 'empty handle';\n case 'misbound': return 'misbound';\n case 'duplicate': return 'duplicate';\n case 'no-such-action': return 'no such action';\n case 'not-asked': return 'not asked';\n case 'outranked': return 'outranked';\n }\n}\n\nconst isWinner = (w: WalkStep) => w.kind === 'fired' || w.kind === 'would-fire';\n\nconst MOD_ORDER = ['shift', 'alt', 'ctrl', 'meta'] as const;\n\nfunction InputLine({ input, predicted }: { input: DispatchRecordInput; predicted: boolean }) {\n const mods: LogicalModSpec[] = MOD_ORDER.filter((m) => input.modifiers[m]).map((name) => ({ name }));\n return (\n <dl className={s.input} aria-label=\"Input\">\n <div className={s.field}>\n <dt>Event</dt>\n <dd>{input.eventKind}</dd>\n </div>\n {input.key !== undefined && (\n <div className={s.field}>\n <dt>Key</dt>\n <dd data-key={input.key}>\n <KeyCap label={keySpecFromKey(input.key, { legend: 'text' }).label} variant=\"minimal\" />\n </dd>\n </div>\n )}\n <div className={s.field}>\n <dt>Modifiers</dt>\n <dd>{mods.length > 0 ? <KeySequence keys={keySpecsFromMods(mods)} variant=\"minimal\" /> : 'none'}</dd>\n </div>\n {input.viewId !== null && (\n <div className={s.field}>\n <dt>View</dt>\n <dd>{input.viewId}</dd>\n </div>\n )}\n {input.mode !== undefined && (\n <div className={s.field}>\n <dt>Mode</dt>\n <dd>{input.mode}</dd>\n </div>\n )}\n {predicted && (\n <div className={s.field}>\n <dd><Badge size=\"xs\" status=\"accent\" variant=\"subtle\">predicted</Badge></dd>\n </div>\n )}\n </dl>\n );\n}\n\nfunction Routes({ candidate }: { candidate: RecordCandidate }) {\n return (\n <span className={s.routes}>\n {candidate.routes.map((r) => <GestureRoute key={r} route={r} size=\"sm\" />)}\n </span>\n );\n}\n\nfunction Stage({ title, note, filter, children }: {\n title: string;\n note?: ReactNode;\n filter?: DroppedCandidate['filter'];\n children?: ReactNode;\n}) {\n const id = useId();\n return (\n <section className={s.stage} aria-labelledby={id} data-filter={filter}>\n <h3 className={s.stageTitle}>\n <span id={id}>{title}</span>\n {note && <span className={s.note}>{note}</span>}\n </h3>\n {children}\n </section>\n );\n}\n\nfunction MatchedStage({ matched }: { matched: readonly RecordCandidate[] }) {\n return (\n <Stage title=\"Matched\" note=\"every binding that fits the input\">\n <table className={s.table}>\n <thead>\n <tr><th>Action</th><th>Route</th><th>Owner</th><th>Tier</th></tr>\n </thead>\n <tbody>\n {matched.map((c, i) => (\n <tr key={i}>\n <td><Code size=\"sm\">{c.actionId}</Code></td>\n <td><Routes candidate={c} /></td>\n <td className={c.ownerId === null ? s.muted : undefined}>{c.ownerId ?? 'action'}</td>\n <td>{c.scope}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </Stage>\n );\n}\n\nfunction dropReason(d: DroppedCandidate): ReactNode {\n if (d.filter === 'ineligible') return <><Code size=\"sm\" variant=\"plain\">{d.rule}</Code> does not hold</>;\n return d.owner !== undefined\n ? <>barred by the exclusive claim of <Code size=\"sm\" variant=\"plain\">{d.owner}</Code></>\n : 'barred by an exclusive claim';\n}\n\nfunction FilterBand({ title, filter, dropped }: {\n title: string;\n filter: DroppedCandidate['filter'];\n dropped: readonly DroppedCandidate[];\n}) {\n const mine = dropped.filter((d) => d.filter === filter);\n if (mine.length === 0) return <Stage title={title} filter={filter} note=\"dropped nothing\" />;\n return (\n <Stage title={title} filter={filter} note=\"dropped\">\n <table className={s.table}>\n <thead>\n <tr><th>Action</th><th>Route</th><th>Why</th></tr>\n </thead>\n <tbody>\n {mine.map((d, i) => (\n <tr key={i}>\n <td><Code size=\"sm\">{d.candidate.actionId}</Code></td>\n <td><Routes candidate={d.candidate} /></td>\n <td>{dropReason(d)}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </Stage>\n );\n}\n\nfunction RankedStage({ ranked }: { ranked: readonly RankedCandidate[] }) {\n if (ranked.length === 0) return <Stage title=\"Ranked\" note=\"nothing survived the filters\" />;\n return (\n <Stage title=\"Ranked\" note=\"highest first, with what the walk did at each\">\n <table className={s.table}>\n <thead>\n <tr>\n <th className={s.num}>#</th><th>Action</th><th>Placed by</th><th>Walk</th>\n <th>Tier</th><th>Specificity</th><th>Rule</th><th>Route</th>\n </tr>\n </thead>\n <tbody>\n {ranked.map((r, i) => {\n const c = r.candidate;\n const winner = isWinner(r.walk);\n return (\n <tr\n key={i}\n className={winner ? s.winner : undefined}\n data-walk={r.walk.kind}\n data-winner={winner || undefined}\n aria-current={winner || undefined}\n >\n <td className={s.num}>{i + 1}</td>\n <td><Code size=\"sm\">{c.actionId}</Code></td>\n <td>\n <Badge size=\"xs\" variant=\"outline\" status={r.placedBy.step === 'first' ? 'muted' : 'warn'}>\n {placedByLabel(r.placedBy)}\n </Badge>\n </td>\n <td className={s.walk} data-walk={r.walk.kind}>{walkLabel(r.walk)}</td>\n <td>{c.scope}</td>\n <td className={s.num} aria-label=\"target, modifiers, phase, exact\">{c.specificity.join(' ')}</td>\n <td>{c.eligible ? <Code size=\"sm\" variant=\"plain\">{c.eligible}</Code> : <span className={s.muted}>none</span>}</td>\n <td><Routes candidate={c} /></td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </Stage>\n );\n}\n\n/** Props for {@link FallthroughDiagram}. */\nexport interface FallthroughDiagramProps {\n record: DispatchRecord;\n className?: string;\n}\n\n/**\n * One dispatch drawn top to bottom: the input, every binding it matched, what\n * the claim and eligibility filters dropped, and the ranked survivors with the\n * step that placed each one and what the walk did with it. The winner's row\n * carries `data-winner`.\n */\nexport function FallthroughDiagram({ record, className }: FallthroughDiagramProps) {\n const cls = className ? `${s.diagram} ${className}` : s.diagram;\n return (\n <div className={cls} data-outcome={record.outcome} data-predicted={record.predicted || undefined}>\n <InputLine input={record.input} predicted={record.predicted} />\n {record.matched.length === 0 ? (\n <p className={s.nothing}>Nothing matched this input.</p>\n ) : (\n <>\n <MatchedStage matched={record.matched} />\n <FilterBand title=\"Claim\" filter=\"claim\" dropped={record.dropped} />\n <FilterBand title=\"Eligibility\" filter=\"ineligible\" dropped={record.dropped} />\n <RankedStage ranked={record.ranked} />\n </>\n )}\n </div>\n );\n}\n"],"mappings":"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"}