@keboola/design 13.1.2 → 13.2.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 (318) hide show
  1. package/AGENTS.md +63 -5
  2. package/CHANGELOG.md +49 -0
  3. package/COMPONENT-API.md +8 -8
  4. package/dist/{AIKit-BVCWP9Ks.js → AIKit-C5FbKjwa.js} +22 -22
  5. package/dist/AIKit-C5FbKjwa.js.map +1 -0
  6. package/dist/{Alert-UI-CIs-1.js → Alert-DuAGeYyM.js} +7 -7
  7. package/dist/{Alert-UI-CIs-1.js.map → Alert-DuAGeYyM.js.map} +1 -1
  8. package/dist/{AlertModal-mbSnuuka.js → AlertModal-BDle9ZVQ.js} +6 -6
  9. package/dist/AlertModal-BDle9ZVQ.js.map +1 -0
  10. package/dist/{AppShell-WSQabK8r.js → AppShell-B03fj1j7.js} +2 -2
  11. package/dist/{AppShell-WSQabK8r.js.map → AppShell-B03fj1j7.js.map} +1 -1
  12. package/dist/{AutoSaveTextarea-C5iIr2Ts.js → AutoSaveTextarea-jiqNeeE4.js} +3 -3
  13. package/dist/{AutoSaveTextarea-C5iIr2Ts.js.map → AutoSaveTextarea-jiqNeeE4.js.map} +1 -1
  14. package/dist/{Badge-Dz0cj6rj.js → Badge-Ba3epgcI.js} +2 -2
  15. package/dist/{Badge-Dz0cj6rj.js.map → Badge-Ba3epgcI.js.map} +1 -1
  16. package/dist/{BrandEditor-P8OZX2hi.js → BrandEditor-Dq168RJc.js} +154 -16
  17. package/dist/BrandEditor-Dq168RJc.js.map +1 -0
  18. package/dist/{BrandLogo-CKpVSZb6.js → BrandLogo-BfITD0im.js} +2 -2
  19. package/dist/{BrandLogo-CKpVSZb6.js.map → BrandLogo-BfITD0im.js.map} +1 -1
  20. package/dist/{Breadcrumb-BUoAZyhO.js → Breadcrumb-CUyYu5Bi.js} +10 -10
  21. package/dist/Breadcrumb-CUyYu5Bi.js.map +1 -0
  22. package/dist/{Button-B21oVcPU.js → Button-D2JqBAq7.js} +199 -7
  23. package/dist/Button-D2JqBAq7.js.map +1 -0
  24. package/dist/{Calendar-DFtmZzbF.js → Calendar-BnKi1kPu.js} +4 -4
  25. package/dist/{Calendar-DFtmZzbF.js.map → Calendar-BnKi1kPu.js.map} +1 -1
  26. package/dist/{Card-BQmBWHXl.js → Card-Bpc_ZlL4.js} +3 -3
  27. package/dist/Card-Bpc_ZlL4.js.map +1 -0
  28. package/dist/{Checkbox-8yIIgY7g.js → Checkbox-D9rafoKh.js} +6 -6
  29. package/dist/Checkbox-D9rafoKh.js.map +1 -0
  30. package/dist/{Clipboard-_xf6hMDD.js → Clipboard-BHWUodAx.js} +3 -3
  31. package/dist/{Clipboard-_xf6hMDD.js.map → Clipboard-BHWUodAx.js.map} +1 -1
  32. package/dist/{ClipboardButton-srUgWgwH.js → ClipboardButton-Urg-kZbh.js} +4 -4
  33. package/dist/{ClipboardButton-srUgWgwH.js.map → ClipboardButton-Urg-kZbh.js.map} +1 -1
  34. package/dist/{CodeEditor-Df7VVx08.js → CodeEditor-Y0iE-SwV.js} +5 -5
  35. package/dist/{CodeEditor-Df7VVx08.js.map → CodeEditor-Y0iE-SwV.js.map} +1 -1
  36. package/dist/{Collapsible-BQXWEOBC.js → Collapsible-DD4xTL75.js} +2 -2
  37. package/dist/{Collapsible-BQXWEOBC.js.map → Collapsible-DD4xTL75.js.map} +1 -1
  38. package/dist/{ColorInput-B3gBZ8Ya.js → ColorInput-D1nC0X6i.js} +5 -5
  39. package/dist/{ColorInput-B3gBZ8Ya.js.map → ColorInput-D1nC0X6i.js.map} +1 -1
  40. package/dist/{ColorModeSwitch-D8Cki137.js → ColorModeSwitch-Cxee8jnB.js} +4 -4
  41. package/dist/{ColorModeSwitch-D8Cki137.js.map → ColorModeSwitch-Cxee8jnB.js.map} +1 -1
  42. package/dist/{Combobox-BNhW0TDB.js → Combobox-B1Kjoy5J.js} +9 -9
  43. package/dist/Combobox-B1Kjoy5J.js.map +1 -0
  44. package/dist/{Command-BQPiZCNz.js → Command-BuOA3V18.js} +5 -5
  45. package/dist/Command-BuOA3V18.js.map +1 -0
  46. package/dist/{CopyField-Ba7h8MqZ.js → CopyField-DsOVtV2Q.js} +4 -4
  47. package/dist/{CopyField-Ba7h8MqZ.js.map → CopyField-DsOVtV2Q.js.map} +1 -1
  48. package/dist/{DateInput-D0nWUasV.js → DateInput-BlKkequE.js} +5 -5
  49. package/dist/{DateInput-D0nWUasV.js.map → DateInput-BlKkequE.js.map} +1 -1
  50. package/dist/{DatePicker-CtSa9b3V.js → DatePicker-CgHAu9KX.js} +3 -3
  51. package/dist/{DatePicker-CtSa9b3V.js.map → DatePicker-CgHAu9KX.js.map} +1 -1
  52. package/dist/{DateRangeInput-i6wE45-V.js → DateRangeInput-DOxJHw8V.js} +5 -5
  53. package/dist/{DateRangeInput-i6wE45-V.js.map → DateRangeInput-DOxJHw8V.js.map} +1 -1
  54. package/dist/{DateRangePicker-BAnuz6vO.js → DateRangePicker-CXpXPMoh.js} +8 -8
  55. package/dist/{DateRangePicker-BAnuz6vO.js.map → DateRangePicker-CXpXPMoh.js.map} +1 -1
  56. package/dist/{DiagramSource-C5_d8Gdj.js → DiagramSource-jTwmmi9g.js} +2 -2
  57. package/dist/{DiagramSource-C5_d8Gdj.js.map → DiagramSource-jTwmmi9g.js.map} +1 -1
  58. package/dist/{DiffView-ppTIzh2h.js → DiffView-Dy4z-n-1.js} +3 -3
  59. package/dist/{DiffView-ppTIzh2h.js.map → DiffView-Dy4z-n-1.js.map} +1 -1
  60. package/dist/{DropdownMenu-BJGLjpVc.js → DropdownMenu-DtRYcKEx.js} +8 -8
  61. package/dist/DropdownMenu-DtRYcKEx.js.map +1 -0
  62. package/dist/{FieldBox-D7DYtX_m.js → FieldBox-BrxLkY9C.js} +8 -6
  63. package/dist/FieldBox-BrxLkY9C.js.map +1 -0
  64. package/dist/{FieldItem-BHViBJS3.js → FieldItem-Cf1E3rfQ.js} +4 -4
  65. package/dist/{FieldItem-BHViBJS3.js.map → FieldItem-Cf1E3rfQ.js.map} +1 -1
  66. package/dist/{FileUpload-Ch2hrIWq.js → FileUpload-D6vPG3WB.js} +9 -9
  67. package/dist/FileUpload-D6vPG3WB.js.map +1 -0
  68. package/dist/{Form-VkzfVPyT.js → Form-CuaAn-lR.js} +10 -10
  69. package/dist/{Form-VkzfVPyT.js.map → Form-CuaAn-lR.js.map} +1 -1
  70. package/dist/{FormGroup-CmCppxOn.js → FormGroup-D4O96YPm.js} +4 -4
  71. package/dist/{FormGroup-CmCppxOn.js.map → FormGroup-D4O96YPm.js.map} +1 -1
  72. package/dist/{FullScreenModal-Cwnm8WdM.js → FullScreenModal-CUuAakh3.js} +20 -6
  73. package/dist/{FullScreenModal-Cwnm8WdM.js.map → FullScreenModal-CUuAakh3.js.map} +1 -1
  74. package/dist/HoverCard-Cy6nhg4u.js +31 -0
  75. package/dist/HoverCard-Cy6nhg4u.js.map +1 -0
  76. package/dist/InlineEdit-DSMIEUUa.js +370 -0
  77. package/dist/InlineEdit-DSMIEUUa.js.map +1 -0
  78. package/dist/{InputGroup-CrlMRz4X.js → InputGroup-Dm014ruw.js} +4 -4
  79. package/dist/{InputGroup-CrlMRz4X.js.map → InputGroup-Dm014ruw.js.map} +1 -1
  80. package/dist/{Kbd-J4n1J6i4.js → Kbd-Du93F3o4.js} +3 -3
  81. package/dist/{Kbd-J4n1J6i4.js.map → Kbd-Du93F3o4.js.map} +1 -1
  82. package/dist/{MermaidDiagram-B30x2yV7.js → MermaidDiagram-D2ThT8Q-.js} +3 -3
  83. package/dist/{MermaidDiagram-B30x2yV7.js.map → MermaidDiagram-D2ThT8Q-.js.map} +1 -1
  84. package/dist/{Modal-BkSuS9Yz.js → Modal-DQIauzar.js} +6 -6
  85. package/dist/Modal-DQIauzar.js.map +1 -0
  86. package/dist/{ModalTitle-BxopkIoQ.js → ModalTitle-CTECVgL8.js} +3 -3
  87. package/dist/ModalTitle-CTECVgL8.js.map +1 -0
  88. package/dist/{MultiActionButtonGroup-AWLj1Tg7.js → MultiActionButtonGroup-xKqiucAN.js} +5 -5
  89. package/dist/{MultiActionButtonGroup-AWLj1Tg7.js.map → MultiActionButtonGroup-xKqiucAN.js.map} +1 -1
  90. package/dist/{Navbar-B_DNpv5s.js → Navbar-CtVYcRFn.js} +18 -14
  91. package/dist/Navbar-CtVYcRFn.js.map +1 -0
  92. package/dist/{OtpInput-I8B8Vjdl.js → OtpInput-CY8yCaJk.js} +4 -4
  93. package/dist/{OtpInput-I8B8Vjdl.js.map → OtpInput-CY8yCaJk.js.map} +1 -1
  94. package/dist/{PageHeader-CgfyXpf1.js → PageHeader-CL1A6jFM.js} +21 -14
  95. package/dist/PageHeader-CL1A6jFM.js.map +1 -0
  96. package/dist/{PageLayout-DiAAILuS.js → PageLayout-C9aXTpqV.js} +2 -2
  97. package/dist/{PageLayout-DiAAILuS.js.map → PageLayout-C9aXTpqV.js.map} +1 -1
  98. package/dist/{PageToolbar-C06RKIif.js → PageToolbar-B_e7HGva.js} +6 -6
  99. package/dist/{PageToolbar-C06RKIif.js.map → PageToolbar-B_e7HGva.js.map} +1 -1
  100. package/dist/{Pagination-DH3f6LN0.js → Pagination-DDp6PRqf.js} +5 -5
  101. package/dist/Pagination-DDp6PRqf.js.map +1 -0
  102. package/dist/{Popconfirm-Dhzn7sy6.js → Popconfirm-BgV6a0sl.js} +5 -5
  103. package/dist/{Popconfirm-Dhzn7sy6.js.map → Popconfirm-BgV6a0sl.js.map} +1 -1
  104. package/dist/{Popover-CEk915I1.js → Popover-BU7nGOv-.js} +3 -3
  105. package/dist/Popover-BU7nGOv-.js.map +1 -0
  106. package/dist/{RadioGroup-CYEp8Wnx.js → RadioGroup-C2vk5acr.js} +6 -6
  107. package/dist/{RadioGroup-CYEp8Wnx.js.map → RadioGroup-C2vk5acr.js.map} +1 -1
  108. package/dist/{Resizable-D3vYToZH.js → Resizable-D8zs0kcq.js} +2 -2
  109. package/dist/{Resizable-D3vYToZH.js.map → Resizable-D8zs0kcq.js.map} +1 -1
  110. package/dist/{Search-DmkQo716.js → Search-CVrv3hqf.js} +4 -4
  111. package/dist/{Search-DmkQo716.js.map → Search-CVrv3hqf.js.map} +1 -1
  112. package/dist/{SearchInput-D3qMkHaW.js → SearchInput-BnU6YHgT.js} +4 -4
  113. package/dist/{SearchInput-D3qMkHaW.js.map → SearchInput-BnU6YHgT.js.map} +1 -1
  114. package/dist/{SectionNav-I2p2uXTd.js → SectionNav-XlhvXXdF.js} +11 -11
  115. package/dist/{SectionNav-I2p2uXTd.js.map → SectionNav-XlhvXXdF.js.map} +1 -1
  116. package/dist/{Select-B4uK0QVm.js → Select-CjQgU_6K.js} +6 -6
  117. package/dist/Select-CjQgU_6K.js.map +1 -0
  118. package/dist/{Sheet-D0fAE14T.js → Sheet-utw4_rUa.js} +9 -9
  119. package/dist/Sheet-utw4_rUa.js.map +1 -0
  120. package/dist/{Sidebar-D9ytIs8V.js → Sidebar-CKaxOPwY.js} +21 -18
  121. package/dist/Sidebar-CKaxOPwY.js.map +1 -0
  122. package/dist/{Slider-B0ou9r0B.js → Slider-Rcc2qVct.js} +5 -5
  123. package/dist/{Slider-B0ou9r0B.js.map → Slider-Rcc2qVct.js.map} +1 -1
  124. package/dist/{Stepper-BLkLhfnd.js → Stepper-BBPembeK.js} +3 -3
  125. package/dist/{Stepper-BLkLhfnd.js.map → Stepper-BBPembeK.js.map} +1 -1
  126. package/dist/{Switch-DZvNePOm.js → Switch-Dw4tvQls.js} +3 -3
  127. package/dist/Switch-Dw4tvQls.js.map +1 -0
  128. package/dist/{Table-BaVT5Tkn.js → Table-CgSC-fSo.js} +4 -4
  129. package/dist/{Table-BaVT5Tkn.js.map → Table-CgSC-fSo.js.map} +1 -1
  130. package/dist/{Tabs-CTDmye1N.js → Tabs-C0uvkPHc.js} +5 -5
  131. package/dist/Tabs-C0uvkPHc.js.map +1 -0
  132. package/dist/{TextInput-BWYXbfs4.js → TextInput-B5TDDOty.js} +5 -5
  133. package/dist/{TextInput-BWYXbfs4.js.map → TextInput-B5TDDOty.js.map} +1 -1
  134. package/dist/{ThemeProvider-VF38VfUa.js → ThemeProvider-Dt9b67sW.js} +22 -5
  135. package/dist/ThemeProvider-Dt9b67sW.js.map +1 -0
  136. package/dist/{TimePicker-CDGYrRxi.js → TimePicker-DyyV3nw8.js} +2 -2
  137. package/dist/{TimePicker-CDGYrRxi.js.map → TimePicker-DyyV3nw8.js.map} +1 -1
  138. package/dist/{Timeline-B-I6sb0M.js → Timeline-DUXgByUE.js} +3 -3
  139. package/dist/{Timeline-B-I6sb0M.js.map → Timeline-DUXgByUE.js.map} +1 -1
  140. package/dist/{Toast-NrOdDDru.js → Toast-BGnUL4jV.js} +2 -2
  141. package/dist/{Toast-NrOdDDru.js.map → Toast-BGnUL4jV.js.map} +1 -1
  142. package/dist/{ToggleGroup-Cy_10Mvu.js → ToggleGroup-BOz1yyz6.js} +3 -3
  143. package/dist/ToggleGroup-BOz1yyz6.js.map +1 -0
  144. package/dist/{Workbench-DmZzpkj7.js → Workbench-CxgNCs3I.js} +4 -4
  145. package/dist/{Workbench-DmZzpkj7.js.map → Workbench-CxgNCs3I.js.map} +1 -1
  146. package/dist/{ZoomableSvg-C65nta_r.js → ZoomableSvg-D8sXKpoV.js} +6 -6
  147. package/dist/{ZoomableSvg-C65nta_r.js.map → ZoomableSvg-D8sXKpoV.js.map} +1 -1
  148. package/dist/charts.js +1 -1
  149. package/dist/classNames-DcGnTh2N.js +21 -0
  150. package/dist/classNames-DcGnTh2N.js.map +1 -0
  151. package/dist/editors.js +5 -5
  152. package/dist/flint.js +2 -2
  153. package/dist/{icons-wcA70iQx.js → icons-ZIeZXXS7.js} +37 -4
  154. package/dist/icons-ZIeZXXS7.js.map +1 -0
  155. package/dist/icons.d.ts +2 -2
  156. package/dist/icons.js +2 -2
  157. package/dist/{index-B7k-09i1.d.ts → index-D-itZ3VP.d.ts} +14 -3
  158. package/dist/index.d.ts +388 -316
  159. package/dist/index.js +72 -70
  160. package/dist/internal/blocks/AIKit.js +1 -1
  161. package/dist/internal/blocks/AppShell.js +1 -1
  162. package/dist/internal/blocks/AuthLayout.js +2 -2
  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 +2 -2
  166. package/dist/internal/blocks/ChipEditor.js +4 -4
  167. package/dist/internal/blocks/ClipboardButton.js +1 -1
  168. package/dist/internal/blocks/ColorInput.js +1 -1
  169. package/dist/internal/blocks/ColorModeSwitch.js +1 -1
  170. package/dist/internal/blocks/Command.js +1 -1
  171. package/dist/internal/blocks/CopyField.js +1 -1
  172. package/dist/internal/blocks/DashboardHero.js +2 -2
  173. package/dist/internal/blocks/DashboardHero.js.map +1 -1
  174. package/dist/internal/blocks/DateInput.js +1 -1
  175. package/dist/internal/blocks/DateRangeInput.js +1 -1
  176. package/dist/internal/blocks/EmptyConfigurationActionCard.js +1 -1
  177. package/dist/internal/blocks/ExportMenu.js +4 -4
  178. package/dist/internal/blocks/FacebookButton.js +66 -0
  179. package/dist/internal/blocks/FacebookButton.js.map +1 -0
  180. package/dist/internal/blocks/Form/connectors/ComboboxField.js +2 -2
  181. package/dist/internal/blocks/Form/connectors/MultiComboboxField.js +1 -1
  182. package/dist/internal/blocks/Form.js +1 -1
  183. package/dist/internal/blocks/FormGroup.js +1 -1
  184. package/dist/internal/blocks/GoogleButton.js +2 -2
  185. package/dist/internal/blocks/InlineEdit.js +2 -0
  186. package/dist/internal/blocks/MicrosoftButton.js +2 -2
  187. package/dist/internal/blocks/MultiActionButtonGroup.js +1 -1
  188. package/dist/internal/blocks/MultiCombobox.js +2 -2
  189. package/dist/internal/blocks/NumberInput.js +1 -1
  190. package/dist/internal/blocks/OtpInput.js +1 -1
  191. package/dist/internal/blocks/PageHeader.js +1 -1
  192. package/dist/internal/blocks/PageLayout.js +1 -1
  193. package/dist/internal/blocks/PageToolbar.js +1 -1
  194. package/dist/internal/blocks/PasswordInput.js +3 -3
  195. package/dist/internal/blocks/SearchInput.js +1 -1
  196. package/dist/internal/blocks/SearchInputWithNavigation.js +5 -5
  197. package/dist/internal/blocks/SectionNav.js +1 -1
  198. package/dist/internal/blocks/SplitButton.js +6 -5
  199. package/dist/internal/blocks/SplitButton.js.map +1 -1
  200. package/dist/internal/blocks/StatCard.js +2 -2
  201. package/dist/internal/blocks/TextInput.js +1 -1
  202. package/dist/internal/blocks/Textarea.js +1 -1
  203. package/dist/internal/blocks/TimeInput.js +4 -4
  204. package/dist/internal/components/Alert.js +1 -1
  205. package/dist/internal/components/AlertModal.js +1 -1
  206. package/dist/internal/components/Avatar.js +2 -2
  207. package/dist/internal/components/Badge.js +1 -1
  208. package/dist/internal/components/BrandLogo.js +1 -1
  209. package/dist/internal/components/Breadcrumb.js +1 -1
  210. package/dist/internal/components/Button.js +1 -1
  211. package/dist/internal/components/ButtonGroup.js +1 -1
  212. package/dist/internal/components/Calendar.js +1 -1
  213. package/dist/internal/components/Card.js +1 -1
  214. package/dist/internal/components/Checkbox.js +1 -1
  215. package/dist/internal/components/Clipboard.js +1 -1
  216. package/dist/internal/components/Collapsible.js +1 -1
  217. package/dist/internal/components/CollapsiblePanel.js +5 -5
  218. package/dist/internal/components/CollapsiblePanel.js.map +1 -1
  219. package/dist/internal/components/Combobox.js +1 -1
  220. package/dist/internal/components/DatePicker.js +1 -1
  221. package/dist/internal/components/DateRangePicker.js +1 -1
  222. package/dist/internal/components/DiffView.js +1 -1
  223. package/dist/internal/components/DotsLoader.js +1 -1
  224. package/dist/internal/components/DropdownMenu.js +1 -1
  225. package/dist/internal/components/FileUpload.js +1 -1
  226. package/dist/internal/components/FullScreenModal.js +1 -1
  227. package/dist/internal/components/HoverCard.js +1 -1
  228. package/dist/internal/components/InputGroup.js +1 -1
  229. package/dist/internal/components/Kbd.js +1 -1
  230. package/dist/internal/components/Label.js +2 -2
  231. package/dist/internal/components/Label.js.map +1 -1
  232. package/dist/internal/components/Link.js +1 -1
  233. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +2 -2
  234. package/dist/internal/components/Modal.js +1 -1
  235. package/dist/internal/components/Navbar.js +1 -1
  236. package/dist/internal/components/Pagination.js +1 -1
  237. package/dist/internal/components/PanelWithDetails.js +3 -3
  238. package/dist/internal/components/Popconfirm.js +1 -1
  239. package/dist/internal/components/Popover.js +1 -1
  240. package/dist/internal/components/Progress.js +1 -1
  241. package/dist/internal/components/RadioGroup.js +1 -1
  242. package/dist/internal/components/Resizable.js +1 -1
  243. package/dist/internal/components/ScrollArea.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 +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 +1 -1
  250. package/dist/internal/components/Skeleton/SkeletonList.js +1 -1
  251. package/dist/internal/components/Slider.js +1 -1
  252. package/dist/internal/components/SpotlightBackdrop.js +1 -1
  253. package/dist/internal/components/Stepper.js +1 -1
  254. package/dist/internal/components/Switch.js +1 -1
  255. package/dist/internal/components/Table.js +1 -1
  256. package/dist/internal/components/Tabs.js +1 -1
  257. package/dist/internal/components/ThemeProvider.js +1 -1
  258. package/dist/internal/components/TimePicker.js +1 -1
  259. package/dist/internal/components/Timeline.js +1 -1
  260. package/dist/internal/components/Toast.js +2 -2
  261. package/dist/internal/components/Toggle.js +5 -5
  262. package/dist/internal/components/Toggle.js.map +1 -1
  263. package/dist/internal/components/ToggleGroup.js +1 -1
  264. package/dist/internal/components/Tooltip.js +1 -1
  265. package/dist/internal/components/Truncated.js +2 -2
  266. package/dist/internal/components/Workbench.js +1 -1
  267. package/dist/internal/components/ZoomableSvg.js +1 -1
  268. package/dist/internal/utils.js +2 -2
  269. package/dist/markdown-editor.js +116 -78
  270. package/dist/markdown-editor.js.map +1 -1
  271. package/dist/mermaid.js +1 -1
  272. package/dist/rjsf.js +12 -12
  273. package/dist/{styles-DBGXH5-_.js → styles-BDA5rQz3.js} +6 -6
  274. package/dist/styles-BDA5rQz3.js.map +1 -0
  275. package/dist/{styles-gzcjOyKv.js → styles-YQdM7G8c.js} +3 -3
  276. package/dist/{styles-gzcjOyKv.js.map → styles-YQdM7G8c.js.map} +1 -1
  277. package/dist/styles.css +1 -1
  278. package/dist/testing.js +1 -1
  279. package/dist/{toast-CyXEdaCZ.js → toast-D6Z6MOB5.js} +5 -5
  280. package/dist/toast-D6Z6MOB5.js.map +1 -0
  281. package/dist/{utils-Bd28bWgm.js → utils-p6tjltbX.js} +4 -4
  282. package/dist/utils-p6tjltbX.js.map +1 -0
  283. package/package.json +2 -1
  284. package/src/styles.css +179 -0
  285. package/src/theme.css +47 -3
  286. package/dist/AIKit-BVCWP9Ks.js.map +0 -1
  287. package/dist/AlertModal-mbSnuuka.js.map +0 -1
  288. package/dist/BrandEditor-P8OZX2hi.js.map +0 -1
  289. package/dist/Breadcrumb-BUoAZyhO.js.map +0 -1
  290. package/dist/Button-B21oVcPU.js.map +0 -1
  291. package/dist/Card-BQmBWHXl.js.map +0 -1
  292. package/dist/Checkbox-8yIIgY7g.js.map +0 -1
  293. package/dist/Combobox-BNhW0TDB.js.map +0 -1
  294. package/dist/Command-BQPiZCNz.js.map +0 -1
  295. package/dist/DropdownMenu-BJGLjpVc.js.map +0 -1
  296. package/dist/FieldBox-D7DYtX_m.js.map +0 -1
  297. package/dist/FileUpload-Ch2hrIWq.js.map +0 -1
  298. package/dist/HoverCard-B8OKu9XZ.js +0 -31
  299. package/dist/HoverCard-B8OKu9XZ.js.map +0 -1
  300. package/dist/Modal-BkSuS9Yz.js.map +0 -1
  301. package/dist/ModalTitle-BxopkIoQ.js.map +0 -1
  302. package/dist/Navbar-B_DNpv5s.js.map +0 -1
  303. package/dist/PageHeader-CgfyXpf1.js.map +0 -1
  304. package/dist/Pagination-DH3f6LN0.js.map +0 -1
  305. package/dist/Popover-CEk915I1.js.map +0 -1
  306. package/dist/Select-B4uK0QVm.js.map +0 -1
  307. package/dist/Sheet-D0fAE14T.js.map +0 -1
  308. package/dist/Sidebar-D9ytIs8V.js.map +0 -1
  309. package/dist/Switch-DZvNePOm.js.map +0 -1
  310. package/dist/Tabs-CTDmye1N.js.map +0 -1
  311. package/dist/ThemeProvider-VF38VfUa.js.map +0 -1
  312. package/dist/ToggleGroup-Cy_10Mvu.js.map +0 -1
  313. package/dist/classNames-BzrkDnOD.js +0 -9
  314. package/dist/classNames-BzrkDnOD.js.map +0 -1
  315. package/dist/icons-wcA70iQx.js.map +0 -1
  316. package/dist/styles-DBGXH5-_.js.map +0 -1
  317. package/dist/toast-CyXEdaCZ.js.map +0 -1
  318. package/dist/utils-Bd28bWgm.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import { cn } from "../../classNames-BzrkDnOD.js";
