@keboola/design 11.6.1 → 12.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 (365) hide show
  1. package/AGENTS.md +50 -9
  2. package/CHANGELOG.md +241 -0
  3. package/COMPONENT-API.md +337 -288
  4. package/README.md +12 -2
  5. package/dist/{AIKit-CQxVwyAk.js → AIKit-BD4r7ff-.js} +807 -199
  6. package/dist/AIKit-BD4r7ff-.js.map +1 -0
  7. package/dist/{Alert-C4Y9IwMI.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-Th2khjPi.js} +5 -5
  10. package/dist/AlertModal-Th2khjPi.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-CS9P4r2p.js → BrandEditor-BU23Vl8V.js} +7 -7
  18. package/dist/{BrandEditor-CS9P4r2p.js.map → BrandEditor-BU23Vl8V.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-D1id7YXd.js → Breadcrumb-p9HtMLCc.js} +8 -14
  22. package/dist/Breadcrumb-p9HtMLCc.js.map +1 -0
  23. package/dist/{Button-DsRrU5F1.js → Button-Ca4Q3VJU.js} +31 -13
  24. package/dist/Button-Ca4Q3VJU.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-Cr9MBNHu.js} +4 -4
  28. package/dist/Card-Cr9MBNHu.js.map +1 -0
  29. package/dist/{Checkbox-Bqr6zXcW.js → Checkbox-8yIIgY7g.js} +4 -4
  30. package/dist/Checkbox-8yIIgY7g.js.map +1 -0
  31. package/dist/{Clipboard-C2YBRfD8.js → Clipboard-_xf6hMDD.js} +2 -2
  32. package/dist/{Clipboard-C2YBRfD8.js.map → Clipboard-_xf6hMDD.js.map} +1 -1
  33. package/dist/{ClipboardButton-CrljClL1.js → ClipboardButton-DHa1trtI.js} +4 -4
  34. package/dist/{ClipboardButton-CrljClL1.js.map → ClipboardButton-DHa1trtI.js.map} +1 -1
  35. package/dist/{CodeEditor-C9AS8Ch0.js → CodeEditor-BSo-oLFG.js} +55 -165
  36. package/dist/CodeEditor-BSo-oLFG.js.map +1 -0
  37. package/dist/{ColorInput-Dg87lKcR.js → ColorInput-DSMqrs2-.js} +12 -27
  38. package/dist/ColorInput-DSMqrs2-.js.map +1 -0
  39. package/dist/{ColorModeSwitch-CsWLiTBX.js → ColorModeSwitch-D7EuWyJz.js} +7 -17
  40. package/dist/ColorModeSwitch-D7EuWyJz.js.map +1 -0
  41. package/dist/Combobox-CxRAYOBt.js +1069 -0
  42. package/dist/Combobox-CxRAYOBt.js.map +1 -0
  43. package/dist/{Command-CqxoI_De.js → Command-BU_cVurn.js} +4 -4
  44. package/dist/{Command-CqxoI_De.js.map → Command-BU_cVurn.js.map} +1 -1
  45. package/dist/{CopyField-Rx9HPTbJ.js → CopyField-6_c-NdLO.js} +17 -53
  46. package/dist/{CopyField-Rx9HPTbJ.js.map → CopyField-6_c-NdLO.js.map} +1 -1
  47. package/dist/{DateInput-DpifECUQ.js → DateInput-DyEErfJf.js} +6 -6
  48. package/dist/{DateInput-DpifECUQ.js.map → DateInput-DyEErfJf.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-9MIw7P6L.js → DateRangeInput-Dg7-VUd9.js} +10 -14
  52. package/dist/DateRangeInput-Dg7-VUd9.js.map +1 -0
  53. package/dist/{DateRangePicker-DjSUFjh4.js → DateRangePicker-BoPnh4aH.js} +9 -13
  54. package/dist/DateRangePicker-BoPnh4aH.js.map +1 -0
  55. package/dist/DiffView-ppTIzh2h.js.map +1 -1
  56. package/dist/{DropdownMenu-CASr-jgl.js → DropdownMenu-gRM-A8qU.js} +11 -6
  57. package/dist/DropdownMenu-gRM-A8qU.js.map +1 -0
  58. package/dist/{FieldItem-DtPTzNef.js → FieldItem-2wMXQ0Qw.js} +12 -25
  59. package/dist/FieldItem-2wMXQ0Qw.js.map +1 -0
  60. package/dist/{FieldItem-vhIJW4pj.d.ts → FieldItem-CPN1xjN5.d.ts} +11 -25
  61. package/dist/{FileUpload-DYQCTGjU.js → FileUpload-C83tXuE2.js} +11 -16
  62. package/dist/{FileUpload-DYQCTGjU.js.map → FileUpload-C83tXuE2.js.map} +1 -1
  63. package/dist/{Form-DAaatlBk.js → Form-95rVLfX8.js} +15 -23
  64. package/dist/{Form-DAaatlBk.js.map → Form-95rVLfX8.js.map} +1 -1
  65. package/dist/{FormGroup-Bl8JmnzJ.js → FormGroup-CmNiAtU6.js} +11 -17
  66. package/dist/FormGroup-CmNiAtU6.js.map +1 -0
  67. package/dist/{FullScreenModal-CN9nAs72.js → FullScreenModal-CD7mYeTz.js} +15 -29
  68. package/dist/FullScreenModal-CD7mYeTz.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-DcZRlVnN.js → InputGroup-B4QOPxHl.js} +12 -13
  72. package/dist/InputGroup-B4QOPxHl.js.map +1 -0
  73. package/dist/{Kbd-D1Azcc4g.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-CujFxVzk.js → MermaidDiagram-BQvz6bhv.js} +16 -34
  78. package/dist/MermaidDiagram-BQvz6bhv.js.map +1 -0
  79. package/dist/{Modal-Coj-H02o.js → Modal-Driyqs_N.js} +17 -34
  80. package/dist/Modal-Driyqs_N.js.map +1 -0
  81. package/dist/{ModalTitle-C76ke2eo.js → ModalTitle-BxopkIoQ.js} +3 -3
  82. package/dist/ModalTitle-BxopkIoQ.js.map +1 -0
  83. package/dist/{MultiActionButtonGroup-CNNoBQbv.js → MultiActionButtonGroup-BPnmzBtw.js} +3 -3
  84. package/dist/{MultiActionButtonGroup-CNNoBQbv.js.map → MultiActionButtonGroup-BPnmzBtw.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-DOAtAnfL.js} +12 -42
  94. package/dist/PageToolbar-DOAtAnfL.js.map +1 -0
  95. package/dist/{Pagination-C_b7Xhey.js → Pagination-LaSg-5cl.js} +3 -3
  96. package/dist/{Pagination-C_b7Xhey.js.map → Pagination-LaSg-5cl.js.map} +1 -1
  97. package/dist/{Popconfirm-5pBzT_HQ.js → Popconfirm-SLz0zodk.js} +3 -3
  98. package/dist/{Popconfirm-5pBzT_HQ.js.map → Popconfirm-SLz0zodk.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-CUBsuP7r.js → RadioGroup-CBPRLRN0.js} +4 -4
  102. package/dist/{RadioGroup-CUBsuP7r.js.map → RadioGroup-CBPRLRN0.js.map} +1 -1
  103. package/dist/{Search-DVpJuzr9.js → Search-DmkQo716.js} +3 -3
  104. package/dist/{Search-DVpJuzr9.js.map → Search-DmkQo716.js.map} +1 -1
  105. package/dist/{SearchInput-Q85p8Ews.js → SearchInput-CEfQDNl3.js} +8 -13
  106. package/dist/SearchInput-CEfQDNl3.js.map +1 -0
  107. package/dist/{SectionNav-mpmSM3OC.js → SectionNav-B_qf0AXi.js} +10 -42
  108. package/dist/SectionNav-B_qf0AXi.js.map +1 -0
  109. package/dist/{Select-DV3Hak_l.js → Select-ByRvkZ3D.js} +8 -11
  110. package/dist/{Select-DV3Hak_l.js.map → Select-ByRvkZ3D.js.map} +1 -1
  111. package/dist/{Sheet-Chf0kX1E.js → Sheet-C-yXk5Da.js} +5 -9
  112. package/dist/Sheet-C-yXk5Da.js.map +1 -0
  113. package/dist/{Sidebar-CTWsHZhF.js → Sidebar-Ds0E6PbR.js} +181 -33
  114. package/dist/Sidebar-Ds0E6PbR.js.map +1 -0
  115. package/dist/{Slider-Bv0B6lI0.js → Slider-DWdu9NuM.js} +3 -3
  116. package/dist/{Slider-Bv0B6lI0.js.map → Slider-DWdu9NuM.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-Dt9oLYHC.js} +3 -3
  124. package/dist/{Tabs-eB974xJf.js.map → Tabs-Dt9oLYHC.js.map} +1 -1
  125. package/dist/{TextInput-DiEMxVF6.js → TextInput-CDG2XpBl.js} +12 -15
  126. package/dist/TextInput-CDG2XpBl.js.map +1 -0
  127. package/dist/{ThemeProvider-BI6JWBdJ.js → ThemeProvider-DXsxFg1U.js} +13 -31
  128. package/dist/ThemeProvider-DXsxFg1U.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-BG5Xogxh.js → Timeline-B-I6sb0M.js} +2 -2
  132. package/dist/{Timeline-BG5Xogxh.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-U_VH3QRO.js → ZoomableSvg-BzXVfgnI.js} +5 -19
  138. package/dist/ZoomableSvg-BzXVfgnI.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 +1461 -1809
  158. package/dist/index.js +70 -67
  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 +129 -0
  168. package/dist/internal/blocks/ChipEditor.js.map +1 -0
  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 +162 -165
  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 +2 -2
  226. package/dist/internal/components/Combobox.js +2 -2
  227. package/dist/internal/components/DatePicker.js +1 -1
  228. package/dist/internal/components/DateRangePicker.js +1 -1
  229. package/dist/internal/components/DropdownMenu.js +1 -1
  230. package/dist/internal/components/FileUpload.js +1 -1
  231. package/dist/internal/components/FullScreenModal.js +1 -1
  232. package/dist/internal/components/HoverCard.js +1 -1
  233. package/dist/internal/components/InputGroup.js +1 -1
  234. package/dist/internal/components/Kbd.js +1 -1
  235. package/dist/internal/components/MarkedText.js +1 -1
  236. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +1 -1
  237. package/dist/internal/components/Modal.js +1 -1
  238. package/dist/internal/components/Navbar.js +1 -1
  239. package/dist/internal/components/Pagination.js +1 -1
  240. package/dist/internal/components/PanelWithDetails.js +1 -1
  241. package/dist/internal/components/Popconfirm.js +1 -1
  242. package/dist/internal/components/Popover.js +1 -1
  243. package/dist/internal/components/RadioGroup.js +1 -1
  244. package/dist/internal/components/Search.js +1 -1
  245. package/dist/internal/components/Select.js +1 -1
  246. package/dist/internal/components/Separator.js.map +1 -1
  247. package/dist/internal/components/Sheet.js +1 -1
  248. package/dist/internal/components/Sidebar.js +1 -1
  249. package/dist/internal/components/Skeleton/Skeleton.js +5 -9
  250. package/dist/internal/components/Skeleton/Skeleton.js.map +1 -1
  251. package/dist/internal/components/Slider.js +1 -1
  252. package/dist/internal/components/SpotlightBackdrop.js +3 -8
  253. package/dist/internal/components/SpotlightBackdrop.js.map +1 -1
  254. package/dist/internal/components/StatusDot.js +60 -0
  255. package/dist/internal/components/StatusDot.js.map +1 -0
  256. package/dist/internal/components/Stepper.js +1 -1
  257. package/dist/internal/components/Switch.js +1 -1
  258. package/dist/internal/components/Table.js +1 -1
  259. package/dist/internal/components/Tabs.js +1 -1
  260. package/dist/internal/components/ThemeProvider.js +3 -3
  261. package/dist/internal/components/TimePicker.js +1 -1
  262. package/dist/internal/components/Timeline.js +1 -1
  263. package/dist/internal/components/Toast.js +2 -2
  264. package/dist/internal/components/Tooltip.js +2 -2
  265. package/dist/internal/components/Truncated.js +4 -8
  266. package/dist/internal/components/Truncated.js.map +1 -1
  267. package/dist/internal/components/Workbench.js +1 -1
  268. package/dist/internal/components/ZoomableSvg.js +1 -1
  269. package/dist/internal/hooks/useScrollbarPosition.js +1 -1
  270. package/dist/internal/hooks/useStableCallback.js +4 -13
  271. package/dist/internal/hooks/useStableCallback.js.map +1 -1
  272. package/dist/internal/utils/mergeRefs.js +27 -9
  273. package/dist/internal/utils/mergeRefs.js.map +1 -1
  274. package/dist/internal/utils.js +3 -3
  275. package/dist/markdown-editor.d.ts +15 -37
  276. package/dist/markdown-editor.js +17 -23
  277. package/dist/markdown-editor.js.map +1 -1
  278. package/dist/mermaid.d.ts +4 -6
  279. package/dist/mermaid.js +1 -1
  280. package/dist/rjsf.d.ts +9 -19
  281. package/dist/rjsf.js +44 -84
  282. package/dist/rjsf.js.map +1 -1
  283. package/dist/{styles-BAFscjSV.js → styles-gzcjOyKv.js} +6 -6
  284. package/dist/styles-gzcjOyKv.js.map +1 -0
  285. package/dist/styles.css +1 -1
  286. package/dist/svgTransforms-Dw2hRA-i.js +51 -0
  287. package/dist/svgTransforms-Dw2hRA-i.js.map +1 -0
  288. package/dist/testing.d.ts +3 -10
  289. package/dist/testing.js +5 -12
  290. package/dist/testing.js.map +1 -1
  291. package/dist/themeTokens-7DEab0kp.js +31 -0
  292. package/dist/themeTokens-7DEab0kp.js.map +1 -0
  293. package/dist/{toast-DIC0iNRf.js → toast-CyXEdaCZ.js} +3 -3
  294. package/dist/toast-CyXEdaCZ.js.map +1 -0
  295. package/dist/{themeScopeContext-D7fSyb06.js → useColorSchemeState-Cw4MCXUs.js} +14 -14
  296. package/dist/useColorSchemeState-Cw4MCXUs.js.map +1 -0
  297. package/dist/{useControllableState-M6494mCT.js → useControllableState-CUYXMsfz.js} +3 -7
  298. package/dist/useControllableState-CUYXMsfz.js.map +1 -0
  299. package/dist/useElement-D-RjrGa4.js +21 -0
  300. package/dist/useElement-D-RjrGa4.js.map +1 -0
  301. package/dist/useThemeAttributes-B199Regy.js +67 -0
  302. package/dist/useThemeAttributes-B199Regy.js.map +1 -0
  303. package/dist/{utils-DnkrFYqY.js → utils-Bd28bWgm.js} +53 -20
  304. package/dist/utils-Bd28bWgm.js.map +1 -0
  305. package/dist/vega.d.ts +8 -30
  306. package/dist/vega.js +5 -13
  307. package/dist/vega.js.map +1 -1
  308. package/dist/{vegaTheme-CSvFEMBl.js → vegaTheme-VQMWTlBw.js} +7 -21
  309. package/dist/vegaTheme-VQMWTlBw.js.map +1 -0
  310. package/package.json +11 -9
  311. package/src/styles.css +120 -14
  312. package/src/theme.css +126 -6
  313. package/dist/AIKit-CQxVwyAk.js.map +0 -1
  314. package/dist/Alert-C4Y9IwMI.js.map +0 -1
  315. package/dist/AlertModal-BGJdaRRj.js.map +0 -1
  316. package/dist/AppShell-DRgJxpXW.js.map +0 -1
  317. package/dist/Badge-o5jURtpB.js.map +0 -1
  318. package/dist/BrandLogo-CoKBk4MI.js.map +0 -1
  319. package/dist/Breadcrumb-D1id7YXd.js.map +0 -1
  320. package/dist/Button-DsRrU5F1.js.map +0 -1
  321. package/dist/Calendar-cG5NIJ4O.js.map +0 -1
  322. package/dist/Card-Dyo7055Q.js.map +0 -1
  323. package/dist/Checkbox-Bqr6zXcW.js.map +0 -1
  324. package/dist/CodeEditor-C9AS8Ch0.js.map +0 -1
  325. package/dist/ColorInput-Dg87lKcR.js.map +0 -1
  326. package/dist/ColorModeSwitch-CsWLiTBX.js.map +0 -1
  327. package/dist/Combobox-BfanUAqY.js +0 -619
  328. package/dist/Combobox-BfanUAqY.js.map +0 -1
  329. package/dist/DateRangeInput-9MIw7P6L.js.map +0 -1
  330. package/dist/DateRangePicker-DjSUFjh4.js.map +0 -1
  331. package/dist/DropdownMenu-CASr-jgl.js.map +0 -1
  332. package/dist/FieldItem-DtPTzNef.js.map +0 -1
  333. package/dist/FormGroup-Bl8JmnzJ.js.map +0 -1
  334. package/dist/FullScreenModal-CN9nAs72.js.map +0 -1
  335. package/dist/InputGroup-DcZRlVnN.js.map +0 -1
  336. package/dist/Kbd-D1Azcc4g.js.map +0 -1
  337. package/dist/MermaidDiagram-CujFxVzk.js.map +0 -1
  338. package/dist/Modal-Coj-H02o.js.map +0 -1
  339. package/dist/ModalTitle-C76ke2eo.js.map +0 -1
  340. package/dist/PageHeader-Q3IpCnQd.js.map +0 -1
  341. package/dist/PageLayout-DSVM-ASz.js.map +0 -1
  342. package/dist/PageToolbar-BKVJiDAL.js.map +0 -1
  343. package/dist/Popover-BEbQrC_P.js.map +0 -1
  344. package/dist/SearchInput-Q85p8Ews.js.map +0 -1
  345. package/dist/SectionNav-mpmSM3OC.js.map +0 -1
  346. package/dist/Sheet-Chf0kX1E.js.map +0 -1
  347. package/dist/Sidebar-CTWsHZhF.js.map +0 -1
  348. package/dist/TextInput-DiEMxVF6.js.map +0 -1
  349. package/dist/ThemeProvider-BI6JWBdJ.js.map +0 -1
  350. package/dist/ZoomableSvg-U_VH3QRO.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/styles-BAFscjSV.js.map +0 -1
  355. package/dist/svgTransforms-CJAYPk7o.js +0 -81
  356. package/dist/svgTransforms-CJAYPk7o.js.map +0 -1
  357. package/dist/themeScopeContext-D7fSyb06.js.map +0 -1
  358. package/dist/themeTokens-qP1-55O7.js +0 -119
  359. package/dist/themeTokens-qP1-55O7.js.map +0 -1
  360. package/dist/toast-DIC0iNRf.js.map +0 -1
  361. package/dist/useControllableState-M6494mCT.js.map +0 -1
  362. package/dist/useElement-DkF6esWL.js +0 -15
  363. package/dist/useElement-DkF6esWL.js.map +0 -1
  364. package/dist/utils-DnkrFYqY.js.map +0 -1
  365. package/dist/vegaTheme-CSvFEMBl.js.map +0 -1
