@keboola/design 14.0.0 → 15.1.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 (303) hide show
  1. package/AGENTS.md +11 -23
  2. package/CHANGELOG.md +58 -0
  3. package/COMPONENT-API.md +109 -115
  4. package/dist/{AIKit-BRSZ3nY7.js → AIKit-BR6jfsdI.js} +69 -35
  5. package/dist/AIKit-BR6jfsdI.js.map +1 -0
  6. package/dist/{Alert-CZ0dDsuk.js → Alert-Chz6KZ7e.js} +11 -20
  7. package/dist/Alert-Chz6KZ7e.js.map +1 -0
  8. package/dist/{AlertModal-BDle9ZVQ.js → AlertModal-DMsn62JJ.js} +16 -36
  9. package/dist/AlertModal-DMsn62JJ.js.map +1 -0
  10. package/dist/{AppShell-B03fj1j7.js → AppShell-C8V1KRr_.js} +2 -2
  11. package/dist/{AppShell-B03fj1j7.js.map → AppShell-C8V1KRr_.js.map} +1 -1
  12. package/dist/{AutoSaveTextarea-jiqNeeE4.js → AutoSaveTextarea-BbMhC5Aq.js} +3 -3
  13. package/dist/AutoSaveTextarea-BbMhC5Aq.js.map +1 -0
  14. package/dist/{Badge-Ba3epgcI.js → Badge-CqlOE5A2.js} +23 -12
  15. package/dist/Badge-CqlOE5A2.js.map +1 -0
  16. package/dist/{BrandEditor-CN2HJ_12.js → BrandEditor-D61pzWRq.js} +7 -9
  17. package/dist/BrandEditor-D61pzWRq.js.map +1 -0
  18. package/dist/{BrandLogo-BfITD0im.js → BrandLogo-DkESE19K.js} +2 -2
  19. package/dist/{BrandLogo-BfITD0im.js.map → BrandLogo-DkESE19K.js.map} +1 -1
  20. package/dist/{Breadcrumb-BnIlsoIH.js → Breadcrumb-DbqvDnYl.js} +4 -4
  21. package/dist/{Breadcrumb-BnIlsoIH.js.map → Breadcrumb-DbqvDnYl.js.map} +1 -1
  22. package/dist/{Button-D2JqBAq7.js → Button-BNkyYU8u.js} +9 -185
  23. package/dist/Button-BNkyYU8u.js.map +1 -0
  24. package/dist/{Card-Bpc_ZlL4.js → Card-DxjGiqH8.js} +11 -18
  25. package/dist/Card-DxjGiqH8.js.map +1 -0
  26. package/dist/{Checkbox-uFE8XLT_.js → Checkbox-CHDDJyAA.js} +20 -45
  27. package/dist/Checkbox-CHDDJyAA.js.map +1 -0
  28. package/dist/{Clipboard-D-9XOqy4.js → Clipboard-DlwVZS1P.js} +2 -2
  29. package/dist/{Clipboard-D-9XOqy4.js.map → Clipboard-DlwVZS1P.js.map} +1 -1
  30. package/dist/{ClipboardButton-DxvZG_H0.js → ClipboardButton-B1Hr_n_Z.js} +3 -3
  31. package/dist/{ClipboardButton-DxvZG_H0.js.map → ClipboardButton-B1Hr_n_Z.js.map} +1 -1
  32. package/dist/{CodeEditor-BfRSCKEs.js → CodeEditor-DVSPdfdo.js} +24 -31
  33. package/dist/CodeEditor-DVSPdfdo.js.map +1 -0
  34. package/dist/{ColorInput-CDKH8q_f.js → ColorInput-B_eZIu39.js} +5 -7
  35. package/dist/ColorInput-B_eZIu39.js.map +1 -0
  36. package/dist/{ColorModeSwitch-DR6J2U6M.js → ColorModeSwitch-BlrH8jAi.js} +3 -3
  37. package/dist/{ColorModeSwitch-DR6J2U6M.js.map → ColorModeSwitch-BlrH8jAi.js.map} +1 -1
  38. package/dist/{Combobox-CEesMe2M.js → Combobox-BLqX-Tdh.js} +16 -24
  39. package/dist/Combobox-BLqX-Tdh.js.map +1 -0
  40. package/dist/{Command-T3MLRaen.js → Command-DhXmqFLT.js} +46 -32
  41. package/dist/Command-DhXmqFLT.js.map +1 -0
  42. package/dist/{CopyField-CNbCHw9a.js → CopyField-D0Pg4Z0R.js} +2 -2
  43. package/dist/{CopyField-CNbCHw9a.js.map → CopyField-D0Pg4Z0R.js.map} +1 -1
  44. package/dist/{DateInput-ClK1lCxz.js → DateInput-duinbI9_.js} +5 -7
  45. package/dist/DateInput-duinbI9_.js.map +1 -0
  46. package/dist/{DatePicker-CgHAu9KX.js → DatePicker-Cg_aG_N4.js} +2 -2
  47. package/dist/{DatePicker-CgHAu9KX.js.map → DatePicker-Cg_aG_N4.js.map} +1 -1
  48. package/dist/{DateRangeInput-DtlAffS1.js → DateRangeInput-BYVHf9zo.js} +5 -7
  49. package/dist/DateRangeInput-BYVHf9zo.js.map +1 -0
  50. package/dist/{DateRangePicker-CXpXPMoh.js → DateRangePicker-m47cSV1r.js} +7 -12
  51. package/dist/DateRangePicker-m47cSV1r.js.map +1 -0
  52. package/dist/{DropdownMenu-B1gGvZoh.js → DropdownMenu-Bum99mVf.js} +35 -64
  53. package/dist/DropdownMenu-Bum99mVf.js.map +1 -0
  54. package/dist/{FieldItem-CYvJyjiI.js → FieldItem-BHUqgSO1.js} +3 -3
  55. package/dist/{FieldItem-CYvJyjiI.js.map → FieldItem-BHUqgSO1.js.map} +1 -1
  56. package/dist/{FileUpload-D6vPG3WB.js → FileUpload-BYFONpEl.js} +3 -3
  57. package/dist/FileUpload-BYFONpEl.js.map +1 -0
  58. package/dist/{Form-CD55zJiy.js → Form-Dqbt_tIs.js} +8 -8
  59. package/dist/{Form-CD55zJiy.js.map → Form-Dqbt_tIs.js.map} +1 -1
  60. package/dist/{FormGroup-DiYFdEhH.js → FormGroup-V5kIgQRN.js} +3 -3
  61. package/dist/{FormGroup-DiYFdEhH.js.map → FormGroup-V5kIgQRN.js.map} +1 -1
  62. package/dist/{FullScreenModal-CUuAakh3.js → FullScreenModal-DAvvlGOz.js} +2 -5
  63. package/dist/FullScreenModal-DAvvlGOz.js.map +1 -0
  64. package/dist/HoverCard-Cf9iYyaW.js +26 -0
  65. package/dist/HoverCard-Cf9iYyaW.js.map +1 -0
  66. package/dist/{InlineEdit-D5RdunZo.js → InlineEdit-D4P0SvCB.js} +5 -9
  67. package/dist/InlineEdit-D4P0SvCB.js.map +1 -0
  68. package/dist/{InputGroup-Dm014ruw.js → InputGroup-CZv_7QlM.js} +39 -146
  69. package/dist/InputGroup-CZv_7QlM.js.map +1 -0
  70. package/dist/{Kbd-3YM7NQO4.js → Kbd-CflKthfu.js} +5 -14
  71. package/dist/Kbd-CflKthfu.js.map +1 -0
  72. package/dist/{MermaidDiagram-CeiOkI60.js → MermaidDiagram-2-EuNu1i.js} +4 -4
  73. package/dist/{MermaidDiagram-CeiOkI60.js.map → MermaidDiagram-2-EuNu1i.js.map} +1 -1
  74. package/dist/{Modal-DMZRswk4.js → Modal-DwuvuiUx.js} +17 -36
  75. package/dist/Modal-DwuvuiUx.js.map +1 -0
  76. package/dist/{ModalTitle-CTECVgL8.js → ModalTitle-RGWwIMU6.js} +3 -3
  77. package/dist/ModalTitle-RGWwIMU6.js.map +1 -0
  78. package/dist/{MultiActionButtonGroup-CEv_txvz.js → MultiActionButtonGroup-Dzig87s1.js} +3 -3
  79. package/dist/{MultiActionButtonGroup-CEv_txvz.js.map → MultiActionButtonGroup-Dzig87s1.js.map} +1 -1
  80. package/dist/{Navbar-CtVYcRFn.js → Navbar-DHUS7XiU.js} +2 -2
  81. package/dist/{Navbar-CtVYcRFn.js.map → Navbar-DHUS7XiU.js.map} +1 -1
  82. package/dist/OtpInput-CY8yCaJk.js.map +1 -1
  83. package/dist/{PageToolbar-B_e7HGva.js → PageToolbar-LKP6PiP_.js} +4 -4
  84. package/dist/{PageToolbar-B_e7HGva.js.map → PageToolbar-LKP6PiP_.js.map} +1 -1
  85. package/dist/{Pagination-DDp6PRqf.js → Pagination-D27x5KmH.js} +2 -2
  86. package/dist/{Pagination-DDp6PRqf.js.map → Pagination-D27x5KmH.js.map} +1 -1
  87. package/dist/{Popconfirm-BgV6a0sl.js → Popconfirm-p72DiagN.js} +3 -3
  88. package/dist/{Popconfirm-BgV6a0sl.js.map → Popconfirm-p72DiagN.js.map} +1 -1
  89. package/dist/{Popover-BU7nGOv-.js → Popover-DnBw5Uay.js} +25 -38
  90. package/dist/Popover-DnBw5Uay.js.map +1 -0
  91. package/dist/{RadioGroup-C8EC3fqO.js → RadioGroup-B0TwHjBb.js} +9 -13
  92. package/dist/RadioGroup-B0TwHjBb.js.map +1 -0
  93. package/dist/{Search-aaUMI4ix.js → Search-vyZwGKMU.js} +3 -3
  94. package/dist/{Search-aaUMI4ix.js.map → Search-vyZwGKMU.js.map} +1 -1
  95. package/dist/{SearchInput-Dxi2GK4n.js → SearchInput-DyYXyw3u.js} +4 -6
  96. package/dist/SearchInput-DyYXyw3u.js.map +1 -0
  97. package/dist/{SectionNav-BnHOMLtE.js → SectionNav-6hcIpZLO.js} +5 -5
  98. package/dist/{SectionNav-BnHOMLtE.js.map → SectionNav-6hcIpZLO.js.map} +1 -1
  99. package/dist/{Select-CjQgU_6K.js → Select-C6zKeip5.js} +11 -25
  100. package/dist/Select-C6zKeip5.js.map +1 -0
  101. package/dist/{Sheet-utw4_rUa.js → Sheet-DKG20J7W.js} +13 -16
  102. package/dist/Sheet-DKG20J7W.js.map +1 -0
  103. package/dist/{Sidebar-BAmux2Uj.js → Sidebar-BlYqasnX.js} +11 -11
  104. package/dist/Sidebar-BlYqasnX.js.map +1 -0
  105. package/dist/{Slider-DbzzSDRV.js → Slider-DrcsM8_G.js} +4 -4
  106. package/dist/Slider-DrcsM8_G.js.map +1 -0
  107. package/dist/{Stepper-BBPembeK.js → Stepper-CQrUPVFL.js} +2 -2
  108. package/dist/Stepper-CQrUPVFL.js.map +1 -0
  109. package/dist/Switch-DccpSpzC.js +66 -0
  110. package/dist/Switch-DccpSpzC.js.map +1 -0
  111. package/dist/{Tabs-C0uvkPHc.js → Tabs-Ck4uWf8U.js} +2 -2
  112. package/dist/{Tabs-C0uvkPHc.js.map → Tabs-Ck4uWf8U.js.map} +1 -1
  113. package/dist/{TextInput-K2DSDs5O.js → TextInput-CR0_USaY.js} +4 -7
  114. package/dist/TextInput-CR0_USaY.js.map +1 -0
  115. package/dist/{ThemeProvider-C8yaKlM1.js → ThemeProvider-BTK7AL-T.js} +21 -8
  116. package/dist/ThemeProvider-BTK7AL-T.js.map +1 -0
  117. package/dist/{TimePicker-DyyV3nw8.js → TimePicker-lk3NGqeK.js} +2 -2
  118. package/dist/{TimePicker-DyyV3nw8.js.map → TimePicker-lk3NGqeK.js.map} +1 -1
  119. package/dist/{Toast-BGnUL4jV.js → Toast-937n7n8i.js} +2 -2
  120. package/dist/{Toast-BGnUL4jV.js.map → Toast-937n7n8i.js.map} +1 -1
  121. package/dist/{ToggleAllTooltip-Dlmq-yqS.js → ToggleAllTooltip-DEjbWFoj.js} +2 -2
  122. package/dist/{ToggleAllTooltip-Dlmq-yqS.js.map → ToggleAllTooltip-DEjbWFoj.js.map} +1 -1
  123. package/dist/Workbench-CxgNCs3I.js.map +1 -1
  124. package/dist/{ZoomableSvg-Dh1OstPN.js → ZoomableSvg-CxXKanUR.js} +5 -5
  125. package/dist/{ZoomableSvg-Dh1OstPN.js.map → ZoomableSvg-CxXKanUR.js.map} +1 -1
  126. package/dist/editors.js +4 -4
  127. package/dist/flint.js +4 -4
  128. package/dist/index.d.ts +113 -125
  129. package/dist/index.js +61 -61
  130. package/dist/internal/blocks/AIKit.js +1 -1
  131. package/dist/internal/blocks/AppShell.js +1 -1
  132. package/dist/internal/blocks/AuthLayout.js +1 -1
  133. package/dist/internal/blocks/AutoSaveTextarea.js +1 -1
  134. package/dist/internal/blocks/BrandEditor.js +1 -1
  135. package/dist/internal/blocks/ChartPanel.js +1 -1
  136. package/dist/internal/blocks/ChipEditor.js +5 -9
  137. package/dist/internal/blocks/ChipEditor.js.map +1 -1
  138. package/dist/internal/blocks/ClipboardButton.js +1 -1
  139. package/dist/internal/blocks/ColorInput.js +1 -1
  140. package/dist/internal/blocks/ColorModeSwitch.js +1 -1
  141. package/dist/internal/blocks/Command.js +1 -1
  142. package/dist/internal/blocks/CopyField.js +1 -1
  143. package/dist/internal/blocks/DateInput.js +1 -1
  144. package/dist/internal/blocks/DateRangeInput.js +1 -1
  145. package/dist/internal/blocks/EmptyConfigurationActionCard.js +1 -1
  146. package/dist/internal/blocks/ErrorState.js +18 -29
  147. package/dist/internal/blocks/ErrorState.js.map +1 -1
  148. package/dist/internal/blocks/ExportMenu.js +3 -3
  149. package/dist/internal/blocks/ExportMenu.js.map +1 -1
  150. package/dist/internal/blocks/Form/connectors/ComboboxField.js +2 -2
  151. package/dist/internal/blocks/Form/connectors/MultiComboboxField.js +1 -1
  152. package/dist/internal/blocks/Form.js +1 -1
  153. package/dist/internal/blocks/FormGroup.js +1 -1
  154. package/dist/internal/blocks/InlineEdit.js +1 -1
  155. package/dist/internal/blocks/MultiActionButtonGroup.js +1 -1
  156. package/dist/internal/blocks/MultiCombobox.js +5 -9
  157. package/dist/internal/blocks/MultiCombobox.js.map +1 -1
  158. package/dist/internal/blocks/NumberInput.js +2 -4
  159. package/dist/internal/blocks/NumberInput.js.map +1 -1
  160. package/dist/internal/blocks/PageToolbar.js +1 -1
  161. package/dist/internal/blocks/PasswordInput.js +3 -5
  162. package/dist/internal/blocks/PasswordInput.js.map +1 -1
  163. package/dist/internal/blocks/SearchInput.js +1 -1
  164. package/dist/internal/blocks/SearchInputWithNavigation.js +6 -7
  165. package/dist/internal/blocks/SearchInputWithNavigation.js.map +1 -1
  166. package/dist/internal/blocks/SectionNav.js +1 -1
  167. package/dist/internal/blocks/SplitButton.js +2 -2
  168. package/dist/internal/blocks/StatCard.js +1 -1
  169. package/dist/internal/blocks/TextInput.js +1 -1
  170. package/dist/internal/blocks/Textarea.js +3 -8
  171. package/dist/internal/blocks/Textarea.js.map +1 -1
  172. package/dist/internal/blocks/TimeInput.js +4 -6
  173. package/dist/internal/blocks/TimeInput.js.map +1 -1
  174. package/dist/internal/components/Alert.js +1 -1
  175. package/dist/internal/components/AlertModal.js +1 -1
  176. package/dist/internal/components/Avatar.js +1 -1
  177. package/dist/internal/components/Badge.js +1 -1
  178. package/dist/internal/components/BrandLogo.js +1 -1
  179. package/dist/internal/components/Breadcrumb.js +1 -1
  180. package/dist/internal/components/Button.js +2 -2
  181. package/dist/internal/components/ButtonGroup.js +1 -1
  182. package/dist/internal/components/ButtonGroup.js.map +1 -1
  183. package/dist/internal/components/Card.js +1 -1
  184. package/dist/internal/components/Checkbox.js +1 -1
  185. package/dist/internal/components/Clipboard.js +1 -1
  186. package/dist/internal/components/CollapsiblePanel.js +1 -1
  187. package/dist/internal/components/Combobox.js +1 -1
  188. package/dist/internal/components/DatePicker.js +1 -1
  189. package/dist/internal/components/DateRangePicker.js +1 -1
  190. package/dist/internal/components/DropdownMenu.js +1 -1
  191. package/dist/internal/components/FileUpload.js +1 -1
  192. package/dist/internal/components/FullScreenModal.js +1 -1
  193. package/dist/internal/components/HoverCard.js +1 -1
  194. package/dist/internal/components/InputGroup.js +1 -1
  195. package/dist/internal/components/Kbd.js +1 -1
  196. package/dist/internal/components/Modal.js +1 -1
  197. package/dist/internal/components/Navbar.js +1 -1
  198. package/dist/internal/components/Pagination.js +1 -1
  199. package/dist/internal/components/Popconfirm.js +1 -1
  200. package/dist/internal/components/Popover.js +1 -1
  201. package/dist/internal/components/RadioGroup.js +1 -1
  202. package/dist/internal/components/Search.js +1 -1
  203. package/dist/internal/components/Select.js +1 -1
  204. package/dist/internal/components/Sheet.js +1 -1
  205. package/dist/internal/components/Sidebar.js +1 -1
  206. package/dist/internal/components/Skeleton/Skeleton.js +1 -1
  207. package/dist/internal/components/Skeleton/Skeleton.js.map +1 -1
  208. package/dist/internal/components/Slider.js +1 -1
  209. package/dist/internal/components/Stepper.js +1 -1
  210. package/dist/internal/components/Switch.js +1 -1
  211. package/dist/internal/components/Tabs.js +1 -1
  212. package/dist/internal/components/ThemeProvider.js +3 -4
  213. package/dist/internal/components/TimePicker.js +1 -1
  214. package/dist/internal/components/Toast.js +2 -2
  215. package/dist/internal/components/Toggle.js +13 -3
  216. package/dist/internal/components/Toggle.js.map +1 -1
  217. package/dist/internal/components/Tooltip.js +1 -1
  218. package/dist/internal/components/Truncated.js +1 -1
  219. package/dist/internal/components/ZoomableSvg.js +1 -1
  220. package/dist/internal/hooks/useTimeout.js +19 -0
  221. package/dist/internal/hooks/useTimeout.js.map +1 -0
  222. package/dist/internal/utils.js +1 -1
  223. package/dist/markdown-editor.js +16 -18
  224. package/dist/markdown-editor.js.map +1 -1
  225. package/dist/mermaid.js +1 -1
  226. package/dist/rjsf.js +33 -42
  227. package/dist/rjsf.js.map +1 -1
  228. package/dist/styles-DxazJ8Mz.js +81 -0
  229. package/dist/styles-DxazJ8Mz.js.map +1 -0
  230. package/dist/styles-T8xwr0sR.js +73 -0
  231. package/dist/styles-T8xwr0sR.js.map +1 -0
  232. package/dist/styles.css +1 -1
  233. package/dist/testing.d.ts +0 -2
  234. package/dist/testing.js +3 -10
  235. package/dist/testing.js.map +1 -1
  236. package/dist/{useColorSchemeState-Cw4MCXUs.js → themeScopeContext-CEVXbYvZ.js} +43 -15
  237. package/dist/themeScopeContext-CEVXbYvZ.js.map +1 -0
  238. package/dist/{useThemeAttributes-B199Regy.js → themeTokens-DCeb62ap.js} +22 -4
  239. package/dist/themeTokens-DCeb62ap.js.map +1 -0
  240. package/dist/{toast-D6Z6MOB5.js → toast-Y3cTMBW8.js} +7 -10
  241. package/dist/toast-Y3cTMBW8.js.map +1 -0
  242. package/dist/{utils-LQ4jJA-9.js → utils-DwC9u0tM.js} +26 -52
  243. package/dist/utils-DwC9u0tM.js.map +1 -0
  244. package/dist/vega.js +2 -2
  245. package/dist/{vegaTheme-BrmVoPEz.js → vegaTheme-ISwGXvof.js} +2 -2
  246. package/dist/{vegaTheme-BrmVoPEz.js.map → vegaTheme-ISwGXvof.js.map} +1 -1
  247. package/dist/{vegaTokens-Ce07C0DH.js → vegaTokens-DCkvpIVE.js} +2 -2
  248. package/dist/{vegaTokens-Ce07C0DH.js.map → vegaTokens-DCkvpIVE.js.map} +1 -1
  249. package/package.json +2 -2
  250. package/src/styles.css +0 -35
  251. package/src/theme.css +46 -0
  252. package/dist/AIKit-BRSZ3nY7.js.map +0 -1
  253. package/dist/Alert-CZ0dDsuk.js.map +0 -1
  254. package/dist/AlertModal-BDle9ZVQ.js.map +0 -1
  255. package/dist/AutoSaveTextarea-jiqNeeE4.js.map +0 -1
  256. package/dist/Badge-Ba3epgcI.js.map +0 -1
  257. package/dist/BrandEditor-CN2HJ_12.js.map +0 -1
  258. package/dist/Button-D2JqBAq7.js.map +0 -1
  259. package/dist/Card-Bpc_ZlL4.js.map +0 -1
  260. package/dist/Checkbox-uFE8XLT_.js.map +0 -1
  261. package/dist/CodeEditor-BfRSCKEs.js.map +0 -1
  262. package/dist/ColorInput-CDKH8q_f.js.map +0 -1
  263. package/dist/Combobox-CEesMe2M.js.map +0 -1
  264. package/dist/Command-T3MLRaen.js.map +0 -1
  265. package/dist/DateInput-ClK1lCxz.js.map +0 -1
  266. package/dist/DateRangeInput-DtlAffS1.js.map +0 -1
  267. package/dist/DateRangePicker-CXpXPMoh.js.map +0 -1
  268. package/dist/DropdownMenu-B1gGvZoh.js.map +0 -1
  269. package/dist/FileUpload-D6vPG3WB.js.map +0 -1
  270. package/dist/FullScreenModal-CUuAakh3.js.map +0 -1
  271. package/dist/HoverCard-BBdPYqEf.js +0 -31
  272. package/dist/HoverCard-BBdPYqEf.js.map +0 -1
  273. package/dist/InlineEdit-D5RdunZo.js.map +0 -1
  274. package/dist/InputGroup-Dm014ruw.js.map +0 -1
  275. package/dist/Kbd-3YM7NQO4.js.map +0 -1
  276. package/dist/Modal-DMZRswk4.js.map +0 -1
  277. package/dist/ModalTitle-CTECVgL8.js.map +0 -1
  278. package/dist/Popover-BU7nGOv-.js.map +0 -1
  279. package/dist/RadioGroup-C8EC3fqO.js.map +0 -1
  280. package/dist/SearchInput-Dxi2GK4n.js.map +0 -1
  281. package/dist/Select-CjQgU_6K.js.map +0 -1
  282. package/dist/Sheet-utw4_rUa.js.map +0 -1
  283. package/dist/Sidebar-BAmux2Uj.js.map +0 -1
  284. package/dist/Slider-DbzzSDRV.js.map +0 -1
  285. package/dist/Stepper-BBPembeK.js.map +0 -1
  286. package/dist/Switch-Dw4tvQls.js +0 -201
  287. package/dist/Switch-Dw4tvQls.js.map +0 -1
  288. package/dist/TextInput-K2DSDs5O.js.map +0 -1
  289. package/dist/ThemeProvider-C8yaKlM1.js.map +0 -1
  290. package/dist/context-U293r3v-.js +0 -29
  291. package/dist/context-U293r3v-.js.map +0 -1
  292. package/dist/defaults-i_xG2F_1.js +0 -32
  293. package/dist/defaults-i_xG2F_1.js.map +0 -1
  294. package/dist/styles-BDA5rQz3.js +0 -127
  295. package/dist/styles-BDA5rQz3.js.map +0 -1
  296. package/dist/styles-YQdM7G8c.js +0 -159
  297. package/dist/styles-YQdM7G8c.js.map +0 -1
  298. package/dist/themeTokens-l2Fsfcs7.js +0 -22
  299. package/dist/themeTokens-l2Fsfcs7.js.map +0 -1
  300. package/dist/toast-D6Z6MOB5.js.map +0 -1
  301. package/dist/useColorSchemeState-Cw4MCXUs.js.map +0 -1
  302. package/dist/useThemeAttributes-B199Regy.js.map +0 -1
  303. package/dist/utils-LQ4jJA-9.js.map +0 -1
