@keboola/design 11.9.0 → 13.0.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 (367) hide show
  1. package/AGENTS.md +45 -14
  2. package/CHANGELOG.md +246 -0
  3. package/COMPONENT-API.md +352 -294
  4. package/README.md +11 -1
  5. package/dist/{AIKit-ELIsegJz.js → AIKit-DcOlHIBr.js} +420 -247
  6. package/dist/AIKit-DcOlHIBr.js.map +1 -0
  7. package/dist/{Alert-BsIM_oFK.js → Alert-UI-CIs-1.js} +16 -16
  8. package/dist/Alert-UI-CIs-1.js.map +1 -0
  9. package/dist/{AlertModal-BGJdaRRj.js → AlertModal-mbSnuuka.js} +8 -8
  10. package/dist/AlertModal-mbSnuuka.js.map +1 -0
  11. package/dist/{AppShell-DRgJxpXW.js → AppShell-WSQabK8r.js} +15 -52
  12. package/dist/AppShell-WSQabK8r.js.map +1 -0
  13. package/dist/{AutoSaveTextarea-BeuWuszr.js → AutoSaveTextarea-C5iIr2Ts.js} +2 -2
  14. package/dist/{AutoSaveTextarea-BeuWuszr.js.map → AutoSaveTextarea-C5iIr2Ts.js.map} +1 -1
  15. package/dist/{Badge-o5jURtpB.js → Badge-DIjhwPvh.js} +4 -9
  16. package/dist/Badge-DIjhwPvh.js.map +1 -0
  17. package/dist/{BrandEditor-BsTBM3s6.js → BrandEditor-Bkd6dhb8.js} +7 -7
  18. package/dist/{BrandEditor-BsTBM3s6.js.map → BrandEditor-Bkd6dhb8.js.map} +1 -1
  19. package/dist/{BrandLogo-CoKBk4MI.js → BrandLogo-CKpVSZb6.js} +4 -4
  20. package/dist/BrandLogo-CKpVSZb6.js.map +1 -0
  21. package/dist/{Breadcrumb-xqEUxfwn.js → Breadcrumb-BUoAZyhO.js} +8 -14
  22. package/dist/Breadcrumb-BUoAZyhO.js.map +1 -0
  23. package/dist/{Button-DsRrU5F1.js → Button-B21oVcPU.js} +31 -14
  24. package/dist/Button-B21oVcPU.js.map +1 -0
  25. package/dist/{Calendar-cG5NIJ4O.js → Calendar-DFtmZzbF.js} +99 -99
  26. package/dist/Calendar-DFtmZzbF.js.map +1 -0
  27. package/dist/{Card-Dyo7055Q.js → Card-BQmBWHXl.js} +35 -7
  28. package/dist/Card-BQmBWHXl.js.map +1 -0
  29. package/dist/{Checkbox-Dq5fPNrO.js → Checkbox-8yIIgY7g.js} +4 -4
  30. package/dist/Checkbox-8yIIgY7g.js.map +1 -0
  31. package/dist/{Clipboard-BZitKiSA.js → Clipboard-_xf6hMDD.js} +2 -2
  32. package/dist/{Clipboard-BZitKiSA.js.map → Clipboard-_xf6hMDD.js.map} +1 -1
  33. package/dist/{ClipboardButton-KHQnPEh_.js → ClipboardButton-srUgWgwH.js} +4 -4
  34. package/dist/{ClipboardButton-KHQnPEh_.js.map → ClipboardButton-srUgWgwH.js.map} +1 -1
  35. package/dist/{CodeEditor-BJKJXA0c.js → CodeEditor-jZMw1ioj.js} +55 -165
  36. package/dist/CodeEditor-jZMw1ioj.js.map +1 -0
  37. package/dist/{ColorInput-Bj3dfPFA.js → ColorInput-B3gBZ8Ya.js} +12 -27
  38. package/dist/ColorInput-B3gBZ8Ya.js.map +1 -0
  39. package/dist/{ColorModeSwitch-CWt-DZGC.js → ColorModeSwitch-Bw9wMyoL.js} +7 -17
  40. package/dist/ColorModeSwitch-Bw9wMyoL.js.map +1 -0
  41. package/dist/Combobox-C_MTpQ1l.js +1081 -0
  42. package/dist/Combobox-C_MTpQ1l.js.map +1 -0
  43. package/dist/{Command-BDU3C1gg.js → Command-BQPiZCNz.js} +4 -4
  44. package/dist/{Command-BDU3C1gg.js.map → Command-BQPiZCNz.js.map} +1 -1
  45. package/dist/{CopyField-BHRQUyuF.js → CopyField-Ba7h8MqZ.js} +19 -55
  46. package/dist/{CopyField-BHRQUyuF.js.map → CopyField-Ba7h8MqZ.js.map} +1 -1
  47. package/dist/{DateInput-B6N8g0ra.js → DateInput-D0nWUasV.js} +6 -6
  48. package/dist/{DateInput-B6N8g0ra.js.map → DateInput-D0nWUasV.js.map} +1 -1
  49. package/dist/{DatePicker-nA8YdE84.js → DatePicker-CtSa9b3V.js} +3 -3
  50. package/dist/{DatePicker-nA8YdE84.js.map → DatePicker-CtSa9b3V.js.map} +1 -1
  51. package/dist/{DateRangeInput-7M9Z4cVO.js → DateRangeInput-i6wE45-V.js} +10 -14
  52. package/dist/DateRangeInput-i6wE45-V.js.map +1 -0
  53. package/dist/{DateRangePicker-DjSUFjh4.js → DateRangePicker-BAnuz6vO.js} +9 -13
  54. package/dist/DateRangePicker-BAnuz6vO.js.map +1 -0
  55. package/dist/DiffView-ppTIzh2h.js.map +1 -1
  56. package/dist/{DropdownMenu-CgVwhDvl.js → DropdownMenu-gRM-A8qU.js} +3 -3
  57. package/dist/DropdownMenu-gRM-A8qU.js.map +1 -0
  58. package/dist/{FieldItem-DZGIdiXE.js → FieldItem-BHViBJS3.js} +12 -25
  59. package/dist/FieldItem-BHViBJS3.js.map +1 -0
  60. package/dist/{FieldItem-vhIJW4pj.d.ts → FieldItem-CPN1xjN5.d.ts} +11 -25
  61. package/dist/{FileUpload-DYQCTGjU.js → FileUpload-Ch2hrIWq.js} +11 -16
  62. package/dist/{FileUpload-DYQCTGjU.js.map → FileUpload-Ch2hrIWq.js.map} +1 -1
  63. package/dist/{Form-CcK7dRrC.js → Form-VkzfVPyT.js} +15 -23
  64. package/dist/{Form-CcK7dRrC.js.map → Form-VkzfVPyT.js.map} +1 -1
  65. package/dist/{FormGroup-DR_gZ25-.js → FormGroup-CmCppxOn.js} +11 -17
  66. package/dist/FormGroup-CmCppxOn.js.map +1 -0
  67. package/dist/{FullScreenModal-CN9nAs72.js → FullScreenModal-Cwnm8WdM.js} +15 -29
  68. package/dist/FullScreenModal-Cwnm8WdM.js.map +1 -0
  69. package/dist/{HoverCard-B9ZMJxjn.js → HoverCard-B8OKu9XZ.js} +2 -2
  70. package/dist/{HoverCard-B9ZMJxjn.js.map → HoverCard-B8OKu9XZ.js.map} +1 -1
  71. package/dist/{InputGroup-Do8K2hvD.js → InputGroup-CrlMRz4X.js} +11 -13
  72. package/dist/InputGroup-CrlMRz4X.js.map +1 -0
  73. package/dist/{Kbd-LCFMumoq.js → Kbd-J4n1J6i4.js} +23 -13
  74. package/dist/Kbd-J4n1J6i4.js.map +1 -0
  75. package/dist/{MarkedText-DNGEUVWc.js → MarkedText-DlmlJO0u.js} +2 -2
  76. package/dist/{MarkedText-DNGEUVWc.js.map → MarkedText-DlmlJO0u.js.map} +1 -1
  77. package/dist/{MermaidDiagram-ZG0iiDV_.js → MermaidDiagram-B30x2yV7.js} +16 -34
  78. package/dist/MermaidDiagram-B30x2yV7.js.map +1 -0
  79. package/dist/{Modal-I3VWk2oo.js → Modal-BkSuS9Yz.js} +17 -34
  80. package/dist/Modal-BkSuS9Yz.js.map +1 -0
  81. package/dist/{ModalTitle-CeLM_mX9.js → ModalTitle-BxopkIoQ.js} +3 -3
  82. package/dist/ModalTitle-BxopkIoQ.js.map +1 -0
  83. package/dist/{MultiActionButtonGroup-CYZ8IgSf.js → MultiActionButtonGroup-AWLj1Tg7.js} +3 -3
  84. package/dist/{MultiActionButtonGroup-CYZ8IgSf.js.map → MultiActionButtonGroup-AWLj1Tg7.js.map} +1 -1
  85. package/dist/{Navbar-Liy1TPI7.js → Navbar-B_DNpv5s.js} +9 -13
  86. package/dist/{Navbar-Liy1TPI7.js.map → Navbar-B_DNpv5s.js.map} +1 -1
  87. package/dist/{OtpInput-CbbymqYs.js → OtpInput-I8B8Vjdl.js} +2 -2
  88. package/dist/{OtpInput-CbbymqYs.js.map → OtpInput-I8B8Vjdl.js.map} +1 -1
  89. package/dist/{PageHeader-Q3IpCnQd.js → PageHeader-CgfyXpf1.js} +13 -26
  90. package/dist/PageHeader-CgfyXpf1.js.map +1 -0
  91. package/dist/{PageLayout-DSVM-ASz.js → PageLayout-DiAAILuS.js} +12 -20
  92. package/dist/PageLayout-DiAAILuS.js.map +1 -0
  93. package/dist/{PageToolbar-BKVJiDAL.js → PageToolbar-CIW0VmKe.js} +12 -42
  94. package/dist/PageToolbar-CIW0VmKe.js.map +1 -0
  95. package/dist/{Pagination-C_b7Xhey.js → Pagination-DH3f6LN0.js} +3 -3
  96. package/dist/{Pagination-C_b7Xhey.js.map → Pagination-DH3f6LN0.js.map} +1 -1
  97. package/dist/{Popconfirm-5pBzT_HQ.js → Popconfirm-Dhzn7sy6.js} +3 -3
  98. package/dist/{Popconfirm-5pBzT_HQ.js.map → Popconfirm-Dhzn7sy6.js.map} +1 -1
  99. package/dist/{Popover-BEbQrC_P.js → Popover-CEk915I1.js} +4 -3
  100. package/dist/Popover-CEk915I1.js.map +1 -0
  101. package/dist/{RadioGroup-Byc2mym4.js → RadioGroup-CBPRLRN0.js} +4 -4
  102. package/dist/{RadioGroup-Byc2mym4.js.map → RadioGroup-CBPRLRN0.js.map} +1 -1
  103. package/dist/{Search-Dhig_hPD.js → Search-DmkQo716.js} +3 -3
  104. package/dist/{Search-Dhig_hPD.js.map → Search-DmkQo716.js.map} +1 -1
  105. package/dist/{SearchInput-92r2bkA7.js → SearchInput-D3qMkHaW.js} +8 -13
  106. package/dist/SearchInput-D3qMkHaW.js.map +1 -0
  107. package/dist/{SectionNav-CNLJsiVG.js → SectionNav-TU5i3JeM.js} +10 -42
  108. package/dist/SectionNav-TU5i3JeM.js.map +1 -0
  109. package/dist/{Select-DV3Hak_l.js → Select-B4uK0QVm.js} +10 -12
  110. package/dist/Select-B4uK0QVm.js.map +1 -0
  111. package/dist/{Sheet-OparjIi-.js → Sheet-D0fAE14T.js} +5 -9
  112. package/dist/Sheet-D0fAE14T.js.map +1 -0
  113. package/dist/{Sidebar-CLEbBtNY.js → Sidebar-ZLMNIbg5.js} +16 -33
  114. package/dist/Sidebar-ZLMNIbg5.js.map +1 -0
  115. package/dist/{Slider-DLclvRws.js → Slider-B0ou9r0B.js} +3 -3
  116. package/dist/{Slider-DLclvRws.js.map → Slider-B0ou9r0B.js.map} +1 -1
  117. package/dist/{Stepper-C8sm9ZFM.js → Stepper-BLkLhfnd.js} +6 -9
  118. package/dist/{Stepper-C8sm9ZFM.js.map → Stepper-BLkLhfnd.js.map} +1 -1
  119. package/dist/{Switch-B0WdGSjz.js → Switch-DZvNePOm.js} +2 -2
  120. package/dist/{Switch-B0WdGSjz.js.map → Switch-DZvNePOm.js.map} +1 -1
  121. package/dist/{Table-CvYuTuNU.js → Table-BaVT5Tkn.js} +6 -11
  122. package/dist/{Table-CvYuTuNU.js.map → Table-BaVT5Tkn.js.map} +1 -1
  123. package/dist/{Tabs-eB974xJf.js → Tabs-CTDmye1N.js} +3 -3
  124. package/dist/{Tabs-eB974xJf.js.map → Tabs-CTDmye1N.js.map} +1 -1
  125. package/dist/{TextInput-CFTf4Cz1.js → TextInput-BWYXbfs4.js} +10 -14
  126. package/dist/TextInput-BWYXbfs4.js.map +1 -0
  127. package/dist/{ThemeProvider-DAmNn9Sd.js → ThemeProvider-VF38VfUa.js} +13 -31
  128. package/dist/ThemeProvider-VF38VfUa.js.map +1 -0
  129. package/dist/{TimePicker-BGeqc-Ed.js → TimePicker-CDGYrRxi.js} +2 -2
  130. package/dist/{TimePicker-BGeqc-Ed.js.map → TimePicker-CDGYrRxi.js.map} +1 -1
  131. package/dist/{Timeline-C8-wnRRr.js → Timeline-B-I6sb0M.js} +2 -2
  132. package/dist/{Timeline-C8-wnRRr.js.map → Timeline-B-I6sb0M.js.map} +1 -1
  133. package/dist/{Toast-Dr6Uw7ao.js → Toast-PfQf3vj-.js} +2 -2
  134. package/dist/{Toast-Dr6Uw7ao.js.map → Toast-PfQf3vj-.js.map} +1 -1
  135. package/dist/{Workbench-UR2FBC7I.js → Workbench-DmZzpkj7.js} +2 -2
  136. package/dist/{Workbench-UR2FBC7I.js.map → Workbench-DmZzpkj7.js.map} +1 -1
  137. package/dist/{ZoomableSvg-BZlk3PFJ.js → ZoomableSvg-C65nta_r.js} +5 -19
  138. package/dist/ZoomableSvg-C65nta_r.js.map +1 -0
  139. package/dist/charts.d.ts +21 -52
  140. package/dist/charts.js +13 -39
  141. package/dist/charts.js.map +1 -1
  142. package/dist/{context-D7X470dy.js → context-U293r3v-.js} +5 -9
  143. package/dist/context-U293r3v-.js.map +1 -0
  144. package/dist/editors.d.ts +27 -124
  145. package/dist/editors.js +29 -71
  146. package/dist/editors.js.map +1 -1
  147. package/dist/{findLiteralMatches-BGBw8Vbl.js → findLiteralMatches-DgGLzyG0.js} +8 -20
  148. package/dist/findLiteralMatches-DgGLzyG0.js.map +1 -0
  149. package/dist/flint.d.ts +3 -6
  150. package/dist/flint.js +31 -80
  151. package/dist/flint.js.map +1 -1
  152. package/dist/{icons-Cek151jC.js → icons-wcA70iQx.js} +105 -2
  153. package/dist/icons-wcA70iQx.js.map +1 -0
  154. package/dist/icons.d.ts +2 -2
  155. package/dist/icons.js +2 -2
  156. package/dist/{index-m-kQEWiY.d.ts → index-B7k-09i1.d.ts} +14 -2
  157. package/dist/index.d.ts +1180 -1867
  158. package/dist/index.js +69 -68
  159. package/dist/internal/blocks/AIKit.js +2 -2
  160. package/dist/internal/blocks/AppShell.js +1 -1
  161. package/dist/internal/blocks/AuthLayout.js +7 -27
  162. package/dist/internal/blocks/AuthLayout.js.map +1 -1
  163. package/dist/internal/blocks/AutoSaveTextarea.js +1 -1
  164. package/dist/internal/blocks/BrandEditor.js +1 -1
  165. package/dist/internal/blocks/ChartPanel.js +4 -8
  166. package/dist/internal/blocks/ChartPanel.js.map +1 -1
  167. package/dist/internal/blocks/ChipEditor.js +13 -21
  168. package/dist/internal/blocks/ChipEditor.js.map +1 -1
  169. package/dist/internal/blocks/ClipboardButton.js +1 -1
  170. package/dist/internal/blocks/ColorInput.js +1 -1
  171. package/dist/internal/blocks/ColorModeSwitch.js +1 -1
  172. package/dist/internal/blocks/Command.js +1 -1
  173. package/dist/internal/blocks/CopyField.js +1 -1
  174. package/dist/internal/blocks/DashboardHero.js +4 -7
  175. package/dist/internal/blocks/DashboardHero.js.map +1 -1
  176. package/dist/internal/blocks/DateInput.js +1 -1
  177. package/dist/internal/blocks/DateRangeInput.js +1 -1
  178. package/dist/internal/blocks/EmptyConfigurationActionCard.js +1 -1
  179. package/dist/internal/blocks/EmptyState.js +5 -9
  180. package/dist/internal/blocks/EmptyState.js.map +1 -1
  181. package/dist/internal/blocks/ErrorState.js +5 -9
  182. package/dist/internal/blocks/ErrorState.js.map +1 -1
  183. package/dist/internal/blocks/ExportMenu.js +6 -10
  184. package/dist/internal/blocks/ExportMenu.js.map +1 -1
  185. package/dist/internal/blocks/Form/connectors/ComboboxField.js +40 -0
  186. package/dist/internal/blocks/Form/connectors/ComboboxField.js.map +1 -0
  187. package/dist/internal/blocks/Form/connectors/MultiComboboxField.js +5 -22
  188. package/dist/internal/blocks/Form/connectors/MultiComboboxField.js.map +1 -1
  189. package/dist/internal/blocks/Form.js +1 -1
  190. package/dist/internal/blocks/FormGroup.js +1 -1
  191. package/dist/internal/blocks/GoogleButton.js +1 -1
  192. package/dist/internal/blocks/MicrosoftButton.js +1 -1
  193. package/dist/internal/blocks/MultiActionButtonGroup.js +1 -1
  194. package/dist/internal/blocks/MultiCombobox.js +160 -154
  195. package/dist/internal/blocks/MultiCombobox.js.map +1 -1
  196. package/dist/internal/blocks/NumberInput.js +1 -1
  197. package/dist/internal/blocks/OtpInput.js +1 -1
  198. package/dist/internal/blocks/PageHeader.js +1 -1
  199. package/dist/internal/blocks/PageLayout.js +1 -1
  200. package/dist/internal/blocks/PageToolbar.js +1 -1
  201. package/dist/internal/blocks/PasswordInput.js +4 -4
  202. package/dist/internal/blocks/PasswordInput.js.map +1 -1
  203. package/dist/internal/blocks/SearchInput.js +1 -1
  204. package/dist/internal/blocks/SearchInputWithNavigation.js +4 -4
  205. package/dist/internal/blocks/SectionNav.js +1 -1
  206. package/dist/internal/blocks/SplitButton.js +3 -3
  207. package/dist/internal/blocks/StatCard.js +4 -8
  208. package/dist/internal/blocks/StatCard.js.map +1 -1
  209. package/dist/internal/blocks/TextInput.js +1 -1
  210. package/dist/internal/blocks/Textarea.js +2 -2
  211. package/dist/internal/blocks/TimeInput.js +5 -5
  212. package/dist/internal/blocks/TimeInput.js.map +1 -1
  213. package/dist/internal/components/Alert.js +1 -1
  214. package/dist/internal/components/AlertModal.js +1 -1
  215. package/dist/internal/components/Avatar.js +1 -1
  216. package/dist/internal/components/Badge.js +1 -1
  217. package/dist/internal/components/BrandLogo.js +1 -1
  218. package/dist/internal/components/Breadcrumb.js +1 -1
  219. package/dist/internal/components/Button.js +1 -1
  220. package/dist/internal/components/ButtonGroup.js.map +1 -1
  221. package/dist/internal/components/Calendar.js +1 -1
  222. package/dist/internal/components/Card.js +1 -1
  223. package/dist/internal/components/Checkbox.js +1 -1
  224. package/dist/internal/components/Clipboard.js +1 -1
  225. package/dist/internal/components/CollapsiblePanel.js +3 -3
  226. package/dist/internal/components/CollapsiblePanel.js.map +1 -1
  227. package/dist/internal/components/Combobox.js +2 -2
  228. package/dist/internal/components/DatePicker.js +1 -1
  229. package/dist/internal/components/DateRangePicker.js +1 -1
  230. package/dist/internal/components/DropdownMenu.js +1 -1
  231. package/dist/internal/components/FileUpload.js +1 -1
  232. package/dist/internal/components/FullScreenModal.js +1 -1
  233. package/dist/internal/components/HoverCard.js +1 -1
  234. package/dist/internal/components/InputGroup.js +1 -1
  235. package/dist/internal/components/Kbd.js +1 -1
  236. package/dist/internal/components/MarkedText.js +1 -1
  237. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +1 -1
  238. package/dist/internal/components/Modal.js +1 -1
  239. package/dist/internal/components/Navbar.js +1 -1
  240. package/dist/internal/components/Pagination.js +1 -1
  241. package/dist/internal/components/PanelWithDetails.js +1 -1
  242. package/dist/internal/components/Popconfirm.js +1 -1
  243. package/dist/internal/components/Popover.js +1 -1
  244. package/dist/internal/components/RadioGroup.js +1 -1
  245. package/dist/internal/components/Search.js +1 -1
  246. package/dist/internal/components/Select.js +1 -1
  247. package/dist/internal/components/Separator.js.map +1 -1
  248. package/dist/internal/components/Sheet.js +1 -1
  249. package/dist/internal/components/Sidebar.js +1 -1
  250. package/dist/internal/components/Skeleton/Skeleton.js +5 -9
  251. package/dist/internal/components/Skeleton/Skeleton.js.map +1 -1
  252. package/dist/internal/components/Slider.js +1 -1
  253. package/dist/internal/components/SpotlightBackdrop.js +3 -8
  254. package/dist/internal/components/SpotlightBackdrop.js.map +1 -1
  255. package/dist/internal/components/Stepper.js +1 -1
  256. package/dist/internal/components/Switch.js +1 -1
  257. package/dist/internal/components/Table.js +1 -1
  258. package/dist/internal/components/Tabs.js +1 -1
  259. package/dist/internal/components/ThemeProvider.js +3 -3
  260. package/dist/internal/components/TimePicker.js +1 -1
  261. package/dist/internal/components/Timeline.js +1 -1
  262. package/dist/internal/components/Toast.js +2 -2
  263. package/dist/internal/components/Tooltip.js +1 -1
  264. package/dist/internal/components/Truncated.js +4 -8
  265. package/dist/internal/components/Truncated.js.map +1 -1
  266. package/dist/internal/components/Workbench.js +1 -1
  267. package/dist/internal/components/ZoomableSvg.js +1 -1
  268. package/dist/internal/hooks/useScrollbarPosition.js +1 -1
  269. package/dist/internal/hooks/useStableCallback.js +4 -13
  270. package/dist/internal/hooks/useStableCallback.js.map +1 -1
  271. package/dist/internal/utils/accessibleName.js +11 -0
  272. package/dist/internal/utils/accessibleName.js.map +1 -0
  273. package/dist/internal/utils.js +2 -2
  274. package/dist/markdown-editor.d.ts +15 -37
  275. package/dist/markdown-editor.js +17 -23
  276. package/dist/markdown-editor.js.map +1 -1
  277. package/dist/mermaid.d.ts +4 -6
  278. package/dist/mermaid.js +1 -1
  279. package/dist/rjsf.d.ts +9 -19
  280. package/dist/rjsf.js +44 -84
  281. package/dist/rjsf.js.map +1 -1
  282. package/dist/{styles-BAFscjSV.js → styles-gzcjOyKv.js} +6 -6
  283. package/dist/styles-gzcjOyKv.js.map +1 -0
  284. package/dist/styles.css +1 -1
  285. package/dist/svgTransforms-Dw2hRA-i.js +51 -0
  286. package/dist/svgTransforms-Dw2hRA-i.js.map +1 -0
  287. package/dist/testing.d.ts +3 -10
  288. package/dist/testing.js +7 -15
  289. package/dist/testing.js.map +1 -1
  290. package/dist/themeTokens-7DEab0kp.js +31 -0
  291. package/dist/themeTokens-7DEab0kp.js.map +1 -0
  292. package/dist/{toast-DIC0iNRf.js → toast-CyXEdaCZ.js} +3 -3
  293. package/dist/toast-CyXEdaCZ.js.map +1 -0
  294. package/dist/{themeScopeContext-D7fSyb06.js → useColorSchemeState-Cw4MCXUs.js} +14 -14
  295. package/dist/useColorSchemeState-Cw4MCXUs.js.map +1 -0
  296. package/dist/{useControllableState-M6494mCT.js → useControllableState-CUYXMsfz.js} +3 -7
  297. package/dist/useControllableState-CUYXMsfz.js.map +1 -0
  298. package/dist/useElement-D-RjrGa4.js +21 -0
  299. package/dist/useElement-D-RjrGa4.js.map +1 -0
  300. package/dist/useThemeAttributes-B199Regy.js +67 -0
  301. package/dist/useThemeAttributes-B199Regy.js.map +1 -0
  302. package/dist/{utils-BW4AE8VP.js → utils-Bd28bWgm.js} +31 -26
  303. package/dist/utils-Bd28bWgm.js.map +1 -0
  304. package/dist/vega.d.ts +8 -30
  305. package/dist/vega.js +5 -13
  306. package/dist/vega.js.map +1 -1
  307. package/dist/{vegaTheme-CSvFEMBl.js → vegaTheme-VQMWTlBw.js} +7 -21
  308. package/dist/vegaTheme-VQMWTlBw.js.map +1 -0
  309. package/package.json +28 -27
  310. package/src/styles.css +120 -14
  311. package/src/theme.css +130 -5
  312. package/dist/AIKit-ELIsegJz.js.map +0 -1
  313. package/dist/Alert-BsIM_oFK.js.map +0 -1
  314. package/dist/AlertModal-BGJdaRRj.js.map +0 -1
  315. package/dist/AppShell-DRgJxpXW.js.map +0 -1
  316. package/dist/Badge-o5jURtpB.js.map +0 -1
  317. package/dist/BrandLogo-CoKBk4MI.js.map +0 -1
  318. package/dist/Breadcrumb-xqEUxfwn.js.map +0 -1
  319. package/dist/Button-DsRrU5F1.js.map +0 -1
  320. package/dist/Calendar-cG5NIJ4O.js.map +0 -1
  321. package/dist/Card-Dyo7055Q.js.map +0 -1
  322. package/dist/Checkbox-Dq5fPNrO.js.map +0 -1
  323. package/dist/CodeEditor-BJKJXA0c.js.map +0 -1
  324. package/dist/ColorInput-Bj3dfPFA.js.map +0 -1
  325. package/dist/ColorModeSwitch-CWt-DZGC.js.map +0 -1
  326. package/dist/Combobox-D8PrEqTG.js +0 -619
  327. package/dist/Combobox-D8PrEqTG.js.map +0 -1
  328. package/dist/DateRangeInput-7M9Z4cVO.js.map +0 -1
  329. package/dist/DateRangePicker-DjSUFjh4.js.map +0 -1
  330. package/dist/DropdownMenu-CgVwhDvl.js.map +0 -1
  331. package/dist/FieldItem-DZGIdiXE.js.map +0 -1
  332. package/dist/FormGroup-DR_gZ25-.js.map +0 -1
  333. package/dist/FullScreenModal-CN9nAs72.js.map +0 -1
  334. package/dist/InputGroup-Do8K2hvD.js.map +0 -1
  335. package/dist/Kbd-LCFMumoq.js.map +0 -1
  336. package/dist/MermaidDiagram-ZG0iiDV_.js.map +0 -1
  337. package/dist/Modal-I3VWk2oo.js.map +0 -1
  338. package/dist/ModalTitle-CeLM_mX9.js.map +0 -1
  339. package/dist/PageHeader-Q3IpCnQd.js.map +0 -1
  340. package/dist/PageLayout-DSVM-ASz.js.map +0 -1
  341. package/dist/PageToolbar-BKVJiDAL.js.map +0 -1
  342. package/dist/Popover-BEbQrC_P.js.map +0 -1
  343. package/dist/SearchInput-92r2bkA7.js.map +0 -1
  344. package/dist/SectionNav-CNLJsiVG.js.map +0 -1
  345. package/dist/Select-DV3Hak_l.js.map +0 -1
  346. package/dist/Sheet-OparjIi-.js.map +0 -1
  347. package/dist/Sidebar-CLEbBtNY.js.map +0 -1
  348. package/dist/TextInput-CFTf4Cz1.js.map +0 -1
  349. package/dist/ThemeProvider-DAmNn9Sd.js.map +0 -1
  350. package/dist/ZoomableSvg-BZlk3PFJ.js.map +0 -1
  351. package/dist/context-D7X470dy.js.map +0 -1
  352. package/dist/findLiteralMatches-BGBw8Vbl.js.map +0 -1
  353. package/dist/icons-Cek151jC.js.map +0 -1
  354. package/dist/internal/components/StatusDot.js +0 -67
  355. package/dist/internal/components/StatusDot.js.map +0 -1
  356. package/dist/styles-BAFscjSV.js.map +0 -1
  357. package/dist/svgTransforms-CJAYPk7o.js +0 -81
  358. package/dist/svgTransforms-CJAYPk7o.js.map +0 -1
  359. package/dist/themeScopeContext-D7fSyb06.js.map +0 -1
  360. package/dist/themeTokens-qP1-55O7.js +0 -119
  361. package/dist/themeTokens-qP1-55O7.js.map +0 -1
  362. package/dist/toast-DIC0iNRf.js.map +0 -1
  363. package/dist/useControllableState-M6494mCT.js.map +0 -1
  364. package/dist/useElement-BK3AAiIf.js +0 -24
  365. package/dist/useElement-BK3AAiIf.js.map +0 -1
  366. package/dist/utils-BW4AE8VP.js.map +0 -1
  367. package/dist/vegaTheme-CSvFEMBl.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SpotlightBackdrop.js","names":[],"sources":["../../../src/components/SpotlightBackdrop/SpotlightBackdrop.tsx","../../../src/components/SpotlightBackdrop/useTargetRect.ts"],"sourcesContent":["import { type MouseEventHandler, useId } from 'react';\n\nimport { cn } from '../../utils';\n\nimport type { TargetRect } from './useTargetRect';\n\ntype Props = {\n /** Target box to cut out of the dim layer, or `null` for a full dim (no highlight). */\n rect: TargetRect | null;\n /** Padding around the target inside the cut-out, in px. */\n padding?: number;\n /** Corner radius of the cut-out, in px. */\n radius?: number;\n className?: string;\n /** Fired when the dim layer is clicked (e.g. to dismiss). Receives the click event. */\n onClick?: MouseEventHandler<HTMLDivElement>;\n};\n\n/**\n * Full-viewport dimmed layer with an SVG-mask cut-out around a target rect,\n * producing a spotlight highlight. With `rect={null}` it dims the whole viewport\n * (no cut-out). The dim tone uses the semantic `foreground` token, so it re-skins\n * with the active brand.\n *\n * **Presentational primitive** — pass a `rect` from `useTargetRect`, and compose\n * with `Popover` for an anchored callout. Tour / coachmark orchestration\n * (steps, next/prev, \"seen\" persistence) is intentionally app-owned; see the\n * \"Guided tour (recipe)\" story for the composition.\n */\nexport const SpotlightBackdrop = ({ rect, padding = 8, radius = 8, className, onClick }: Props) => {\n const maskId = useId();\n\n const cutout = rect\n ? {\n x: rect.left - padding,\n y: rect.top - padding,\n width: rect.width + padding * 2,\n height: rect.height + padding * 2,\n }\n : null;\n\n return (\n // Sits above the standard portalled surface tier (z 1055) so stray popovers\n // can't punch through the dim; the anchored callout must set a higher z.\n // The wrapper ignores pointer events and only the painted dim (the masked\n // rect) captures them, bubbling to the wrapper's `onClick`. A click inside\n // the masked-out cut-out isn't painted, so it falls through to the target.\n <div\n aria-hidden\n onClick={onClick}\n className={cn('tw:pointer-events-none tw:fixed tw:inset-0 tw:z-[1056]', className)}\n >\n <svg width=\"100%\" height=\"100%\" className=\"tw:size-full\">\n <defs>\n <mask id={maskId}>\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\" />\n {cutout && (\n <rect\n x={cutout.x}\n y={cutout.y}\n width={cutout.width}\n height={cutout.height}\n rx={radius}\n ry={radius}\n fill=\"black\"\n />\n )}\n </mask>\n </defs>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n mask={`url(#${maskId})`}\n className=\"tw:pointer-events-auto tw:fill-foreground/50\"\n />\n </svg>\n </div>\n );\n};\n","import { type RefObject, useLayoutEffect, useState } from 'react';\n\n/** Viewport-relative box of the highlighted target. */\nexport type TargetRect = {\n top: number;\n left: number;\n width: number;\n height: number;\n};\n\n/** Element to track: a CSS selector, a React ref, or nothing (centered/no target). */\nexport type SpotlightTarget = string | RefObject<Element | null> | undefined;\n\nconst resolveElement = (target: SpotlightTarget): Element | null => {\n if (!target) return null;\n if (typeof target !== 'string') return target.current;\n try {\n return document.querySelector(target);\n } catch (error) {\n // An invalid selector throws a DOMException; don't crash the render.\n console.error(`useTargetRect: invalid target selector \"${target}\"`, error);\n return null;\n }\n};\n\n/**\n * Resolves a `target` (CSS selector or React ref) to a live viewport rect and\n * keeps it in sync while `enabled` — re-measuring on resize and scroll so an\n * anchored overlay (e.g. `SpotlightBackdrop` + `Popover`) follows the element.\n * Returns `null` when disabled or the target is absent, so callers can fall\n * back to a centered/full-dim layout.\n */\nexport const useTargetRect = (target: SpotlightTarget, enabled: boolean): TargetRect | null => {\n const [rect, setRect] = useState<TargetRect | null>(null);\n\n useLayoutEffect(() => {\n if (!enabled || !target) {\n setRect(null);\n return;\n }\n\n let frame = 0;\n // Cap the lazy-mount poll so a permanently-absent target settles on `null`\n // instead of spinning a frame forever. ~1s at 60fps is ample for a target\n // that mounts a tick or two after the overlay opens.\n let attemptsLeft = 60;\n\n const same = (a: TargetRect | null, b: TargetRect) => {\n if (a === null) return false;\n return a.top === b.top && a.left === b.left && a.width === b.width && a.height === b.height;\n };\n\n // Re-resolve on every measure: the target may mount lazily after the overlay\n // opens, so we poll (rAF) until it appears — up to `attemptsLeft` frames —\n // then track it on resize/scroll. Until then `rect` stays `null` and the\n // caller falls back to a centered/full-dim layout. State only updates when\n // the rect actually changed, avoiding needless re-renders.\n const measure = () => {\n const element = resolveElement(target);\n if (!element) {\n setRect(null);\n if (attemptsLeft > 0) {\n attemptsLeft -= 1;\n frame = requestAnimationFrame(measure);\n }\n return;\n }\n const box = element.getBoundingClientRect();\n const next = { top: box.top, left: box.left, width: box.width, height: box.height };\n setRect((prev) => (same(prev, next) ? prev : next));\n };\n\n // Coalesce scroll/resize bursts to at most one measure per animation frame.\n const scheduleMeasure = () => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(measure);\n };\n\n measure();\n window.addEventListener('resize', scheduleMeasure, { passive: true });\n window.addEventListener('scroll', scheduleMeasure, { capture: true, passive: true });\n\n return () => {\n cancelAnimationFrame(frame);\n window.removeEventListener('resize', scheduleMeasure);\n window.removeEventListener('scroll', scheduleMeasure, true);\n };\n }, [target, enabled]);\n\n return rect;\n};\n"],"mappings":";;;;;;;;;;;;;;;AA6BA,MAAa,qBAAqB,EAAE,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,cAAqB;CACjG,MAAM,SAAS,MAAM;CAErB,MAAM,SAAS,OACX;EACE,GAAG,KAAK,OAAO;EACf,GAAG,KAAK,MAAM;EACd,OAAO,KAAK,QAAQ,UAAU;EAC9B,QAAQ,KAAK,SAAS,UAAU;CAClC,IACA;CAEJ,OAME,oBAAC,OAAD;EACE,eAAA;EACS;EACT,WAAW,GAAG,0DAA0D,SAAS;EAEjF,UAAA,qBAAC,OAAD;GAAK,OAAM;GAAO,QAAO;GAAO,WAAU;GAA1C,UAAA,CACE,oBAAC,QAAD,EAAA,UACE,qBAAC,QAAD;IAAM,IAAI;IAAV,UAAA,CACE,oBAAC,QAAD;KAAM,GAAE;KAAI,GAAE;KAAI,OAAM;KAAO,QAAO;KAAO,MAAK;IAAS,CAAA,GAC1D,UACC,oBAAC,QAAD;KACE,GAAG,OAAO;KACV,GAAG,OAAO;KACV,OAAO,OAAO;KACd,QAAQ,OAAO;KACf,IAAI;KACJ,IAAI;KACJ,MAAK;IACN,CAAA,CAEC;GACF,CAAA,EAAA,CAAA,GACN,oBAAC,QAAD;IACE,GAAE;IACF,GAAE;IACF,OAAM;IACN,QAAO;IACP,MAAM,QAAQ,OAAO;IACrB,WAAU;GACX,CAAA,CACE;;CACF,CAAA;AAET;;;ACnEA,MAAM,kBAAkB,WAA4C;CAClE,IAAI,CAAC,QAAQ,OAAO;CACpB,IAAI,OAAO,WAAW,UAAU,OAAO,OAAO;CAC9C,IAAI;EACF,OAAO,SAAS,cAAc,MAAM;CACtC,SAAS,OAAO;EAEd,QAAQ,MAAM,2CAA2C,OAAO,IAAI,KAAK;EACzE,OAAO;CACT;AACF;;;;;;;;AASA,MAAa,iBAAiB,QAAyB,YAAwC;CAC7F,MAAM,CAAC,MAAM,WAAW,SAA4B,IAAI;CAExD,sBAAsB;EACpB,IAAI,CAAC,WAAW,CAAC,QAAQ;GACvB,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,QAAQ;EAIZ,IAAI,eAAe;EAEnB,MAAM,QAAQ,GAAsB,MAAkB;GACpD,IAAI,MAAM,MAAM,OAAO;GACvB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE;EACvF;EAOA,MAAM,gBAAgB;GACpB,MAAM,UAAU,eAAe,MAAM;GACrC,IAAI,CAAC,SAAS;IACZ,QAAQ,IAAI;IACZ,IAAI,eAAe,GAAG;KACpB,gBAAgB;KAChB,QAAQ,sBAAsB,OAAO;IACvC;IACA;GACF;GACA,MAAM,MAAM,QAAQ,sBAAsB;GAC1C,MAAM,OAAO;IAAE,KAAK,IAAI;IAAK,MAAM,IAAI;IAAM,OAAO,IAAI;IAAO,QAAQ,IAAI;GAAO;GAClF,SAAS,SAAU,KAAK,MAAM,IAAI,IAAI,OAAO,IAAK;EACpD;EAGA,MAAM,wBAAwB;GAC5B,qBAAqB,KAAK;GAC1B,QAAQ,sBAAsB,OAAO;EACvC;EAEA,QAAQ;EACR,OAAO,iBAAiB,UAAU,iBAAiB,EAAE,SAAS,KAAK,CAAC;EACpE,OAAO,iBAAiB,UAAU,iBAAiB;GAAE,SAAS;GAAM,SAAS;EAAK,CAAC;EAEnF,aAAa;GACX,qBAAqB,KAAK;GAC1B,OAAO,oBAAoB,UAAU,eAAe;GACpD,OAAO,oBAAoB,UAAU,iBAAiB,IAAI;EAC5D;CACF,GAAG,CAAC,QAAQ,OAAO,CAAC;CAEpB,OAAO;AACT"}
1
+ {"version":3,"file":"SpotlightBackdrop.js","names":[],"sources":["../../../src/components/SpotlightBackdrop/SpotlightBackdrop.tsx","../../../src/components/SpotlightBackdrop/useTargetRect.ts"],"sourcesContent":["import { type MouseEventHandler, useId } from 'react';\n\nimport { cn } from '../../utils';\n\nimport type { TargetRect } from './useTargetRect';\n\ntype Props = {\n /** Box to cut out, or `null` to dim everything. */\n rect: TargetRect | null;\n /** In px. */\n padding?: number;\n /** In px. */\n radius?: number;\n className?: string;\n /** Fires for clicks on the dim only — a click in the cut-out reaches the target. */\n onClick?: MouseEventHandler<HTMLDivElement>;\n};\n\n/**\n * Full-viewport dim with a spotlight cut-out around `rect`.\n *\n * - Presentational: `rect` from `useTargetRect`, callout via `Popover`.\n * - Tour steps and \"seen\" persistence are app-owned — see the \"Guided tour (recipe)\" story.\n */\nexport const SpotlightBackdrop = ({ rect, padding = 8, radius = 8, className, onClick }: Props) => {\n const maskId = useId();\n\n const cutout = rect\n ? {\n x: rect.left - padding,\n y: rect.top - padding,\n width: rect.width + padding * 2,\n height: rect.height + padding * 2,\n }\n : null;\n\n return (\n // - z above the portalled surface tier (1055); the callout must sit higher still.\n // - Only the painted dim takes pointer events, so the cut-out stays clickable.\n <div\n aria-hidden\n onClick={onClick}\n className={cn('tw:pointer-events-none tw:fixed tw:inset-0 tw:z-[1056]', className)}\n >\n <svg width=\"100%\" height=\"100%\" className=\"tw:size-full\">\n <defs>\n <mask id={maskId}>\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\" />\n {cutout && (\n <rect\n x={cutout.x}\n y={cutout.y}\n width={cutout.width}\n height={cutout.height}\n rx={radius}\n ry={radius}\n fill=\"black\"\n />\n )}\n </mask>\n </defs>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n mask={`url(#${maskId})`}\n className=\"tw:pointer-events-auto tw:fill-foreground/50\"\n />\n </svg>\n </div>\n );\n};\n","import { type RefObject, useLayoutEffect, useState } from 'react';\n\n/** Viewport-relative box of the highlighted target. */\nexport type TargetRect = {\n top: number;\n left: number;\n width: number;\n height: number;\n};\n\n/** Element to track: a CSS selector, a React ref, or nothing (centered/no target). */\nexport type SpotlightTarget = string | RefObject<Element | null> | undefined;\n\nconst resolveElement = (target: SpotlightTarget): Element | null => {\n if (!target) return null;\n if (typeof target !== 'string') return target.current;\n try {\n return document.querySelector(target);\n } catch (error) {\n // An invalid selector throws a DOMException; don't crash the render.\n console.error(`useTargetRect: invalid target selector \"${target}\"`, error);\n return null;\n }\n};\n\n/**\n * Resolves a `target` (CSS selector or React ref) to a live viewport rect and\n * keeps it in sync while `enabled` — re-measuring on resize and scroll so an\n * anchored overlay (e.g. `SpotlightBackdrop` + `Popover`) follows the element.\n * Returns `null` when disabled or the target is absent, so callers can fall\n * back to a centered/full-dim layout.\n */\nexport const useTargetRect = (target: SpotlightTarget, enabled: boolean): TargetRect | null => {\n const [rect, setRect] = useState<TargetRect | null>(null);\n\n useLayoutEffect(() => {\n if (!enabled || !target) {\n setRect(null);\n return;\n }\n\n let frame = 0;\n // Cap the lazy-mount poll so a permanently-absent target settles on `null`\n // instead of spinning a frame forever. ~1s at 60fps is ample for a target\n // that mounts a tick or two after the overlay opens.\n let attemptsLeft = 60;\n\n const same = (a: TargetRect | null, b: TargetRect) => {\n if (a === null) return false;\n return a.top === b.top && a.left === b.left && a.width === b.width && a.height === b.height;\n };\n\n // Re-resolve on every measure: the target may mount lazily after the overlay\n // opens, so we poll (rAF) until it appears — up to `attemptsLeft` frames —\n // then track it on resize/scroll. Until then `rect` stays `null` and the\n // caller falls back to a centered/full-dim layout. State only updates when\n // the rect actually changed, avoiding needless re-renders.\n const measure = () => {\n const element = resolveElement(target);\n if (!element) {\n setRect(null);\n if (attemptsLeft > 0) {\n attemptsLeft -= 1;\n frame = requestAnimationFrame(measure);\n }\n return;\n }\n const box = element.getBoundingClientRect();\n const next = { top: box.top, left: box.left, width: box.width, height: box.height };\n setRect((prev) => (same(prev, next) ? prev : next));\n };\n\n // Coalesce scroll/resize bursts to at most one measure per animation frame.\n const scheduleMeasure = () => {\n cancelAnimationFrame(frame);\n frame = requestAnimationFrame(measure);\n };\n\n measure();\n window.addEventListener('resize', scheduleMeasure, { passive: true });\n window.addEventListener('scroll', scheduleMeasure, { capture: true, passive: true });\n\n return () => {\n cancelAnimationFrame(frame);\n window.removeEventListener('resize', scheduleMeasure);\n window.removeEventListener('scroll', scheduleMeasure, true);\n };\n }, [target, enabled]);\n\n return rect;\n};\n"],"mappings":";;;;;;;;;;AAwBA,MAAa,qBAAqB,EAAE,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,cAAqB;CACjG,MAAM,SAAS,MAAM;CAErB,MAAM,SAAS,OACX;EACE,GAAG,KAAK,OAAO;EACf,GAAG,KAAK,MAAM;EACd,OAAO,KAAK,QAAQ,UAAU;EAC9B,QAAQ,KAAK,SAAS,UAAU;CAClC,IACA;CAEJ,OAGE,oBAAC,OAAD;EACE,eAAA;EACS;EACT,WAAW,GAAG,0DAA0D,SAAS;EAEjF,UAAA,qBAAC,OAAD;GAAK,OAAM;GAAO,QAAO;GAAO,WAAU;GAA1C,UAAA,CACE,oBAAC,QAAD,EAAA,UACE,qBAAC,QAAD;IAAM,IAAI;IAAV,UAAA,CACE,oBAAC,QAAD;KAAM,GAAE;KAAI,GAAE;KAAI,OAAM;KAAO,QAAO;KAAO,MAAK;IAAS,CAAA,GAC1D,UACC,oBAAC,QAAD;KACE,GAAG,OAAO;KACV,GAAG,OAAO;KACV,OAAO,OAAO;KACd,QAAQ,OAAO;KACf,IAAI;KACJ,IAAI;KACJ,MAAK;IACN,CAAA,CAEC;GACF,CAAA,EAAA,CAAA,GACN,oBAAC,QAAD;IACE,GAAE;IACF,GAAE;IACF,OAAM;IACN,QAAO;IACP,MAAM,QAAQ,OAAO;IACrB,WAAU;GACX,CAAA,CACE;;CACF,CAAA;AAET;;;AC3DA,MAAM,kBAAkB,WAA4C;CAClE,IAAI,CAAC,QAAQ,OAAO;CACpB,IAAI,OAAO,WAAW,UAAU,OAAO,OAAO;CAC9C,IAAI;EACF,OAAO,SAAS,cAAc,MAAM;CACtC,SAAS,OAAO;EAEd,QAAQ,MAAM,2CAA2C,OAAO,IAAI,KAAK;EACzE,OAAO;CACT;AACF;;;;;;;;AASA,MAAa,iBAAiB,QAAyB,YAAwC;CAC7F,MAAM,CAAC,MAAM,WAAW,SAA4B,IAAI;CAExD,sBAAsB;EACpB,IAAI,CAAC,WAAW,CAAC,QAAQ;GACvB,QAAQ,IAAI;GACZ;EACF;EAEA,IAAI,QAAQ;EAIZ,IAAI,eAAe;EAEnB,MAAM,QAAQ,GAAsB,MAAkB;GACpD,IAAI,MAAM,MAAM,OAAO;GACvB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE;EACvF;EAOA,MAAM,gBAAgB;GACpB,MAAM,UAAU,eAAe,MAAM;GACrC,IAAI,CAAC,SAAS;IACZ,QAAQ,IAAI;IACZ,IAAI,eAAe,GAAG;KACpB,gBAAgB;KAChB,QAAQ,sBAAsB,OAAO;IACvC;IACA;GACF;GACA,MAAM,MAAM,QAAQ,sBAAsB;GAC1C,MAAM,OAAO;IAAE,KAAK,IAAI;IAAK,MAAM,IAAI;IAAM,OAAO,IAAI;IAAO,QAAQ,IAAI;GAAO;GAClF,SAAS,SAAU,KAAK,MAAM,IAAI,IAAI,OAAO,IAAK;EACpD;EAGA,MAAM,wBAAwB;GAC5B,qBAAqB,KAAK;GAC1B,QAAQ,sBAAsB,OAAO;EACvC;EAEA,QAAQ;EACR,OAAO,iBAAiB,UAAU,iBAAiB,EAAE,SAAS,KAAK,CAAC;EACpE,OAAO,iBAAiB,UAAU,iBAAiB;GAAE,SAAS;GAAM,SAAS;EAAK,CAAC;EAEnF,aAAa;GACX,qBAAqB,KAAK;GAC1B,OAAO,oBAAoB,UAAU,eAAe;GACpD,OAAO,oBAAoB,UAAU,iBAAiB,IAAI;EAC5D;CACF,GAAG,CAAC,QAAQ,OAAO,CAAC;CAEpB,OAAO;AACT"}
@@ -1,2 +1,2 @@
1
- import { Stepper } from "../../Stepper-C8sm9ZFM.js";
1
+ import { Stepper } from "../../Stepper-BLkLhfnd.js";
2
2
  export { Stepper };
@@ -1,2 +1,2 @@
1
- import { Switch } from "../../Switch-B0WdGSjz.js";
1
+ import { Switch } from "../../Switch-DZvNePOm.js";
2
2
  export { Switch };
@@ -1,2 +1,2 @@
1
- import { Table, TableSortHeader, tableAriaSort } from "../../Table-CvYuTuNU.js";
1
+ import { Table, TableSortHeader, tableAriaSort } from "../../Table-BaVT5Tkn.js";
2
2
  export { Table, TableSortHeader, tableAriaSort };
@@ -1,2 +1,2 @@
1
- import { Tabs, TabsContent } from "../../Tabs-eB974xJf.js";
1
+ import { Tabs, TabsContent } from "../../Tabs-CTDmye1N.js";
2
2
  export { Tabs, TabsContent };
@@ -1,4 +1,4 @@
1
1
  import { DEFAULT_BRAND_ID, DEFAULT_COLOR_SCHEME } from "../../defaults-i_xG2F_1.js";
2
- import { ArgoDesignContext, useArgoDesign, useTheme } from "../../context-D7X470dy.js";
3
- import { ThemeProvider, ThemeScope, brandSchema, exampleCustomer, keboola, keboolaLegacySidebar, keboolaLegacyTopnav, useThemeScopeContainer } from "../../ThemeProvider-DAmNn9Sd.js";
4
- export { ArgoDesignContext, DEFAULT_COLOR_SCHEME, DEFAULT_BRAND_ID as DEFAULT_KEBOOLA_BRAND_ID, ThemeProvider, ThemeScope, brandSchema, exampleCustomer, keboola, keboolaLegacySidebar, keboolaLegacyTopnav, useArgoDesign, useTheme, useThemeScopeContainer };
2
+ import { ArgoDesignContext, useArgoDesign, useTheme } from "../../context-U293r3v-.js";
3
+ import { ThemeProvider, ThemeScope, agnes, brandSchema, exampleCustomer, harbor, keboola, keboolaLegacySidebar, useThemeScopeContainer } from "../../ThemeProvider-VF38VfUa.js";
4
+ export { ArgoDesignContext, DEFAULT_COLOR_SCHEME, DEFAULT_BRAND_ID as DEFAULT_KEBOOLA_BRAND_ID, ThemeProvider, ThemeScope, agnes, brandSchema, exampleCustomer, harbor, keboola, keboolaLegacySidebar, useArgoDesign, useTheme, useThemeScopeContainer };
@@ -1,2 +1,2 @@
1
- import { TimePicker } from "../../TimePicker-BGeqc-Ed.js";
1
+ import { TimePicker } from "../../TimePicker-CDGYrRxi.js";
2
2
  export { TimePicker };
@@ -1,2 +1,2 @@
1
- import { Timeline } from "../../Timeline-C8-wnRRr.js";
1
+ import { Timeline } from "../../Timeline-B-I6sb0M.js";
2
2
  export { Timeline };
@@ -1,3 +1,3 @@
1
- import { toast } from "../../toast-DIC0iNRf.js";
2
- import { Toaster, useNotification } from "../../Toast-Dr6Uw7ao.js";
1
+ import { toast } from "../../toast-CyXEdaCZ.js";
2
+ import { Toaster, useNotification } from "../../Toast-PfQf3vj-.js";
3
3
  export { Toaster, toast, useNotification };
@@ -1,2 +1,2 @@
1
- import { HINT_UNDERLINE_CLASS_NAME, Tooltip, TooltipProvider } from "../../utils-BW4AE8VP.js";
1
+ import { HINT_UNDERLINE_CLASS_NAME, Tooltip, TooltipProvider } from "../../utils-Bd28bWgm.js";
2
2
  export { HINT_UNDERLINE_CLASS_NAME, Tooltip, TooltipProvider };
@@ -1,18 +1,14 @@
1
1
  import { cn } from "../../classNames-BzrkDnOD.js";
2
- import { Tooltip } from "../../utils-BW4AE8VP.js";
2
+ import { Tooltip } from "../../utils-Bd28bWgm.js";
3
3
  import { useState } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/components/Truncated.tsx
6
6
  const OFFSET_TOLERANCE = 2;
7
7
  /**
8
- * Whether the text is actually cut off, on either axis.
8
+ * Whether the text is cut off, on either axis.
9
9
  *
10
- * - A clamp that wraps overflows **vertically**.
11
- * - A single line that cannot wrap overflows **horizontally** — the case an
12
- * inherited `white-space: nowrap` produces (e.g. inside a `Button` under a
13
- * non-legacy brand).
14
- * - The tolerance absorbs subpixel rounding, which would otherwise report
15
- * overflow on text that fits exactly.
10
+ * - Horizontal covers text that cannot wrap (inherited `white-space: nowrap`).
11
+ * - The tolerance absorbs subpixel rounding on text that fits exactly.
16
12
  */
17
13
  const hasTruncationOverflow = (m) => m.scrollHeight - OFFSET_TOLERANCE >= m.clientHeight || m.scrollWidth - OFFSET_TOLERANCE >= m.clientWidth;
18
14
  const Truncated = ({ ref, text, tooltip = text, className, twoLines = false, noTooltip = false, tooltipVariant = "explanatory", tooltipPlacement = "top", ...rest }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"Truncated.js","names":[],"sources":["../../../src/components/Truncated.tsx"],"sourcesContent":["import { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport { cn } from '../utils';\n\nimport { type Props as TooltipProps, Tooltip } from './Tooltip';\n\nconst OFFSET_TOLERANCE = 2;\n\ntype Metrics = Pick<HTMLElement, 'scrollWidth' | 'clientWidth' | 'scrollHeight' | 'clientHeight'>;\n\n/**\n * Whether the text is actually cut off, on either axis.\n *\n * - A clamp that wraps overflows **vertically**.\n * - A single line that cannot wrap overflows **horizontally** — the case an\n * inherited `white-space: nowrap` produces (e.g. inside a `Button` under a\n * non-legacy brand).\n * - The tolerance absorbs subpixel rounding, which would otherwise report\n * overflow on text that fits exactly.\n */\nexport const hasTruncationOverflow = (m: Metrics): boolean =>\n m.scrollHeight - OFFSET_TOLERANCE >= m.clientHeight ||\n m.scrollWidth - OFFSET_TOLERANCE >= m.clientWidth;\n\ntype Props = {\n text: ReactNode;\n tooltip?: ReactNode;\n twoLines?: boolean;\n noTooltip?: boolean;\n tooltipVariant?: TooltipProps['variant'];\n tooltipPlacement?: TooltipProps['placement'];\n} & Omit<ComponentProps<'span'>, 'children'>;\n\nexport const Truncated = ({\n ref,\n text,\n tooltip = text,\n className,\n twoLines = false,\n noTooltip = false,\n tooltipVariant = 'explanatory',\n tooltipPlacement = 'top',\n ...rest\n}: Props) => {\n const tooltipText = typeof tooltip === 'string' ? tooltip : '';\n const [showTooltip, setShowTooltip] = useState(false);\n\n // v4's native `line-clamp-*` emits the full `-webkit-box` recipe (display,\n // box-orient, line-clamp, overflow). The old hand-rolled `[display:-webkit-box!important]`\n // arbitrary property produced NO rule under v4 — it doesn't support `!important` inside\n // arbitrary-property brackets (v3 did) — so the clamp silently stopped applying and long\n // text wrapped instead of truncating.\n //\n // `text-ellipsis` covers what the clamp cannot: `-webkit-line-clamp` draws its ellipsis\n // only on text it wrapped itself, so text that cannot wrap (an inherited\n // `white-space: nowrap`) was cut mid-word with no ellipsis at all.\n const truncatedClasses = cn(\n className,\n 'tw:[word-break:break-all] tw:text-ellipsis',\n twoLines ? 'tw:line-clamp-2 tw:[word-break:break-word]' : 'tw:line-clamp-1',\n );\n\n if (noTooltip || !tooltipText) {\n return (\n <span ref={ref} className={truncatedClasses} {...rest}>\n {text}\n </span>\n );\n }\n\n return (\n <Tooltip\n placement={tooltipPlacement}\n variant={tooltipVariant}\n forceHide={!showTooltip}\n tooltip={<div>{tooltipText}</div>}\n triggerAsChild\n >\n <span\n ref={ref}\n className={truncatedClasses}\n {...rest}\n onMouseOver={(e) => {\n setShowTooltip(hasTruncationOverflow(e.currentTarget));\n rest.onMouseOver?.(e);\n }}\n onFocus={(e) => {\n setShowTooltip(hasTruncationOverflow(e.currentTarget));\n rest.onFocus?.(e);\n }}\n >\n {text}\n </span>\n </Tooltip>\n );\n};\n"],"mappings":";;;;;AAOA,MAAM,mBAAmB;;;;;;;;;;;AAczB,MAAa,yBAAyB,MACpC,EAAE,eAAe,oBAAoB,EAAE,gBACvC,EAAE,cAAc,oBAAoB,EAAE;AAWxC,MAAa,aAAa,EACxB,KACA,MACA,UAAU,MACV,WACA,WAAW,OACX,YAAY,OACZ,iBAAiB,eACjB,mBAAmB,OACnB,GAAG,WACQ;CACX,MAAM,cAAc,OAAO,YAAY,WAAW,UAAU;CAC5D,MAAM,CAAC,aAAa,kBAAkB,SAAS,KAAK;CAWpD,MAAM,mBAAmB,GACvB,WACA,8CACA,WAAW,+CAA+C,iBAC5D;CAEA,IAAI,aAAa,CAAC,aAChB,OACE,oBAAC,QAAD;EAAW;EAAK,WAAW;EAAkB,GAAI;EAC9C,UAAA;CACG,CAAA;CAIV,OACE,oBAAC,SAAD;EACE,WAAW;EACX,SAAS;EACT,WAAW,CAAC;EACZ,SAAS,oBAAC,OAAD,EAAA,UAAM,YAAiB,CAAA;EAChC,gBAAA;EAEA,UAAA,oBAAC,QAAD;GACO;GACL,WAAW;GACX,GAAI;GACJ,cAAc,MAAM;IAClB,eAAe,sBAAsB,EAAE,aAAa,CAAC;IACrD,KAAK,cAAc,CAAC;GACtB;GACA,UAAU,MAAM;IACd,eAAe,sBAAsB,EAAE,aAAa,CAAC;IACrD,KAAK,UAAU,CAAC;GAClB;GAEC,UAAA;EACG,CAAA;CACC,CAAA;AAEb"}
1
+ {"version":3,"file":"Truncated.js","names":[],"sources":["../../../src/components/Truncated.tsx"],"sourcesContent":["import { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport { cn } from '../utils';\n\nimport { type Props as TooltipProps, Tooltip } from './Tooltip';\n\nconst OFFSET_TOLERANCE = 2;\n\ntype Metrics = Pick<HTMLElement, 'scrollWidth' | 'clientWidth' | 'scrollHeight' | 'clientHeight'>;\n\n/**\n * Whether the text is cut off, on either axis.\n *\n * - Horizontal covers text that cannot wrap (inherited `white-space: nowrap`).\n * - The tolerance absorbs subpixel rounding on text that fits exactly.\n */\nexport const hasTruncationOverflow = (m: Metrics): boolean =>\n m.scrollHeight - OFFSET_TOLERANCE >= m.clientHeight ||\n m.scrollWidth - OFFSET_TOLERANCE >= m.clientWidth;\n\ntype Props = {\n text: ReactNode;\n tooltip?: ReactNode;\n twoLines?: boolean;\n noTooltip?: boolean;\n tooltipVariant?: TooltipProps['variant'];\n tooltipPlacement?: TooltipProps['placement'];\n} & Omit<ComponentProps<'span'>, 'children'>;\n\nexport const Truncated = ({\n ref,\n text,\n tooltip = text,\n className,\n twoLines = false,\n noTooltip = false,\n tooltipVariant = 'explanatory',\n tooltipPlacement = 'top',\n ...rest\n}: Props) => {\n const tooltipText = typeof tooltip === 'string' ? tooltip : '';\n const [showTooltip, setShowTooltip] = useState(false);\n\n // `text-ellipsis`: the clamp draws an ellipsis only on text it wrapped, not on `nowrap` text.\n const truncatedClasses = cn(\n className,\n 'tw:[word-break:break-all] tw:text-ellipsis',\n twoLines ? 'tw:line-clamp-2 tw:[word-break:break-word]' : 'tw:line-clamp-1',\n );\n\n if (noTooltip || !tooltipText) {\n return (\n <span ref={ref} className={truncatedClasses} {...rest}>\n {text}\n </span>\n );\n }\n\n return (\n <Tooltip\n placement={tooltipPlacement}\n variant={tooltipVariant}\n forceHide={!showTooltip}\n tooltip={<div>{tooltipText}</div>}\n triggerAsChild\n >\n <span\n ref={ref}\n className={truncatedClasses}\n {...rest}\n onMouseOver={(e) => {\n setShowTooltip(hasTruncationOverflow(e.currentTarget));\n rest.onMouseOver?.(e);\n }}\n onFocus={(e) => {\n setShowTooltip(hasTruncationOverflow(e.currentTarget));\n rest.onFocus?.(e);\n }}\n >\n {text}\n </span>\n </Tooltip>\n );\n};\n"],"mappings":";;;;;AAOA,MAAM,mBAAmB;;;;;;;AAUzB,MAAa,yBAAyB,MACpC,EAAE,eAAe,oBAAoB,EAAE,gBACvC,EAAE,cAAc,oBAAoB,EAAE;AAWxC,MAAa,aAAa,EACxB,KACA,MACA,UAAU,MACV,WACA,WAAW,OACX,YAAY,OACZ,iBAAiB,eACjB,mBAAmB,OACnB,GAAG,WACQ;CACX,MAAM,cAAc,OAAO,YAAY,WAAW,UAAU;CAC5D,MAAM,CAAC,aAAa,kBAAkB,SAAS,KAAK;CAGpD,MAAM,mBAAmB,GACvB,WACA,8CACA,WAAW,+CAA+C,iBAC5D;CAEA,IAAI,aAAa,CAAC,aAChB,OACE,oBAAC,QAAD;EAAW;EAAK,WAAW;EAAkB,GAAI;EAC9C,UAAA;CACG,CAAA;CAIV,OACE,oBAAC,SAAD;EACE,WAAW;EACX,SAAS;EACT,WAAW,CAAC;EACZ,SAAS,oBAAC,OAAD,EAAA,UAAM,YAAiB,CAAA;EAChC,gBAAA;EAEA,UAAA,oBAAC,QAAD;GACO;GACL,WAAW;GACX,GAAI;GACJ,cAAc,MAAM;IAClB,eAAe,sBAAsB,EAAE,aAAa,CAAC;IACrD,KAAK,cAAc,CAAC;GACtB;GACA,UAAU,MAAM;IACd,eAAe,sBAAsB,EAAE,aAAa,CAAC;IACrD,KAAK,UAAU,CAAC;GAClB;GAEC,UAAA;EACG,CAAA;CACC,CAAA;AAEb"}
@@ -1,2 +1,2 @@
1
- import { DEFAULT_WORKBENCH_BAR_HEIGHT_IN_REM, DEFAULT_WORKBENCH_PANEL_HEIGHT_IN_PX, MIN_WORKBENCH_PANEL_HEIGHT_IN_PX, Workbench, useWorkbench } from "../../Workbench-UR2FBC7I.js";
1
+ import { DEFAULT_WORKBENCH_BAR_HEIGHT_IN_REM, DEFAULT_WORKBENCH_PANEL_HEIGHT_IN_PX, MIN_WORKBENCH_PANEL_HEIGHT_IN_PX, Workbench, useWorkbench } from "../../Workbench-DmZzpkj7.js";
2
2
  export { DEFAULT_WORKBENCH_BAR_HEIGHT_IN_REM, DEFAULT_WORKBENCH_PANEL_HEIGHT_IN_PX, MIN_WORKBENCH_PANEL_HEIGHT_IN_PX, Workbench, useWorkbench };
@@ -1,2 +1,2 @@
1
- import { ZoomableSvg, svgToPngBlob, toSvgFileContent } from "../../ZoomableSvg-BZlk3PFJ.js";
1
+ import { ZoomableSvg, svgToPngBlob, toSvgFileContent } from "../../ZoomableSvg-C65nta_r.js";
2
2
  export { ZoomableSvg, svgToPngBlob, toSvgFileContent };
@@ -1,4 +1,4 @@
1
- import { useElement } from "../../useElement-BK3AAiIf.js";
1
+ import { useElement } from "../../useElement-D-RjrGa4.js";
2
2
  import { useEffect, useState } from "react";
3
3
  //#region src/hooks/useScrollbarPosition.ts
4
4
  const calcPosition = ({ scrollHeight, clientHeight, scrollTop }) => {
@@ -1,20 +1,11 @@
1
1
  import { useCallback, useLayoutEffect, useRef } from "react";
2
2
  //#region src/hooks/useStableCallback.ts
3
3
  /**
4
- * A callback with a permanently stable identity that always sees the latest
5
- * render's values — for any consumer that keys off the handler's identity: a
6
- * third-party component that redoes expensive work when it changes, or a
7
- * memoized context value.
4
+ * A callback with a stable identity that always sees the latest render's values.
8
5
  *
9
- * React 19.2's `useEffectEvent` does this in one line, but it is scoped to
10
- * Effects and explicitly not to be passed to another component, which is the
11
- * whole point here.
12
- *
13
- * The swap is a layout effect rather than a passive one so it lands before the
14
- * browser can paint and accept input against the previous render's handler. It
15
- * is still an effect, and a child's runs before its parent's — so a consumer
16
- * calling the returned function from its own layout effect can still see the
17
- * previous render's closure.
6
+ * - Not `useEffectEvent`: that one must not be passed to other components.
7
+ * - Updated in a layout effect, so it lands before paint and input.
8
+ * - A child's layout effect calling it still sees the previous render's closure.
18
9
  */
19
10
  const useStableCallback = (callback) => {
20
11
  const latestRef = useRef(callback);
@@ -1 +1 @@
1
- {"version":3,"file":"useStableCallback.js","names":[],"sources":["../../../src/hooks/useStableCallback.ts"],"sourcesContent":["import { useCallback, useLayoutEffect, useRef } from 'react';\n\n/**\n * A callback with a permanently stable identity that always sees the latest\n * render's values — for any consumer that keys off the handler's identity: a\n * third-party component that redoes expensive work when it changes, or a\n * memoized context value.\n *\n * React 19.2's `useEffectEvent` does this in one line, but it is scoped to\n * Effects and explicitly not to be passed to another component, which is the\n * whole point here.\n *\n * The swap is a layout effect rather than a passive one so it lands before the\n * browser can paint and accept input against the previous render's handler. It\n * is still an effect, and a child's runs before its parent's — so a consumer\n * calling the returned function from its own layout effect can still see the\n * previous render's closure.\n */\nexport const useStableCallback = <Args extends unknown[], Result>(\n callback: (...args: Args) => Result,\n): ((...args: Args) => Result) => {\n const latestRef = useRef(callback);\n\n useLayoutEffect(() => {\n latestRef.current = callback;\n }, [callback]);\n\n return useCallback((...args: Args) => latestRef.current(...args), []);\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkBA,MAAa,qBACX,aACgC;CAChC,MAAM,YAAY,OAAO,QAAQ;CAEjC,sBAAsB;EACpB,UAAU,UAAU;CACtB,GAAG,CAAC,QAAQ,CAAC;CAEb,OAAO,aAAa,GAAG,SAAe,UAAU,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC;AACtE"}
1
+ {"version":3,"file":"useStableCallback.js","names":[],"sources":["../../../src/hooks/useStableCallback.ts"],"sourcesContent":["import { useCallback, useLayoutEffect, useRef } from 'react';\n\n/**\n * A callback with a stable identity that always sees the latest render's values.\n *\n * - Not `useEffectEvent`: that one must not be passed to other components.\n * - Updated in a layout effect, so it lands before paint and input.\n * - A child's layout effect calling it still sees the previous render's closure.\n */\nexport const useStableCallback = <Args extends unknown[], Result>(\n callback: (...args: Args) => Result,\n): ((...args: Args) => Result) => {\n const latestRef = useRef(callback);\n\n useLayoutEffect(() => {\n latestRef.current = callback;\n }, [callback]);\n\n return useCallback((...args: Args) => latestRef.current(...args), []);\n};\n"],"mappings":";;;;;;;;;AASA,MAAa,qBACX,aACgC;CAChC,MAAM,YAAY,OAAO,QAAQ;CAEjC,sBAAsB;EACpB,UAAU,UAAU;CACtB,GAAG,CAAC,QAAQ,CAAC;CAEb,OAAO,aAAa,GAAG,SAAe,UAAU,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC;AACtE"}
@@ -0,0 +1,11 @@
1
+ //#region src/utils/accessibleName.ts
2
+ /**
3
+ * Passes the rest of a destructure on as the control's accessible name.
4
+ *
5
+ * - A prop left in the rest, besides the three names, fails type-check.
6
+ */
7
+ const forwardAccessibleName = (rest) => rest;
8
+ //#endregion
9
+ export { forwardAccessibleName };
10
+
11
+ //# sourceMappingURL=accessibleName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessibleName.js","names":[],"sources":["../../../src/utils/accessibleName.ts"],"sourcesContent":["type AccessibleNameProps = { id?: string; 'aria-label'?: string; 'aria-labelledby'?: string };\n\n/**\n * `Props` with one accessible-name route required: `aria-label`, `aria-labelledby` or `id`.\n *\n * - An either-or union: the props keep their own types, and more than one may be passed.\n * - `id` counts only when a `<Label htmlFor>` points at it — the type cannot check that pair.\n * - Forward the three as one rest object: destructured apart, they become three optional props.\n */\nexport type WithAccessibleName<Props> = Props &\n AccessibleNameProps &\n (\n | Required<Pick<Props & AccessibleNameProps, 'aria-label'>>\n | Required<Pick<Props & AccessibleNameProps, 'aria-labelledby'>>\n | Required<Pick<Props & AccessibleNameProps, 'id'>>\n );\n\ntype AccessibleNameRest<Rest> = keyof Rest extends keyof AccessibleNameProps ? Rest : never;\n\n/**\n * Passes the rest of a destructure on as the control's accessible name.\n *\n * - A prop left in the rest, besides the three names, fails type-check.\n */\nexport const forwardAccessibleName = <Rest>(rest: Rest & AccessibleNameRest<Rest>): Rest => rest;\n"],"mappings":";;;;;;AAwBA,MAAa,yBAA+B,SAAgD"}
@@ -1,5 +1,5 @@
1
1
  import { cn } from "../classNames-BzrkDnOD.js";
2
- import { DEFAULT_ENTRY_SEPARATOR, copyToClipboard, createChangeInputEvent, createPrefixedString, debounce, isMac, noop, splitEntry, useSHA256, withHiddenFullscreen, withTooltipProvider, withVisualSettle } from "../utils-BW4AE8VP.js";
3
- import { findLiteralMatches, findLiteralTermMatches, hasLiteralMatch } from "../findLiteralMatches-BGBw8Vbl.js";
2
+ import { DEFAULT_ENTRY_SEPARATOR, copyToClipboard, createChangeInputEvent, createPrefixedString, debounce, isMac, noop, splitEntry, useSHA256, withHiddenFullscreen, withTooltipProvider, withVisualSettle } from "../utils-Bd28bWgm.js";
3
+ import { findLiteralMatches, findLiteralTermMatches, hasLiteralMatch } from "../findLiteralMatches-DgGLzyG0.js";
4
4
  import { mergeRefs } from "./utils/mergeRefs.js";
5
5
  export { DEFAULT_ENTRY_SEPARATOR, cn, copyToClipboard, createChangeInputEvent, createPrefixedString, debounce, findLiteralMatches, findLiteralTermMatches, hasLiteralMatch, isMac, mergeRefs, noop, splitEntry, useSHA256, withHiddenFullscreen, withTooltipProvider, withVisualSettle };
@@ -4,30 +4,20 @@ type MarkdownEditorProps = {
4
4
  /** Markdown string (controlled) */
5
5
  value: string;
6
6
  onChange?: (markdown: string) => void;
7
- /**
8
- * Renders content but never accepts input. Use for permanent view-only contexts
9
- * (e.g. a current user lacks edit permission). Toolbar is hidden.
10
- */
7
+ /** Permanent view-only (e.g. no edit permission). Hides the toolbar. */
11
8
  readOnly?: boolean;
12
- /**
13
- * Temporarily blocks input but signals intent to re-enable
14
- * (e.g. while a save is in flight). Functionally identical to `readOnly` today.
15
- */
9
+ /** Temporary block (e.g. save in flight). Behaves like `readOnly`. */
16
10
  disabled?: boolean;
17
11
  placeholder?: string;
18
12
  autoFocus?: boolean;
19
- /** Invoked on Cmd/Ctrl+Enter — typically used to commit a form. */
13
+ /** Invoked on Cmd/Ctrl+Enter. */
20
14
  onSave?: () => void;
21
15
  /**
22
- * Invoked on Escape in inline-edit mode (`singleLine || saveOnBlur`). Per the
23
- * inline-editable-text pattern spec, Esc reverts the in-progress edit — callers
24
- * reset `value` to the last-committed state inside this handler.
16
+ * Escape in inline-edit mode (`singleLine || saveOnBlur`).
17
+ * Callers reset `value` to the last-committed state here.
25
18
  */
26
19
  onCancel?: () => void;
27
- /**
28
- * Async image upload. Resolved URL is embedded as the image src
29
- * (`![alt](url)` in the underlying markdown).
30
- */
20
+ /** The resolved URL becomes the image src in the markdown. */
31
21
  onImageUpload?: (file: File) => Promise<{
32
22
  url: string;
33
23
  }>;
@@ -38,38 +28,26 @@ type MarkdownEditorProps = {
38
28
  }) => ReactNode;
39
29
  showToolbar?: boolean;
40
30
  /**
41
- * Strips the prose typography wrapper, removes the min-height, and tightens padding so
42
- * the editor visually blends with surrounding text. Use for inline / Linear-style edit
43
- * affordances inside headings, list rows, or table cells. Pair with `className` to set
44
- * the caller's typography.
31
+ * No prose wrapper, min-height or padding — blends into surrounding text for inline editing.
32
+ * Set typography via `className`.
45
33
  */
46
34
  compact?: boolean;
47
- /**
48
- * Calls `onSave` when focus leaves the editor (and is not moved into the toolbar).
49
- * `onChange` already keeps the caller's value in sync — `onSave` is the "commit" signal.
50
- */
35
+ /** Calls `onSave` when focus leaves the editor (the toolbar doesn't count). */
51
36
  saveOnBlur?: boolean;
52
37
  /**
53
- * Disables block-level markdown (lists, headings, code blocks, HR) and makes a plain
54
- * Enter press trigger `onSave` and blur the editor. Shift+Enter still inserts a soft
55
- * line break. Use for editable titles.
38
+ * No block-level markdown; Enter blurs the editor, Shift+Enter inserts a soft break.
39
+ * Use for editable titles.
56
40
  */
57
41
  singleLine?: boolean;
58
- /**
59
- * Clamps content to 2 lines (truncating with an ellipsis) in the display (not-focused)
60
- * state; focus expands the editor to full height (no clamp). `line-clamp` is self-gating,
61
- * so short/empty content renders fully with no truncation. Per the inline-editable-text
62
- * pattern spec for description-style slots.
63
- */
42
+ /** Clamps to 2 lines with an ellipsis while not focused; focus shows everything. */
64
43
  clampDisplay?: boolean;
65
44
  /**
66
- * Minimum visible height in lines. `1` renders as a single line that grows with
67
- * content (Linear/Slack/GitHub-PR-comment pattern); `0` removes the floor entirely.
68
- * Omit to keep the default ~4-line floor. Ignored in `compact` mode (which has no floor).
45
+ * Minimum height in lines; `0` removes the floor. Default ~4 lines.
46
+ * Ignored in `compact` mode.
69
47
  */
70
48
  minRows?: number;
71
49
  };
72
- declare const MarkdownEditor: ({ value, onChange, readOnly, placeholder, autoFocus, disabled, onSave, onCancel, onImageUpload, className, imageRenderer, showToolbar, compact, saveOnBlur, singleLine, clampDisplay, minRows }: MarkdownEditorProps) => import("react/jsx-runtime").JSX.Element;
50
+ declare const MarkdownEditor: ({ value, onChange, readOnly, placeholder, autoFocus, disabled, onSave, onCancel, onImageUpload, className, imageRenderer, showToolbar, compact, saveOnBlur, singleLine, clampDisplay, minRows }: MarkdownEditorProps) => import("react").JSX.Element;
73
51
  //#endregion
74
52
  export { MarkdownEditor, type MarkdownEditorProps };
75
53
  //# sourceMappingURL=markdown-editor.d.ts.map
@@ -1,15 +1,15 @@
1
1
  import { cn } from "./classNames-BzrkDnOD.js";
2
- import { Tooltip } from "./utils-BW4AE8VP.js";
3
- import { AlignCenter, AlignJustify, AlignLeft, AlignRight, Bold, ChevronDown, Code, Heading1, Heading2, Heading3, Italic, Link, List, ListOrdered, Quote, SquareCode, Strikethrough, Type, Underline } from "./icons-Cek151jC.js";
4
- import { Button } from "./Button-DsRrU5F1.js";
2
+ import { Tooltip } from "./utils-Bd28bWgm.js";
3
+ import { AlignCenter, AlignJustify, AlignLeft, AlignRight, Bold, ChevronDown, Code, Heading1, Heading2, Heading3, Italic, Link, List, ListOrdered, Quote, SquareCode, Strikethrough, Type, Underline } from "./icons-wcA70iQx.js";
4
+ import { Button } from "./Button-B21oVcPU.js";
5
5
  import { ButtonGroup } from "./internal/components/ButtonGroup.js";
6
- import { DropdownMenu } from "./DropdownMenu-CgVwhDvl.js";
6
+ import { DropdownMenu } from "./DropdownMenu-gRM-A8qU.js";
7
7
  import { Label } from "./internal/components/Label.js";
8
8
  import { useStableCallback } from "./internal/hooks/useStableCallback.js";
9
- import { TextInput } from "./TextInput-CFTf4Cz1.js";
10
- import { FormGroup } from "./FormGroup-DR_gZ25-.js";
9
+ import { TextInput } from "./TextInput-BWYXbfs4.js";
10
+ import { FormGroup } from "./FormGroup-CmCppxOn.js";
11
11
  import { Skeleton } from "./internal/components/Skeleton/Skeleton.js";
12
- import { toast } from "./toast-DIC0iNRf.js";
12
+ import { toast } from "./toast-CyXEdaCZ.js";
13
13
  import { Suspense, createContext, lazy, use, useCallback, useEffect, useRef, useState } from "react";
14
14
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
15
15
  import { createPortal } from "react-dom";
@@ -141,7 +141,7 @@ const $isImageNode = (node) => {
141
141
  };
142
142
  //#endregion
143
143
  //#region src/blocks/MarkdownEditor/nodes/MermaidNodeComponent.tsx
144
- const MermaidDiagram = lazy(() => import("./MermaidDiagram-ZG0iiDV_.js").then((n) => n.MermaidDiagram_exports).then((m) => ({ default: m.MermaidDiagram }), (error) => {
144
+ const MermaidDiagram = lazy(() => import("./MermaidDiagram-B30x2yV7.js").then((n) => n.MermaidDiagram_exports).then((m) => ({ default: m.MermaidDiagram }), (error) => {
145
145
  console.error("[MarkdownEditor] failed to load MermaidDiagram chunk", error);
146
146
  return { default: ({ code }) => /* @__PURE__ */ jsx("pre", { children: /* @__PURE__ */ jsx("code", { children: code }) }) };
147
147
  }));
@@ -340,9 +340,10 @@ const KeyboardPlugin = ({ onSave, onCancel, singleLine, blurOnEscape, skipBlurSa
340
340
  return null;
341
341
  };
342
342
  /**
343
- * Custom transformers = our additions + built-in Lexical transformers.
344
- * MERMAID is placed before TRANSFORMERS so it intercepts ` ```mermaid ``` ` before the generic CODE transformer.
345
- * IMAGE is placed before built-in LINK to prevent `![alt](url)` from being parsed as `!` + link.
343
+ * Our transformers plus Lexical's built-ins; order matters.
344
+ *
345
+ * - MERMAID precedes TRANSFORMERS, so it wins over the generic CODE transformer.
346
+ * - IMAGE precedes LINK, so `![alt](url)` is not parsed as `!` + link.
346
347
  */
347
348
  const CUSTOM_TRANSFORMERS = [
348
349
  {
@@ -409,13 +410,10 @@ const CUSTOM_TRANSFORMERS = [
409
410
  ...TRANSFORMERS
410
411
  ];
411
412
  /**
412
- * No transformers = plain text. `singleLine` mode edits entity names / titles, which are
413
- * plain text, not markdown. Parsing inline formatting here corrupts ordinary names: e.g.
414
- * `staging_chargebee_invoices` would render the `_chargebee_` span as italics, and Lexical
415
- * escapes the underscores on export (`\_`) to prevent exactly that — but those backslashes
416
- * then leak into the persisted name. Dropping every transformer keeps `_`, `*`, `` ` ``, `~`
417
- * literal on both import and export; pair the empty set with `unescapeMarkdownText` on export
418
- * to strip Lexical's escaping (see MarkdownSyncPlugin).
413
+ * No transformers: `singleLine` mode edits plain-text entity names, not markdown.
414
+ *
415
+ * - Inline formatting would corrupt names like `a_b_c` (italics, then `\_` on export).
416
+ * - Pair with `unescapeMarkdownText` on export (see MarkdownSyncPlugin).
419
417
  */
420
418
  const SINGLE_LINE_TRANSFORMERS = [];
421
419
  const TABLE_FENCE_LANG = "__kbc_table__";
@@ -463,11 +461,7 @@ const postprocessMarkdown = (markdown) => {
463
461
  const regex = new RegExp(`\`\`\`${TABLE_FENCE_LANG}\\n([\\s\\S]*?)\\n\`\`\``, "g");
464
462
  return markdown.replace(regex, "$1");
465
463
  };
466
- /**
467
- * Reverses the backslash-escaping Lexical applies to markdown punctuation (`* _ ` ~ \`) when
468
- * exporting text nodes. Used for `singleLine` (plain-text) mode, where the export value is a
469
- * bare entity name — the escaping would otherwise persist as literal backslashes in the name.
470
- */
464
+ /** Reverses Lexical's export escaping of `* _ ` ~ \`, for `singleLine` plain-text names. */
471
465
  const unescapeMarkdownText = (markdown) => markdown.replace(/\\([*_`~\\])/g, "$1");
472
466
  //#endregion
473
467
  //#region src/blocks/MarkdownEditor/plugins/MarkdownSyncPlugin.tsx