2
- import { Tooltip } from "../../utils-Bd28bWgm.js";
1
+ import { cn } from "../../classNames-DcGnTh2N.js";
2
+ import { Tooltip } from "../../utils-p6tjltbX.js";
3
3
  import { useState } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/components/Truncated.tsx
@@ -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-DmZzpkj7.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-CxgNCs3I.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-C65nta_r.js";
1
+ import { ZoomableSvg, svgToPngBlob, toSvgFileContent } from "../../ZoomableSvg-D8sXKpoV.js";
2
2
  export { ZoomableSvg, svgToPngBlob, toSvgFileContent };
@@ -1,5 +1,5 @@
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-Bd28bWgm.js";
1
+ import { cn } from "../classNames-DcGnTh2N.js";
2
+ import { DEFAULT_ENTRY_SEPARATOR, copyToClipboard, createChangeInputEvent, createPrefixedString, debounce, isMac, noop, splitEntry, useSHA256, withHiddenFullscreen, withTooltipProvider, withVisualSettle } from "../utils-p6tjltbX.js";
3
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 };
@@ -1,20 +1,19 @@
1
- import { cn } from "./classNames-BzrkDnOD.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";
1
+ import { cn } from "./classNames-DcGnTh2N.js";
2
+ import { Tooltip } from "./utils-p6tjltbX.js";
3
+ import { AlignCenter, AlignJustify, AlignLeft, AlignRight, Bold, ChevronDown, Code, Heading1, Heading2, Heading3, Italic, Link, List, ListOrdered, Quote, SquareCode, Strikethrough, Type, Underline } from "./icons-ZIeZXXS7.js";
4
+ import { Button } from "./Button-D2JqBAq7.js";
5
5
  import { ButtonGroup } from "./internal/components/ButtonGroup.js";