@@ -0,0 +1,60 @@
1
+ import { cn } from "../../classNames-BzrkDnOD.js";
2
+ import { cva } from "class-variance-authority";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/components/StatusDot/StatusDot.tsx
5
+ /**
6
+ * The dot's fill.
7
+ *
8
+ * - Brand-overridable status tokens only, never a primitive hue.
9
+ * - `neutral`: no state yet, or one the caller cannot resolve.
10
+ * - No foreground on top, so the status-surface "tint + foreground" rule does not apply.
11
+ */
12
+ const statusDotVariants = cva([
13
+ "tw:inline-block",
14
+ "tw:shrink-0",
15
+ "tw:rounded-full"
16
+ ], {
17
+ defaultVariants: {
18
+ status: "neutral",
19
+ size: "default"
20
+ },
21
+ variants: {
22
+ status: {
23
+ success: ["tw:bg-success"],
24
+ warning: ["tw:bg-warning"],
25
+ info: ["tw:bg-info"],
26
+ destructive: ["tw:bg-destructive"],
27
+ neutral: ["tw:bg-muted-foreground"]
28
+ },
29
+ size: {
30
+ default: ["tw:size-1.5"],
31
+ large: ["tw:size-2"]
32
+ }
33
+ }
34
+ });
35
+ /**
36
+ * A small round state mark — the platform's one way to paint status as a colour.
37
+ *
38
+ * **When to use:** an entity's state beside its name in a row, header or chip.
39
+ * **When NOT to use:** colour alone as meaning — pair with text, or use `Badge` / `Alert`;
40
+ * a flow step → `Stepper`; background work → `DotsLoader`.
41
+ * **Composition:** a dot overlaying an icon needs a surface-coloured ring via `className`.
42
+ */
43
+ const StatusDot = ({ ref, status, size, pulse = false, label, className, ...rest }) => /* @__PURE__ */ jsx("span", {
44
+ ...rest,
45
+ ref,
46
+ "data-slot": "status-dot",
47
+ "data-status": status ?? "neutral",
48
+ ...label == null ? { "aria-hidden": true } : {
49
+ role: "img",
50
+ "aria-label": label
51
+ },
52
+ className: cn(statusDotVariants({
53
+ status,
54
+ size
55
+ }), pulse && "tw:animate-pulse", className)
56
+ });
57
+ //#endregion
58
+ export { StatusDot, statusDotVariants };
59
+
60
+ //# sourceMappingURL=StatusDot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusDot.js","names":[],"sources":["../../../src/components/StatusDot/StatusDot.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../utils';\n\n/**\n * The dot's fill.\n *\n * - Brand-overridable status tokens only, never a primitive hue.\n * - `neutral`: no state yet, or one the caller cannot resolve.\n * - No foreground on top, so the status-surface \"tint + foreground\" rule does not apply.\n */\nexport const statusDotVariants = cva(['tw:inline-block', 'tw:shrink-0', 'tw:rounded-full'], {\n defaultVariants: {\n status: 'neutral',\n size: 'default',\n },\n variants: {\n status: {\n success: ['tw:bg-success'],\n warning: ['tw:bg-warning'],\n info: ['tw:bg-info'],\n destructive: ['tw:bg-destructive'],\n neutral: ['tw:bg-muted-foreground'],\n },\n size: {\n default: ['tw:size-1.5'],\n large: ['tw:size-2'],\n },\n },\n});\n\ntype Props = Omit<ComponentProps<'span'>, 'children'> &\n VariantProps<typeof statusDotVariants> & {\n /** Only for work still running. */\n pulse?: boolean;\n /** Accessible name; omit when a visible label sits beside it (the dot is then `aria-hidden`). */\n label?: string;\n };\n\n/**\n * A small round state mark — the platform's one way to paint status as a colour.\n *\n * **When to use:** an entity's state beside its name in a row, header or chip.\n * **When NOT to use:** colour alone as meaning — pair with text, or use `Badge` / `Alert`;\n * a flow step → `Stepper`; background work → `DotsLoader`.\n * **Composition:** a dot overlaying an icon needs a surface-coloured ring via `className`.\n */\nexport const StatusDot = ({\n ref,\n status,\n size,\n pulse = false,\n label,\n className,\n ...rest\n}: Props) => (\n <span\n {...rest}\n ref={ref}\n data-slot=\"status-dot\"\n data-status={status ?? 'neutral'}\n {...(label == null ? { 'aria-hidden': true } : { role: 'img', 'aria-label': label })}\n className={cn(statusDotVariants({ status, size }), pulse && 'tw:animate-pulse', className)}\n />\n);\n"],"mappings":";;;;;;;;;;;AAYA,MAAa,oBAAoB,IAAI;CAAC;CAAmB;CAAe;AAAiB,GAAG;CAC1F,iBAAiB;EACf,QAAQ;EACR,MAAM;CACR;CACA,UAAU;EACR,QAAQ;GACN,SAAS,CAAC,eAAe;GACzB,SAAS,CAAC,eAAe;GACzB,MAAM,CAAC,YAAY;GACnB,aAAa,CAAC,mBAAmB;GACjC,SAAS,CAAC,wBAAwB;EACpC;EACA,MAAM;GACJ,SAAS,CAAC,aAAa;GACvB,OAAO,CAAC,WAAW;EACrB;CACF;AACF,CAAC;;;;;;;;;AAkBD,MAAa,aAAa,EACxB,KACA,QACA,MACA,QAAQ,OACR,OACA,WACA,GAAG,WAEH,oBAAC,QAAD;CACE,GAAI;CACC;CACL,aAAU;CACV,eAAa,UAAU;CACvB,GAAK,SAAS,OAAO,EAAE,eAAe,KAAK,IAAI;EAAE,MAAM;EAAO,cAAc;CAAM;CAClF,WAAW,GAAG,kBAAkB;EAAE;EAAQ;CAAK,CAAC,GAAG,SAAS,oBAAoB,SAAS;AAC1F,CAAA"}
@@ -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-Dt9oLYHC.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-BI6JWBdJ.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, keboolaLegacyTopnav, useThemeScopeContainer } from "../../ThemeProvider-DXsxFg1U.js";
4
+ export { ArgoDesignContext, DEFAULT_COLOR_SCHEME, DEFAULT_BRAND_ID as DEFAULT_KEBOOLA_BRAND_ID, ThemeProvider, ThemeScope, agnes, brandSchema, exampleCustomer, harbor, keboola, keboolaLegacySidebar, keboolaLegacyTopnav, 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-BG5Xogxh.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 { Tooltip, TooltipProvider } from "../../utils-DnkrFYqY.js";
2
- export { Tooltip, TooltipProvider };
1
+ import { HINT_UNDERLINE_CLASS_NAME, Tooltip, TooltipProvider } from "../../utils-Bd28bWgm.js";
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-DnkrFYqY.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-U_VH3QRO.js";
1
+ import { ZoomableSvg, svgToPngBlob, toSvgFileContent } from "../../ZoomableSvg-BzXVfgnI.js";
2
2
  export { ZoomableSvg, svgToPngBlob, toSvgFileContent };
@@ -1,4 +1,4 @@
1
- import { useElement } from "../../useElement-DkF6esWL.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"}
@@ -1,18 +1,36 @@
1
1
  //#region src/utils/mergeRefs.ts