@@ -1,5 +1,4 @@
1
1
  import { cn } from "./classNames-DcGnTh2N.js";
2
- import { useArgoDesign } from "./context-U293r3v-.js";
3
2
  import { mergeRefs } from "./internal/utils/mergeRefs.js";
4
3
  import { Loader2 } from "./icons-ZIeZXXS7.js";
5
4
  import { Fragment, createElement, isValidElement, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
@@ -131,176 +130,7 @@ const withLabels = (children) => {
131
130
  };
132
131
  //#endregion
133
132
  //#region src/components/Button/styles.ts
134
- const variants = cva([
135
- "tailwindcss-preflight",
136
- "tw:group/button",
137
- "tw:border-box",
138
- "tw:relative",
139
- "tw:flex",
140
- "tw:items-center",
141
- "tw:justify-center",
142
- "tw:gap-2",
143
- "tw:text-xs",
144
- "tw:leading-5",
145
- "tw:font-medium",
146
- "tw:[[data-brand^=keboola-legacy]_&]:tracking-chrome",
147
- "tw:[[data-brand^=keboola-legacy]_&]:uppercase",
148
- "tw:rounded",
149
- "tw:border",
150
- "tw:border-transparent",
151
- "tw:shadow-none",
152
- "tw:[a]:cursor-pointer",
153
- "tw:focus-visible:outline",
154
- "tw:focus-visible:outline-1",
155
- "tw:focus-visible:-outline-offset-1",
156
- "tw:focus-visible:outline-ring",
157
- "tw:focus-visible:ring-4",
158
- "tw:focus-visible:ring-ring/30",
159
- "tw:disabled:opacity-40",
160
- "tw:disabled:cursor-not-allowed",
161
- "tw:!no-underline",
162
- "tw:aria-disabled:opacity-40",
163
- "tw:aria-disabled:cursor-not-allowed",
164
- "tw:[&_svg]:shrink-0"
165
- ], {
166
- defaultVariants: {
167
- size: "medium",
168
- variant: "primary",
169
- block: false
170
- },
171
- variants: {
172
- block: { true: ["tw:w-full"] },
173
- variant: {
174
- primary: [
175
- "tw:text-white",
176
- "tw:bg-primary-500",
177
- "tw:focus:text-white",
178
- "tw:hover:text-white",
179
- "tw:hover:not-disabled:bg-primary-600",
180
- "tw:active:not-disabled:bg-primary-800",
181
- "tw:aria-disabled:!bg-primary-500"
182
- ],
183
- secondary: [
184
- "tw:text-white",
185
- "tw:bg-secondary-500",
186
- "tw:focus:text-white",
187
- "tw:hover:text-white",
188
- "tw:hover:not-disabled:bg-secondary-700",
189
- "tw:active:not-disabled:bg-secondary-800",
190
- "tw:aria-disabled:!bg-secondary-500"
191
- ],
192
- kai: [
193
- "tw:bg-kai",
194
- "tw:animate-kai-drift",
195
- "tw:motion-reduce:animate-none",
196
- "tw:text-white",
197
- "tw:hover:text-white",
198
- "tw:focus:text-white",
199
- "tw:hover:not-disabled:brightness-110",
200
- "tw:focus-visible:ring-ring/50"
201
- ],
202
- danger: [
203
- "tw:text-white",
204
- "tw:bg-error-500",
205
- "tw:focus:text-white",
206
- "tw:hover:text-white",
207
- "tw:hover:not-disabled:bg-error-600",
208
- "tw:active:not-disabled:bg-error-700",
209
- "tw:aria-disabled:!bg-error-500"
210
- ],
211
- invisible: [
212
- "tw:text-foreground",
213
- "tw:bg-transparent",
214
- "tw:focus:text-foreground",
215
- "tw:hover:not-disabled:bg-muted",
216
- "tw:hover:text-foreground",
217
- "tw:active:not-disabled:bg-secondary",
218
- "tw:[&_svg]:text-neutral-400",
219
- "tw:hover:not-disabled:[&_svg]:text-secondary-600",
220
- "tw:active:not-disabled:[&_svg]:text-secondary-600",
221
- "tw:aria-disabled:!bg-transparent"
222
- ],
223
- outline: [
224
- "tw:text-foreground",
225
- "tw:bg-card",
226
- "tw:!border-input",
227
- "tw:hover:text-foreground",
228
- "tw:focus:text-foreground",
229
- "tw:hover:not-disabled:!border-muted-foreground/60",
230
- "tw:hover:not-disabled:bg-[color-mix(in_oklab,rgb(var(--muted-foreground))_15%,rgb(var(--card)))]",
231
- "tw:active:not-disabled:bg-[color-mix(in_oklab,rgb(var(--muted-foreground))_35%,rgb(var(--card)))]",
232
- "tw:[&_svg]:text-muted-foreground",
233
- "tw:not-disabled:hover:[&_svg]:text-secondary-600",
234
- "tw:active:not-disabled:[&_svg]:text-secondary-600",
235
- "tw:aria-disabled:!bg-card",
236
- "tw:aria-disabled:!border-input"
237
- ],
238
- inline: [
239
- "tw:text-foreground",
240
- "tw:bg-transparent",
241
- "tw:rounded-full",
242
- "tw:[&_svg]:text-muted-foreground",
243
- "tw:not-disabled:hover:[&_svg]:text-secondary-600",
244
- "tw:not-disabled:focus:[&_svg]:text-secondary-600"
245
- ]
246
- },
247
- size: {
248
- medium: [
249
- "tw:max-h-10",
250
- "tw:min-h-10",
251
- "tw:px-4",
252
- "tw:py-2.5",
253
- "tw:[&_svg:not([class*=\"tw:size-\"])]:size-4"
254
- ],
255
- small: [
256
- "tw:max-h-8",
257
- "tw:min-h-8",
258
- "tw:px-4",
259
- "tw:py-1.5",
260
- "tw:[&_svg:not([class*=\"tw:size-\"])]:size-4"
261
- ],
262
- large: [
263
- "tw:max-h-12",
264
- "tw:min-h-12",
265
- "tw:px-4",
266
- "tw:py-3.5",
267
- "tw:[&_svg:not([class*=\"tw:size-\"])]:size-4"
268
- ],
269
- "icon-lg": [
270
- "tw:size-12",
271
- "tw:p-0",
272
- "tw:[&_svg:not([class*=\"tw:size-\"])]:size-6"
273
- ],
274
- icon: [
275
- "tw:size-10",
276
- "tw:p-0",
277
- "tw:[&_svg:not([class*=\"tw:size-\"])]:size-4"
278
- ],
279
- "icon-sm": [
280
- "tw:size-8",
281
- "tw:p-0",
282
- "tw:[&_svg:not([class*=\"tw:size-\"])]:size-4"
283
- ],
284
- "icon-xs": [
285
- "tw:size-6",
286
- "tw:p-0",
287
- "tw:[&_svg:not([class*=\"tw:size-\"])]:size-4"
288
- ],
289
- "icon-2xs": [
290
- "tw:!inline-flex",
291
- "tw:size-5",
292
- "tw:max-h-5",
293
- "tw:[&_svg:not([class*=\"tw:size-\"])]:size-3"
294
- ],
295
- "icon-3xs": [
296
- "tw:h-fit",
297
- "tw:w-fit",
298
- "tw:[&_svg:not([class*=\"tw:size-\"])]:size-4"
299
- ]
300
- }
301
- }
302
- });
303
- const argoVariants = cva([
133
+ const buttonVariants = cva([
304
134
  "tailwindcss-preflight",
305
135
  "tw:relative",
306
136
  "tw:inline-flex",
@@ -355,9 +185,9 @@ const argoVariants = cva([
355
185
  "tw:bg-kai",
356
186
  "tw:animate-kai-drift",
357
187
  "tw:motion-reduce:animate-none",
358
- "tw:text-white",
359
- "tw:hover:text-white",
360
- "tw:focus:text-white",
188
+ "tw:text-primary-foreground",
189
+ "tw:hover:text-primary-foreground",
190
+ "tw:focus:text-primary-foreground",
361
191
  "tw:hover:not-disabled:brightness-110",
362
192
  "tw:focus-visible:ring-ring/50"
363
193
  ],
@@ -445,19 +275,13 @@ const renderedChildren = (node) => {
445
275
  * @see RECIPES.md#confirm-dialog
446
276
  */
447
277
  const Button = ({ ref, children, disabled = false, className, type = "button", isLoading = false, asChild = false, onClick, variant = "primary", size = "medium", block = false, ...buttonProps }) => {
448
- const renderArgo = useArgoDesign();
449
278
  const Comp = asChild ? Root : "button";
450
279
  const isIconOnly = String(size).startsWith("icon");
451
- const classNames = renderArgo ? argoVariants({
280
+ const classNames = buttonVariants({
452
281
  variant,
453
282
  size,
454
283
  block,
455
284
  className
456
- }) : variants({
457
- size,
458
- variant,
459
- block,
460
- className
461
285
  });
462
286
  const content = asChild && isValidElement(children) ? children.props.children : children;
463
287
  const rendered = renderedChildren(content);
@@ -549,9 +373,9 @@ const buttonInlineVariants = cva([
549
373
  "tw:underline-offset-2",
550
374
  "tw:disabled:opacity-40",
551
375
  "tw:disabled:cursor-not-allowed",
552
- "tw:disabled:text-neutral-500",
376
+ "tw:disabled:text-muted-foreground",
553
377
  "tw:disabled:no-underline",
554
- "tw:disabled:[&_svg]:text-neutral-400",
378
+ "tw:disabled:[&_svg]:text-muted-foreground",
555
379
  "tw:[&_svg.lucide:not([class*='tw:size-'])]:size-4",
556
380
  "tw:[&_svg]:shrink-0"
557
381
  ], {
@@ -596,6 +420,6 @@ const ButtonInline = ({ ref, children, className, variant, color, type = "button
596
420
  });
597
421
  };
598
422
  //#endregion
599
- export { Button, ButtonInline, argoVariants };
423
+ export { Button, ButtonInline, buttonVariants };
600
424
 
601
- //# sourceMappingURL=Button-D2JqBAq7.js.map
425
+ //# sourceMappingURL=Button-BNkyYU8u.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button-BNkyYU8u.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 buttonVariants = 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 // Kai's actions: its gradient, three light pools drifting behind the label.\n // The gradient sits on the primary blue, so the label is primary's own foreground.\n kai: [\n 'tw:bg-kai',\n 'tw:animate-kai-drift',\n 'tw:motion-reduce:animate-none',\n 'tw:text-primary-foreground',\n 'tw:hover:text-primary-foreground',\n 'tw:focus:text-primary-foreground',\n 'tw:hover:not-disabled:brightness-110',\n 'tw:focus-visible:ring-ring/50',\n ],\n // should be called \"destructive\" by Figma\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 // No size of their own: the button takes its content's.\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';\n\nimport { withLabels } from './ButtonLabel';\nimport { afterAnimations, armMotion } from './motion';\nimport { buttonVariants } 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 buttonVariants>;\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 Comp = asChild ? Root : 'button';\n const isIconOnly = String(size).startsWith('icon');\n const classNames = buttonVariants({ variant, size, 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-muted-foreground',\n 'tw:disabled:no-underline',\n 'tw:disabled:[&_svg]:text-muted-foreground',\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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"}
@@ -1,5 +1,4 @@
1
1
  import { cn } from "./classNames-DcGnTh2N.js";
2
- import { useArgoDesign } from "./context-U293r3v-.js";
3
2
  import { Root } from "@radix-ui/react-slot";
4
3
  import { cva } from "class-variance-authority";
5
4
  import { jsx } from "react/jsx-runtime";
@@ -31,7 +30,7 @@ const cardClassnames = cva([
31
30
  variants: {
32
31
  bordered: {
33
32
  true: "tw:border tw:border-solid tw:border-border",
34
- false: "tw:shadow-raised tw:data-[argo=true]:shadow-sm"
33
+ false: "tw:shadow-sm"
35
34
  },
36
35
  padding: {
37
36
  none: "tw:p-0",
@@ -87,19 +86,15 @@ const CardDescription = ({ children, className, ...rest }) => /* @__PURE__ */ js
87
86
  });
88
87
  //#endregion
89
88
  //#region src/components/Card/CardHeader.tsx
90
- const CardHeader = ({ children, className, divider = false, layout = "row", ...rest }) => {
91
- const renderArgo = useArgoDesign();
92
- return /* @__PURE__ */ jsx("div", {
93
- ...rest,
94
- "data-argo": renderArgo,
95
- className: cardHeaderClassnames({
96
- className,
97
- divider,
98
- layout
99
- }),
100
- children
101
- });
102
- };
89
+ const CardHeader = ({ children, className, divider = false, layout = "row", ...rest }) => /* @__PURE__ */ jsx("div", {
90
+ ...rest,
91
+ className: cardHeaderClassnames({
92
+ className,
93
+ divider,
94
+ layout
95
+ }),
96
+ children
97
+ });
103
98
  //#endregion
104
99
  //#region src/components/Card/CardTitle.tsx
105
100
  const CardTitle = ({ children, className, as: Tag = "h3", ...rest }) => /* @__PURE__ */ jsx(Tag, {
@@ -110,10 +105,8 @@ const CardTitle = ({ children, className, as: Tag = "h3", ...rest }) => /* @__PU
110
105
  //#endregion
111
106
  //#region src/components/Card/Card.tsx
112
107
  const Card = ({ children, className, bordered = false, padding = "small", asChild = false, interactive, ...rest }) => {
113
- const renderArgo = useArgoDesign();
114
108
  return /* @__PURE__ */ jsx(asChild ? Root : "div", {
115
109
  ...rest,
116
- "data-argo": renderArgo,
117
110
  "data-interactive": interactive,
118
111
  className: cardClassnames({
119
112
  className,
@@ -130,4 +123,4 @@ Card.Description = CardDescription;
130
123
  //#endregion
131
124
  export { Card };
132
125
 
133
- //# sourceMappingURL=Card-Bpc_ZlL4.js.map
126
+ //# sourceMappingURL=Card-DxjGiqH8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card-DxjGiqH8.js","names":[],"sources":["../src/components/Card/styles.ts","../src/components/Card/CardContent.tsx","../src/components/Card/CardDescription.tsx","../src/components/Card/CardHeader.tsx","../src/components/Card/CardTitle.tsx","../src/components/Card/Card.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\nimport { cn } from '../../utils';\n\nexport const cardClassnames = cva(\n [\n 'tw:flex',\n 'tw:flex-col',\n // `--radius-card` when a theme sets it; unset, the control radius `--radius-lg`.\n 'tw:rounded-[var(--radius-card,var(--radius-lg,0.5rem))]',\n 'tw:bg-card',\n 'tw:text-card-foreground',\n\n // interactive — see the `interactive` variant in theme.css\n 'tw:interactive:cursor-pointer',\n 'tw:interactive:no-underline',\n 'tw:interactive:hover:no-underline',\n 'tw:interactive:hover:text-card-foreground',\n 'tw:interactive:focus:text-card-foreground',\n 'tw:interactive:motion-safe:transition-[translate,box-shadow,border-color]',\n 'tw:interactive:hover:border-input',\n 'tw:interactive:hover:shadow-md',\n 'tw:interactive:motion-safe:hover:-translate-y-0.5',\n 'tw:interactive:active:translate-y-0',\n 'tw:interactive:focus-visible:outline',\n 'tw:interactive:focus-visible:outline-1',\n 'tw:interactive:focus-visible:-outline-offset-1',\n 'tw:interactive:focus-visible:outline-ring',\n 'tw:interactive:focus-visible:ring-4',\n 'tw:interactive:focus-visible:ring-ring/30',\n ],\n {\n defaultVariants: {\n padding: 'small',\n },\n variants: {\n bordered: {\n true: 'tw:border tw:border-solid tw:border-border',\n false: 'tw:shadow-sm',\n },\n // `none` drops the gap too: slots own their padding, so a gap would\n // double-space a `Card.Header divider`.\n padding: {\n none: 'tw:p-0',\n small: 'tw:gap-4 tw:px-6 tw:py-4',\n medium: 'tw:gap-4 tw:p-7',\n large: 'tw:gap-4 tw:p-8',\n },\n },\n },\n);\n\nexport const cardHeaderClassnames = cva('tw:flex', {\n defaultVariants: {\n divider: false,\n layout: 'row',\n },\n variants: {\n // No `border-solid`: it would give the other sides a 3px `medium` border.\n // `min-h-16` holds one height with or without a button; keep padding under it.\n divider: {\n true: 'tw:min-h-16 tw:border-b tw:border-border tw:px-6 tw:py-2',\n false: '',\n },\n layout: {\n row: 'tw:items-center tw:justify-between tw:gap-4',\n inline: 'tw:items-center tw:gap-3',\n stack: 'tw:flex-col tw:gap-1.5',\n },\n },\n});\n\nexport const cardContentClassnames = cva('', {\n defaultVariants: {\n padded: false,\n },\n variants: {\n padded: {\n true: 'tw:px-6 tw:py-5',\n false: '',\n },\n },\n});\n\nexport const cardTitleClassnames = cn(\n 'tw:m-0',\n 'tw:leading-6',\n 'tw:font-medium',\n 'tw:text-base',\n 'tw:text-card-foreground',\n);\n\nexport const cardDescriptionClassnames = cn('tw:m-0', 'tw:text-sm', 'tw:text-muted-foreground');\n","import type { HTMLAttributes } from 'react';\n\nimport { cardContentClassnames } from './styles';\n\ntype Props = HTMLAttributes<HTMLDivElement> & {\n /** Applies the standard body padding. Use with `Card padding=\"none\"`, where the\n * root adds none — otherwise the padding is doubled. */\n padded?: boolean;\n};\n\nexport const CardContent = ({ children, className, padded = false, ...rest }: Props) => (\n // `|| undefined` so an unpadded, unstyled content slot stays attribute-free\n // rather than rendering `class=\"\"`.\n <div {...rest} className={cardContentClassnames({ className, padded }) || undefined}>\n {children}\n </div>\n);\n","import type { HTMLAttributes } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { cardDescriptionClassnames } from './styles';\n\n/** Muted secondary line under `Card.Title`; pair with `Card.Header layout=\"stack\"`. */\nexport const CardDescription = ({\n children,\n className,\n ...rest\n}: HTMLAttributes<HTMLParagraphElement>) => (\n <p className={cn(cardDescriptionClassnames, className)} {...rest}>\n {children}\n </p>\n);\n","import type { HTMLAttributes } from 'react';\n\nimport { cardHeaderClassnames } from './styles';\n\ntype Props = HTMLAttributes<HTMLDivElement> & {\n /** Bottom rule plus own padding and a 64px min height. Full-bleed only with `Card padding=\"none\"`. */\n divider?: boolean;\n /** `row`: title left, actions right. `inline`: together, e.g. title + badge.\n * `stack`: description under the title. */\n layout?: 'row' | 'inline' | 'stack';\n};\n\nexport const CardHeader = ({\n children,\n className,\n divider = false,\n layout = 'row',\n ...rest\n}: Props) => (\n <div {...rest} className={cardHeaderClassnames({ className, divider, layout })}>\n {children}\n </div>\n);\n","import type { HTMLAttributes } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { cardTitleClassnames } from './styles';\n\ntype HeadingLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\ntype Props = HTMLAttributes<HTMLHeadingElement> & {\n /** Heading tag to render. Defaults to `h3`; set explicitly to avoid a heading-order skip\n * (e.g. `as=\"h2\"` when the Card sits directly under a page's `h1`). */\n as?: HeadingLevel;\n};\n\nexport const CardTitle = ({ children, className, as: Tag = 'h3', ...rest }: Props) => (\n <Tag className={cn(cardTitleClassnames, className)} {...rest}>\n {children}\n </Tag>\n);\n","import type { HTMLAttributes } from 'react';\nimport { Root } from '@radix-ui/react-slot';\nimport type { VariantProps } from 'class-variance-authority';\n\nimport { CardContent } from './CardContent';\nimport { CardDescription } from './CardDescription';\nimport { CardHeader } from './CardHeader';\nimport { CardTitle } from './CardTitle';\nimport { cardClassnames } from './styles';\n\ntype Props = HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof cardClassnames> & {\n /** Render as a Radix `Slot`: the child (`<a href>`, a router `<Link>`) becomes the card.\n * The card is then one link — nest no buttons or links inside it. */\n asChild?: boolean;\n /** Hover lift, focus ring and pointer cursor. Defaults to on when the card renders an\n * `<a href>`; `false` opts that out, `true` opts any other element in. */\n interactive?: boolean;\n };\n\nexport const Card = ({\n children,\n className,\n bordered = false,\n padding = 'small',\n asChild = false,\n interactive,\n ...rest\n}: Props) => {\n const Comp = asChild ? Root : 'div';\n return (\n <Comp\n {...rest}\n data-interactive={interactive}\n className={cardClassnames({ className, bordered, padding })}\n >\n {children}\n </Comp>\n );\n};\n\nCard.Header = CardHeader;\nCard.Content = CardContent;\nCard.Title = CardTitle;\nCard.Description = CardDescription;\n"],"mappings":";;;;;AAIA,MAAa,iBAAiB,IAC5B;CACE;CACA;CAEA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GACA;CACE,iBAAiB,EACf,SAAS,QACX;CACA,UAAU;EACR,UAAU;GACR,MAAM;GACN,OAAO;EACT;EAGA,SAAS;GACP,MAAM;GACN,OAAO;GACP,QAAQ;GACR,OAAO;EACT;CACF;AACF,CACF;AAEA,MAAa,uBAAuB,IAAI,WAAW;CACjD,iBAAiB;EACf,SAAS;EACT,QAAQ;CACV;CACA,UAAU;EAGR,SAAS;GACP,MAAM;GACN,OAAO;EACT;EACA,QAAQ;GACN,KAAK;GACL,QAAQ;GACR,OAAO;EACT;CACF;AACF,CAAC;AAED,MAAa,wBAAwB,IAAI,IAAI;CAC3C,iBAAiB,EACf,QAAQ,MACV;CACA,UAAU,EACR,QAAQ;EACN,MAAM;EACN,OAAO;CACT,EACF;AACF,CAAC;AAED,MAAa,sBAAsB,GACjC,UACA,gBACA,kBACA,gBACA,yBACF;AAEA,MAAa,4BAA4B,GAAG,UAAU,cAAc,0BAA0B;;;AClF9F,MAAa,eAAe,EAAE,UAAU,WAAW,SAAS,OAAO,GAAG,WAGpE,oBAAC,OAAD;CAAK,GAAI;CAAM,WAAW,sBAAsB;EAAE;EAAW;CAAO,CAAC,KAAK,KAAA;CACvE;AACE,CAAA;;;;ACRP,MAAa,mBAAmB,EAC9B,UACA,WACA,GAAG,WAEH,oBAAC,KAAD;CAAG,WAAW,GAAG,2BAA2B,SAAS;CAAG,GAAI;CACzD;AACA,CAAA;;;ACFL,MAAa,cAAc,EACzB,UACA,WACA,UAAU,OACV,SAAS,OACT,GAAG,WAEH,oBAAC,OAAD;CAAK,GAAI;CAAM,WAAW,qBAAqB;EAAE;EAAW;EAAS;CAAO,CAAC;CAC1E;AACE,CAAA;;;ACPP,MAAa,aAAa,EAAE,UAAU,WAAW,IAAI,MAAM,MAAM,GAAG,WAClE,oBAAC,KAAD;CAAK,WAAW,GAAG,qBAAqB,SAAS;CAAG,GAAI;CACrD;AACE,CAAA;;;ACGP,MAAa,QAAQ,EACnB,UACA,WACA,WAAW,OACX,UAAU,SACV,UAAU,OACV,aACA,GAAG,WACQ;CAEX,OACE,oBAFW,UAAU,OAAO,OAE5B;EACE,GAAI;EACJ,oBAAkB;EAClB,WAAW,eAAe;GAAE;GAAW;GAAU;EAAQ,CAAC;EAEzD;CACG,CAAA;AAEV;AAEA,KAAK,SAAS;AACd,KAAK,UAAU;AACf,KAAK,QAAQ;AACb,KAAK,cAAc"}
@@ -1,6 +1,4 @@
1
- import { cn } from "./classNames-DcGnTh2N.js";
2
- import { Tooltip } from "./utils-LQ4jJA-9.js";
3
- import { useArgoDesign } from "./context-U293r3v-.js";
1
+ import { Tooltip } from "./utils-DwC9u0tM.js";
4
2
  import { Check, Minus } from "./icons-ZIeZXXS7.js";
5
3
  import { FieldBox } from "./FieldBox-BrxLkY9C.js";
6
4
  import { useId } from "react";
@@ -20,59 +18,36 @@ const rootVariants = cva([
20
18
  "tw:border",
21
19
  "tw:border-solid",
22
20
  "tw:disabled:opacity-disabled",
23
- "tw:disabled:cursor-not-allowed"
24
- ], {
25
- defaultVariants: { variant: "default" },
26
- variants: { variant: {
27
- default: [
28
- "tw:rounded",
29
- "tw:border-neutral-200",
30
- "tw:data-[state=checked]:bg-primary",
31
- "tw:data-[state=checked]:border-primary",
32
- "tw:data-[state=indeterminate]:bg-white",
33
- "tw:data-[state=indeterminate]:border-neutral-200"
34
- ],
35
- argo: [
36
- "tw:rounded",
37
- "tw:border-input",
38
- "tw:transition-colors",
39
- "tw:data-[state=checked]:bg-primary",
40
- "tw:data-[state=checked]:border-primary",
41
- "tw:data-[state=indeterminate]:bg-primary",
42
- "tw:data-[state=indeterminate]:border-primary",
43
- "tw:focus-visible:outline-hidden",
44
- "tw:focus-visible:border-primary",
45
- "tw:focus-visible:ring-2",
46
- "tw:focus-visible:ring-ring/50"
47
- ]
48
- } }
49
- });
21
+ "tw:disabled:cursor-not-allowed",
22
+ "tw:rounded",
23
+ "tw:border-input",
24
+ "tw:transition-colors",
25
+ "tw:data-[state=checked]:bg-primary",
26
+ "tw:data-[state=checked]:border-primary",
27
+ "tw:data-[state=indeterminate]:bg-primary",
28
+ "tw:data-[state=indeterminate]:border-primary",
29
+ "tw:focus-visible:outline-hidden",
30
+ "tw:focus-visible:border-primary",
31
+ "tw:focus-visible:ring-2",
32
+ "tw:focus-visible:ring-ring/50"
33
+ ]);
50
34
  const indicatorVariants = cva([
51
35
  "tw:group",
52
36
  "tw:flex",
53
- "tw:items-center"
54
- ], {
55
- defaultVariants: { variant: "default" },
56
- variants: { variant: {
57
- default: ["tw:data-[state=checked]:text-primary-foreground", "tw:data-[state=indeterminate]:text-neutral-200"],
58
- argo: ["tw:text-primary-foreground"]
59
- } }
60
- });
37
+ "tw:items-center",
38
+ "tw:text-primary-foreground"
39
+ ]);
61
40
  //#endregion
62
41
  //#region src/components/Checkbox/Checkbox.tsx
63
42
  function Checkbox({ className, id: idProp, children, description, variant, position, tooltip, tooltipPlacement = "top", ...rest }) {
64
43
  const fallbackId = useId();
65
44
  const id = idProp?.toString() ?? fallbackId;
66
- const styleVariant = useArgoDesign() ? "argo" : "default";
67
45
  const checkboxElement = /* @__PURE__ */ jsx(Root, {
68
46
  id,
69
47
  ...rest,
70
- className: cn(rootVariants({
71
- variant: styleVariant,
72
- className
73
- })),
48
+ className: rootVariants({ className }),
74
49
  children: /* @__PURE__ */ jsxs(Indicator, {
75
- className: cn(indicatorVariants({ variant: styleVariant })),
50
+ className: indicatorVariants(),
76
51
  children: [/* @__PURE__ */ jsx(Check, { className: "tw:hidden tw:size-3 tw:stroke-[4px] tw:group-data-[state=checked]:block" }), /* @__PURE__ */ jsx(Minus, { className: "tw:hidden tw:size-3 tw:stroke-[4px] tw:group-data-[state=indeterminate]:block" })]
77
52
  })
78
53
  });
@@ -94,4 +69,4 @@ function Checkbox({ className, id: idProp, children, description, variant, posit
94
69
  //#endregion
95
70
  export { Checkbox };
96
71
 
97
- //# sourceMappingURL=Checkbox-uFE8XLT_.js.map
72
+ //# sourceMappingURL=Checkbox-CHDDJyAA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox-CHDDJyAA.js","names":[],"sources":["../src/components/Checkbox/styles.ts","../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const rootVariants = cva([\n // reset\n 'tailwindcss-preflight',\n\n // position\n 'tw:flex',\n 'tw:items-center',\n 'tw:justify-center',\n\n 'tw:peer',\n 'tw:size-4',\n 'tw:shrink-0',\n 'tw:cursor-pointer',\n\n // border\n 'tw:border',\n 'tw:border-solid',\n\n // disabled\n 'tw:disabled:opacity-disabled',\n 'tw:disabled:cursor-not-allowed',\n\n 'tw:rounded',\n 'tw:border-input',\n 'tw:transition-colors',\n\n 'tw:data-[state=checked]:bg-primary',\n 'tw:data-[state=checked]:border-primary',\n\n 'tw:data-[state=indeterminate]:bg-primary',\n 'tw:data-[state=indeterminate]:border-primary',\n\n // focus\n 'tw:focus-visible:outline-hidden',\n 'tw:focus-visible:border-primary',\n 'tw:focus-visible:ring-2',\n 'tw:focus-visible:ring-ring/50',\n]);\n\nexport const indicatorVariants = cva([\n 'tw:group',\n 'tw:flex',\n 'tw:items-center',\n 'tw:text-primary-foreground',\n]);\n","import { useId } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport type { CheckedState } from '@radix-ui/react-checkbox';\nimport { Indicator, Root } from '@radix-ui/react-checkbox';\nimport type { VariantProps } from 'class-variance-authority';\n\nimport { Check, Minus } from '../../icons';\nimport { FieldBox } from '../FieldBox';\nimport type { fieldBoxVariants } from '../FieldBox/styles';\nimport type { Props as TooltipProps } from '../Tooltip';\nimport { Tooltip } from '../Tooltip';\n\nimport { indicatorVariants, rootVariants } from './styles';\n\ntype Props = {\n id?: string | number;\n description?: ReactNode;\n variant?: VariantProps<typeof fieldBoxVariants>['variant'];\n position?: 'start' | 'end';\n tooltip?: TooltipProps['tooltip'];\n tooltipPlacement?: TooltipProps['placement'];\n} & Omit<ComponentProps<typeof Root>, 'id'>;\n\nexport function Checkbox(\n prop: Omit<Props, 'checked' | 'onCheckedChange'> & {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n },\n): ReactNode;\n\nexport function Checkbox(\n prop: Omit<Props, 'checked' | 'onCheckedChange'> & {\n checked?: CheckedState;\n onCheckedChange?: (checked: CheckedState) => void;\n },\n): ReactNode;\n\nexport function Checkbox({\n className,\n id: idProp,\n children,\n description,\n variant,\n position,\n tooltip,\n tooltipPlacement = 'top',\n ...rest\n}: Props) {\n const fallbackId = useId();\n const id = idProp?.toString() ?? fallbackId;\n\n const checkboxElement = (\n <Root id={id} {...rest} className={rootVariants({ className })}>\n <Indicator className={indicatorVariants()}>\n <Check className=\"tw:hidden tw:size-3 tw:stroke-[4px] tw:group-data-[state=checked]:block\" />\n <Minus className=\"tw:hidden tw:size-3 tw:stroke-[4px] tw:group-data-[state=indeterminate]:block\" />\n </Indicator>\n </Root>\n );\n\n const rendered = !children ? (\n checkboxElement\n ) : (\n <FieldBox htmlFor={id} variant={variant} position={position} control={checkboxElement}>\n <FieldBox.Title>{children}</FieldBox.Title>\n {description && <FieldBox.Description>{description}</FieldBox.Description>}\n </FieldBox>\n );\n\n if (!tooltip) return rendered;\n\n // `asChild` only onto the labelled FieldBox: on the bare Radix `Root` the tooltip's\n // `data-state` overwrites the checkbox's and it stops toggling.\n return (\n <Tooltip tooltip={tooltip} placement={tooltipPlacement} triggerAsChild={!!children}>\n {rendered}\n </Tooltip>\n );\n}\n"],"mappings":";;;;;;;;AAEA,MAAa,eAAe,IAAI;CAE9B;CAGA;CACA;CACA;CAEA;CACA;CACA;CACA;CAGA;CACA;CAGA;CACA;CAEA;CACA;CACA;CAEA;CACA;CAEA;CACA;CAGA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAa,oBAAoB,IAAI;CACnC;CACA;CACA;CACA;AACF,CAAC;;;ACTD,SAAgB,SAAS,EACvB,WACA,IAAI,QACJ,UACA,aACA,SACA,UACA,SACA,mBAAmB,OACnB,GAAG,QACK;CACR,MAAM,aAAa,MAAM;CACzB,MAAM,KAAK,QAAQ,SAAS,KAAK;CAEjC,MAAM,kBACJ,oBAAC,MAAD;EAAU;EAAI,GAAI;EAAM,WAAW,aAAa,EAAE,UAAU,CAAC;EAC3D,UAAA,qBAAC,WAAD;GAAW,WAAW,kBAAkB;GAAxC,UAAA,CACE,oBAAC,OAAD,EAAO,WAAU,0EAA2E,CAAA,GAC5F,oBAAC,OAAD,EAAO,WAAU,gFAAiF,CAAA,CACzF;;CACP,CAAA;CAGR,MAAM,WAAW,CAAC,WAChB,kBAEA,qBAAC,UAAD;EAAU,SAAS;EAAa;EAAmB;EAAU,SAAS;EAAtE,UAAA,CACE,oBAAC,SAAS,OAAV,EAAiB,SAAyB,CAAA,GACzC,eAAe,oBAAC,SAAS,aAAV,EAAA,UAAuB,YAAkC,CAAA,CACjE;;CAGZ,IAAI,CAAC,SAAS,OAAO;CAIrB,OACE,oBAAC,SAAD;EAAkB;EAAS,WAAW;EAAkB,gBAAgB,CAAC,CAAC;EACvE,UAAA;CACM,CAAA;AAEb"}
@@ -1,5 +1,5 @@
1
1
  import { cn } from "./classNames-DcGnTh2N.js";
2
- import { Tooltip, copyToClipboard } from "./utils-LQ4jJA-9.js";
2
+ import { Tooltip, copyToClipboard } from "./utils-DwC9u0tM.js";
3
3
  import { useState } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/Clipboard/Clipboard.tsx
@@ -55,4 +55,4 @@ const Clipboard = ({ ref, text: textProp, children, tooltip = "Copy to Clipboard
55
55
  //#endregion
56
56
  export { Clipboard };
57
57
 
58
- //# sourceMappingURL=Clipboard-D-9XOqy4.js.map
58
+ //# sourceMappingURL=Clipboard-DlwVZS1P.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Clipboard-D-9XOqy4.js","names":[],"sources":["../src/components/Clipboard/Clipboard.tsx"],"sourcesContent":["import { useState } from 'react';\nimport type { ComponentProps, MouseEventHandler } from 'react';\n\nimport { cn, copyToClipboard } from '../../utils';\nimport { type Props as TooltipProps, Tooltip } from '../Tooltip';\n\ntype Props = {\n tooltip?: TooltipProps['tooltip'];\n tooltipPlacement?: TooltipProps['placement'];\n tooltipVariant?: TooltipProps['variant'];\n asChild?: TooltipProps['triggerAsChild'];\n text?: string | (() => string);\n} & ComponentProps<'button'>;\n\nexport const Clipboard = ({\n ref,\n text: textProp,\n children,\n tooltip = 'Copy to Clipboard',\n tooltipPlacement = 'top',\n tooltipVariant: tooltipVariantProp = 'action',\n asChild = false,\n onClick,\n className,\n ...restButtonProps\n}: Props) => {\n const [isTooltipOpen, setIsTooltipOpen] = useState(false);\n const [state, setState] = useState<'ready' | 'copied' | 'error'>('ready');\n const text = typeof textProp === 'function' ? textProp() : textProp;\n\n const copy = async (text: string) => {\n try {\n // For the clipboard feature to work reliably, the window must be in focus for security reasons.\n // However, the button can be clicked without the window being focused.\n if (!document.hasFocus()) window.focus();\n\n await copyToClipboard(text);\n setState('copied');\n } catch {\n setState('error');\n }\n };\n\n const handleOnClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n // Open on click rather than waiting for hover. Radix opens on pointer-enter via a\n // `delayDuration` timer (300ms here), so clicking faster than that left the outcome invisible\n // until the timer caught up — the message was already rendered, just inside a closed tooltip.\n setIsTooltipOpen(true);\n if (text && state === 'ready') void copy(text);\n onClick?.(event);\n };\n\n const handleOnOpenChange: ComponentProps<typeof Tooltip.Root>['onOpenChange'] = (open) => {\n // Reset when the tooltip closes, allowing the user to leave the copy button.\n if (!open && state !== 'ready') setState('ready');\n setIsTooltipOpen(open);\n };\n\n const tooltipContent = (() => {\n if (!text) return 'Nothing to copy';\n if (state === 'error') return 'Failed to copy';\n if (state === 'copied') return 'Copied to Clipboard';\n return tooltip;\n })();\n\n const tooltipVariant: TooltipProps['variant'] =\n state === 'ready' && !!text ? tooltipVariantProp : 'action';\n\n // `tooltip={null}` leaves nothing to say until there is an outcome. Not rendering `Content` at all\n // is what makes that work: hovering still opens the tooltip, there is simply nothing in it, and\n // the copied / failed message appears in place the moment `state` changes. It also keeps Radix\n // from pointing the trigger's `aria-describedby` at content that has no text.\n const hasTooltipContent = tooltipContent !== null && tooltipContent !== undefined;\n\n return (\n <Tooltip.Root open={isTooltipOpen} onOpenChange={handleOnOpenChange}>\n <Tooltip.Trigger\n {...restButtonProps}\n asChild={asChild}\n keepOpenOnClick\n onClick={handleOnClick}\n className={cn('tw:cursor-pointer', className)}\n ref={ref}\n >\n {children ?? text}\n </Tooltip.Trigger>\n\n {hasTooltipContent && (\n <Tooltip.Content\n keepOpenOnPointerDownOutside\n placement={tooltipPlacement}\n variant={tooltipVariant}\n >\n {tooltipContent}\n </Tooltip.Content>\n )}\n </Tooltip.Root>\n );\n};\n"],"mappings":";;;;;AAcA,MAAa,aAAa,EACxB,KACA,MAAM,UACN,UACA,UAAU,qBACV,mBAAmB,OACnB,gBAAgB,qBAAqB,UACrC,UAAU,OACV,SACA,WACA,GAAG,sBACQ;CACX,MAAM,CAAC,eAAe,oBAAoB,SAAS,KAAK;CACxD,MAAM,CAAC,OAAO,YAAY,SAAuC,OAAO;CACxE,MAAM,OAAO,OAAO,aAAa,aAAa,SAAS,IAAI;CAE3D,MAAM,OAAO,OAAO,SAAiB;EACnC,IAAI;GAGF,IAAI,CAAC,SAAS,SAAS,GAAG,OAAO,MAAM;GAEvC,MAAM,gBAAgB,IAAI;GAC1B,SAAS,QAAQ;EACnB,QAAQ;GACN,SAAS,OAAO;EAClB;CACF;CAEA,MAAM,iBAAuD,UAAU;EAIrE,iBAAiB,IAAI;EACrB,IAAI,QAAQ,UAAU,SAAS,KAAU,IAAI;EAC7C,UAAU,KAAK;CACjB;CAEA,MAAM,sBAA2E,SAAS;EAExF,IAAI,CAAC,QAAQ,UAAU,SAAS,SAAS,OAAO;EAChD,iBAAiB,IAAI;CACvB;CAEA,MAAM,wBAAwB;EAC5B,IAAI,CAAC,MAAM,OAAO;EAClB,IAAI,UAAU,SAAS,OAAO;EAC9B,IAAI,UAAU,UAAU,OAAO;EAC/B,OAAO;CACT,EAAA,CAAG;CAEH,MAAM,iBACJ,UAAU,WAAW,CAAC,CAAC,OAAO,qBAAqB;CAMrD,MAAM,oBAAoB,mBAAmB,QAAQ,mBAAmB,KAAA;CAExE,OACE,qBAAC,QAAQ,MAAT;EAAc,MAAM;EAAe,cAAc;EAAjD,UAAA,CACE,oBAAC,QAAQ,SAAT;GACE,GAAI;GACK;GACT,iBAAA;GACA,SAAS;GACT,WAAW,GAAG,qBAAqB,SAAS;GACvC;GAEJ,UAAA,YAAY;EACE,CAAA,GAEhB,qBACC,oBAAC,QAAQ,SAAT;GACE,8BAAA;GACA,WAAW;GACX,SAAS;GAER,UAAA;EACc,CAAA,CAEP;;AAElB"}
1
+ {"version":3,"file":"Clipboard-DlwVZS1P.js","names":[],"sources":["../src/components/Clipboard/Clipboard.tsx"],"sourcesContent":["import { useState } from 'react';\nimport type { ComponentProps, MouseEventHandler } from 'react';\n\nimport { cn, copyToClipboard } from '../../utils';\nimport { type Props as TooltipProps, Tooltip } from '../Tooltip';\n\ntype Props = {\n tooltip?: TooltipProps['tooltip'];\n tooltipPlacement?: TooltipProps['placement'];\n tooltipVariant?: TooltipProps['variant'];\n asChild?: TooltipProps['triggerAsChild'];\n text?: string | (() => string);\n} & ComponentProps<'button'>;\n\nexport const Clipboard = ({\n ref,\n text: textProp,\n children,\n tooltip = 'Copy to Clipboard',\n tooltipPlacement = 'top',\n tooltipVariant: tooltipVariantProp = 'action',\n asChild = false,\n onClick,\n className,\n ...restButtonProps\n}: Props) => {\n const [isTooltipOpen, setIsTooltipOpen] = useState(false);\n const [state, setState] = useState<'ready' | 'copied' | 'error'>('ready');\n const text = typeof textProp === 'function' ? textProp() : textProp;\n\n const copy = async (text: string) => {\n try {\n // For the clipboard feature to work reliably, the window must be in focus for security reasons.\n // However, the button can be clicked without the window being focused.\n if (!document.hasFocus()) window.focus();\n\n await copyToClipboard(text);\n setState('copied');\n } catch {\n setState('error');\n }\n };\n\n const handleOnClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n // Open on click rather than waiting for hover. Radix opens on pointer-enter via a\n // `delayDuration` timer (300ms here), so clicking faster than that left the outcome invisible\n // until the timer caught up — the message was already rendered, just inside a closed tooltip.\n setIsTooltipOpen(true);\n if (text && state === 'ready') void copy(text);\n onClick?.(event);\n };\n\n const handleOnOpenChange: ComponentProps<typeof Tooltip.Root>['onOpenChange'] = (open) => {\n // Reset when the tooltip closes, allowing the user to leave the copy button.\n if (!open && state !== 'ready') setState('ready');\n setIsTooltipOpen(open);\n };\n\n const tooltipContent = (() => {\n if (!text) return 'Nothing to copy';\n if (state === 'error') return 'Failed to copy';\n if (state === 'copied') return 'Copied to Clipboard';\n return tooltip;\n })();\n\n const tooltipVariant: TooltipProps['variant'] =\n state === 'ready' && !!text ? tooltipVariantProp : 'action';\n\n // `tooltip={null}` leaves nothing to say until there is an outcome. Not rendering `Content` at all\n // is what makes that work: hovering still opens the tooltip, there is simply nothing in it, and\n // the copied / failed message appears in place the moment `state` changes. It also keeps Radix\n // from pointing the trigger's `aria-describedby` at content that has no text.\n const hasTooltipContent = tooltipContent !== null && tooltipContent !== undefined;\n\n return (\n <Tooltip.Root open={isTooltipOpen} onOpenChange={handleOnOpenChange}>\n <Tooltip.Trigger\n {...restButtonProps}\n asChild={asChild}\n keepOpenOnClick\n onClick={handleOnClick}\n className={cn('tw:cursor-pointer', className)}\n ref={ref}\n >\n {children ?? text}\n </Tooltip.Trigger>\n\n {hasTooltipContent && (\n <Tooltip.Content\n keepOpenOnPointerDownOutside\n placement={tooltipPlacement}\n variant={tooltipVariant}\n >\n {tooltipContent}\n </Tooltip.Content>\n )}\n </Tooltip.Root>\n );\n};\n"],"mappings":";;;;;AAcA,MAAa,aAAa,EACxB,KACA,MAAM,UACN,UACA,UAAU,qBACV,mBAAmB,OACnB,gBAAgB,qBAAqB,UACrC,UAAU,OACV,SACA,WACA,GAAG,sBACQ;CACX,MAAM,CAAC,eAAe,oBAAoB,SAAS,KAAK;CACxD,MAAM,CAAC,OAAO,YAAY,SAAuC,OAAO;CACxE,MAAM,OAAO,OAAO,aAAa,aAAa,SAAS,IAAI;CAE3D,MAAM,OAAO,OAAO,SAAiB;EACnC,IAAI;GAGF,IAAI,CAAC,SAAS,SAAS,GAAG,OAAO,MAAM;GAEvC,MAAM,gBAAgB,IAAI;GAC1B,SAAS,QAAQ;EACnB,QAAQ;GACN,SAAS,OAAO;EAClB;CACF;CAEA,MAAM,iBAAuD,UAAU;EAIrE,iBAAiB,IAAI;EACrB,IAAI,QAAQ,UAAU,SAAS,KAAU,IAAI;EAC7C,UAAU,KAAK;CACjB;CAEA,MAAM,sBAA2E,SAAS;EAExF,IAAI,CAAC,QAAQ,UAAU,SAAS,SAAS,OAAO;EAChD,iBAAiB,IAAI;CACvB;CAEA,MAAM,wBAAwB;EAC5B,IAAI,CAAC,MAAM,OAAO;EAClB,IAAI,UAAU,SAAS,OAAO;EAC9B,IAAI,UAAU,UAAU,OAAO;EAC/B,OAAO;CACT,EAAA,CAAG;CAEH,MAAM,iBACJ,UAAU,WAAW,CAAC,CAAC,OAAO,qBAAqB;CAMrD,MAAM,oBAAoB,mBAAmB,QAAQ,mBAAmB,KAAA;CAExE,OACE,qBAAC,QAAQ,MAAT;EAAc,MAAM;EAAe,cAAc;EAAjD,UAAA,CACE,oBAAC,QAAQ,SAAT;GACE,GAAI;GACK;GACT,iBAAA;GACA,SAAS;GACT,WAAW,GAAG,qBAAqB,SAAS;GACvC;GAEJ,UAAA,YAAY;EACE,CAAA,GAEhB,qBACC,oBAAC,QAAQ,SAAT;GACE,8BAAA;GACA,WAAW;GACX,SAAS;GAER,UAAA;EACc,CAAA,CAEP;;AAElB"}
@@ -1,6 +1,6 @@
1
1
  import { Copy } from "./icons-ZIeZXXS7.js";
2
- import { Button, ButtonInline } from "./Button-D2JqBAq7.js";
3
- import { Clipboard } from "./Clipboard-D-9XOqy4.js";
2
+ import { Button, ButtonInline } from "./Button-BNkyYU8u.js";
3
+ import { Clipboard } from "./Clipboard-DlwVZS1P.js";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/blocks/ClipboardButton/ClipboardButton.tsx
6
6
  const DEFAULT_ICON = /* @__PURE__ */ jsx(Copy, {});
@@ -40,4 +40,4 @@ const ClipboardInline = ({ text, tooltip, tooltipPlacement, tooltipVariant, chil
40
40
  //#endregion
41
41
  export { ClipboardButton, ClipboardInline };
42
42
 
43
- //# sourceMappingURL=ClipboardButton-DxvZG_H0.js.map
43
+ //# sourceMappingURL=ClipboardButton-B1Hr_n_Z.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClipboardButton-DxvZG_H0.js","names":[],"sources":["../src/blocks/ClipboardButton/ClipboardButton.tsx","../src/blocks/ClipboardButton/ClipboardInline.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\n\nimport { Button } from '../../components/Button';\nimport { Clipboard } from '../../components/Clipboard';\nimport { Copy } from '../../icons';\n\ntype ClipboardProps = Pick<\n ComponentProps<typeof Clipboard>,\n 'text' | 'tooltip' | 'tooltipPlacement' | 'tooltipVariant'\n>;\n\ntype ButtonProps = Omit<ComponentProps<typeof Button>, 'disabled' | 'icon'>;\n\ntype Props = ClipboardProps & ButtonProps & { icon?: ReactNode };\n\nconst DEFAULT_ICON: ReactNode = <Copy />;\nconst DEFAULT_ARIA_LABEL = 'Copy';\n\nexport const ClipboardButton = ({\n // clipboard props\n text,\n tooltip,\n tooltipPlacement,\n tooltipVariant,\n\n // button props\n icon = DEFAULT_ICON,\n variant = 'outline',\n children,\n ...rest\n}: Props) => {\n // Icon-only (no text children): the `tooltip` is visual only, not an accessible\n // name, so fall back to it (when it's a string) or a sensible default. A\n // consumer-supplied `aria-label` in `rest` still wins.\n // A non-empty string tooltip names the action; an empty/absent tooltip still\n // needs a name, so fall back to the default rather than an empty aria-label.\n const defaultAriaLabel =\n typeof tooltip === 'string' && tooltip.trim() ? tooltip : DEFAULT_ARIA_LABEL;\n const ariaLabel = rest['aria-label'] ?? (children == null ? defaultAriaLabel : undefined);\n\n return (\n <Clipboard\n asChild\n tooltip={tooltip}\n tooltipPlacement={tooltipPlacement}\n tooltipVariant={tooltipVariant}\n text={text}\n >\n <Button {...rest} aria-label={ariaLabel} variant={variant} disabled={!text}>\n {icon}\n {children}\n </Button>\n </Clipboard>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { ButtonInline } from '../../components/Button';\nimport { Clipboard } from '../../components/Clipboard';\nimport { Copy } from '../../icons';\n\ntype ClipboardProps = Pick<\n ComponentProps<typeof Clipboard>,\n 'text' | 'tooltip' | 'tooltipPlacement' | 'tooltipVariant'\n>;\n\ntype ButtonProps = Omit<ComponentProps<typeof ButtonInline>, 'disabled'>;\n\ntype Props = { hideIcon?: boolean } & ClipboardProps & ButtonProps;\n\nexport const ClipboardInline = ({\n // clipboard props\n text,\n tooltip,\n tooltipPlacement,\n tooltipVariant,\n\n // button props\n children = 'Copy To Clipboard',\n hideIcon = false,\n ...rest\n}: Props) => (\n <Clipboard\n asChild\n text={text}\n tooltip={tooltip}\n tooltipPlacement={tooltipPlacement}\n tooltipVariant={tooltipVariant}\n >\n <ButtonInline {...rest} disabled={!text}>\n {!hideIcon && <Copy className=\"tw:size-4\" />}\n {children}\n </ButtonInline>\n </Clipboard>\n);\n"],"mappings":";;;;;AAeA,MAAM,eAA0B,oBAAC,MAAD,CAAO,CAAA;AACvC,MAAM,qBAAqB;AAE3B,MAAa,mBAAmB,EAE9B,MACA,SACA,kBACA,gBAGA,OAAO,cACP,UAAU,WACV,UACA,GAAG,WACQ;CAMX,MAAM,mBACJ,OAAO,YAAY,YAAY,QAAQ,KAAK,IAAI,UAAU;CAC5D,MAAM,YAAY,KAAK,kBAAkB,YAAY,OAAO,mBAAmB,KAAA;CAE/E,OACE,oBAAC,WAAD;EACE,SAAA;EACS;EACS;EACF;EACV;EAEN,UAAA,qBAAC,QAAD;GAAQ,GAAI;GAAM,cAAY;GAAoB;GAAS,UAAU,CAAC;GAAtE,UAAA,CACG,MACA,QACK;;CACC,CAAA;AAEf;;;ACvCA,MAAa,mBAAmB,EAE9B,MACA,SACA,kBACA,gBAGA,WAAW,qBACX,WAAW,OACX,GAAG,WAEH,oBAAC,WAAD;CACE,SAAA;CACM;CACG;CACS;CACF;CAEhB,UAAA,qBAAC,cAAD;EAAc,GAAI;EAAM,UAAU,CAAC;EAAnC,UAAA,CACG,CAAC,YAAY,oBAAC,MAAD,EAAM,WAAU,YAAa,CAAA,GAC1C,QACW;;AACL,CAAA"}
1
+ {"version":3,"file":"ClipboardButton-B1Hr_n_Z.js","names":[],"sources":["../src/blocks/ClipboardButton/ClipboardButton.tsx","../src/blocks/ClipboardButton/ClipboardInline.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\n\nimport { Button } from '../../components/Button';\nimport { Clipboard } from '../../components/Clipboard';\nimport { Copy } from '../../icons';\n\ntype ClipboardProps = Pick<\n ComponentProps<typeof Clipboard>,\n 'text' | 'tooltip' | 'tooltipPlacement' | 'tooltipVariant'\n>;\n\ntype ButtonProps = Omit<ComponentProps<typeof Button>, 'disabled' | 'icon'>;\n\ntype Props = ClipboardProps & ButtonProps & { icon?: ReactNode };\n\nconst DEFAULT_ICON: ReactNode = <Copy />;\nconst DEFAULT_ARIA_LABEL = 'Copy';\n\nexport const ClipboardButton = ({\n // clipboard props\n text,\n tooltip,\n tooltipPlacement,\n tooltipVariant,\n\n // button props\n icon = DEFAULT_ICON,\n variant = 'outline',\n children,\n ...rest\n}: Props) => {\n // Icon-only (no text children): the `tooltip` is visual only, not an accessible\n // name, so fall back to it (when it's a string) or a sensible default. A\n // consumer-supplied `aria-label` in `rest` still wins.\n // A non-empty string tooltip names the action; an empty/absent tooltip still\n // needs a name, so fall back to the default rather than an empty aria-label.\n const defaultAriaLabel =\n typeof tooltip === 'string' && tooltip.trim() ? tooltip : DEFAULT_ARIA_LABEL;\n const ariaLabel = rest['aria-label'] ?? (children == null ? defaultAriaLabel : undefined);\n\n return (\n <Clipboard\n asChild\n tooltip={tooltip}\n tooltipPlacement={tooltipPlacement}\n tooltipVariant={tooltipVariant}\n text={text}\n >\n <Button {...rest} aria-label={ariaLabel} variant={variant} disabled={!text}>\n {icon}\n {children}\n </Button>\n </Clipboard>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { ButtonInline } from '../../components/Button';\nimport { Clipboard } from '../../components/Clipboard';\nimport { Copy } from '../../icons';\n\ntype ClipboardProps = Pick<\n ComponentProps<typeof Clipboard>,\n 'text' | 'tooltip' | 'tooltipPlacement' | 'tooltipVariant'\n>;\n\ntype ButtonProps = Omit<ComponentProps<typeof ButtonInline>, 'disabled'>;\n\ntype Props = { hideIcon?: boolean } & ClipboardProps & ButtonProps;\n\nexport const ClipboardInline = ({\n // clipboard props\n text,\n tooltip,\n tooltipPlacement,\n tooltipVariant,\n\n // button props\n children = 'Copy To Clipboard',\n hideIcon = false,\n ...rest\n}: Props) => (\n <Clipboard\n asChild\n text={text}\n tooltip={tooltip}\n tooltipPlacement={tooltipPlacement}\n tooltipVariant={tooltipVariant}\n >\n <ButtonInline {...rest} disabled={!text}>\n {!hideIcon && <Copy className=\"tw:size-4\" />}\n {children}\n </ButtonInline>\n </Clipboard>\n);\n"],"mappings":";;;;;AAeA,MAAM,eAA0B,oBAAC,MAAD,CAAO,CAAA;AACvC,MAAM,qBAAqB;AAE3B,MAAa,mBAAmB,EAE9B,MACA,SACA,kBACA,gBAGA,OAAO,cACP,UAAU,WACV,UACA,GAAG,WACQ;CAMX,MAAM,mBACJ,OAAO,YAAY,YAAY,QAAQ,KAAK,IAAI,UAAU;CAC5D,MAAM,YAAY,KAAK,kBAAkB,YAAY,OAAO,mBAAmB,KAAA;CAE/E,OACE,oBAAC,WAAD;EACE,SAAA;EACS;EACS;EACF;EACV;EAEN,UAAA,qBAAC,QAAD;GAAQ,GAAI;GAAM,cAAY;GAAoB;GAAS,UAAU,CAAC;GAAtE,UAAA,CACG,MACA,QACK;;CACC,CAAA;AAEf;;;ACvCA,MAAa,mBAAmB,EAE9B,MACA,SACA,kBACA,gBAGA,WAAW,qBACX,WAAW,OACX,GAAG,WAEH,oBAAC,WAAD;CACE,SAAA;CACM;CACG;CACS;CACF;CAEhB,UAAA,qBAAC,cAAD;EAAc,GAAI;EAAM,UAAU,CAAC;EAAnC,UAAA,CACG,CAAC,YAAY,oBAAC,MAAD,EAAM,WAAU,YAAa,CAAA,GAC1C,QACW;;AACL,CAAA"}