@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
@@ -1,17 +1,19 @@
1
1
  import { cn } from "./classNames-BzrkDnOD.js";
2
- import { Tooltip, TooltipProvider } from "./utils-DnkrFYqY.js";
2
+ import { Tooltip, TooltipProvider } from "./utils-Bd28bWgm.js";
3
3
  import { mergeRefs } from "./internal/utils/mergeRefs.js";
4
- import { ChevronDown, Search } from "./icons-Cek151jC.js";
5
- import { DropdownMenu } from "./DropdownMenu-CASr-jgl.js";
4
+ import { ChevronDown, Search } from "./icons-wcA70iQx.js";
5
+ import { DropdownMenu } from "./DropdownMenu-gRM-A8qU.js";
6
6
  import { ScrollArea } from "./internal/components/ScrollArea.js";
7
7
  import { Separator } from "./internal/components/Separator.js";
8
- import { HoverCard } from "./HoverCard-B9ZMJxjn.js";
8
+ import { Sheet } from "./Sheet-C-yXk5Da.js";
9
+ import { HoverCard } from "./HoverCard-B8OKu9XZ.js";
10
+ import { useElement } from "./useElement-D-RjrGa4.js";
9
11
  import { Collapsible } from "./Collapsible-BQXWEOBC.js";
10
- import { BrandLogo } from "./BrandLogo-CoKBk4MI.js";
11
- import { useElement } from "./useElement-DkF6esWL.js";
12
+ import { useThemeScopeContainer } from "./ThemeProvider-DXsxFg1U.js";
13
+ import { BrandLogo } from "./BrandLogo-CKpVSZb6.js";
12
14
  import { useScrollbarPosition } from "./internal/hooks/useScrollbarPosition.js";
13
15
  import { Root, Slot, Slottable } from "@radix-ui/react-slot";
14
- import { createContext, use, useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState } from "react";
16
+ import { createContext, use, useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore } from "react";
15
17
  import { jsx, jsxs } from "react/jsx-runtime";
16
18
  //#region src/components/Sidebar/SidebarProvider/useTransitionPresence.ts
17
19
  const FALLBACK_TIMEOUT_MS = 500;
@@ -79,20 +81,47 @@ const SidebarContent = ({ ref, className, children, contentRef }) => {
79
81
  });
80
82
  };
81
83
  //#endregion
84
+ //#region src/hooks/useMediaQuery.ts
85
+ /**
86
+ * Whether a CSS media query currently matches, re-rendering when it flips.
87
+ *
88
+ * - `false` wherever `matchMedia` is absent (SSR, a stubbed test environment), so the
89
+ * caller renders its desktop branch rather than crashing.
90
+ * - The subscription is the query's own `change` event — no resize listener, no polling.
91
+ */
92
+ const useMediaQuery = (query) => {
93
+ const subscribe = useCallback((onStoreChange) => {
94
+ const list = globalThis.matchMedia?.(query);
95
+ list?.addEventListener?.("change", onStoreChange);
96
+ return () => list?.removeEventListener?.("change", onStoreChange);
97
+ }, [query]);
98
+ const getSnapshot = useCallback(() => globalThis.matchMedia?.(query).matches ?? false, [query]);
99
+ return useSyncExternalStore(subscribe, getSnapshot, () => false);
100
+ };
101
+ //#endregion
82
102
  //#region src/components/Sidebar/utils.ts
83
103
  const SidebarWidthInPx = {
84
104
  MIN_DEFAULT: 256,
85
105
  COLLAPSED_ICON: 52,
86
106
  FLOATING_VARIANT_PADDING: 8
87
107
  };
108
+ /**
109
+ * The query a rail watches to know whether it is a sheet.
110
+ *
111
+ * - `max-width`, so it is exclusive of the breakpoint itself — the width passed in is the
112
+ * first one at which the rail is a column again.
113
+ * - Per side, because the width at which a rail stops fitting is the rail's own: a 320px
114
+ * panel beside a capped reading column runs out of room long before a navigation rail does.
115
+ */
116
+ const sidebarMobileMediaQuery = (breakpointPx) => `(max-width: ${breakpointPx - .02}px)`;
88
117
  const floatingSideCount = {
89
118
  "sided-floating": 1,
90
119
  floating: 2,
91
120
  inset: 0,
92
121
  none: 0
93
122
  };