2
2
  /**
3
- * Set a given ref to a given value
4
- * This utility takes care of different types of refs: callback refs and RefObject(s)
3
+ * Attach a node to one ref, and hand back the way to detach it.
4
+ *
5
+ * - A callback ref that returns its own cleanup gets that cleanup back; React 19 owns the
6
+ * contract, and a hook using it never sees the legacy `null` call.
7
+ * - One that returns nothing is detached the legacy way instead, with a `null` call.
8
+ * - An object ref's `current` is cleared.
5
9
  */
6
- function setRef(ref, value) {
7
- if (typeof ref === "function") ref(value);
8
- else if (ref != null) ref.current = value;
9
- }
10
+ const attachRef = (ref, node) => {
11
+ if (typeof ref === "function") {
12
+ const cleanup = ref(node);
13
+ return typeof cleanup === "function" ? cleanup : () => ref(null);
14
+ }
15
+ if (ref == null) return () => {};
16
+ ref.current = node;
17
+ return () => {
18
+ ref.current = null;
19
+ };
20
+ };
10
21
  /**
11
- * A utility to compose multiple refs together
12
- * Accepts callback refs and RefObject(s)
22
+ * Compose several refs into the one a component can hand to an element.
23
+ *
24
+ * - Accepts callback refs and ref objects, in any mix.
25
+ * - Returns a cleanup of its own, so a callback ref's cleanup survives the merge. Dropping it
26
+ * would leave a hook that detaches through its cleanup — `useElement` does — holding a node
27
+ * that is no longer in the document.
13
28
  */
