@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,9 +1,135 @@
1
- import { cn } from "./classNames-BzrkDnOD.js";
1
+ import { cn } from "./classNames-DcGnTh2N.js";
2
2
  import { useArgoDesign } from "./context-U293r3v-.js";
3
- import { Loader2 } from "./icons-wcA70iQx.js";
3
+ import { mergeRefs } from "./internal/utils/mergeRefs.js";
4
+ import { Loader2 } from "./icons-ZIeZXXS7.js";
5
+ import { Fragment, createElement, isValidElement, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
4
6
  import { Root, Slottable } from "@radix-ui/react-slot";
5
7
  import { cva } from "class-variance-authority";
6
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
+ //#region src/components/Button/motion.ts
10
+ const ends = (animation) => Number.isFinite(animation.effect?.getComputedTiming().endTime);
11
+ /** Runs `callback` once the finite `animations` have finished or been cancelled; returns a cancel. */
12
+ const afterAnimations = (animations, callback) => {
13
+ let isCurrent = true;
14
+ Promise.allSettled(animations.filter(ends).map((animation) => animation.finished)).then(() => {
15
+ if (isCurrent) callback();
16
+ });
17
+ return () => {
18
+ isCurrent = false;
19
+ };
20
+ };
21
+ let waiting = /* @__PURE__ */ new Set();
22
+ let framed = /* @__PURE__ */ new Set();
23
+ let isTicking = false;
24
+ const tick = () => {
25
+ for (const node of framed) if (node.isConnected) node.setAttribute("data-button-ready", "");
26
+ framed = waiting;
27
+ waiting = /* @__PURE__ */ new Set();
28
+ isTicking = framed.size > 0;
29
+ if (isTicking) requestAnimationFrame(tick);
30
+ };
31
+ /**
32
+ * Sets `data-button-ready` on `node` two frames after it mounts, arming its entry animations.
33
+ *
34
+ * - One shared frame loop serves every Button mounting at once.
35
+ * - Arming twice is a no-op, so a re-attached ref doesn't restart the countdown.
36
+ */
37
+ const armMotion = (node) => {
38
+ if (node.hasAttribute("data-button-ready") || waiting.has(node) || framed.has(node)) return;
39
+ waiting.add(node);
40
+ if (!isTicking) {
41
+ isTicking = true;
42
+ requestAnimationFrame(tick);
43
+ }
44
+ };
45
+ //#endregion
46
+ //#region src/components/Button/ButtonLabel.tsx
47
+ const isText = (node) => typeof node === "string" || typeof node === "number";
48
+ /** Milliseconds from a computed `transition-duration` such as `0.3s`. */
49
+ const toMs = (duration) => parseFloat(duration) * (duration.endsWith("ms") ? 1 : 1e3);
50
+ /**
51
+ * A button's text, rolled over when it changes.
52
+ *
53
+ * - The new text rolls in; the old one stays absolutely positioned while it rolls out.
54
+ * - The width animates from the old text's to the new one's, so neighbours slide instead of jumping.
55
+ * - Motion lives in `styles.css` under `[data-slot='button-label']`.
56
+ */
57
+ const ButtonLabel = ({ text }) => {
58
+ const ref = useRef(null);
59
+ const exitRef = useRef(null);
60
+ const interruptedWidthRef = useRef(null);
61
+ const [shown, setShown] = useState(text);
62
+ const [exiting, setExiting] = useState(null);
63
+ const [hasChanged, setHasChanged] = useState(false);
64
+ if (shown !== text) {
65
+ setShown(text);
66
+ setExiting(shown);
67
+ setHasChanged(true);
68
+ }
69
+ useLayoutEffect(() => {
70
+ const node = ref.current;
71
+ const from = interruptedWidthRef.current ?? exitRef.current?.offsetWidth;
72
+ interruptedWidthRef.current = null;
73
+ if (!node || !from || !node.closest("[data-button-ready]")) return;
74
+ const to = node.offsetWidth;
75
+ if (Math.abs(to - from) < .5 || window.matchMedia?.("(prefers-reduced-motion: reduce)").matches) return;
76
+ const { transitionDuration, transitionTimingFunction } = getComputedStyle(node);
77
+ const animation = node.animate?.([{
78
+ width: `${from}px`,
79
+ overflowX: "clip",
80
+ textAlign: "start"
81
+ }, {
82
+ width: `${to}px`,
83
+ overflowX: "clip",
84
+ textAlign: "start"
85
+ }], {
86
+ duration: toMs(transitionDuration),
87
+ easing: transitionTimingFunction
88
+ });
89
+ return () => {
90
+ if (animation?.playState === "running") interruptedWidthRef.current = node.offsetWidth;
91
+ animation?.cancel();
92
+ };
93
+ }, [text]);
94
+ useEffect(() => {
95
+ const node = exitRef.current;
96
+ if (!node) return;
97
+ return afterAnimations(node.getAnimations?.() ?? [], () => setExiting(null));
98
+ }, [exiting]);
99
+ if (!hasChanged) return text;
100
+ return /* @__PURE__ */ jsxs("span", {
101
+ ref,
102
+ "data-slot": "button-label",
103
+ children: [/* @__PURE__ */ jsx("span", {
104
+ "data-slot": "button-label-text",
105
+ children: text
106
+ }, text), exiting !== null && /* @__PURE__ */ jsx("span", {
107
+ ref: exitRef,
108
+ "aria-hidden": true,
109
+ "data-slot": "button-label-exit",
110
+ children: exiting
111
+ }, exiting)]
112
+ });
113
+ };
114
+ /**
115
+ * `children` with each run of text wrapped in a `ButtonLabel`.
116
+ *
117
+ * - Positions are kept: a joined run leaves `null` behind, so siblings keep their identity.
118
+ * - Whitespace-only text stays bare: as a span it would become a flex item and take a gap.
119
+ */
120
+ const withLabels = (children) => {
121
+ if (isValidElement(children) && children.type === Fragment) return withLabels(children.props.children);
122
+ const items = Array.isArray(children) ? children : [children];
123
+ const wrapped = items.map((item, index) => {
124
+ if (!isText(item)) return item;
125
+ if (index > 0 && isText(items[index - 1])) return null;
126
+ let text = "";
127
+ for (let i = index; i < items.length && isText(items[i]); i++) text += String(items[i]);
128
+ return text.trim() ? /* @__PURE__ */ jsx(ButtonLabel, { text }, index) : text;
129
+ });
130
+ return createElement(Fragment, null, ...wrapped);
131
+ };
132
+ //#endregion
7
133
  //#region src/components/Button/styles.ts
8
134
  const variants = cva([
9
135
  "tailwindcss-preflight",
@@ -190,12 +316,12 @@ const argoVariants = cva([
190
316
  "tw:!outline-hidden",
191
317
  "tw:focus-visible:ring-2",
192
318
  "tw:disabled:cursor-not-allowed",
193
- "tw:disabled:opacity-50",
319
+ "tw:disabled:opacity-disabled",
194
320
  "tw:active:opacity-60",
195
321
  "tw:transition-all",
196
322
  "tw:!no-underline",
197
323
  "tw:aria-disabled:cursor-not-allowed",
198
- "tw:aria-disabled:opacity-50",
324
+ "tw:aria-disabled:opacity-disabled",
199
325
  "tw:shrink-0",
200
326
  "tw:[&_svg]:pointer-events-none",
201
327
  "tw:[&_svg]:shrink-0",
@@ -303,6 +429,12 @@ const argoVariants = cva([
303
429
  });
304
430
  //#endregion
305
431
  //#region src/components/Button/Button.tsx
432
+ /** The children that render anything, looking through arrays and fragments. */
433
+ const renderedChildren = (node) => {
434
+ if (Array.isArray(node)) return node.flatMap(renderedChildren);
435
+ if (isValidElement(node) && node.type === Fragment) return renderedChildren(node.props.children);
436
+ return node == null || typeof node === "boolean" || typeof node === "string" && !node.trim() ? [] : [node];
437
+ };
306
438
  /**
307
439
  * Any user-initiated action; `size="icon-*"` with no children is the icon-only button.
308
440
  *
@@ -327,6 +459,57 @@ const Button = ({ ref, children, disabled = false, className, type = "button", i
327
459
  block,
328
460
  className
329
461
  });
462
+ const content = asChild && isValidElement(children) ? children.props.children : children;
463
+ const rendered = renderedChildren(content);
464
+ const leadsWithElement = isValidElement(rendered[0]);
465
+ const elementTypes = rendered.flatMap((child) => isValidElement(child) ? [child.type] : []);
466
+ const [prev, setPrev] = useState({
467
+ leadsWithElement,
468
+ elementTypes
469
+ });
470
+ const [spinnerEnter, setSpinnerEnter] = useState(isLoading ? "fade" : null);
471
+ const [iconEnter, setIconEnter] = useState("fade");
472
+ const placement = isIconOnly ? "center" : leadsWithElement ? "leading" : "inline";
473
+ if (isLoading && !spinnerEnter) setSpinnerEnter(placement === "inline" && !prev.leadsWithElement ? "grow" : "fade");
474
+ const typesChanged = prev.elementTypes.length !== elementTypes.length || prev.elementTypes.some((type, index) => type !== elementTypes[index]);
475
+ if (typesChanged || prev.leadsWithElement !== leadsWithElement) setPrev({
476
+ leadsWithElement,
477
+ elementTypes
478
+ });
479
+ if (typesChanged) setIconEnter(elementTypes.length > prev.elementTypes.length && !isLoading && !spinnerEnter ? "grow" : "fade");
480
+ const spinnerRef = useRef(null);
481
+ useEffect(() => {
482
+ const node = spinnerRef.current;
483
+ if (isLoading || !node) return;
484
+ return afterAnimations(node.getAnimations?.() ?? [], () => setSpinnerEnter(null));
485
+ }, [isLoading]);
486
+ useLayoutEffect(() => {
487
+ const slot = spinnerRef.current;
488
+ const button = slot?.offsetParent;
489
+ if (!slot || !button || placement !== "leading") return;
490
+ const centre = () => {
491
+ const icon = slot.nextElementSibling;
492
+ if (!(icon instanceof SVGElement)) return;
493
+ const [iconBox, buttonBox] = [icon.getBoundingClientRect(), button.getBoundingClientRect()];
494
+ const scale = buttonBox.width / (button instanceof HTMLElement ? button.offsetWidth : 1) || 1;
495
+ const x = (iconBox.left - buttonBox.left + iconBox.width / 2) / scale - button.clientLeft;
496
+ slot.style.left = `${x - parseFloat(getComputedStyle(slot).width) / 2}px`;
497
+ };
498
+ centre();
499
+ if (typeof ResizeObserver === "undefined") return;
500
+ const observer = new ResizeObserver(centre);
501
+ observer.observe(button);
502
+ return () => observer.disconnect();
503
+ }, [placement, spinnerEnter]);
504
+ const buttonRef = useRef(null);
505
+ const armRef = useCallback((node) => node ? armMotion(node) : void 0, []);
506
+ const mergedRef = useMemo(() => mergeRefs(ref, buttonRef, armRef), [ref, armRef]);
507
+ useEffect(() => {
508
+ const node = buttonRef.current;
509
+ if (iconEnter !== "grow" || !node) return;
510
+ const entries = [...node.querySelectorAll(":scope > svg")].flatMap((icon) => icon.getAnimations?.() ?? []);
511
+ return afterAnimations(entries, () => setIconEnter("fade"));
512
+ }, [iconEnter]);
330
513
  const handleClick = (event) => {
331
514
  if (event.currentTarget.tagName === "A" && disabled) {
332
515
  event.preventDefault();
@@ -336,15 +519,24 @@ const Button = ({ ref, children, disabled = false, className, type = "button", i
336
519
  };
337
520
  return /* @__PURE__ */ jsxs(Comp, {
338
521
  ...buttonProps,
339
- ref,
522
+ ref: mergedRef,
340
523
  disabled,
341
524
  "aria-disabled": buttonProps["aria-disabled"] ?? disabled,
342
525
  "data-variant": variant,
343
526
  "data-icon-only": isIconOnly,
527
+ "data-icon-enter": iconEnter,
344
528
  type,
345
529
  onClick: handleClick,
346
530
  className: cn(classNames),
347
- children: [isLoading && /* @__PURE__ */ jsx(Loader2, { className: "tw:size-4 tw:shrink-0 tw:animate-spin" }), /* @__PURE__ */ jsx(Slottable, { children: isLoading && isIconOnly ? null : children })]
531
+ children: [spinnerEnter && /* @__PURE__ */ jsx("span", {
532
+ ref: spinnerRef,
533
+ "aria-hidden": true,
534
+ "data-slot": "button-spinner",
535
+ "data-state": isLoading ? "open" : "closed",
536
+ "data-placement": placement,
537
+ "data-enter": spinnerEnter,
538
+ children: /* @__PURE__ */ jsx(Loader2, { className: "tw:animate-spin" })
539
+ }), /* @__PURE__ */ jsx(Slottable, { children: asChild ? children : withLabels(children) })]
348
540
  });
349
541
  };
350
542
  //#endregion
@@ -406,4 +598,4 @@ const ButtonInline = ({ ref, children, className, variant, color, type = "button
406
598
  //#endregion
407
599
  export { Button, ButtonInline, argoVariants };
408
600
 
409
- //# sourceMappingURL=Button-B21oVcPU.js.map
601
+ //# sourceMappingURL=Button-D2JqBAq7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button-D2JqBAq7.js","names":[],"sources":["../src/components/Button/motion.ts","../src/components/Button/ButtonLabel.tsx","../src/components/Button/styles.ts","../src/components/Button/Button.tsx","../src/components/Button/ButtonInline.tsx"],"sourcesContent":["const ends = (animation: Animation) =>\n Number.isFinite(animation.effect?.getComputedTiming().endTime);\n\n/** Runs `callback` once the finite `animations` have finished or been cancelled; returns a cancel. */\nexport const afterAnimations = (animations: Animation[], callback: () => void) => {\n let isCurrent = true;\n Promise.allSettled(animations.filter(ends).map((animation) => animation.finished)).then(() => {\n if (isCurrent) callback();\n });\n return () => {\n isCurrent = false;\n };\n};\n\nlet waiting = new Set<Element>();\nlet framed = new Set<Element>();\nlet isTicking = false;\n\nconst tick = () => {\n for (const node of framed) if (node.isConnected) node.setAttribute('data-button-ready', '');\n framed = waiting;\n waiting = new Set();\n isTicking = framed.size > 0;\n if (isTicking) requestAnimationFrame(tick);\n};\n\n/**\n * Sets `data-button-ready` on `node` two frames after it mounts, arming its entry animations.\n *\n * - One shared frame loop serves every Button mounting at once.\n * - Arming twice is a no-op, so a re-attached ref doesn't restart the countdown.\n */\nexport const armMotion = (node: Element) => {\n if (node.hasAttribute('data-button-ready') || waiting.has(node) || framed.has(node)) return;\n waiting.add(node);\n if (!isTicking) {\n isTicking = true;\n requestAnimationFrame(tick);\n }\n};\n","import {\n createElement,\n Fragment,\n isValidElement,\n type ReactNode,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { afterAnimations } from './motion';\n\nconst isText = (node: ReactNode): node is string | number =>\n typeof node === 'string' || typeof node === 'number';\n\n/** Milliseconds from a computed `transition-duration` such as `0.3s`. */\nconst toMs = (duration: string) => parseFloat(duration) * (duration.endsWith('ms') ? 1 : 1000);\n\n/**\n * A button's text, rolled over when it changes.\n *\n * - The new text rolls in; the old one stays absolutely positioned while it rolls out.\n * - The width animates from the old text's to the new one's, so neighbours slide instead of jumping.\n * - Motion lives in `styles.css` under `[data-slot='button-label']`.\n */\nconst ButtonLabel = ({ text }: { text: string }) => {\n const ref = useRef<HTMLSpanElement>(null);\n const exitRef = useRef<HTMLSpanElement>(null);\n const interruptedWidthRef = useRef<number | null>(null);\n const [shown, setShown] = useState(text);\n const [exiting, setExiting] = useState<string | null>(null);\n const [hasChanged, setHasChanged] = useState(false);\n if (shown !== text) {\n setShown(text);\n setExiting(shown);\n setHasChanged(true);\n }\n\n useLayoutEffect(() => {\n const node = ref.current;\n // An interrupted animation's on-screen width, else the outgoing text's, still in the DOM.\n const from = interruptedWidthRef.current ?? exitRef.current?.offsetWidth;\n interruptedWidthRef.current = null;\n if (!node || !from || !node.closest('[data-button-ready]')) return;\n\n const to = node.offsetWidth;\n if (\n Math.abs(to - from) < 0.5 ||\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n )\n return;\n\n const { transitionDuration, transitionTimingFunction } = getComputedStyle(node);\n const animation = node.animate?.(\n [\n { width: `${from}px`, overflowX: 'clip', textAlign: 'start' },\n { width: `${to}px`, overflowX: 'clip', textAlign: 'start' },\n ],\n { duration: toMs(transitionDuration), easing: transitionTimingFunction },\n );\n return () => {\n if (animation?.playState === 'running') {\n interruptedWidthRef.current = node.offsetWidth;\n }\n animation?.cancel();\n };\n }, [text]);\n\n useEffect(() => {\n const node = exitRef.current;\n if (!node) return;\n return afterAnimations(node.getAnimations?.() ?? [], () => setExiting(null));\n }, [exiting]);\n\n // Bare text until the first change, so an unchanged button keeps its markup.\n if (!hasChanged) return text;\n\n return (\n <span ref={ref} data-slot=\"button-label\">\n <span key={text} data-slot=\"button-label-text\">\n {text}\n </span>\n {exiting !== null && (\n <span key={exiting} ref={exitRef} aria-hidden data-slot=\"button-label-exit\">\n {exiting}\n </span>\n )}\n </span>\n );\n};\n\n/**\n * `children` with each run of text wrapped in a `ButtonLabel`.\n *\n * - Positions are kept: a joined run leaves `null` behind, so siblings keep their identity.\n * - Whitespace-only text stays bare: as a span it would become a flex item and take a gap.\n */\nexport const withLabels = (children: ReactNode): ReactNode => {\n if (isValidElement<{ children?: ReactNode }>(children) && children.type === Fragment) {\n return withLabels(children.props.children);\n }\n const items = Array.isArray(children) ? children : [children];\n const wrapped = items.map((item: ReactNode, index) => {\n if (!isText(item)) return item;\n if (index > 0 && isText(items[index - 1])) return null;\n\n let text = '';\n for (let i = index; i < items.length && isText(items[i]); i++) text += String(items[i]);\n return text.trim() ? <ButtonLabel key={index} text={text} /> : text;\n });\n return createElement(Fragment, null, ...wrapped);\n};\n","import { cva } from 'class-variance-authority';\n\n// Opaque tints use `bg-[color-mix(in_oklab,rgb(var(--tint))_N%,rgb(var(--base)))]`, not `bg-<token>/N`.\n//\n// - `bg-<token>/N` mixes into `transparent`, showing whatever the button overlaps.\n// - Raw `--*` triples: `--color-*` exist at build time only; unresolved → `transparent`.\n// - Write the whole class literally — Tailwind scans source; assembled strings get no CSS.\n\nexport const variants = cva(\n [\n 'tailwindcss-preflight',\n 'tw:group/button',\n 'tw:border-box',\n\n // layout\n 'tw:relative',\n 'tw:flex',\n 'tw:items-center',\n 'tw:justify-center',\n 'tw:gap-2',\n\n // text — weight/tracking are brand tokens; only `keboola-legacy-*` brands uppercase\n 'tw:text-xs',\n 'tw:leading-5',\n 'tw:font-medium',\n 'tw:[[data-brand^=keboola-legacy]_&]:tracking-chrome',\n 'tw:[[data-brand^=keboola-legacy]_&]:uppercase',\n\n // border — legacy (non-argo) chrome uses a fixed radius, not the brand token.\n 'tw:rounded',\n 'tw:border',\n 'tw:border-transparent',\n\n // styling\n 'tw:shadow-none',\n 'tw:[a]:cursor-pointer', // explicitly set for anchor\n\n 'tw:focus-visible:outline',\n 'tw:focus-visible:outline-1',\n 'tw:focus-visible:-outline-offset-1',\n 'tw:focus-visible:outline-ring',\n 'tw:focus-visible:ring-4',\n 'tw:focus-visible:ring-ring/30',\n\n // disabled\n 'tw:disabled:opacity-40',\n 'tw:disabled:cursor-not-allowed',\n\n // anchor support\n 'tw:!no-underline',\n 'tw:aria-disabled:opacity-40',\n 'tw:aria-disabled:cursor-not-allowed',\n\n 'tw:[&_svg]:shrink-0',\n ],\n {\n defaultVariants: {\n size: 'medium',\n variant: 'primary',\n block: false,\n },\n variants: {\n block: {\n true: ['tw:w-full'],\n },\n variant: {\n primary: [\n 'tw:text-white',\n 'tw:bg-primary-500',\n\n 'tw:focus:text-white',\n 'tw:hover:text-white',\n 'tw:hover:not-disabled:bg-primary-600',\n 'tw:active:not-disabled:bg-primary-800',\n\n // anchor disabled override\n 'tw:aria-disabled:!bg-primary-500',\n ],\n secondary: [\n 'tw:text-white',\n 'tw:bg-secondary-500',\n\n 'tw:focus:text-white',\n 'tw:hover:text-white',\n 'tw:hover:not-disabled:bg-secondary-700',\n 'tw:active:not-disabled:bg-secondary-800',\n\n // anchor disabled override\n 'tw:aria-disabled:!bg-secondary-500',\n ],\n // Kai's actions: its gradient, three light pools drifting behind the label.\n kai: [\n 'tw:bg-kai',\n 'tw:animate-kai-drift',\n 'tw:motion-reduce:animate-none',\n 'tw:text-white',\n 'tw:hover:text-white',\n 'tw:focus:text-white',\n 'tw:hover:not-disabled:brightness-110',\n 'tw:focus-visible:ring-ring/50',\n ],\n danger: [\n 'tw:text-white',\n 'tw:bg-error-500',\n\n 'tw:focus:text-white',\n 'tw:hover:text-white',\n 'tw:hover:not-disabled:bg-error-600',\n 'tw:active:not-disabled:bg-error-700',\n\n // anchor disabled override\n 'tw:aria-disabled:!bg-error-500',\n ],\n // Tokens, not the fixed neutral scale: a transparent button cannot assume a light page.\n invisible: [\n 'tw:text-foreground',\n 'tw:bg-transparent',\n\n 'tw:focus:text-foreground',\n 'tw:hover:not-disabled:bg-muted',\n 'tw:hover:text-foreground',\n 'tw:active:not-disabled:bg-secondary',\n\n // contrasting icon on hover/active\n 'tw:[&_svg]:text-neutral-400',\n 'tw:hover:not-disabled:[&_svg]:text-secondary-600',\n 'tw:active:not-disabled:[&_svg]:text-secondary-600',\n\n // anchor disabled override\n 'tw:aria-disabled:!bg-transparent',\n ],\n outline: [\n 'tw:text-foreground',\n 'tw:bg-card',\n // border\n 'tw:!border-input',\n 'tw:hover:text-foreground',\n 'tw:focus:text-foreground',\n // Hover/pressed are `muted-foreground` tints: `bg-muted` is 4/255 from `bg-card` in dark.\n //\n // - Fills mix into `--card`: unchanged on a card, opaque off one.\n // - Border tints `transparent`: no `bg-clip-padding`, so it composites over the fill.\n 'tw:hover:not-disabled:!border-muted-foreground/60',\n 'tw:hover:not-disabled:bg-[color-mix(in_oklab,rgb(var(--muted-foreground))_15%,rgb(var(--card)))]',\n 'tw:active:not-disabled:bg-[color-mix(in_oklab,rgb(var(--muted-foreground))_35%,rgb(var(--card)))]',\n\n // contrasting icon hover, same as invisible\n 'tw:[&_svg]:text-muted-foreground',\n 'tw:not-disabled:hover:[&_svg]:text-secondary-600',\n 'tw:active:not-disabled:[&_svg]:text-secondary-600',\n\n // anchor disabled override\n 'tw:aria-disabled:!bg-card',\n 'tw:aria-disabled:!border-input',\n ],\n\n inline: [\n 'tw:text-foreground',\n 'tw:bg-transparent',\n 'tw:rounded-full',\n\n 'tw:[&_svg]:text-muted-foreground',\n 'tw:not-disabled:hover:[&_svg]:text-secondary-600',\n 'tw:not-disabled:focus:[&_svg]:text-secondary-600',\n ],\n },\n size: {\n medium: [\n 'tw:max-h-10',\n 'tw:min-h-10',\n 'tw:px-4',\n 'tw:py-2.5',\n 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4',\n ],\n small: [\n 'tw:max-h-8',\n 'tw:min-h-8',\n 'tw:px-4',\n 'tw:py-1.5',\n 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4',\n ],\n large: [\n 'tw:max-h-12',\n 'tw:min-h-12',\n 'tw:px-4',\n 'tw:py-3.5',\n 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4',\n ],\n\n 'icon-lg': ['tw:size-12', 'tw:p-0', 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-6'],\n icon: ['tw:size-10', 'tw:p-0', 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4'],\n 'icon-sm': ['tw:size-8', 'tw:p-0', 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4'],\n 'icon-xs': ['tw:size-6', 'tw:p-0', 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4'],\n 'icon-2xs': [\n 'tw:!inline-flex',\n 'tw:size-5',\n 'tw:max-h-5',\n 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-3',\n ],\n 'icon-3xs': ['tw:h-fit', 'tw:w-fit', 'tw:[&_svg:not([class*=\"tw:size-\"])]:size-4'],\n },\n },\n },\n);\n\nexport const argoVariants = cva(\n [\n 'tailwindcss-preflight',\n\n // layout\n 'tw:relative',\n 'tw:inline-flex',\n 'tw:items-center',\n 'tw:justify-center',\n 'tw:whitespace-nowrap',\n 'tw:gap-2',\n\n // border\n 'tw:border',\n 'tw:border-transparent',\n 'tw:rounded-[var(--radius-lg,0.25rem)]',\n\n // text\n 'tw:font-medium',\n 'tw:select-none',\n\n // focus visible\n 'tw:!outline-hidden',\n 'tw:focus-visible:ring-2',\n\n // disabled\n 'tw:disabled:cursor-not-allowed',\n 'tw:disabled:opacity-disabled',\n 'tw:active:opacity-60',\n\n 'tw:transition-all',\n\n // anchor support\n 'tw:!no-underline',\n 'tw:aria-disabled:cursor-not-allowed',\n 'tw:aria-disabled:opacity-disabled',\n\n // icon\n 'tw:shrink-0',\n 'tw:[&_svg]:pointer-events-none',\n 'tw:[&_svg]:shrink-0',\n \"tw:[&_svg:not([class*='tw:size-'])]:size-4\",\n ],\n {\n defaultVariants: {\n variant: 'primary',\n size: 'medium',\n },\n variants: {\n block: {\n true: ['tw:w-full'],\n },\n variant: {\n primary: [\n 'tw:bg-primary',\n 'tw:text-primary-foreground',\n 'tw:[a]:hover:bg-primary/80',\n 'tw:hover:not-disabled:bg-primary/90',\n 'tw:hover:text-primary-foreground',\n 'tw:focus:text-primary-foreground',\n\n 'tw:focus-visible:border-primary',\n 'tw:focus-visible:ring-ring/50',\n ],\n secondary: [\n 'tw:bg-primary/10',\n 'tw:text-primary',\n 'tw:hover:not-disabled:bg-primary/20',\n\n 'tw:focus-visible:border-primary',\n 'tw:focus-visible:ring-ring/50',\n ],\n\n // should be called \"destructive\" by Figma\n // Kai's actions: its gradient, three light pools drifting behind the label.\n kai: [\n 'tw:bg-kai',\n 'tw:animate-kai-drift',\n 'tw:motion-reduce:animate-none',\n 'tw:text-white',\n 'tw:hover:text-white',\n 'tw:focus:text-white',\n 'tw:hover:not-disabled:brightness-110',\n 'tw:focus-visible:ring-ring/50',\n ],\n danger: [\n 'tw:bg-destructive',\n 'tw:text-destructive-foreground',\n 'tw:hover:not-disabled:bg-destructive/90',\n 'tw:hover:text-destructive-foreground',\n 'tw:focus:text-destructive-foreground',\n\n 'tw:focus-visible:border-destructive',\n 'tw:focus-visible:ring-destructive/20',\n ],\n outline: [\n 'tw:!border-input',\n 'tw:bg-background',\n 'tw:bg-clip-padding',\n // Semantic text color so the label/icon flips in dark mode (matches `invisible`).\n 'tw:text-foreground',\n // Hover hue comes from the brand primary, not the fixed `accent` blue.\n //\n // - Fill mixes into `--background`: `bg-clip-padding` gives a translucent fill no backing.\n // - The *chrome* border carries the state (fill is ~1.5:1); `--primary` is for `focus-visible`.\n // - Border is solid, not a tint: its contrast would depend on the call site.\n 'tw:hover:not-disabled:bg-[color-mix(in_oklab,rgb(var(--primary))_10%,rgb(var(--background)))]',\n 'tw:hover:not-disabled:!border-muted-foreground',\n 'tw:hover:not-disabled:text-primary',\n 'tw:hover:active:bg-background',\n 'tw:focus-visible:!border-primary',\n 'tw:focus-visible:ring-ring/50',\n ],\n\n // should be called \"ghost\" by Figma\n invisible: [\n 'tw:bg-transparent',\n 'tw:bg-clip-padding',\n 'tw:text-foreground',\n 'tw:hover:not-disabled:bg-primary/10',\n 'tw:hover:not-disabled:text-primary',\n 'tw:hover:not-disabled:border-primary/10',\n\n 'tw:focus-visible:ring-ring/50',\n ],\n // should be called \"link\" by Figma\n inline: [\n 'tw:bg-transparent',\n 'tw:text-primary',\n 'tw:hover:underline',\n 'tw:hover:active:bg-transparent',\n 'tw:focus-visible:ring-ring/50',\n ],\n },\n size: {\n // should be called \"default\" by Figma\n medium: ['tw:max-h-9', 'tw:py-2', 'tw:px-4', 'tw:text-sm'],\n // should be called \"small\" by Figma\n small: ['tw:max-h-8', 'tw:py-2', 'tw:px-3', 'tw:text-xs'],\n // should be called \"large\" by Figma\n large: ['tw:max-h-10', 'tw:py-2.5', 'tw:px-6', 'tw:text-sm'],\n\n 'icon-lg': ['tw:size-10'],\n icon: ['tw:size-9'],\n 'icon-sm': ['tw:size-8'],\n 'icon-xs': ['tw:size-6'],\n // unsupported in ARGO, remove when old design is gone\n 'icon-2xs': [],\n 'icon-3xs': [],\n },\n },\n },\n);\n","import {\n type ComponentProps,\n Fragment,\n isValidElement,\n type ReactNode,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Root, Slottable } from '@radix-ui/react-slot';\nimport type { VariantProps } from 'class-variance-authority';\n\nimport { Loader2 } from '../../icons';\nimport { cn, mergeRefs } from '../../utils';\nimport { useArgoDesign } from '../ThemeProvider/context';\n\nimport { withLabels } from './ButtonLabel';\nimport { afterAnimations, armMotion } from './motion';\nimport { argoVariants, variants } from './styles';\n\n/** Props for `Button`; icons are composed as children. */\ntype Props = {\n /** Shows a spinner in place of the leading icon, or before the label when there is none. The caller still controls `disabled`. */\n isLoading?: boolean;\n /** Render as a Radix `Slot` so the parent JSX (e.g. a `react-router` `<Link>`) becomes the button element. */\n asChild?: boolean;\n} & ComponentProps<'button'> &\n VariantProps<typeof variants>;\n\n/** The children that render anything, looking through arrays and fragments. */\nconst renderedChildren = (node: ReactNode): ReactNode[] => {\n if (Array.isArray(node)) return node.flatMap(renderedChildren);\n if (isValidElement<{ children?: ReactNode }>(node) && node.type === Fragment) {\n return renderedChildren(node.props.children);\n }\n const isBlank =\n node == null || typeof node === 'boolean' || (typeof node === 'string' && !node.trim());\n return isBlank ? [] : [node];\n};\n\n/**\n * Any user-initiated action; `size=\"icon-*\"` with no children is the icon-only button.\n *\n * - Not for: inline text links (`ButtonInline`), URL navigation (`Link`), action + dropdown (`SplitButton`).\n * - Wrap in `Tooltip` when icon-only or disabled; `Popconfirm` for destructive actions.\n *\n * @see RECIPES.md#disabled-button-tooltip\n * @see RECIPES.md#confirm-dialog\n */\nexport const Button = ({\n ref,\n children,\n disabled = false,\n className,\n type = 'button',\n isLoading = false,\n asChild = false,\n onClick,\n variant = 'primary',\n size = 'medium',\n block = false,\n ...buttonProps\n}: Props) => {\n const renderArgo = useArgoDesign();\n const Comp = asChild ? Root : 'button';\n const isIconOnly = String(size).startsWith('icon');\n const classNames = renderArgo\n ? argoVariants({ variant, size, block, className })\n : variants({ size, variant, block, className });\n\n const content =\n asChild && isValidElement<{ children?: ReactNode }>(children)\n ? children.props.children\n : children;\n const rendered = renderedChildren(content);\n const leadsWithElement = isValidElement(rendered[0]);\n const elementTypes = rendered.flatMap((child) => (isValidElement(child) ? [child.type] : []));\n\n // The previous render's children, which decide how the spinner and a new icon enter.\n const [prev, setPrev] = useState({ leadsWithElement, elementTypes });\n const [spinnerEnter, setSpinnerEnter] = useState<'grow' | 'fade' | null>(\n isLoading ? 'fade' : null,\n );\n const [iconEnter, setIconEnter] = useState<'grow' | 'fade'>('fade');\n const placement = isIconOnly ? 'center' : leadsWithElement ? 'leading' : 'inline';\n\n if (isLoading && !spinnerEnter) {\n // `fade` also when the caller dropped its leading icon this render: the spinner takes that icon's place.\n setSpinnerEnter(placement === 'inline' && !prev.leadsWithElement ? 'grow' : 'fade');\n }\n const typesChanged =\n prev.elementTypes.length !== elementTypes.length ||\n prev.elementTypes.some((type, index) => type !== elementTypes[index]);\n if (typesChanged || prev.leadsWithElement !== leadsWithElement) {\n setPrev({ leadsWithElement, elementTypes });\n }\n if (typesChanged) {\n const isAdded = elementTypes.length > prev.elementTypes.length;\n setIconEnter(isAdded && !isLoading && !spinnerEnter ? 'grow' : 'fade');\n }\n\n // The spinner stays mounted through its exit transition and unmounts when that ends.\n const spinnerRef = useRef<HTMLSpanElement>(null);\n useEffect(() => {\n const node = spinnerRef.current;\n if (isLoading || !node) return;\n return afterAnimations(node.getAnimations?.() ?? [], () => setSpinnerEnter(null));\n }, [isLoading]);\n\n // A leading spinner is kept centred over the leading icon while the button resizes.\n useLayoutEffect(() => {\n const slot = spinnerRef.current;\n const button = slot?.offsetParent;\n if (!slot || !button || placement !== 'leading') return;\n const centre = () => {\n const icon = slot.nextElementSibling;\n if (!(icon instanceof SVGElement)) return;\n const [iconBox, buttonBox] = [icon.getBoundingClientRect(), button.getBoundingClientRect()];\n const scale = buttonBox.width / (button instanceof HTMLElement ? button.offsetWidth : 1) || 1;\n const x = (iconBox.left - buttonBox.left + iconBox.width / 2) / scale - button.clientLeft;\n slot.style.left = `${x - parseFloat(getComputedStyle(slot).width) / 2}px`;\n };\n centre();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(centre);\n observer.observe(button);\n return () => observer.disconnect();\n }, [placement, spinnerEnter]);\n\n // `data-button-ready` arms the entry animations a frame after mount, so nothing animates on page load.\n const buttonRef = useRef<HTMLButtonElement>(null);\n const armRef = useCallback(\n (node: HTMLButtonElement | null) => (node ? armMotion(node) : undefined),\n [],\n );\n const mergedRef = useMemo(() => mergeRefs(ref, buttonRef, armRef), [ref, armRef]);\n\n // `grow` lasts only through the entry, so a later rotation or swap keeps the default origin.\n useEffect(() => {\n const node = buttonRef.current;\n if (iconEnter !== 'grow' || !node) return;\n const entries = [...node.querySelectorAll(':scope > svg')].flatMap(\n (icon) => icon.getAnimations?.() ?? [],\n );\n return afterAnimations(entries, () => setIconEnter('fade'));\n }, [iconEnter]);\n\n const handleClick: ComponentProps<'button'>['onClick'] = (event) => {\n const isAnchor = event.currentTarget.tagName === 'A';\n\n // <a/> does not support disabled by default, and we cannot use pointer-events: none because cursor-not-allowed would not work.\n if (isAnchor && disabled) {\n event.preventDefault();\n return;\n }\n\n onClick?.(event);\n };\n\n return (\n <Comp\n {...buttonProps}\n ref={mergedRef}\n disabled={disabled}\n // An explicit `aria-disabled` wins: unavailable yet focusable, unlike `disabled`.\n aria-disabled={buttonProps['aria-disabled'] ?? disabled}\n data-variant={variant}\n // Icon-only flag; `ButtonGroup space=\"block\"` stretches only non-icon children.\n data-icon-only={isIconOnly}\n data-icon-enter={iconEnter}\n type={type}\n onClick={handleClick}\n className={cn(classNames)}\n >\n {spinnerEnter && (\n // Motion lives in `styles.css` under `[data-slot='button-spinner']`.\n <span\n ref={spinnerRef}\n aria-hidden\n data-slot=\"button-spinner\"\n data-state={isLoading ? 'open' : 'closed'}\n data-placement={placement}\n data-enter={spinnerEnter}\n >\n <Loader2 className=\"tw:animate-spin\" />\n </span>\n )}\n <Slottable>{asChild ? children : withLabels(children)}</Slottable>\n </Comp>\n );\n};\n","import type { ComponentProps } from 'react';\nimport { Root } from '@radix-ui/react-slot';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cva } from 'class-variance-authority';\n\nconst buttonInlineVariants = cva(\n [\n 'tailwindcss-preflight',\n\n 'tw:inline-flex',\n 'tw:items-center',\n 'tw:gap-2',\n\n 'tw:underline-offset-2',\n\n 'tw:disabled:opacity-40',\n 'tw:disabled:cursor-not-allowed',\n 'tw:disabled:text-neutral-500',\n 'tw:disabled:no-underline',\n 'tw:disabled:[&_svg]:text-neutral-400',\n\n // Default size for nested Lucide icons; callers can override on the icon.\n \"tw:[&_svg.lucide:not([class*='tw:size-'])]:size-4\",\n 'tw:[&_svg]:shrink-0',\n ],\n {\n defaultVariants: {\n variant: 'link',\n color: 'link',\n },\n variants: {\n color: {\n link: ['tw:text-primary', 'tw:hover:text-primary/90', 'tw:[&_svg]:text-primary'],\n dark: ['tw:text-foreground tw:[&_svg]:text-muted-foreground'],\n danger: ['tw:text-error-500 tw:[&_svg]:text-error-500'],\n muted: ['tw:text-muted-foreground tw:[&_svg]:text-muted-foreground'],\n custom: [],\n },\n variant: {\n link: ['tw:underline', 'tw:hover:no-underline'],\n 'link-reverse': ['tw:no-underline', '', 'tw:hover:underline'],\n custom: [],\n },\n },\n },\n);\n\ntype Props = ComponentProps<'button'> &\n VariantProps<typeof buttonInlineVariants> & { asChild?: boolean };\n\nexport const ButtonInline = ({\n ref,\n children,\n className,\n variant,\n color,\n type = 'button',\n asChild = false,\n ...buttonProps\n}: Props) => {\n const Comp = asChild ? Root : 'button';\n\n return (\n <Comp\n {...buttonProps}\n ref={ref}\n type={asChild ? undefined : type}\n className={buttonInlineVariants({ variant, color, className })}\n >\n {children}\n </Comp>\n );\n};\n"],"mappings":"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,KAAK,IAAI,oBAAC,aAAD,EAA+B,KAAO,GAApB,KAAoB,IAAI;CACjE,CAAC;CACD,OAAO,cAAc,UAAU,MAAM,GAAG,OAAO;AACjD;;;ACxGA,MAAa,WAAW,IACtB;CACE;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CAGA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CAGA;CACA;CACA;CAEA;AACF,GACA;CACE,iBAAiB;EACf,MAAM;EACN,SAAS;EACT,OAAO;CACT;CACA,UAAU;EACR,OAAO,EACL,MAAM,CAAC,WAAW,EACpB;EACA,SAAS;GACP,SAAS;IACP;IACA;IAEA;IACA;IACA;IACA;IAGA;GACF;GACA,WAAW;IACT;IACA;IAEA;IACA;IACA;IACA;IAGA;GACF;GAEA,KAAK;IACH;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF;GACA,QAAQ;IACN;IACA;IAEA;IACA;IACA;IACA;IAGA;GACF;GAEA,WAAW;IACT;IACA;IAEA;IACA;IACA;IACA;IAGA;IACA;IACA;IAGA;GACF;GACA,SAAS;IACP;IACA;IAEA;IACA;IACA;IAKA;IACA;IACA;IAGA;IACA;IACA;IAGA;IACA;GACF;GAEA,QAAQ;IACN;IACA;IACA;IAEA;IACA;IACA;GACF;EACF;EACA,MAAM;GACJ,QAAQ;IACN;IACA;IACA;IACA;IACA;GACF;GACA,OAAO;IACL;IACA;IACA;IACA;IACA;GACF;GACA,OAAO;IACL;IACA;IACA;IACA;IACA;GACF;GAEA,WAAW;IAAC;IAAc;IAAU;GAA4C;GAChF,MAAM;IAAC;IAAc;IAAU;GAA4C;GAC3E,WAAW;IAAC;IAAa;IAAU;GAA4C;GAC/E,WAAW;IAAC;IAAa;IAAU;GAA4C;GAC/E,YAAY;IACV;IACA;IACA;IACA;GACF;GACA,YAAY;IAAC;IAAY;IAAY;GAA4C;EACnF;CACF;AACF,CACF;AAEA,MAAa,eAAe,IAC1B;CACE;CAGA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;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"}
@@ -1,5 +1,5 @@
1
1
  import { __exportAll } from "./rolldown-runtime-Bdc48AWt.js";
2
- import { cn } from "./classNames-BzrkDnOD.js";
2
+ import { cn } from "./classNames-DcGnTh2N.js";
3
3
  import React, { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region ../../node_modules/.pnpm/@date-fns+tz@1.4.1/node_modules/@date-fns/tz/tzName/index.js
@@ -6740,7 +6740,7 @@ const rangePickerClassNames = {
6740
6740
  range_start: `tw:bg-primary tw:rounded-r-none tw:font-medium tw:border-primary tw:hover:bg-primary/90 tw:hover:border-primary/90 tw:text-primary-foreground`,
6741
6741
  range_end: `tw:bg-primary tw:rounded-l-none tw:font-medium tw:border-primary tw:hover:bg-primary/90 tw:hover:border-primary/90 tw:text-primary-foreground`,
6742
6742
  selected: `tw:font-medium tw:rounded`,
6743
- range_middle: `tw:bg-accent tw:border-accent tw:text-accent-foreground tw:rounded-none tw:font-medium`
6743
+ range_middle: `tw:bg-selected tw:border-selected tw:text-selected-foreground tw:rounded-none tw:font-medium`
6744
6744
  };
6745
6745
  const Calendar = ({ className, classNames, ...props }) => {
6746
6746
  const defaultClassNames = getDefaultClassNames();
@@ -6750,7 +6750,7 @@ const Calendar = ({ className, classNames, ...props }) => {
6750
6750
  className: cn(className, "tw:p-3"),
6751
6751
  classNames: {
6752
6752
  chevron: `${defaultClassNames.chevron} tw:fill-foreground`,
6753
- day: `${defaultClassNames.day} tw:hover:bg-accent tw:rounded`,
6753
+ day: `${defaultClassNames.day} tw:hover:bg-hover tw:rounded`,
6754
6754
  day_button: `${defaultClassNames.day_button} tw:rounded`,
6755
6755
  today: `tw:bg-accent tw:text-accent-foreground tw:font-medium`,
6756
6756
  ...dayPickerClassNames,
@@ -6765,4 +6765,4 @@ Calendar.displayName = "Calendar";
6765
6765
  //#endregion
6766
6766
  export { Calendar };
6767
6767
 
6768
- //# sourceMappingURL=Calendar-DFtmZzbF.js.map
6768
+ //# sourceMappingURL=Calendar-BnKi1kPu.js.map