94
- const calcEffectiveWidths = ({ variant, width: customWidth, collapsible, state, mode }) => {
95
- if (variant === "none") return {
123
+ const calcEffectiveWidths = ({ variant, width: customWidth, collapsible, state, mode, isMobile = false }) => {
124
+ if (variant === "none" || isMobile) return {
96
125
  sidebar: 0,
97
126
  gap: 0,
98
127
  fill: 0
@@ -125,11 +154,7 @@ const calcEffectiveWidths = ({ variant, width: customWidth, collapsible, state,
125
154
  //#endregion
126
155
  //#region src/components/Sidebar/SidebarProvider/context.ts
127
156
  const SidebarContext = createContext(null);
128
- /**
129
- * The sidebar if there is one, `null` otherwise — for code that ENHANCES a page when the app shell is
130
- * around it (borrowing width, collapsing a panel) and must still render without one, in a test, a
131
- * story, or an embedded surface. Anything that genuinely requires a sidebar keeps `useSidebar`.
132
- */
157
+ /** `useSidebar` that returns `null` outside a `SidebarProvider` instead of throwing. */
133
158
  const useOptionalSidebar = (side = "left") => use(SidebarContext)?.[side] ?? null;
134
159
  const useSidebar = (side = "left") => {
135
160
  const context = use(SidebarContext);
@@ -140,14 +165,16 @@ const useSidebar = (side = "left") => {
140
165
  //#region src/components/Sidebar/SidebarProvider/useHoverTracking.ts
141
166
  const PORTAL_OPEN_SELECTORS_STRING = ["[aria-haspopup=\"menu\"][aria-expanded=true]", "[aria-haspopup=\"dialog\"][aria-expanded=true]"].join(",");
142
167
  const useHoverTracking = (sidebarElement) => {
143
- const [isHovered, setIsHovered] = useState(false);
168
+ const [hoveredElement, setHoveredElement] = useState(null);
144
169
  const isLockedRef = useRef(false);
170
+ if (hoveredElement !== null && hoveredElement !== sidebarElement) setHoveredElement(null);
171
+ const isHovered = hoveredElement !== null;
145
172
  useEffect(() => {
146
173
  if (!sidebarElement) return;
147
- const handleMouseEnter = () => setIsHovered(true);
174
+ const handleMouseEnter = () => setHoveredElement(sidebarElement);
148
175
  const handleMouseLeave = () => {
149
176
  if (isLockedRef.current) return;
150
- setIsHovered(false);
177
+ setHoveredElement(null);
151
178
  };
152
179
  sidebarElement.addEventListener("mouseenter", handleMouseEnter);
153
180
  sidebarElement.addEventListener("mouseleave", handleMouseLeave);
@@ -164,7 +191,7 @@ const useHoverTracking = (sidebarElement) => {
164
191
  isLockedRef.current = hasOpenPortal;
165
192
  if (hasOpenPortal) return;
166
193
  animationFrameId = requestAnimationFrame(() => {
167
- setIsHovered(sidebarElement.matches(":hover"));
194
+ setHoveredElement(sidebarElement.matches(":hover") ? sidebarElement : null);
168
195
  });
169
196
  });
170
197
  isLockedRef.current = sidebarElement.querySelector(PORTAL_OPEN_SELECTORS_STRING) !== null;
@@ -221,14 +248,25 @@ const useSidebarState = ({ defaultMode, mode: modeProp, onModeChange }) => {
221
248
  const DEFAULT_SIDEBAR_VARIANT = "none";
222
249
  const DEFAULT_SIDEBAR_MODE = "expanded";
223
250
  const DEFAULT_SIDEBAR_COLLAPSIBLE = "off-canvas";
224
- const SidebarProvider = ({ children, defaultLeftMode = DEFAULT_SIDEBAR_MODE, leftMode, onLeftModeChange, defaultRightMode = DEFAULT_SIDEBAR_MODE, rightMode, onRightModeChange, leftCollapsible = DEFAULT_SIDEBAR_COLLAPSIBLE, leftVariant = DEFAULT_SIDEBAR_VARIANT, leftWidth, rightCollapsible = DEFAULT_SIDEBAR_COLLAPSIBLE, rightVariant = DEFAULT_SIDEBAR_VARIANT, rightWidth, onLeftWidthChange, onRightWidthChange, defaultFilledSide = null }) => {
251
+ /** A sheet's `setMode`: no-op, so `Sidebar.SearchInput` focus keeps a desktop `collapsed`. */
252
+ const ignoreModeChange = () => {};
253
+ /** The side's own breakpoint, or the default for `true`. */
254
+ const mobileBreakpointOf = (mobileSheet) => typeof mobileSheet === "number" ? mobileSheet : 768;
255
+ const SidebarProvider = ({ children, defaultLeftMode = DEFAULT_SIDEBAR_MODE, leftMode, onLeftModeChange, defaultRightMode = DEFAULT_SIDEBAR_MODE, rightMode, onRightModeChange, leftMobileSheet = false, rightMobileSheet = false, leftCollapsible = DEFAULT_SIDEBAR_COLLAPSIBLE, leftVariant = DEFAULT_SIDEBAR_VARIANT, leftWidth, rightCollapsible = DEFAULT_SIDEBAR_COLLAPSIBLE, rightVariant = DEFAULT_SIDEBAR_VARIANT, rightWidth, onLeftWidthChange, onRightWidthChange, defaultFilledSide = null }) => {
256
+ const isLeftNarrow = useMediaQuery(sidebarMobileMediaQuery(mobileBreakpointOf(leftMobileSheet)));
257
+ const isRightNarrow = useMediaQuery(sidebarMobileMediaQuery(mobileBreakpointOf(rightMobileSheet)));
258
+ const isLeftMobile = isLeftNarrow && leftMobileSheet !== false && leftVariant !== "none";
259
+ const isRightMobile = isRightNarrow && rightMobileSheet !== false && rightVariant !== "none";
225
260
  const [filledSide, setFilledSide] = useState(defaultFilledSide);
261
+ const [openMobileSide, setOpenMobileSide] = useState(null);
226
262
  const [isLeftDragging, setIsLeftDragging] = useState(false);
227
263
  const [isRightDragging, setIsRightDragging] = useState(false);
228
264
  const [leftDragWidth, setLeftDragWidth] = useState(null);
229
265
  const [rightDragWidth, setRightDragWidth] = useState(null);
230
266
  if (leftDragWidth !== null && leftWidth === leftDragWidth) setLeftDragWidth(null);
231
267
  if (rightDragWidth !== null && rightWidth === rightDragWidth) setRightDragWidth(null);
268
+ if (openMobileSide === "left" && !isLeftMobile) setOpenMobileSide(null);
269
+ if (openMobileSide === "right" && !isRightMobile) setOpenMobileSide(null);
232
270
  const leftState = useSidebarState({
233
271
  defaultMode: defaultLeftMode,
234
272
  mode: leftMode,
@@ -239,6 +277,10 @@ const SidebarProvider = ({ children, defaultLeftMode = DEFAULT_SIDEBAR_MODE, lef
239
277
  mode: rightMode,
240
278
  onModeChange: onRightModeChange
241
279
  });
280
+ const toggleLeftMobile = useCallback(() => setOpenMobileSide((prev) => prev === "left" ? null : "left"), []);
281
+ const toggleRightMobile = useCallback(() => setOpenMobileSide((prev) => prev === "right" ? null : "right"), []);
282
+ const setLeftMobileOpen = useCallback((open) => setOpenMobileSide((prev) => open ? "left" : prev === "left" ? null : prev), []);
283
+ const setRightMobileOpen = useCallback((open) => setOpenMobileSide((prev) => open ? "right" : prev === "right" ? null : prev), []);
242
284
  const toggleLeftFill = useCallback(() => setFilledSide((prev) => prev === "left" ? null : "left"), []);
243
285
  const toggleRightFill = useCallback(() => setFilledSide((prev) => prev === "right" ? null : "right"), []);
244
286
  const setLeftFill = useCallback((fill) => setFilledSide((prev) => fill ? "left" : prev === "left" ? null : prev), []);
@@ -246,6 +288,15 @@ const SidebarProvider = ({ children, defaultLeftMode = DEFAULT_SIDEBAR_MODE, lef
246
288
  const value = useMemo(() => ({
247
289
  left: {
248
290
  ...leftState,
291
+ ...isLeftMobile ? {
292
+ mode: "expanded",
293
+ state: "expanded",
294
+ toggle: toggleLeftMobile,
295
+ setMode: ignoreModeChange
296
+ } : null,
297
+ isMobile: isLeftMobile,
298
+ isMobileOpen: openMobileSide === "left",
299
+ setMobileOpen: setLeftMobileOpen,
249
300
  isFill: filledSide === "left",
250
301
  toggleFill: toggleLeftFill,
251
302
  setFill: setLeftFill,
@@ -254,7 +305,8 @@ const SidebarProvider = ({ children, defaultLeftMode = DEFAULT_SIDEBAR_MODE, lef
254
305
  width: leftDragWidth ?? leftWidth,
255
306
  collapsible: leftCollapsible,
256
307
  state: leftState.state,
257
- mode: leftState.mode
308
+ mode: leftState.mode,
309
+ isMobile: isLeftMobile
258
310
  }),
259
311
  collapsible: leftCollapsible,
260
312
  variant: leftVariant,
@@ -266,6 +318,15 @@ const SidebarProvider = ({ children, defaultLeftMode = DEFAULT_SIDEBAR_MODE, lef
266
318
  },
267
319
  right: {
268
320
  ...rightState,
321
+ ...isRightMobile ? {
322
+ mode: "expanded",
323
+ state: "expanded",
324
+ toggle: toggleRightMobile,
325
+ setMode: ignoreModeChange
326
+ } : null,
327
+ isMobile: isRightMobile,
328
+ isMobileOpen: openMobileSide === "right",
329
+ setMobileOpen: setRightMobileOpen,
269
330
  isFill: filledSide === "right",
270
331
  toggleFill: toggleRightFill,
271
332
  setFill: setRightFill,
@@ -274,7 +335,8 @@ const SidebarProvider = ({ children, defaultLeftMode = DEFAULT_SIDEBAR_MODE, lef
274
335
  width: rightDragWidth ?? rightWidth,
275
336
  collapsible: rightCollapsible,
276
337
  state: rightState.state,
277
- mode: rightState.mode
338
+ mode: rightState.mode,
339
+ isMobile: isRightMobile
278
340
  }),
279
341
  collapsible: rightCollapsible,
280
342
  variant: rightVariant,
@@ -285,6 +347,13 @@ const SidebarProvider = ({ children, defaultLeftMode = DEFAULT_SIDEBAR_MODE, lef
285
347
  setIsDragging: setIsRightDragging
286
348
  }
287
349
  }), [
350
+ isLeftMobile,
351
+ isRightMobile,
352
+ openMobileSide,
353
+ toggleLeftMobile,
354
+ setLeftMobileOpen,
355
+ toggleRightMobile,
356
+ setRightMobileOpen,
288
357
  leftState,
289
358
  filledSide,
290
359
  toggleLeftFill,
@@ -407,12 +476,32 @@ const SidebarMenuIcon = ({ ref, className, children, ...rest }) => /* @__PURE__
407
476
  children
408
477
  });
409
478
  //#endregion
479
+ //#region src/components/Sidebar/SidebarMenu/useDestinationDismiss.ts
480
+ /**
481
+ * A menu item's click handler: the caller's own, then (on a phone) dismissing the sheet.
482
+ *
483
+ * - Not a destination, so no dismissal:
484
+ * - A popup opener (`aria-haspopup` / `aria-expanded`) — closing would take the popup too.
485
+ * - `data-sidebar-trigger` — its `toggle` runs after this and would reopen the sheet.
486
+ */
487
+ const useDestinationDismiss = (props, onClick) => {
488
+ const { side } = useSidebarInstance();
489
+ const { isMobile, setMobileOpen } = useSidebar(side);
490
+ const isDestination = props["aria-haspopup"] === void 0 && props["aria-expanded"] === void 0 && props["data-sidebar-trigger"] === void 0;
491
+ return (event) => {
492
+ onClick?.(event);
493
+ if (isMobile && isDestination) setMobileOpen(false);
494
+ };
495
+ };
496
+ //#endregion
410
497
  //#region src/components/Sidebar/SidebarMenu/SidebarMenuButton.tsx
411
- const SidebarMenuButton = ({ ref, "aria-selected": selected, className, children, asChild = false, icon, tooltip, ...props }) => {
498
+ const SidebarMenuButton = ({ ref, "aria-selected": selected, className, children, asChild = false, icon, tooltip, onClick, ...props }) => {
412
499
  const Component = asChild ? Root : "button";
413
500
  const { state, mode, side } = useSidebarInstance();
501
+ const handleClick = useDestinationDismiss(props, onClick);
414
502
  const button = /* @__PURE__ */ jsxs(Component, {
415
503
  ...props,
504
+ onClick: handleClick,
416
505
  ref,
417
506
  "data-slot": "sidebar-menu-button",
418
507
  ...asChild ? {} : { type: "button" },
@@ -605,8 +694,9 @@ const SidebarMenuSub = ({ children, icon, isActive = false, label, defaultOpen =
605
694
  };
606
695
  //#endregion
607
696
  //#region src/components/Sidebar/SidebarMenu/SidebarMenuSubItem.tsx
608
- const SidebarMenuSubItem = ({ ref, className, asChild = false, children, disabled, "aria-current": ariaCurrent, ...props }) => {
697
+ const SidebarMenuSubItem = ({ ref, className, asChild = false, children, disabled, onClick, "aria-current": ariaCurrent, ...props }) => {
609
698
  const { mode } = useSidebarInstance();
699
+ const handleClick = useDestinationDismiss(props, onClick);
610
700
  if (mode === "collapsed" || mode === "expand-on-hover") return /* @__PURE__ */ jsx(DropdownMenu.Item, {
611
701
  "aria-current": ariaCurrent,
612
702
  asChild,
@@ -618,6 +708,7 @@ const SidebarMenuSubItem = ({ ref, className, asChild = false, children, disable
618
708
  className: "tw:group/sidebar-menu-sub-item tw:relative",
619
709
  children: /* @__PURE__ */ jsx(asChild ? Root : "button", {
620
710
  ...props,
711
+ onClick: handleClick,
621
712
  ref,
622
713
  "aria-current": ariaCurrent,
623
714
  "data-slot": "sidebar-menu-sub-button",
@@ -725,22 +816,26 @@ const SidebarSeparator = ({ className, ...props }) => /* @__PURE__ */ jsx(Separa
725
816
  //#endregion
726
817
  //#region src/components/Sidebar/SidebarTrigger.tsx
727
818
  const SidebarTrigger = ({ side = "left", onClick, hideWhenCollapsed = false, className, ...rest }) => {
728
- const { toggle } = useSidebar(side);
819
+ const { toggle, state, isMobile, isMobileOpen } = useSidebar(side);
729
820
  const handleOnClick = (event) => {
730
821
  toggle();
731
822
  onClick?.(event);
732
823
  };
733
824
  return /* @__PURE__ */ jsx(Slot, {
734
825
  ...rest,
826
+ "aria-expanded": isMobile ? isMobileOpen : state === "expanded",
827
+ ...isMobile ? { "aria-haspopup": "dialog" } : null,
828
+ "data-sidebar-trigger": "",
735
829
  onClick: handleOnClick,
736
830
  className: cn({ "tw:group-data-[state=collapsed]/sidebar:hidden": hideWhenCollapsed }, className)
737
831
  });
738
832
  };
739
833
  //#endregion
740
834
  //#region src/components/Sidebar/Sidebar.tsx
741
- const Sidebar = ({ children, className, id, side = "left", style, container = false, keepMounted, mountAfterEnter, resizable = false, ...rest }) => {
835
+ const Sidebar = ({ children, className, id, side = "left", style, container = false, keepMounted, mountAfterEnter, resizable = false, mobileTitle, ...rest }) => {
742
836
  const oppositeSide = side === "left" ? "right" : "left";
743
- const { setSidebarElement, state, mode, isFill, widths, collapsible, variant, isDragging } = useSidebar(side);
837
+ const { setSidebarElement, state, mode, isFill, widths, collapsible, variant, isDragging, isMobile, isMobileOpen, setMobileOpen } = useSidebar(side);
838
+ const themeScopeContainer = useThemeScopeContainer();
744
839
  const { isMounted, completeUnmount } = useTransitionPresence({
745
840
  mounted: collapsible !== "off-canvas" || mode !== "collapsed",
746
841
  keepMounted,
@@ -756,6 +851,23 @@ const Sidebar = ({ children, className, id, side = "left", style, container = fa
756
851
  mode,
757
852
  side
758
853
  ]);
854
+ const focusOriginRef = useRef(null);
855
+ useEffect(() => {
856
+ if (!isMobile || isMobileOpen) return;
857
+ const remember = (event) => {
858
+ if (event.target instanceof HTMLElement) focusOriginRef.current = event.target;
859
+ };
860
+ document.addEventListener("focusin", remember);
861
+ return () => document.removeEventListener("focusin", remember);
862
+ }, [isMobile, isMobileOpen]);
863
+ const wasSheetUpRef = useRef(false);
864
+ useEffect(() => {
865
+ const wasSheetUp = wasSheetUpRef.current;
866
+ wasSheetUpRef.current = isMobile && isMobileOpen;
867
+ if (!wasSheetUp || isMobile) return;
868
+ const origin = focusOriginRef.current;
869
+ if (origin?.isConnected) origin.focus();
870
+ }, [isMobile, isMobileOpen]);
759
871
  const handleTransitionEnd = (event) => {
760
872
  if (event.target !== event.currentTarget) return;
761
873
  completeUnmount();
@@ -768,18 +880,54 @@ const Sidebar = ({ children, className, id, side = "left", style, container = fa
768
880
  "--opposite-sidebar-width": `${oppositeWidths.fill}px`
769
881
  };
770
882
  if (variant === "none") return null;
883
+ const railAttributes = {
884
+ "data-state": state,
885
+ "data-side": side,
886
+ "data-mode": mode,
887
+ "data-collapsible": collapsible,
888
+ "data-variant": variant,
889
+ "data-fill": isFill
890
+ };
891
+ if (isMobile) return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(SidebarInstanceContext, {
892
+ value: sidebarInstanceContextValue,
893
+ children: /* @__PURE__ */ jsx(Sheet, {
894
+ open: isMobileOpen,
895
+ onOpenChange: setMobileOpen,
896
+ children: /* @__PURE__ */ jsxs(Sheet.Content, {
897
+ side,
898
+ container: themeScopeContainer ?? void 0,
899
+ className: "tw:w-[min(20rem,85vw)] tw:bg-sidebar tw:text-sidebar-foreground tw:p-0",
900
+ onCloseAutoFocus: (event) => {
901
+ const origin = focusOriginRef.current;
902
+ if (!origin?.isConnected) return;
903
+ event.preventDefault();
904
+ origin.focus();
905
+ },
906
+ children: [/* @__PURE__ */ jsx(Sheet.Title, {
907
+ visuallyHidden: true,
908
+ children: mobileTitle ?? (side === "left" ? "Navigation" : "Side panel")
909
+ }), /* @__PURE__ */ jsx("div", {
910
+ ...rest,
911
+ ...railAttributes,
912
+ id,
913
+ style,
914
+ className: cn("tw:flex tw:min-h-0 tw:flex-1 tw:flex-col", { "tw:group/sidebar tw:peer/sidebar": !container }, className),
915
+ children: /* @__PURE__ */ jsx("div", {
916
+ "data-slot": "sidebar",
917
+ className: cn("tw:bg-sidebar", "tw:relative", "tw:flex", "tw:flex-col", "tw:size-full", "tw:overflow-hidden", "tw:border-sidebar-border", "tw:group-[]/sidebar:pt-2"),
918
+ children
919
+ })
920
+ })]
921
+ })
922
+ })
923
+ }) });
771
924
  return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(SidebarInstanceContext, {
772
925
  value: sidebarInstanceContextValue,
773
926
  children: /* @__PURE__ */ jsxs("div", {
774
927
  ...rest,
928
+ ...railAttributes,
775
929
  id,
776
930
  ref: setSidebarElement,
777
- "data-state": state,
778
- "data-side": side,
779
- "data-mode": mode,
780
- "data-collapsible": collapsible,
781
- "data-variant": variant,
782
- "data-fill": isFill,
783
931
  style: styles,
784
932
  className: cn("tailwindcss-preflight", "tw:flex", "tw:relative", mode === "expand-on-hover" ? "tw:z-[51]" : "tw:z-50", { "tw:group/sidebar tw:peer/sidebar": !container }, "tw:[&>[data-slot=gap]]:w-(--sidebar-width-gap)", "tw:[&[data-side=right]>[data-slot=gap]]:rotate-180", "tw:[&>[data-slot=sidebar-wrapper]]:w-(--sidebar-width)", "tw:[&[data-side=left]>[data-slot=sidebar-wrapper]]:left-0", "tw:[&[data-side=right]>[data-slot=sidebar-wrapper]]:right-0", "tw:[&[data-state=collapsed][data-collapsible=off-canvas][data-side=left]>[data-slot=sidebar-wrapper]]:-translate-x-full", "tw:[&[data-state=collapsed][data-collapsible=off-canvas][data-side=right]>[data-slot=sidebar-wrapper]]:translate-x-full", "tw:[&[data-variant=sided-floating]>[data-slot=sidebar-wrapper]]:pt-(--sidebar-floating-padding)", "tw:[&[data-variant=sided-floating][data-side=left]>[data-slot=sidebar-wrapper]]:pr-(--sidebar-floating-padding)", "tw:[&[data-variant=sided-floating][data-side=right]>[data-slot=sidebar-wrapper]]:pl-(--sidebar-floating-padding)", "tw:[&[data-variant=floating]>[data-slot=sidebar-wrapper]]:p-(--sidebar-floating-padding)", "tw:[&[data-fill=true]>[data-slot=sidebar-wrapper]]:!w-[calc(100svw-var(--opposite-sidebar-width))]", "tw:[&[data-fill=true][data-variant=floating]>[data-slot=sidebar-wrapper]]:!p-(--sidebar-floating-padding)", "tw:[&[data-fill=true][data-variant=sided-floating][data-side=left]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:!rounded-tr-xl", "tw:[&[data-fill=true][data-variant=sided-floating][data-side=right]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:!rounded-tl-xl", "tw:[&[data-variant=inset][data-side=left]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:border-r", "tw:[&[data-variant=inset][data-side=right]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:border-l", "tw:[&[data-variant=floating]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:shadow", "tw:[&[data-variant=floating]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:rounded-xl", "tw:[&[data-variant=sided-floating]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:shadow", "tw:[&[data-variant=sided-floating][data-side=left]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:rounded-tr-xl", "tw:[&[data-variant=sided-floating][data-side=right]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:rounded-tl-xl", "tw:[&[data-variant=sided-floating][data-side=left]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:border-r", "tw:[&[data-variant=sided-floating][data-side=right]>[data-slot=sidebar-wrapper]>[data-slot=sidebar]]:border-l", isDragging ? "tw:transition-none" : "tw:transition-[width,translate,transform] tw:duration-(--sidebar-motion-duration) tw:ease-(--sidebar-motion-easing) tw:motion-reduce:transition-none"),
785
933
  children: [/* @__PURE__ */ jsx("div", {
@@ -822,4 +970,4 @@ Sidebar.SubItem = SidebarMenuSubItem;
822
970
  //#endregion
823
971
  export { Sidebar, SidebarProvider, useOptionalSidebar, useSidebar };
824
972
 
825
- //# sourceMappingURL=Sidebar-CTWsHZhF.js.map
973
+ //# sourceMappingURL=Sidebar-Ds0E6PbR.js.map