14
29
  const mergeRefs = (...refs) => {
15
- return (node) => refs.forEach((ref) => setRef(ref, node));
30
+ return (node) => {
31
+ const cleanups = refs.map((ref) => attachRef(ref, node));
32
+ return () => cleanups.forEach((cleanup) => cleanup());
33
+ };
16
34
  };
17
35
  //#endregion
18
36
  export { mergeRefs };
@@ -1 +1 @@
1
- {"version":3,"file":"mergeRefs.js","names":[],"sources":["../../../src/utils/mergeRefs.ts"],"sourcesContent":["import type { MutableRefObject, RefCallback } from 'react';\n\ntype PossibleRef<T> = MutableRefObject<T> | RefCallback<T> | null;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref != null) {\n ref.current = value;\n }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nexport const mergeRefs = <T>(...refs: PossibleRef<T>[]) => {\n return (node: T) => refs.forEach((ref) => setRef(ref, node));\n};\n"],"mappings":";;;;;AAQA,SAAS,OAAU,KAAqB,OAAU;CAChD,IAAI,OAAO,QAAQ,YACjB,IAAI,KAAK;MACJ,IAAI,OAAO,MAChB,IAAI,UAAU;AAElB;;;;;AAMA,MAAa,aAAgB,GAAG,SAA2B;CACzD,QAAQ,SAAY,KAAK,SAAS,QAAQ,OAAO,KAAK,IAAI,CAAC;AAC7D"}
1
+ {"version":3,"file":"mergeRefs.js","names":[],"sources":["../../../src/utils/mergeRefs.ts"],"sourcesContent":["import type { Ref, RefCallback } from 'react';\n\ntype PossibleRef<T> = Ref<T> | undefined;\n\n/**\n * Attach a node to one ref, and hand back the way to detach it.\n *\n * - A callback ref that returns its own cleanup gets that cleanup back; React 19 owns the\n * contract, and a hook using it never sees the legacy `null` call.\n * - One that returns nothing is detached the legacy way instead, with a `null` call.\n * - An object ref's `current` is cleared.\n */\nconst attachRef = <T>(ref: PossibleRef<T>, node: T): (() => void) => {\n if (typeof ref === 'function') {\n const cleanup = ref(node);\n return typeof cleanup === 'function' ? cleanup : () => ref(null);\n }\n\n if (ref == null) return () => {};\n\n ref.current = node;\n return () => {\n ref.current = null;\n };\n};\n\n/**\n * Compose several refs into the one a component can hand to an element.\n *\n * - Accepts callback refs and ref objects, in any mix.\n * - Returns a cleanup of its own, so a callback ref's cleanup survives the merge. Dropping it\n * would leave a hook that detaches through its cleanup — `useElement` does — holding a node\n * that is no longer in the document.\n */\nexport const mergeRefs = <T>(...refs: PossibleRef<T>[]): RefCallback<T> => {\n return (node) => {\n const cleanups = refs.map((ref) => attachRef(ref, node));\n return () => cleanups.forEach((cleanup) => cleanup());\n };\n};\n"],"mappings":";;;;;;;;;AAYA,MAAM,aAAgB,KAAqB,SAA0B;CACnE,IAAI,OAAO,QAAQ,YAAY;EAC7B,MAAM,UAAU,IAAI,IAAI;EACxB,OAAO,OAAO,YAAY,aAAa,gBAAgB,IAAI,IAAI;CACjE;CAEA,IAAI,OAAO,MAAM,aAAa,CAAC;CAE/B,IAAI,UAAU;CACd,aAAa;EACX,IAAI,UAAU;CAChB;AACF;;;;;;;;;AAUA,MAAa,aAAgB,GAAG,SAA2C;CACzE,QAAQ,SAAS;EACf,MAAM,WAAW,KAAK,KAAK,QAAQ,UAAU,KAAK,IAAI,CAAC;EACvD,aAAa,SAAS,SAAS,YAAY,QAAQ,CAAC;CACtD;AACF"}
@@ -1,5 +1,5 @@
1
1
  import { cn } from "../classNames-BzrkDnOD.js";
2
- import { copyToClipboard, createChangeInputEvent, createPrefixedString, debounce, isMac, noop, useSHA256, withHiddenFullscreen, withTooltipProvider, withVisualSettle } from "../utils-DnkrFYqY.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
- export { cn, copyToClipboard, createChangeInputEvent, createPrefixedString, debounce, findLiteralMatches, findLiteralTermMatches, hasLiteralMatch, isMac, mergeRefs, noop, useSHA256, withHiddenFullscreen, withTooltipProvider, withVisualSettle };
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-DnkrFYqY.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-Ca4Q3VJU.js";
5
5
  import { ButtonGroup } from "./internal/components/ButtonGroup.js";
6
- import { DropdownMenu } from "./DropdownMenu-CASr-jgl.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-DiEMxVF6.js";
10
- import { FormGroup } from "./FormGroup-Bl8JmnzJ.js";
9
+ import { TextInput } from "./TextInput-CDG2XpBl.js";
10
+ import { FormGroup } from "./FormGroup-CmNiAtU6.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-CujFxVzk.js").then((n) => n.MermaidDiagram_exports).then((m) => ({ default: m.MermaidDiagram }), (error) => {
144
+ const MermaidDiagram = lazy(() => import("./MermaidDiagram-BQvz6bhv.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