6
- import { DropdownMenu } from "./DropdownMenu-BJGLjpVc.js";
6
+ import { DropdownMenu } from "./DropdownMenu-DtRYcKEx.js";
7
7
  import { Label } from "./internal/components/Label.js";
8
8
  import { useStableCallback } from "./internal/hooks/useStableCallback.js";
9
- import { Popover } from "./Popover-CEk915I1.js";
10
- import { TextInput } from "./TextInput-BWYXbfs4.js";
11
- import { FormGroup } from "./FormGroup-CmCppxOn.js";
9
+ import { Popover } from "./Popover-BU7nGOv-.js";
10
+ import { TextInput } from "./TextInput-B5TDDOty.js";
11
+ import { FormGroup } from "./FormGroup-D4O96YPm.js";
12
+ import { Kbd } from "./Kbd-Du93F3o4.js";
12
13
  import { Skeleton } from "./internal/components/Skeleton/Skeleton.js";
13
- import { Kbd } from "./Kbd-J4n1J6i4.js";
14
- import { toast } from "./toast-CyXEdaCZ.js";
14
+ import { toast } from "./toast-D6Z6MOB5.js";
15
15
  import { Suspense, createContext, lazy, use, useCallback, useEffect, useId, useRef, useState } from "react";
16
16
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
17
- import { DismissableLayer } from "@radix-ui/react-dismissable-layer";
18
17
  import { $createCodeNode, $isCodeNode, CodeNode } from "@lexical/code";
19
18
  import { AutoFocusPlugin } from "@lexical/react/LexicalAutoFocusPlugin";
20
19
  import { AutoLinkPlugin } from "@lexical/react/LexicalAutoLinkPlugin";
@@ -42,6 +41,11 @@ import { $convertFromMarkdownString, $convertToMarkdownString, CHECK_LIST, TRANS
42
41
  const ImageRendererContext = createContext(null);
43
42
  const ImageRendererProvider = ImageRendererContext;
44
43
  const useImageRenderer = () => use(ImageRendererContext);
44
+ const EditorLayerContext = createContext(void 0);
45
+ /** Takes the id `MarkdownEditor`'s blur guard matches on its toolbar's portalled layers. */
46
+ const EditorLayerProvider = EditorLayerContext;
47
+ /** Props for a layer the toolbar portals out of the editor, so its blur guard counts focus there. */
48
+ const useEditorLayer = () => ({ "data-editor-layer": use(EditorLayerContext) });
45
49
  //#endregion
46
50
  //#region src/blocks/MarkdownEditor/nodes/ImageNodeComponent.tsx
47
51
  const isPlaceholder = (src) => src.startsWith("upload-placeholder-");
@@ -277,7 +281,7 @@ const KeyboardPlugin = ({ onSave, onCancel, singleLine, blurOnEscape, skipBlurSa
277
281
  };
278
282
  //#endregion
279
283
  //#region src/blocks/MarkdownEditor/nodes/MermaidNodeComponent.tsx
280
- const MermaidDiagram = lazy(() => import("./MermaidDiagram-B30x2yV7.js").then((n) => n.MermaidDiagram_exports).then((m) => ({ default: m.MermaidDiagram }), (error) => {
284
+ const MermaidDiagram = lazy(() => import("./MermaidDiagram-D2ThT8Q-.js").then((n) => n.MermaidDiagram_exports).then((m) => ({ default: m.MermaidDiagram }), (error) => {
281
285
  console.error("[MarkdownEditor] failed to load MermaidDiagram chunk", error);
282
286
  return { default: ({ code }) => /* @__PURE__ */ jsx("pre", { children: /* @__PURE__ */ jsx("code", { children: code }) }) };
283
287
  }));
@@ -760,6 +764,7 @@ const TRIGGER_LABEL = "Text alignment";
760
764
  const ALIGNMENT_ICONS = Object.fromEntries(ALIGNMENT_OPTIONS.map(({ value, icon }) => [value, icon]));
761
765
  const AlignmentDropdown = ({ editor, alignment }) => {
762
766
  const savedSelectionRef = useRef(null);
767
+ const editorLayer = useEditorLayer();
763
768
  const handleOpenChange = (open) => {
764
769
  if (open) editor.getEditorState().read(() => {
765
770
  const selection = $getSelection();
@@ -784,11 +789,12 @@ const AlignmentDropdown = ({ editor, alignment }) => {
784
789
  children: /* @__PURE__ */ jsxs("button", {
785
790
  type: "button",
786
791
  "aria-label": TRIGGER_LABEL,
787
- className: cn("tw:flex tw:h-7 tw:cursor-pointer tw:items-center tw:gap-1 tw:rounded tw:border-0 tw:bg-transparent tw:px-1.5 tw:text-xs tw:text-muted-foreground", "tw:hover:bg-accent"),
792
+ className: cn("tw:flex tw:h-7 tw:cursor-pointer tw:items-center tw:gap-1 tw:rounded tw:border-0 tw:bg-transparent tw:px-1.5 tw:text-xs tw:text-muted-foreground", "tw:hover:bg-hover"),
788
793
  children: [/* @__PURE__ */ jsx(CurrentAlignmentIcon, { className: "tw:size-4" }), /* @__PURE__ */ jsx(ChevronDown, { className: "tw:size-3" })]
789
794
  })
790
795
  })
791
796
  }), /* @__PURE__ */ jsx(DropdownMenu.Content, {
797
+ ...editorLayer,
792
798
  align: "start",
793
799
  className: "tw:min-w-32",
794
800
  children: ALIGNMENT_OPTIONS.map(({ value, label, icon: IconComp }) => /* @__PURE__ */ jsxs(DropdownMenu.Item, {
@@ -851,6 +857,7 @@ const BLOCK_TYPE_OPTIONS = Object.entries(BLOCK_TYPE_META).filter(([, meta]) =>
851
857
  const isBlockType = (value) => Object.prototype.hasOwnProperty.call(BLOCK_TYPE_META, value);
852
858
  const BlockTypeDropdown = ({ editor, blockType }) => {
853
859
  const savedSelectionRef = useRef(null);
860
+ const editorLayer = useEditorLayer();
854
861
  const currentMeta = isBlockType(blockType) ? BLOCK_TYPE_META[blockType] : null;
855
862
  const CurrentBlockIcon = currentMeta?.icon ?? Type;
856
863
  const handleOpenChange = (open) => {
@@ -889,7 +896,7 @@ const BlockTypeDropdown = ({ editor, blockType }) => {
889
896
  asChild: true,
890
897
  children: /* @__PURE__ */ jsxs("button", {
891
898
  type: "button",
892
- className: cn("tw:flex tw:h-7 tw:cursor-pointer tw:items-center tw:gap-1.5 tw:rounded tw:border-0 tw:bg-transparent tw:px-1.5 tw:text-xs tw:text-muted-foreground", "tw:hover:bg-accent"),
899
+ className: cn("tw:flex tw:h-7 tw:cursor-pointer tw:items-center tw:gap-1.5 tw:rounded tw:border-0 tw:bg-transparent tw:px-1.5 tw:text-xs tw:text-muted-foreground", "tw:hover:bg-hover"),
893
900
  children: [
894
901
  /* @__PURE__ */ jsx(CurrentBlockIcon, { className: "tw:size-4" }),
895
902
  currentMeta?.label ?? "Normal",
@@ -898,6 +905,7 @@ const BlockTypeDropdown = ({ editor, blockType }) => {
898
905
  })
899
906
  })
900
907
  }), /* @__PURE__ */ jsx(DropdownMenu.Content, {
908
+ ...editorLayer,
901
909
  align: "start",
902
910
  className: "tw:min-w-40",
903
911
  children: BLOCK_TYPE_OPTIONS.map(({ value, label, icon: IconComp }) => /* @__PURE__ */ jsxs(DropdownMenu.Item, {
@@ -922,7 +930,12 @@ const MOD_KEY = IS_APPLE ? {
922
930
  aria: "Control",
923
931
  symbol: "Ctrl"
924
932
  };
925
- const ToolbarButton = ({ active, disabled, onClick, tooltip, shortcutKey, children, className: extraClassName }) => /* @__PURE__ */ jsx(Tooltip, {
933
+ /**
934
+ * An icon button named by its tooltip.
935
+ *
936
+ * - Other props reach the `<button>`, so it can be a trigger; they cannot rename it.
937
+ */
938
+ const ToolbarButton = ({ active, tooltip, shortcutKey, children, className: extraClassName, ...props }) => /* @__PURE__ */ jsx(Tooltip, {
926
939
  tooltip: shortcutKey ? /* @__PURE__ */ jsxs("span", {
927
940
  className: "tw:inline-flex tw:items-center tw:gap-2",
928
941
  children: [tooltip, /* @__PURE__ */ jsxs(Kbd.Group, {
@@ -941,16 +954,16 @@ const ToolbarButton = ({ active, disabled, onClick, tooltip, shortcutKey, childr
941
954
  triggerAsChild: true,
942
955
  children: /* @__PURE__ */ jsx("button", {
943
956
  type: "button",
957
+ ...props,
944
958
  "aria-label": tooltip,
945
959
  "aria-keyshortcuts": shortcutKey ? `${MOD_KEY.aria}+${shortcutKey}` : void 0,
946
- disabled,
947
- onClick,
948
- className: cn("tw:flex tw:h-7 tw:min-w-7 tw:cursor-pointer tw:items-center tw:justify-center tw:rounded tw:border-0 tw:bg-transparent tw:px-1 tw:text-xs tw:text-muted-foreground", "tw:hover:bg-accent tw:disabled:cursor-not-allowed tw:disabled:opacity-30", active && "tw:bg-secondary-100 tw:text-secondary-500", extraClassName),
960
+ className: cn("tw:flex tw:h-7 tw:min-w-7 tw:cursor-pointer tw:items-center tw:justify-center tw:rounded tw:border-0 tw:bg-transparent tw:px-1 tw:text-xs tw:text-muted-foreground", "tw:hover:bg-hover tw:disabled:cursor-not-allowed tw:disabled:opacity-30", active && "tw:bg-secondary-100 tw:text-secondary-500", extraClassName),
949
961
  children
950
962
  })
951
963
  });
952
964
  //#endregion
953
965
  //#region src/blocks/MarkdownEditor/plugins/toolbar/LinkPanel.tsx
966
+ const PANEL_NAME = "Insert Link";
954
967
  const insertLink = (editor, url, label, savedSelection) => {
955
968
  editor.update(() => {
956
969
  $setSelection(savedSelection);
@@ -969,13 +982,25 @@ const insertLink = (editor, url, label, savedSelection) => {
969
982
  });
970
983
  };
971
984
  const LinkPanel = ({ editor, isLink }) => {
985
+ const editorLayer = useEditorLayer();
972
986
  const [open, setOpen] = useState(false);
973
987
  const [url, setUrl] = useState("");
974
988
  const [label, setLabel] = useState("");
975
989
  const savedSelectionRef = useRef(null);
976
990
  const panelRef = useRef(null);
991
+ const labelRef = useRef(null);
977
992
  const labelId = useId();
978
993
  const urlId = useId();
994
+ /**
995
+ * Focuses and selects the Label field on every open.
996
+ *
997
+ * - `FocusScope` does it only on mount, and a reopen during the exit animation reuses the panel.
998
+ */
999
+ useEffect(() => {
1000
+ if (!open) return;
1001
+ labelRef.current?.focus({ preventScroll: true });
1002
+ labelRef.current?.select();
1003
+ }, [open]);
979
1004
  const handleOpen = () => {
980
1005
  editor.getEditorState().read(() => {
981
1006
  const selection = $getSelection();
@@ -998,14 +1023,14 @@ const LinkPanel = ({ editor, isLink }) => {
998
1023
  editor.focus();
999
1024
  };
1000
1025
  /**
1001
- * Closes the panel on Escape pressed anywhere while it is open.
1026
+ * Opens the panel, or closes it however Radix asks: Escape, its button again, an outside click.
1002
1027
  *
1003
- * - `preventDefault` claims the key from a surface outside Radix's stack (`FullScreenModal`).
1004
- * - Focus goes back to the editor only from inside the panel; anywhere else it stays put.
1028
+ * - Focus still in the panel (Escape, or the button, which leaves focus put): the editor takes it.
1029
+ * - Focus already elsewhere (an outside click or focus): it stays there.
1005
1030
  */
1006
- const handleEscape = (event) => {
1007
- event.preventDefault();
1008
- if (panelRef.current?.contains(document.activeElement)) handleClose();
1031
+ const handleOpenChange = (next) => {
1032
+ if (next) handleOpen();
1033
+ else if (panelRef.current?.contains(document.activeElement)) handleClose();
1009
1034
  else resetPanel();
1010
1035
  };
1011
1036
  const handleSubmit = () => {
@@ -1026,58 +1051,62 @@ const LinkPanel = ({ editor, isLink }) => {
1026
1051
  tooltip: "Remove Link",
1027
1052
  children: /* @__PURE__ */ jsx(Link, { className: "tw:size-4" })
1028
1053
  });
1029
- return /* @__PURE__ */ jsxs("div", {
1030
- className: "tw:relative",
1031
- children: [/* @__PURE__ */ jsx(ToolbarButton, {
1032
- active: open,
1033
- onClick: handleOpen,
1034
- tooltip: "Insert Link",
1035
- children: /* @__PURE__ */ jsx(Link, { className: "tw:size-4" })
1036
- }), open && /* @__PURE__ */ jsx(DismissableLayer, {
1037
- ref: panelRef,
1038
- onEscapeKeyDown: handleEscape,
1039
- className: "tw:absolute tw:left-0 tw:top-full tw:z-50 tw:mt-1 tw:w-80 tw:rounded-md tw:border tw:border-border tw:bg-popover tw:p-3 tw:text-popover-foreground tw:shadow-lg",
1040
- children: /* @__PURE__ */ jsxs("div", {
1041
- className: "tw:flex tw:flex-col tw:gap-2",
1042
- children: [
1043
- /* @__PURE__ */ jsxs(FormGroup, { children: [/* @__PURE__ */ jsx(Label, {
1044
- htmlFor: labelId,
1045
- className: "tw:mb-1 tw:text-xs",
1046
- children: "Label"
1047
- }), /* @__PURE__ */ jsx(TextInput, {
1048
- id: labelId,
1049
- autoFocus: true,
1050
- placeholder: "Link text",
1051
- value: label,
1052
- onValueChange: setLabel,
1053
- onKeyDown: handleKeyDown,
1054
- variant: "secondary"
1055
- })] }),
1056
- /* @__PURE__ */ jsxs(FormGroup, { children: [/* @__PURE__ */ jsx(Label, {
1057
- htmlFor: urlId,
1058
- className: "tw:mb-1 tw:text-xs",
1059
- children: "URL"
1060
- }), /* @__PURE__ */ jsx(TextInput, {
1061
- id: urlId,
1062
- placeholder: "https://…",
1063
- value: url,
1064
- onValueChange: setUrl,
1065
- onKeyDown: handleKeyDown,
1066
- variant: "secondary"
1067
- })] }),
1068
- /* @__PURE__ */ jsxs(ButtonGroup, { children: [/* @__PURE__ */ jsx(Button, {
1069
- size: "small",
1070
- variant: "outline",
1071
- onClick: handleClose,
1072
- children: "Cancel"
1073
- }), /* @__PURE__ */ jsx(Button, {
1074
- size: "small",
1075
- onClick: handleSubmit,
1076
- disabled: !url.trim(),
1077
- children: "Add link"
1078
- })] })
1079
- ]
1054
+ return /* @__PURE__ */ jsxs(Popover, {
1055
+ open,
1056
+ onOpenChange: handleOpenChange,
1057
+ children: [/* @__PURE__ */ jsx(Popover.Trigger, {
1058
+ asChild: true,
1059
+ children: /* @__PURE__ */ jsx(ToolbarButton, {
1060
+ active: open,
1061
+ tooltip: PANEL_NAME,
1062
+ children: /* @__PURE__ */ jsx(Link, { className: "tw:size-4" })
1080
1063
  })
1064
+ }), /* @__PURE__ */ jsxs(Popover.Content, {
1065
+ ref: panelRef,
1066
+ "aria-label": PANEL_NAME,
1067
+ ...editorLayer,
1068
+ align: "start",
1069
+ collisionPadding: 8,
1070
+ onCloseAutoFocus: (event) => event.preventDefault(),
1071
+ className: "tw:w-80 tw:max-w-[calc(100vw-1rem)] tw:gap-2 tw:p-3",
1072
+ children: [
1073
+ /* @__PURE__ */ jsxs(FormGroup, { children: [/* @__PURE__ */ jsx(Label, {
1074
+ htmlFor: labelId,
1075
+ className: "tw:mb-1 tw:text-xs",
1076
+ children: "Label"
1077
+ }), /* @__PURE__ */ jsx(TextInput, {
1078
+ ref: labelRef,
1079
+ id: labelId,
1080
+ placeholder: "Link text",
1081
+ value: label,
1082
+ onValueChange: setLabel,
1083
+ onKeyDown: handleKeyDown,
1084
+ variant: "secondary"
1085
+ })] }),
1086
+ /* @__PURE__ */ jsxs(FormGroup, { children: [/* @__PURE__ */ jsx(Label, {
1087
+ htmlFor: urlId,
1088
+ className: "tw:mb-1 tw:text-xs",
1089
+ children: "URL"
1090
+ }), /* @__PURE__ */ jsx(TextInput, {
1091
+ id: urlId,
1092
+ placeholder: "https://…",
1093
+ value: url,
1094
+ onValueChange: setUrl,
1095
+ onKeyDown: handleKeyDown,
1096
+ variant: "secondary"
1097
+ })] }),
1098
+ /* @__PURE__ */ jsxs(ButtonGroup, { children: [/* @__PURE__ */ jsx(Button, {
1099
+ size: "small",
1100
+ variant: "outline",
1101
+ onClick: handleClose,
1102
+ children: "Cancel"
1103
+ }), /* @__PURE__ */ jsx(Button, {
1104
+ size: "small",
1105
+ onClick: handleSubmit,
1106
+ disabled: !url.trim(),
1107
+ children: "Add link"
1108
+ })] })
1109
+ ]
1081
1110
  })]
1082
1111
  });
1083
1112
  };
@@ -1103,6 +1132,7 @@ const hasFocus = (element) => !!element?.contains(document.activeElement);
1103
1132
  * Keeps focus, and the editor selection with it, where it was when a toolbar control is pressed.
1104
1133
  *
1105
1134
  * - A link panel field takes focus as usual, so a click there lands the caret in it.
1135
+ * - The link panel is portalled, but React bubbles its events up here all the same.
1106
1136
  */
1107
1137
  const keepEditorFocus = (event) => {
1108
1138
  if (event.target instanceof HTMLInputElement) return;
@@ -1110,6 +1140,7 @@ const keepEditorFocus = (event) => {
1110
1140
  };
1111
1141
  const ToolbarPlugin = ({ mode = "floating" }) => {
1112
1142
  const [editor] = useLexicalComposerContext();
1143
+ const editorLayer = useEditorLayer();
1113
1144
  const [isBold, setIsBold] = useState(false);
1114
1145
  const [isItalic, setIsItalic] = useState(false);
1115
1146
  const [isUnderline, setIsUnderline] = useState(false);
@@ -1364,6 +1395,7 @@ const ToolbarPlugin = ({ mode = "floating" }) => {
1364
1395
  return /* @__PURE__ */ jsxs(Popover, {
1365
1396
  open: true,
1366
1397
  children: [/* @__PURE__ */ jsx(Popover.Anchor, { virtualRef: { current: anchor } }), /* @__PURE__ */ jsx(Popover.Content, {
1398
+ ...editorLayer,
1367
1399
  ref: toolbarRef,
1368
1400
  role: "toolbar",
1369
1401
  "aria-label": "Formatting options",
@@ -1375,7 +1407,7 @@ const ToolbarPlugin = ({ mode = "floating" }) => {
1375
1407
  onEscapeKeyDown: handleEscape,
1376
1408
  onInteractOutside: handleInteractOutside,
1377
1409
  onMouseDown: keepEditorFocus,
1378
- className: cn(TOOLBAR_BASE_CLASS, "tw:flex-row tw:overflow-visible"),
1410
+ className: cn(TOOLBAR_BASE_CLASS, "tw:flex-row"),
1379
1411
  children: buttons
1380
1412
  })]
1381
1413
  });
@@ -1401,6 +1433,7 @@ const editorTheme = {
1401
1433
  ol: "tw:!list-decimal",
1402
1434
  ul: "tw:!list-disc",
1403
1435
  checklist: "tw:!list-none tw:!pl-0",
1436
+ nested: { listitem: "tw:list-none tw:before:hidden tw:after:hidden" },
1404
1437
  listitemChecked: [
1405
1438
  "tw:relative tw:!pl-6 tw:list-none tw:outline-hidden tw:line-through tw:text-muted-foreground",
1406
1439
  "tw:before:content-[\"\"] tw:before:absolute tw:before:left-0 tw:before:top-[3px]",
@@ -1444,12 +1477,14 @@ const MarkdownEditor = ({ value, onChange, readOnly = false, placeholder, autoFo
1444
1477
  }
1445
1478
  }));
1446
1479
  const skipBlurSaveRef = useRef(false);
1480
+ const layerId = useId();
1447
1481
  const handleBlur = saveOnBlur && onSave ? (event) => {
1448
1482
  if (skipBlurSaveRef.current) {
1449
1483
  skipBlurSaveRef.current = false;
1450
1484
  return;
1451
1485
  }
1452
- if (!event.currentTarget.contains(event.relatedTarget)) onSave();
1486
+ const next = event.relatedTarget;
1487
+ if (!event.currentTarget.contains(next) && !next?.closest(`[data-editor-layer="${layerId}"]`)) onSave();
1453
1488
  } : void 0;
1454
1489
  return /* @__PURE__ */ jsx(LexicalComposer, {
1455
1490
  initialConfig,
@@ -1459,7 +1494,10 @@ const MarkdownEditor = ({ value, onChange, readOnly = false, placeholder, autoFo
1459
1494
  className: cn(!compact && "tw:prose", compact && "tw:[&_p]:m-0 tw:[&_p+p]:mt-2", clampDisplay && "tw:[&:not(:focus-within)]:line-clamp-2", className),
1460
1495
  onBlur: handleBlur,
1461
1496
  children: [
1462
- showToolbar && editable && /* @__PURE__ */ jsx(ToolbarPlugin, { mode: toolbarMode }),
1497
+ showToolbar && editable && /* @__PURE__ */ jsx(EditorLayerProvider, {
1498
+ value: layerId,
1499
+ children: /* @__PURE__ */ jsx(ToolbarPlugin, { mode: toolbarMode })
1500
+ }),
1463
1501
  /* @__PURE__ */ jsx("div", {
1464
1502
  className: cn("tw:relative tw:rounded-md tw:transition-colors", contentPadding, compact && "tw:-mx-1.5 tw:-my-0.5", editable && "tw:cursor-text tw:hover:bg-muted tw:focus-within:ring-2 tw:focus-within:ring-ring/40"),
1465
1503
  children: /* @__PURE__ */ jsx(RichTextPlugin, {