@keboola/design 15.0.0 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. package/AGENTS.md +6 -5
  2. package/CHANGELOG.md +94 -0
  3. package/COMPONENT-API.md +62 -61
  4. package/dist/{AIKit-CaAW4GLx.js → AIKit-Cf5plya2.js} +381 -224
  5. package/dist/AIKit-Cf5plya2.js.map +1 -0
  6. package/dist/{Alert-Chz6KZ7e.js → Alert-DziS8n1H.js} +12 -19
  7. package/dist/{Alert-Chz6KZ7e.js.map → Alert-DziS8n1H.js.map} +1 -1
  8. package/dist/{AlertModal-D4AtpvLS.js → AlertModal-De04fFoy.js} +16 -26
  9. package/dist/AlertModal-De04fFoy.js.map +1 -0
  10. package/dist/{AppShell-C8V1KRr_.js → AppShell-BUa3U7-e.js} +6 -9
  11. package/dist/{AppShell-C8V1KRr_.js.map → AppShell-BUa3U7-e.js.map} +1 -1
  12. package/dist/{AutoSaveTextarea-BbMhC5Aq.js → AutoSaveTextarea-CXHOQSun.js} +4 -5
  13. package/dist/{AutoSaveTextarea-BbMhC5Aq.js.map → AutoSaveTextarea-CXHOQSun.js.map} +1 -1
  14. package/dist/{Badge-5GHIsgRS.js → Badge-CFRhducL.js} +18 -23
  15. package/dist/Badge-CFRhducL.js.map +1 -0
  16. package/dist/{BrandEditor-CTGtQUFZ.js → BrandEditor-hiLBX7az.js} +16 -23
  17. package/dist/{BrandEditor-CTGtQUFZ.js.map → BrandEditor-hiLBX7az.js.map} +1 -1
  18. package/dist/{BrandLogo-DkESE19K.js → BrandLogo-Dn7hhp2c.js} +4 -5
  19. package/dist/{BrandLogo-DkESE19K.js.map → BrandLogo-Dn7hhp2c.js.map} +1 -1
  20. package/dist/{Breadcrumb-B2YSNON4.js → Breadcrumb-uGFEIjFF.js} +17 -28
  21. package/dist/{Breadcrumb-B2YSNON4.js.map → Breadcrumb-uGFEIjFF.js.map} +1 -1
  22. package/dist/{Button-BNkyYU8u.js → Button-DbvGzEDb.js} +24 -20
  23. package/dist/Button-DbvGzEDb.js.map +1 -0
  24. package/dist/{Calendar-BnKi1kPu.js → Calendar-lJBTETbk.js} +752 -905
  25. package/dist/Calendar-lJBTETbk.js.map +1 -0
  26. package/dist/{Card-DxjGiqH8.js → Card-VIPfOVW5.js} +8 -14
  27. package/dist/{Card-DxjGiqH8.js.map → Card-VIPfOVW5.js.map} +1 -1
  28. package/dist/{Checkbox-CHDDJyAA.js → Checkbox-B2jLlyaO.js} +6 -8
  29. package/dist/{Checkbox-CHDDJyAA.js.map → Checkbox-B2jLlyaO.js.map} +1 -1
  30. package/dist/{Clipboard-DlwVZS1P.js → Clipboard-fAkDdpEu.js} +4 -5
  31. package/dist/{Clipboard-DlwVZS1P.js.map → Clipboard-fAkDdpEu.js.map} +1 -1
  32. package/dist/{ClipboardButton-B1Hr_n_Z.js → ClipboardButton-71Ugbl8c.js} +6 -8
  33. package/dist/{ClipboardButton-B1Hr_n_Z.js.map → ClipboardButton-71Ugbl8c.js.map} +1 -1
  34. package/dist/{CodeEditor-DVSPdfdo.js → CodeEditor-D_b-ZCng.js} +19 -31
  35. package/dist/{CodeEditor-DVSPdfdo.js.map → CodeEditor-D_b-ZCng.js.map} +1 -1
  36. package/dist/{Collapsible-DD4xTL75.js → Collapsible-zsXk4Vpp.js} +5 -8
  37. package/dist/{Collapsible-DD4xTL75.js.map → Collapsible-zsXk4Vpp.js.map} +1 -1
  38. package/dist/{ColorInput-B_eZIu39.js → ColorInput-Cjr1jkvy.js} +9 -12
  39. package/dist/{ColorInput-B_eZIu39.js.map → ColorInput-Cjr1jkvy.js.map} +1 -1
  40. package/dist/{ColorModeSwitch-B6UEzG0H.js → ColorModeSwitch-CuPYnJ2V.js} +5 -6
  41. package/dist/{ColorModeSwitch-B6UEzG0H.js.map → ColorModeSwitch-CuPYnJ2V.js.map} +1 -1
  42. package/dist/{Combobox-CaKqgstG.js → Combobox-DYjvYgl3.js} +38 -67
  43. package/dist/Combobox-DYjvYgl3.js.map +1 -0
  44. package/dist/{Command-DhXmqFLT.js → Command-BcTb6GsR.js} +14 -24
  45. package/dist/{Command-DhXmqFLT.js.map → Command-BcTb6GsR.js.map} +1 -1
  46. package/dist/{CopyField-D0Pg4Z0R.js → CopyField-CnwAvQz9.js} +16 -28
  47. package/dist/{CopyField-D0Pg4Z0R.js.map → CopyField-CnwAvQz9.js.map} +1 -1
  48. package/dist/{DateInput-BgbMDJkm.js → DateInput-DJNX7Vdx.js} +8 -10
  49. package/dist/{DateInput-BgbMDJkm.js.map → DateInput-DJNX7Vdx.js.map} +1 -1
  50. package/dist/{DatePicker-BXpDRo-R.js → DatePicker-CI59gF3S.js} +4 -5
  51. package/dist/{DatePicker-BXpDRo-R.js.map → DatePicker-CI59gF3S.js.map} +1 -1
  52. package/dist/{DateRangeInput-BW0-_jV0.js → DateRangeInput-B3g8cyS0.js} +8 -10
  53. package/dist/{DateRangeInput-BW0-_jV0.js.map → DateRangeInput-B3g8cyS0.js.map} +1 -1
  54. package/dist/{DateRangePicker-C4-DoWac.js → DateRangePicker-48yOB2qV.js} +9 -10
  55. package/dist/{DateRangePicker-C4-DoWac.js.map → DateRangePicker-48yOB2qV.js.map} +1 -1
  56. package/dist/{DiffView-Dy4z-n-1.js → DiffView-DITZdVbh.js} +7 -12
  57. package/dist/{DiffView-Dy4z-n-1.js.map → DiffView-DITZdVbh.js.map} +1 -1
  58. package/dist/{DropdownMenu-CcVbZ_5u.js → DropdownMenu-Ba9atqDa.js} +21 -37
  59. package/dist/DropdownMenu-Ba9atqDa.js.map +1 -0
  60. package/dist/{FieldBox-BrxLkY9C.js → FieldBox-DdSdJ3ZN.js} +6 -10
  61. package/dist/{FieldBox-BrxLkY9C.js.map → FieldBox-DdSdJ3ZN.js.map} +1 -1
  62. package/dist/{FieldItem-BHUqgSO1.js → FieldItem-D7eCMfMB.js} +6 -8
  63. package/dist/{FieldItem-BHUqgSO1.js.map → FieldItem-D7eCMfMB.js.map} +1 -1
  64. package/dist/{FieldItem-CPN1xjN5.d.ts → FieldItem-fqm3CNR8.d.ts} +7 -6
  65. package/dist/{FileUpload-BYFONpEl.js → FileUpload-DskvxhAr.js} +25 -45
  66. package/dist/{FileUpload-BYFONpEl.js.map → FileUpload-DskvxhAr.js.map} +1 -1
  67. package/dist/{Form-CAofWyMI.js → Form-BUNW7nlt.js} +24 -38
  68. package/dist/{Form-CAofWyMI.js.map → Form-BUNW7nlt.js.map} +1 -1
  69. package/dist/{FormGroup-V5kIgQRN.js → FormGroup-QJB21LKp.js} +12 -20
  70. package/dist/{FormGroup-V5kIgQRN.js.map → FormGroup-QJB21LKp.js.map} +1 -1
  71. package/dist/{FullScreenModal-DAvvlGOz.js → FullScreenModal-RzY5XxiG.js} +8 -12
  72. package/dist/{FullScreenModal-DAvvlGOz.js.map → FullScreenModal-RzY5XxiG.js.map} +1 -1
  73. package/dist/HoverCard-OGWKRXJ7.js +24 -0
  74. package/dist/HoverCard-OGWKRXJ7.js.map +1 -0
  75. package/dist/{InlineEdit-D4P0SvCB.js → InlineEdit-CXL0ZslO.js} +7 -8
  76. package/dist/{InlineEdit-D4P0SvCB.js.map → InlineEdit-CXL0ZslO.js.map} +1 -1
  77. package/dist/{InputGroup-CZv_7QlM.js → InputGroup-BWeanEo7.js} +9 -15
  78. package/dist/{InputGroup-CZv_7QlM.js.map → InputGroup-BWeanEo7.js.map} +1 -1
  79. package/dist/{Kbd-CflKthfu.js → Kbd-BprYCICe.js} +8 -13
  80. package/dist/{Kbd-CflKthfu.js.map → Kbd-BprYCICe.js.map} +1 -1
  81. package/dist/{MarkedText-DlmlJO0u.js → MarkedText-BrganZ_V.js} +4 -6
  82. package/dist/{MarkedText-DlmlJO0u.js.map → MarkedText-BrganZ_V.js.map} +1 -1
  83. package/dist/{MermaidDiagram-Te-5gOCU.js → MermaidDiagram-E3azndPk.js} +9 -11
  84. package/dist/{MermaidDiagram-Te-5gOCU.js.map → MermaidDiagram-E3azndPk.js.map} +1 -1
  85. package/dist/{Modal-CbUz-5YH.js → Modal-Cf_kPEBW.js} +14 -22
  86. package/dist/Modal-Cf_kPEBW.js.map +1 -0
  87. package/dist/{ModalTitle-cy0Ht9VY.js → ModalTitle-7vgpfc6B.js} +6 -9
  88. package/dist/ModalTitle-7vgpfc6B.js.map +1 -0
  89. package/dist/{MultiActionButtonGroup-Dzig87s1.js → MultiActionButtonGroup-8WQwL4UQ.js} +6 -8
  90. package/dist/{MultiActionButtonGroup-Dzig87s1.js.map → MultiActionButtonGroup-8WQwL4UQ.js.map} +1 -1
  91. package/dist/{Navbar-DHUS7XiU.js → Navbar-CRjxVboE.js} +13 -22
  92. package/dist/{Navbar-DHUS7XiU.js.map → Navbar-CRjxVboE.js.map} +1 -1
  93. package/dist/{OtpInput-CY8yCaJk.js → OtpInput-C5plPzGU.js} +7 -11
  94. package/dist/{OtpInput-CY8yCaJk.js.map → OtpInput-C5plPzGU.js.map} +1 -1
  95. package/dist/{PageHeader-CL1A6jFM.js → PageHeader-DosMyar2.js} +6 -10
  96. package/dist/{PageHeader-CL1A6jFM.js.map → PageHeader-DosMyar2.js.map} +1 -1
  97. package/dist/{PageLayout-C9aXTpqV.js → PageLayout-LcvJccOW.js} +5 -8
  98. package/dist/{PageLayout-C9aXTpqV.js.map → PageLayout-LcvJccOW.js.map} +1 -1
  99. package/dist/{PageToolbar-DJ5tdYla.js → PageToolbar-By2HznxO.js} +8 -10
  100. package/dist/{PageToolbar-DJ5tdYla.js.map → PageToolbar-By2HznxO.js.map} +1 -1
  101. package/dist/{Pagination-D27x5KmH.js → Pagination-DrXTrvfD.js} +11 -18
  102. package/dist/{Pagination-D27x5KmH.js.map → Pagination-DrXTrvfD.js.map} +1 -1
  103. package/dist/{Popconfirm-DwLCYNaF.js → Popconfirm-BJuDOHdv.js} +46 -25
  104. package/dist/Popconfirm-BJuDOHdv.js.map +1 -0
  105. package/dist/{Popover-DtUDwUVO.js → Popover-DhOPlWgF.js} +5 -7
  106. package/dist/Popover-DhOPlWgF.js.map +1 -0
  107. package/dist/{RadioGroup-B0TwHjBb.js → RadioGroup-B9oC8P15.js} +12 -18
  108. package/dist/{RadioGroup-B0TwHjBb.js.map → RadioGroup-B9oC8P15.js.map} +1 -1
  109. package/dist/{Resizable-D8zs0kcq.js → Resizable-Co-L3qg7.js} +4 -6
  110. package/dist/{Resizable-D8zs0kcq.js.map → Resizable-Co-L3qg7.js.map} +1 -1
  111. package/dist/{Search-vyZwGKMU.js → Search-OgaNjqQM.js} +26 -21
  112. package/dist/Search-OgaNjqQM.js.map +1 -0
  113. package/dist/{SearchInput-DyYXyw3u.js → SearchInput-eLS-uvOn.js} +18 -29
  114. package/dist/SearchInput-eLS-uvOn.js.map +1 -0
  115. package/dist/{SectionNav-tLK3iF6c.js → SectionNav-L81iJBo3.js} +11 -14
  116. package/dist/{SectionNav-tLK3iF6c.js.map → SectionNav-L81iJBo3.js.map} +1 -1
  117. package/dist/{Select-B22hB_-w.js → Select-DRdkdzBp.js} +29 -26
  118. package/dist/Select-DRdkdzBp.js.map +1 -0
  119. package/dist/{Sheet-0TWKTqid.js → Sheet-DVb4XoJ5.js} +13 -20
  120. package/dist/Sheet-DVb4XoJ5.js.map +1 -0
  121. package/dist/{Sidebar-C5hdANBU.js → Sidebar-DYvodJWN.js} +43 -75
  122. package/dist/{Sidebar-C5hdANBU.js.map → Sidebar-DYvodJWN.js.map} +1 -1
  123. package/dist/{Slider-DrcsM8_G.js → Slider-B9IskDxf.js} +8 -12
  124. package/dist/{Slider-DrcsM8_G.js.map → Slider-B9IskDxf.js.map} +1 -1
  125. package/dist/{Stepper-CQrUPVFL.js → Stepper-D7VspVEt.js} +11 -19
  126. package/dist/{Stepper-CQrUPVFL.js.map → Stepper-D7VspVEt.js.map} +1 -1
  127. package/dist/{Switch-DccpSpzC.js → Switch-DONWW7ju.js} +4 -6
  128. package/dist/{Switch-DccpSpzC.js.map → Switch-DONWW7ju.js.map} +1 -1
  129. package/dist/{Table-CilEvpMq.js → Table-BwgBm3hJ.js} +12 -21
  130. package/dist/{Table-CilEvpMq.js.map → Table-BwgBm3hJ.js.map} +1 -1
  131. package/dist/{Tabs-Ck4uWf8U.js → Tabs-DmJB4l_N.js} +9 -14
  132. package/dist/{Tabs-Ck4uWf8U.js.map → Tabs-DmJB4l_N.js.map} +1 -1
  133. package/dist/{TextInput-CR0_USaY.js → TextInput--1CfZybC.js} +8 -10
  134. package/dist/TextInput--1CfZybC.js.map +1 -0
  135. package/dist/{ThemeProvider-BTK7AL-T.js → ThemeProvider-BCHllN7d.js} +8 -13
  136. package/dist/{ThemeProvider-BTK7AL-T.js.map → ThemeProvider-BCHllN7d.js.map} +1 -1
  137. package/dist/{TimePicker-CoRpiEM3.js → TimePicker-CCV3SOw5.js} +4 -6
  138. package/dist/{TimePicker-CoRpiEM3.js.map → TimePicker-CCV3SOw5.js.map} +1 -1
  139. package/dist/{Timeline-DUXgByUE.js → Timeline-EMOpTLAT.js} +8 -13
  140. package/dist/{Timeline-DUXgByUE.js.map → Timeline-EMOpTLAT.js.map} +1 -1
  141. package/dist/{Toast-937n7n8i.js → Toast-BOTINeTX.js} +4 -6
  142. package/dist/{Toast-937n7n8i.js.map → Toast-BOTINeTX.js.map} +1 -1
  143. package/dist/{ToggleAllTooltip-DEjbWFoj.js → ToggleAllTooltip-BFmA6TXf.js} +4 -6
  144. package/dist/{ToggleAllTooltip-DEjbWFoj.js.map → ToggleAllTooltip-BFmA6TXf.js.map} +1 -1
  145. package/dist/{ToggleGroup-BOz1yyz6.js → ToggleGroup-DsDS7k70.js} +3 -4
  146. package/dist/{ToggleGroup-BOz1yyz6.js.map → ToggleGroup-DsDS7k70.js.map} +1 -1
  147. package/dist/{Workbench-CxgNCs3I.js → Workbench-4s0xP6XU.js} +18 -32
  148. package/dist/{Workbench-CxgNCs3I.js.map → Workbench-4s0xP6XU.js.map} +1 -1
  149. package/dist/{ZoomableSvg-DnFXo2L4.js → ZoomableSvg-BRPGgaWJ.js} +9 -11
  150. package/dist/{ZoomableSvg-DnFXo2L4.js.map → ZoomableSvg-BRPGgaWJ.js.map} +1 -1
  151. package/dist/charts.d.ts +0 -16
  152. package/dist/charts.js +10 -19
  153. package/dist/charts.js.map +1 -1
  154. package/dist/{classNames-DcGnTh2N.js → classNames-DkX30VJU.js} +2 -3
  155. package/dist/{classNames-DcGnTh2N.js.map → classNames-DkX30VJU.js.map} +1 -1
  156. package/dist/editors.d.ts +2 -16
  157. package/dist/editors.js +16 -26
  158. package/dist/editors.js.map +1 -1
  159. package/dist/{findLiteralMatches-DgGLzyG0.js → findLiteralMatches-BaLZTPtx.js} +2 -3
  160. package/dist/{findLiteralMatches-DgGLzyG0.js.map → findLiteralMatches-BaLZTPtx.js.map} +1 -1
  161. package/dist/flint.d.ts +0 -2
  162. package/dist/flint.js +10 -14
  163. package/dist/flint.js.map +1 -1
  164. package/dist/{highlightCode-D354tCXO.js → highlightCode-2spZP7ZA.js} +2 -3
  165. package/dist/{highlightCode-D354tCXO.js.map → highlightCode-2spZP7ZA.js.map} +1 -1
  166. package/dist/{icons-ZIeZXXS7.js → icons-DDR9dFSr.js} +21 -40
  167. package/dist/{icons-ZIeZXXS7.js.map → icons-DDR9dFSr.js.map} +1 -1
  168. package/dist/icons.d.ts +1 -1
  169. package/dist/icons.js +1 -2
  170. package/dist/{index-D-itZ3VP.d.ts → index-BljYaTWL.d.ts} +1 -39
  171. package/dist/index.d.ts +452 -1296
  172. package/dist/index.js +76 -74
  173. package/dist/internal/blocks/AIKit.js +1 -2
  174. package/dist/internal/blocks/AppShell.js +1 -2
  175. package/dist/internal/blocks/AuthLayout.js +3 -4
  176. package/dist/internal/blocks/AutoSaveTextarea.js +1 -2
  177. package/dist/internal/blocks/BrandEditor.js +1 -2
  178. package/dist/internal/blocks/ChartPanel.js +3 -4
  179. package/dist/internal/blocks/ChipEditor.js +6 -7
  180. package/dist/internal/blocks/ClipboardButton.js +1 -2
  181. package/dist/internal/blocks/ColorInput.js +1 -2
  182. package/dist/internal/blocks/ColorModeSwitch.js +1 -2
  183. package/dist/internal/blocks/Command.js +1 -2
  184. package/dist/internal/blocks/CopyField.js +1 -2
  185. package/dist/internal/blocks/DashboardHero.js +2 -3
  186. package/dist/internal/blocks/DateInput.js +1 -2
  187. package/dist/internal/blocks/DateRangeInput.js +1 -2
  188. package/dist/internal/blocks/DiagramShared/DiagramSkeleton.js +1 -2
  189. package/dist/internal/blocks/EmptyConfigurationActionCard.js +2 -3
  190. package/dist/internal/blocks/EmptyState.js +1 -2
  191. package/dist/internal/blocks/ErrorState.js +1 -2
  192. package/dist/internal/blocks/ExportMenu.js +5 -6
  193. package/dist/internal/blocks/FacebookButton.js +3 -4
  194. package/dist/internal/blocks/Form/connectors/ComboboxField.js +3 -4
  195. package/dist/internal/blocks/Form/connectors/MultiComboboxField.js +2 -3
  196. package/dist/internal/blocks/Form.js +3 -2
  197. package/dist/internal/blocks/FormGroup.js +1 -2
  198. package/dist/internal/blocks/GoogleButton.js +3 -4
  199. package/dist/internal/blocks/InlineEdit.js +1 -2
  200. package/dist/internal/blocks/MicrosoftButton.js +3 -4
  201. package/dist/internal/blocks/MultiActionButtonGroup.js +1 -2
  202. package/dist/internal/blocks/MultiCombobox.js +7 -8
  203. package/dist/internal/blocks/NumberInput.js +2 -3
  204. package/dist/internal/blocks/OtpInput.js +1 -2
  205. package/dist/internal/blocks/PageHeader.js +1 -2
  206. package/dist/internal/blocks/PageLayout.js +1 -2
  207. package/dist/internal/blocks/PageToolbar.js +1 -2
  208. package/dist/internal/blocks/PasswordInput.js +5 -6
  209. package/dist/internal/blocks/SearchInput.js +1 -2
  210. package/dist/internal/blocks/SearchInputWithNavigation.js +6 -7
  211. package/dist/internal/blocks/SectionNav.js +1 -2
  212. package/dist/internal/blocks/SplitButton.js +4 -5
  213. package/dist/internal/blocks/StatCard.js +4 -6
  214. package/dist/internal/blocks/StatCard.js.map +1 -1
  215. package/dist/internal/blocks/TextInput.js +1 -2
  216. package/dist/internal/blocks/Textarea.js +3 -4
  217. package/dist/internal/blocks/TimeInput.js +6 -7
  218. package/dist/internal/components/Alert.js +1 -2
  219. package/dist/internal/components/AlertModal.js +1 -2
  220. package/dist/internal/components/Avatar.js +3 -4
  221. package/dist/internal/components/Badge.js +1 -2
  222. package/dist/internal/components/BrandLogo.js +1 -2
  223. package/dist/internal/components/Breadcrumb.js +1 -2
  224. package/dist/internal/components/Button.js +1 -2
  225. package/dist/internal/components/ButtonGroup.js +2 -3
  226. package/dist/internal/components/Calendar.js +1 -2
  227. package/dist/internal/components/Card.js +1 -2
  228. package/dist/internal/components/Checkbox.js +1 -2
  229. package/dist/internal/components/Clipboard.js +1 -2
  230. package/dist/internal/components/Collapsible.js +1 -2
  231. package/dist/internal/components/CollapsiblePanel.js +5 -6
  232. package/dist/internal/components/Combobox.js +1 -2
  233. package/dist/internal/components/DatePicker.js +1 -2
  234. package/dist/internal/components/DateRangePicker.js +1 -2
  235. package/dist/internal/components/DiffView.js +1 -2
  236. package/dist/internal/components/DotsLoader.js +2 -3
  237. package/dist/internal/components/DropdownMenu.js +1 -2
  238. package/dist/internal/components/EmptySearchContent.js +1 -2
  239. package/dist/internal/components/FileUpload.js +1 -2
  240. package/dist/internal/components/FullScreenModal.js +1 -2
  241. package/dist/internal/components/HelpBlock.js +1 -2
  242. package/dist/internal/components/HoverCard.js +1 -2
  243. package/dist/internal/components/InputGroup.js +1 -2
  244. package/dist/internal/components/Kbd.js +1 -2
  245. package/dist/internal/components/Label.js +2 -3
  246. package/dist/internal/components/Link.js +2 -3
  247. package/dist/internal/components/MarkedText.js +1 -2
  248. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +3 -4
  249. package/dist/internal/components/MergeEditor/PaneHeader.js +1 -2
  250. package/dist/internal/components/MergeEditor/constants.js +1 -2
  251. package/dist/internal/components/MergeEditor/useMergeDiff.js +1 -2
  252. package/dist/internal/components/Modal.js +1 -2
  253. package/dist/internal/components/Navbar.js +1 -2
  254. package/dist/internal/components/Pagination.js +1 -2
  255. package/dist/internal/components/PanelWithDetails.js +4 -5
  256. package/dist/internal/components/Popconfirm.js +1 -2
  257. package/dist/internal/components/Popover.js +1 -2
  258. package/dist/internal/components/Progress.js +2 -3
  259. package/dist/internal/components/RadioGroup.js +1 -2
  260. package/dist/internal/components/Resizable.js +1 -2
  261. package/dist/internal/components/ScrollArea.js +3 -5
  262. package/dist/internal/components/ScrollArea.js.map +1 -1
  263. package/dist/internal/components/Search.js +1 -2
  264. package/dist/internal/components/Select.js +1 -2
  265. package/dist/internal/components/Separator.js +2 -3
  266. package/dist/internal/components/Sheet.js +1 -2
  267. package/dist/internal/components/Sidebar.js +1 -2
  268. package/dist/internal/components/Skeleton/Skeleton.js +2 -3
  269. package/dist/internal/components/Skeleton/SkeletonList.js +2 -3
  270. package/dist/internal/components/Slider.js +1 -2
  271. package/dist/internal/components/SpotlightBackdrop.js +3 -5
  272. package/dist/internal/components/SpotlightBackdrop.js.map +1 -1
  273. package/dist/internal/components/Stepper.js +1 -2
  274. package/dist/internal/components/Switch.js +1 -2
  275. package/dist/internal/components/Table.js +1 -2
  276. package/dist/internal/components/Tabs.js +1 -2
  277. package/dist/internal/components/ThemeProvider.js +2 -2
  278. package/dist/internal/components/TimePicker.js +1 -2
  279. package/dist/internal/components/Timeline.js +1 -2
  280. package/dist/internal/components/Toast.js +2 -2
  281. package/dist/internal/components/Toggle.js +2 -3
  282. package/dist/internal/components/ToggleGroup.js +1 -2
  283. package/dist/internal/components/Tooltip.js +1 -2
  284. package/dist/internal/components/Truncated.js +3 -4
  285. package/dist/internal/components/Workbench.js +1 -2
  286. package/dist/internal/components/ZoomableSvg.js +1 -2
  287. package/dist/internal/hooks/useAltDigitHotkey.js +1 -2
  288. package/dist/internal/hooks/useAutosizeInput.js +1 -2
  289. package/dist/internal/hooks/useScrollbarPosition.js +2 -3
  290. package/dist/internal/hooks/useStableCallback.js +1 -2
  291. package/dist/internal/hooks/useTimeout.js +18 -0
  292. package/dist/internal/hooks/useTimeout.js.map +1 -0
  293. package/dist/internal/utils/accessibleName.js +1 -2
  294. package/dist/internal/utils/mergeRefs.js +1 -2
  295. package/dist/internal/utils.js +3 -3
  296. package/dist/markdown-editor.d.ts +0 -4
  297. package/dist/markdown-editor.js +30 -49
  298. package/dist/markdown-editor.js.map +1 -1
  299. package/dist/mermaid.d.ts +0 -2
  300. package/dist/mermaid.js +1 -2
  301. package/dist/rjsf.d.ts +0 -8
  302. package/dist/rjsf.js +47 -78
  303. package/dist/rjsf.js.map +1 -1
  304. package/dist/{rolldown-runtime-Bdc48AWt.js → rolldown-runtime-BrwM56v-.js} +2 -3
  305. package/dist/{styles-T8xwr0sR.js → styles-BXXXosW_.js} +2 -3
  306. package/dist/{styles-T8xwr0sR.js.map → styles-BXXXosW_.js.map} +1 -1
  307. package/dist/{styles-DxazJ8Mz.js → styles-nwtCRF7y.js} +2 -3
  308. package/dist/{styles-DxazJ8Mz.js.map → styles-nwtCRF7y.js.map} +1 -1
  309. package/dist/styles.css +1 -1
  310. package/dist/{svgCache-Dhmbe-7i.js → svgCache-BzvN_fgr.js} +2 -3
  311. package/dist/{svgCache-Dhmbe-7i.js.map → svgCache-BzvN_fgr.js.map} +1 -1
  312. package/dist/{svgTransforms-Hnvev3Vs.js → svgTransforms-BBxxO9T6.js} +4 -6
  313. package/dist/{svgTransforms-Hnvev3Vs.js.map → svgTransforms-BBxxO9T6.js.map} +1 -1
  314. package/dist/testing.d.ts +0 -2
  315. package/dist/testing.js +2 -3
  316. package/dist/{themeScopeContext-CEVXbYvZ.js → themeScopeContext-BZGPdyG8.js} +6 -11
  317. package/dist/{themeScopeContext-CEVXbYvZ.js.map → themeScopeContext-BZGPdyG8.js.map} +1 -1
  318. package/dist/{themeTokens-DCeb62ap.js → themeTokens-B60cQtAY.js} +4 -6
  319. package/dist/{themeTokens-DCeb62ap.js.map → themeTokens-B60cQtAY.js.map} +1 -1
  320. package/dist/{toast-Y3cTMBW8.js → toast-Dzj1EFOb.js} +10 -17
  321. package/dist/{toast-Y3cTMBW8.js.map → toast-Dzj1EFOb.js.map} +1 -1
  322. package/dist/{types-BPcAjMG0.d.ts → types-CsZuwfxc.d.ts} +1 -3
  323. package/dist/{useControllableState-CUYXMsfz.js → useControllableState-BCvUOC6G.js} +2 -3
  324. package/dist/{useControllableState-CUYXMsfz.js.map → useControllableState-BCvUOC6G.js.map} +1 -1
  325. package/dist/{useElement-D-RjrGa4.js → useElement-Dcoo9Jlr.js} +2 -3
  326. package/dist/{useElement-D-RjrGa4.js.map → useElement-Dcoo9Jlr.js.map} +1 -1
  327. package/dist/{useMergeDiff-CvowEXJ1.js → useMergeDiff-DFIATaTw.js} +3 -5
  328. package/dist/{useMergeDiff-CvowEXJ1.js.map → useMergeDiff-DFIATaTw.js.map} +1 -1
  329. package/dist/{utils-DwC9u0tM.js → utils-DjFceY3H.js} +18 -34
  330. package/dist/utils-DjFceY3H.js.map +1 -0
  331. package/dist/vega.d.ts +1 -5
  332. package/dist/vega.js +3 -4
  333. package/dist/{vegaTheme-ISwGXvof.js → vegaTheme-BcTNRmVS.js} +3 -4
  334. package/dist/{vegaTheme-ISwGXvof.js.map → vegaTheme-BcTNRmVS.js.map} +1 -1
  335. package/dist/{vegaTokens-DCkvpIVE.js → vegaTokens-DnCcy7JY.js} +3 -4
  336. package/dist/{vegaTokens-DCkvpIVE.js.map → vegaTokens-DnCcy7JY.js.map} +1 -1
  337. package/package.json +40 -40
  338. package/src/styles.css +70 -4
  339. package/src/theme.css +117 -11
  340. package/dist/AIKit-CaAW4GLx.js.map +0 -1
  341. package/dist/AlertModal-D4AtpvLS.js.map +0 -1
  342. package/dist/Badge-5GHIsgRS.js.map +0 -1
  343. package/dist/Button-BNkyYU8u.js.map +0 -1
  344. package/dist/Calendar-BnKi1kPu.js.map +0 -1
  345. package/dist/Combobox-CaKqgstG.js.map +0 -1
  346. package/dist/DropdownMenu-CcVbZ_5u.js.map +0 -1
  347. package/dist/HoverCard-Cv5rmvJq.js +0 -26
  348. package/dist/HoverCard-Cv5rmvJq.js.map +0 -1
  349. package/dist/Modal-CbUz-5YH.js.map +0 -1
  350. package/dist/ModalTitle-cy0Ht9VY.js.map +0 -1
  351. package/dist/Popconfirm-DwLCYNaF.js.map +0 -1
  352. package/dist/Popover-DtUDwUVO.js.map +0 -1
  353. package/dist/Search-vyZwGKMU.js.map +0 -1
  354. package/dist/SearchInput-DyYXyw3u.js.map +0 -1
  355. package/dist/Select-B22hB_-w.js.map +0 -1
  356. package/dist/Sheet-0TWKTqid.js.map +0 -1
  357. package/dist/TextInput-CR0_USaY.js.map +0 -1
  358. package/dist/utils-DwC9u0tM.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Slider-DrcsM8_G.js","names":["RadixThumb","RadixTrack","RadixRange"],"sources":["../src/components/Slider/useInteracting.ts","../src/components/Slider/SliderThumb.tsx","../src/components/Slider/SliderTrack.tsx","../src/components/Slider/Slider.tsx"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\ntype InteractingRef = (element: HTMLElement | null) => void;\n\nexport const useInteracting = (): readonly [boolean, InteractingRef] => {\n const [isInteracting, setIsInteracting] = useState(false);\n const cleanupRef = useRef<(() => void) | null>(null);\n\n const setRef = useCallback<InteractingRef>((element) => {\n cleanupRef.current?.();\n cleanupRef.current = null;\n if (!element) return;\n\n let hover = false;\n let focus = false;\n let press = false;\n const recompute = () => setIsInteracting(hover || focus || press);\n\n const handleEnter = () => {\n hover = true;\n recompute();\n };\n const handleLeave = () => {\n hover = false;\n recompute();\n };\n const handleFocus = () => {\n focus = true;\n recompute();\n };\n const handleBlur = () => {\n focus = false;\n recompute();\n };\n const handleDown = () => {\n press = true;\n recompute();\n };\n const handleRelease = () => {\n press = false;\n recompute();\n };\n\n element.addEventListener('pointerenter', handleEnter);\n element.addEventListener('pointerleave', handleLeave);\n element.addEventListener('focus', handleFocus);\n element.addEventListener('blur', handleBlur);\n element.addEventListener('pointerdown', handleDown);\n element.addEventListener('pointerup', handleRelease);\n element.addEventListener('pointercancel', handleRelease);\n\n cleanupRef.current = () => {\n element.removeEventListener('pointerenter', handleEnter);\n element.removeEventListener('pointerleave', handleLeave);\n element.removeEventListener('focus', handleFocus);\n element.removeEventListener('blur', handleBlur);\n element.removeEventListener('pointerdown', handleDown);\n element.removeEventListener('pointerup', handleRelease);\n element.removeEventListener('pointercancel', handleRelease);\n };\n }, []);\n\n return [isInteracting, setRef] as const;\n};\n","import type { ComponentProps, ReactNode } from 'react';\nimport { Thumb as RadixThumb } from '@radix-ui/react-slider';\n\nimport { cn, mergeRefs } from '../../utils';\nimport { buttonVariants } from '../Button';\nimport { Tooltip } from '../Tooltip';\n\nimport { useInteracting } from './useInteracting';\n\ntype Props = ComponentProps<typeof RadixThumb> & {\n tooltip?: ReactNode;\n tooltipSide?: ComponentProps<typeof Tooltip.Content>['placement'];\n};\n\nexport const SliderThumb = ({\n ref: forwardedRef,\n className,\n tooltip,\n tooltipSide = 'top',\n ...props\n}: Props) => {\n const [isInteracting, interactingRef] = useInteracting();\n\n const thumb = (\n <RadixThumb\n ref={mergeRefs(forwardedRef ?? null, interactingRef)}\n className={cn(\n buttonVariants({ variant: 'outline', size: 'icon-sm' }),\n\n // layout\n 'tw:p-0',\n 'tw:active:opacity-100',\n 'tw:block',\n 'tw:size-4',\n 'tw:rounded-full',\n\n // cursors\n 'tw:data-[disabled]:cursor-not-allowed',\n 'tw:[&:not([data-disabled])]:cursor-pointer',\n\n className,\n )}\n {...props}\n />\n );\n\n if (tooltip == null) return thumb;\n\n return (\n <Tooltip.Root open={isInteracting}>\n <Tooltip.Trigger asChild>{thumb}</Tooltip.Trigger>\n <Tooltip.Content variant=\"action\" placement={tooltipSide}>\n {tooltip}\n </Tooltip.Content>\n </Tooltip.Root>\n );\n};\n","import type { ComponentProps } from 'react';\nimport { Range as RadixRange, Track as RadixTrack } from '@radix-ui/react-slider';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof RadixTrack> & { rangeClassName?: string };\n\nexport const SliderTrack = ({ ref, className, ...props }: Props) => (\n <RadixTrack\n ref={ref}\n className={cn(\n // layout\n 'tw:relative',\n 'tw:grow',\n 'tw:w-full',\n 'tw:h-1.5',\n 'tw:overflow-hidden',\n\n // style\n 'tw:rounded-full',\n 'tw:bg-muted',\n\n // vertical orientation\n 'tw:data-[orientation=vertical]:h-full',\n 'tw:data-[orientation=vertical]:w-1.5',\n )}\n {...props}\n >\n <RadixRange\n className={cn(\n // layout\n 'tw:absolute',\n 'tw:h-full',\n\n // style\n 'tw:bg-primary',\n\n // vertical orientation\n 'tw:data-[orientation=vertical]:w-full',\n\n className,\n )}\n />\n </RadixTrack>\n);\n","import { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { Root } from '@radix-ui/react-slider';\n\nimport { cn } from '../../utils';\nimport { TooltipProvider } from '../Tooltip';\n\nimport { SliderThumb } from './SliderThumb';\nimport { SliderTrack } from './SliderTrack';\n\nexport type ThumbTooltipFn = (value: number, index: number) => ReactNode;\n\ntype Props = ComponentProps<typeof Root> & {\n thumbTooltip?: ThumbTooltipFn;\n thumbTooltipSide?: ComponentProps<typeof SliderThumb>['tooltipSide'];\n rangeClassName?: string;\n};\n\nexport const Slider = ({\n ref,\n className,\n value,\n defaultValue,\n min = 0,\n max = 100,\n onValueChange,\n thumbTooltip,\n thumbTooltipSide,\n rangeClassName,\n ...rest\n}: Props) => {\n const isControlled = Array.isArray(value);\n\n const [internalValues, setInternalValues] = useState<number[]>(() => {\n if (isControlled) return value;\n if (Array.isArray(defaultValue)) return defaultValue;\n return [min];\n });\n\n const liveValues = isControlled ? value : internalValues;\n\n const handleValueChange = (next: number[]) => {\n if (!isControlled) setInternalValues(next);\n onValueChange?.(next);\n };\n\n const body = (\n <Root\n ref={ref}\n value={liveValues}\n min={min}\n max={max}\n onValueChange={handleValueChange}\n className={cn(\n 'tw:relative',\n 'tw:flex',\n 'tw:items-center',\n 'tw:w-full',\n\n 'tw:touch-none',\n 'tw:select-none',\n\n 'tw:data-[orientation=vertical]:h-full',\n 'tw:data-[orientation=vertical]:w-auto',\n 'tw:data-[orientation=vertical]:flex-col',\n\n 'tw:data-[disabled]:opacity-disabled',\n className,\n )}\n {...rest}\n >\n <SliderTrack className={rangeClassName} />\n {liveValues.map((thumbValue, index) => (\n <SliderThumb\n // oxlint-disable-next-line react/no-array-index-key\n key={index}\n tooltip={thumbTooltip?.(thumbValue, index)}\n tooltipSide={thumbTooltipSide}\n />\n ))}\n </Root>\n );\n\n return thumbTooltip ? <TooltipProvider>{body}</TooltipProvider> : body;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Slider-B9IskDxf.js","names":["RadixThumb","RadixTrack","RadixRange"],"sources":["../src/components/Slider/useInteracting.ts","../src/components/Slider/SliderThumb.tsx","../src/components/Slider/SliderTrack.tsx","../src/components/Slider/Slider.tsx"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\ntype InteractingRef = (element: HTMLElement | null) => void;\n\nexport const useInteracting = (): readonly [boolean, InteractingRef] => {\n const [isInteracting, setIsInteracting] = useState(false);\n const cleanupRef = useRef<(() => void) | null>(null);\n\n const setRef = useCallback<InteractingRef>((element) => {\n cleanupRef.current?.();\n cleanupRef.current = null;\n if (!element) return;\n\n let hover = false;\n let focus = false;\n let press = false;\n const recompute = () => setIsInteracting(hover || focus || press);\n\n const handleEnter = () => {\n hover = true;\n recompute();\n };\n const handleLeave = () => {\n hover = false;\n recompute();\n };\n const handleFocus = () => {\n focus = true;\n recompute();\n };\n const handleBlur = () => {\n focus = false;\n recompute();\n };\n const handleDown = () => {\n press = true;\n recompute();\n };\n const handleRelease = () => {\n press = false;\n recompute();\n };\n\n element.addEventListener('pointerenter', handleEnter);\n element.addEventListener('pointerleave', handleLeave);\n element.addEventListener('focus', handleFocus);\n element.addEventListener('blur', handleBlur);\n element.addEventListener('pointerdown', handleDown);\n element.addEventListener('pointerup', handleRelease);\n element.addEventListener('pointercancel', handleRelease);\n\n cleanupRef.current = () => {\n element.removeEventListener('pointerenter', handleEnter);\n element.removeEventListener('pointerleave', handleLeave);\n element.removeEventListener('focus', handleFocus);\n element.removeEventListener('blur', handleBlur);\n element.removeEventListener('pointerdown', handleDown);\n element.removeEventListener('pointerup', handleRelease);\n element.removeEventListener('pointercancel', handleRelease);\n };\n }, []);\n\n return [isInteracting, setRef] as const;\n};\n","import type { ComponentProps, ReactNode } from 'react';\nimport { Thumb as RadixThumb } from '@radix-ui/react-slider';\n\nimport { cn, mergeRefs } from '../../utils';\nimport { buttonVariants } from '../Button';\nimport { Tooltip } from '../Tooltip';\n\nimport { useInteracting } from './useInteracting';\n\ntype Props = ComponentProps<typeof RadixThumb> & {\n tooltip?: ReactNode;\n tooltipSide?: ComponentProps<typeof Tooltip.Content>['placement'];\n};\n\nexport const SliderThumb = ({\n ref: forwardedRef,\n className,\n tooltip,\n tooltipSide = 'top',\n ...props\n}: Props) => {\n const [isInteracting, interactingRef] = useInteracting();\n\n const thumb = (\n <RadixThumb\n ref={mergeRefs(forwardedRef ?? null, interactingRef)}\n className={cn(\n buttonVariants({ variant: 'outline', size: 'icon-sm' }),\n\n // layout\n 'tw:p-0',\n 'tw:active:opacity-100',\n 'tw:block',\n 'tw:size-4',\n 'tw:rounded-full',\n\n // cursors\n 'tw:data-[disabled]:cursor-not-allowed',\n 'tw:[&:not([data-disabled])]:cursor-pointer',\n\n className,\n )}\n {...props}\n />\n );\n\n if (tooltip == null) return thumb;\n\n return (\n <Tooltip.Root open={isInteracting}>\n <Tooltip.Trigger asChild>{thumb}</Tooltip.Trigger>\n <Tooltip.Content variant=\"action\" placement={tooltipSide}>\n {tooltip}\n </Tooltip.Content>\n </Tooltip.Root>\n );\n};\n","import type { ComponentProps } from 'react';\nimport { Range as RadixRange, Track as RadixTrack } from '@radix-ui/react-slider';\n\nimport { cn } from '../../utils';\n\ntype Props = ComponentProps<typeof RadixTrack> & { rangeClassName?: string };\n\nexport const SliderTrack = ({ ref, className, ...props }: Props) => (\n <RadixTrack\n ref={ref}\n className={cn(\n // layout\n 'tw:relative',\n 'tw:grow',\n 'tw:w-full',\n 'tw:h-1.5',\n 'tw:overflow-hidden',\n\n // style\n 'tw:rounded-full',\n 'tw:bg-muted',\n\n // vertical orientation\n 'tw:data-[orientation=vertical]:h-full',\n 'tw:data-[orientation=vertical]:w-1.5',\n )}\n {...props}\n >\n <RadixRange\n className={cn(\n // layout\n 'tw:absolute',\n 'tw:h-full',\n\n // style\n 'tw:bg-primary',\n\n // vertical orientation\n 'tw:data-[orientation=vertical]:w-full',\n\n className,\n )}\n />\n </RadixTrack>\n);\n","import { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { Root } from '@radix-ui/react-slider';\n\nimport { cn } from '../../utils';\nimport { TooltipProvider } from '../Tooltip';\n\nimport { SliderThumb } from './SliderThumb';\nimport { SliderTrack } from './SliderTrack';\n\nexport type ThumbTooltipFn = (value: number, index: number) => ReactNode;\n\ntype Props = ComponentProps<typeof Root> & {\n thumbTooltip?: ThumbTooltipFn;\n thumbTooltipSide?: ComponentProps<typeof SliderThumb>['tooltipSide'];\n rangeClassName?: string;\n};\n\nexport const Slider = ({\n ref,\n className,\n value,\n defaultValue,\n min = 0,\n max = 100,\n onValueChange,\n thumbTooltip,\n thumbTooltipSide,\n rangeClassName,\n ...rest\n}: Props) => {\n const isControlled = Array.isArray(value);\n\n const [internalValues, setInternalValues] = useState<number[]>(() => {\n if (isControlled) return value;\n if (Array.isArray(defaultValue)) return defaultValue;\n return [min];\n });\n\n const liveValues = isControlled ? value : internalValues;\n\n const handleValueChange = (next: number[]) => {\n if (!isControlled) setInternalValues(next);\n onValueChange?.(next);\n };\n\n const body = (\n <Root\n ref={ref}\n value={liveValues}\n min={min}\n max={max}\n onValueChange={handleValueChange}\n className={cn(\n 'tw:relative',\n 'tw:flex',\n 'tw:items-center',\n 'tw:w-full',\n\n 'tw:touch-none',\n 'tw:select-none',\n\n 'tw:data-[orientation=vertical]:h-full',\n 'tw:data-[orientation=vertical]:w-auto',\n 'tw:data-[orientation=vertical]:flex-col',\n\n 'tw:data-[disabled]:opacity-disabled',\n className,\n )}\n {...rest}\n >\n <SliderTrack className={rangeClassName} />\n {liveValues.map((thumbValue, index) => (\n <SliderThumb\n // oxlint-disable-next-line react/no-array-index-key\n key={index}\n tooltip={thumbTooltip?.(thumbValue, index)}\n tooltipSide={thumbTooltipSide}\n />\n ))}\n </Root>\n );\n\n return thumbTooltip ? <TooltipProvider>{body}</TooltipProvider> : body;\n};\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { cn } from "./classNames-DcGnTh2N.js";
2
- import { Check, X } from "./icons-ZIeZXXS7.js";
1
+ import { cn } from "./classNames-DkX30VJU.js";
2
+ import { Check, X } from "./icons-DDR9dFSr.js";
3
3
  import { Children, createContext, isValidElement, use } from "react";
4
4
  import { cva } from "class-variance-authority";
5
5
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
- //#region src/components/Stepper/StepperContext.tsx
6
+ // src/components/Stepper/StepperContext.tsx
7
7
  const StepperContext = createContext({ orientation: "horizontal" });
8
8
  const useStepperContext = () => use(StepperContext);
9
9
  const StepItemContext = createContext(null);
@@ -17,8 +17,7 @@ const StepPositionContext = createContext({
17
17
  isLast: true
18
18
  });
19
19
  const useStepPositionContext = () => use(StepPositionContext);
20
- //#endregion
21
- //#region src/components/Stepper/styles.ts
20
+ // src/components/Stepper/styles.ts
22
21
  const stepperVariants = cva([], {
23
22
  defaultVariants: { orientation: "horizontal" },
24
23
  variants: { orientation: {
@@ -147,8 +146,7 @@ const connectorVariants = cva(["tw:shrink-0", "tw:transition-colors"], {
147
146
  }
148
147
  }
149
148
  });
150
- //#endregion
151
- //#region src/components/Stepper/StepperStepConnector.tsx
149
+ // src/components/Stepper/StepperStepConnector.tsx
152
150
  /**
153
151
  * Visual line between two steps. Internal — `Stepper` renders connectors automatically between
154
152
  * adjacent `Stepper.Step`s. Connector colour follows the preceding step's status.
@@ -165,8 +163,7 @@ const StepperStepConnector = ({ className, ...props }) => {
165
163
  ...props
166
164
  });
167
165
  };
168
- //#endregion
169
- //#region src/components/Stepper/StepperStepIndicator.tsx
166
+ // src/components/Stepper/StepperStepIndicator.tsx
170
167
  /**
171
168
  * Circular indicator slot. Renders the status icon (Check / X) or the step number automatically based on
172
169
  * the parent `Stepper.Step` status. Pass `children` to override.
@@ -186,8 +183,7 @@ const StepperStepIndicator = ({ children, className, ...props }) => {
186
183
  children: content
187
184
  });
188
185
  };
189
- //#endregion
190
- //#region src/components/Stepper/StepperStep.tsx
186
+ // src/components/Stepper/StepperStep.tsx
191
187
  /**
192
188
  * One step in a `Stepper`. Render `Stepper.StepIndicator`, `Stepper.StepLabel`, and optional
193
189
  * `Stepper.StepDescription` as children — order within the step is irrelevant; the indicator is
@@ -243,15 +239,13 @@ const StepperStep = ({ status = "upcoming", children, className, ...props }) =>
243
239
  })
244
240
  });
245
241
  };
246
- //#endregion
247
- //#region src/components/Stepper/StepperStepDescription.tsx
242
+ // src/components/Stepper/StepperStepDescription.tsx
248
243
  /** Optional secondary text below the step label. */
249
244
  const StepperStepDescription = ({ className, ...props }) => /* @__PURE__ */ jsx("span", {
250
245
  className: cn(descriptionClassnames, className),
251
246
  ...props
252
247
  });
253
- //#endregion
254
- //#region src/components/Stepper/StepperStepLabel.tsx
248
+ // src/components/Stepper/StepperStepLabel.tsx
255
249
  /** Step title — short label describing the step (e.g. "Account", "Payment"). */
256
250
  const StepperStepLabel = ({ className, ...props }) => {
257
251
  const { status } = useStepItemContext();
@@ -260,8 +254,7 @@ const StepperStepLabel = ({ className, ...props }) => {
260
254
  ...props
261
255
  });
262
256
  };
263
- //#endregion
264
- //#region src/components/Stepper/Stepper.tsx
257
+ // src/components/Stepper/Stepper.tsx
265
258
  const isStepElement = (child) => isValidElement(child) && child.type === StepperStep;
266
259
  const getStepStatus = (step) => step.props.status ?? "upcoming";
267
260
  /**
@@ -316,7 +309,6 @@ Stepper.StepIndicator = StepperStepIndicator;
316
309
  Stepper.StepLabel = StepperStepLabel;
317
310
  Stepper.StepDescription = StepperStepDescription;
318
311
  Stepper.StepConnector = StepperStepConnector;
319
- //#endregion
320
312
  export { Stepper };
321
313
 
322
- //# sourceMappingURL=Stepper-CQrUPVFL.js.map
314
+ //# sourceMappingURL=Stepper-D7VspVEt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stepper-CQrUPVFL.js","names":[],"sources":["../src/components/Stepper/StepperContext.tsx","../src/components/Stepper/styles.ts","../src/components/Stepper/StepperStepConnector.tsx","../src/components/Stepper/StepperStepIndicator.tsx","../src/components/Stepper/StepperStep.tsx","../src/components/Stepper/StepperStepDescription.tsx","../src/components/Stepper/StepperStepLabel.tsx","../src/components/Stepper/Stepper.tsx"],"sourcesContent":["import { createContext, use } from 'react';\n\nexport type StepperOrientation = 'horizontal' | 'vertical';\n\ntype StepperContextType = {\n orientation: StepperOrientation;\n onStepClick?: (index: number) => void;\n};\n\nexport const StepperContext = createContext<StepperContextType>({\n orientation: 'horizontal',\n});\n\nexport const useStepperContext = () => use(StepperContext);\n\ntype StepItemContextType = {\n index: number;\n isLast: boolean;\n status: StepStatus;\n};\n\nexport const StepItemContext = createContext<StepItemContextType | null>(null);\n\nexport const useStepItemContext = () => {\n const ctx = use(StepItemContext);\n if (!ctx) {\n throw new Error('Stepper.Step subcomponents must be used inside <Stepper.Step>.');\n }\n return ctx;\n};\n\n// Position context provided by `Stepper` to each child `Stepper.Step` —\n// carries the step's index in the rendered list and whether it's the last.\n// Separated from `StepItemContext` so the connector + step share a status\n// channel but only the step needs positional info.\ntype StepPositionContextType = {\n index: number;\n isLast: boolean;\n};\n\nexport const StepPositionContext = createContext<StepPositionContextType>({\n index: 0,\n isLast: true,\n});\n\nexport const useStepPositionContext = () => use(StepPositionContext);\n\nconst STEP_STATUS = {\n complete: 'complete',\n active: 'active',\n upcoming: 'upcoming',\n error: 'error',\n} as const;\n\nexport type StepStatus = (typeof STEP_STATUS)[keyof typeof STEP_STATUS];\n","import { cva } from 'class-variance-authority';\n\nexport const stepperVariants = cva([], {\n defaultVariants: {\n orientation: 'horizontal',\n },\n variants: {\n orientation: {\n // Single row of steps + inter-step connectors. Steps shrink to content; connectors flex-fill the gaps.\n horizontal: ['tw:flex', 'tw:flex-row', 'tw:items-start', 'tw:w-full'],\n // Stack steps vertically; each step renders its own indicator column with an internal connector.\n vertical: ['tw:flex', 'tw:flex-col', 'tw:w-full'],\n },\n },\n});\n\nexport const stepVariants = cva(['tw:group/step'], {\n defaultVariants: {\n orientation: 'horizontal',\n },\n variants: {\n orientation: {\n // Indicator on top, label/description below.\n horizontal: ['tw:flex', 'tw:flex-col', 'tw:items-center', 'tw:text-center', 'tw:gap-2'],\n // Indicator column on the left (with the vertical connector stretching beneath it),\n // content column on the right with the label/description.\n vertical: ['tw:flex', 'tw:flex-row', 'tw:items-stretch', 'tw:gap-3'],\n },\n interactive: {\n true: [\n // Reset native `<button>` chrome so the Step looks identical to its non-interactive sibling.\n 'tw:cursor-pointer',\n 'tw:bg-transparent',\n 'tw:border-0',\n 'tw:p-0',\n 'tw:font-[inherit]',\n 'tw:focus-visible:outline-hidden',\n 'tw:focus-visible:ring-2',\n 'tw:focus-visible:ring-ring/50',\n 'tw:focus-visible:rounded-md',\n ],\n false: [],\n },\n },\n});\n\nexport const indicatorVariants = cva(\n [\n 'tw:flex',\n 'tw:items-center',\n 'tw:justify-center',\n 'tw:shrink-0',\n 'tw:size-8',\n 'tw:rounded-full',\n 'tw:border',\n 'tw:text-sm',\n 'tw:font-medium',\n 'tw:transition-colors',\n 'tw:[&_svg]:size-4',\n ],\n {\n defaultVariants: {\n status: 'upcoming',\n },\n variants: {\n status: {\n complete: ['tw:bg-success', 'tw:text-success-foreground', 'tw:border-success'],\n active: ['tw:bg-primary', 'tw:text-primary-foreground', 'tw:border-primary'],\n upcoming: ['tw:bg-muted', 'tw:text-muted-foreground', 'tw:border-border'],\n error: ['tw:bg-destructive', 'tw:text-destructive-foreground', 'tw:border-destructive'],\n },\n },\n },\n);\n\nexport const labelVariants = cva(['tw:text-sm', 'tw:font-medium', 'tw:leading-5'], {\n defaultVariants: {\n status: 'upcoming',\n },\n variants: {\n status: {\n complete: ['tw:text-foreground'],\n active: ['tw:text-foreground'],\n upcoming: ['tw:text-muted-foreground'],\n error: ['tw:text-destructive'],\n },\n },\n});\n\nexport const descriptionClassnames = 'tw:text-xs tw:text-muted-foreground tw:mt-0.5';\n\n// Connector colour follows the preceding step's status (complete → success line forward,\n// error → destructive, otherwise muted border).\nexport const connectorVariants = cva(['tw:shrink-0', 'tw:transition-colors'], {\n defaultVariants: {\n orientation: 'horizontal',\n status: 'upcoming',\n },\n variants: {\n orientation: {\n // Inline sibling between horizontal steps. Push down by half the indicator height (16px).\n horizontal: ['tw:h-0.5', 'tw:flex-1', 'tw:mt-4', 'tw:min-w-8'],\n // Inside the indicator column under the indicator. `flex-1` + `min-h-6` ensures it\n // stretches to fill the space alongside the content block.\n vertical: ['tw:w-0.5', 'tw:flex-1', 'tw:min-h-6'],\n },\n status: {\n complete: ['tw:bg-success'],\n active: ['tw:bg-border'],\n upcoming: ['tw:bg-border'],\n error: ['tw:bg-destructive'],\n },\n },\n});\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { useStepItemContext, useStepperContext } from './StepperContext';\nimport { connectorVariants } from './styles';\n\ntype Props = ComponentProps<'span'>;\n\n/**\n * Visual line between two steps. Internal — `Stepper` renders connectors automatically between\n * adjacent `Stepper.Step`s. Connector colour follows the preceding step's status.\n */\nexport const StepperStepConnector = ({ className, ...props }: Props) => {\n const { orientation } = useStepperContext();\n const { status } = useStepItemContext();\n return (\n <span\n aria-hidden\n className={cn(connectorVariants({ orientation, status }), className)}\n {...props}\n />\n );\n};\n","import type { ComponentProps, ReactNode } from 'react';\n\nimport { Check, X } from '../../icons';\nimport { cn } from '../../utils';\n\nimport { useStepItemContext } from './StepperContext';\nimport { indicatorVariants } from './styles';\n\ntype Props = {\n /** Override the default content. By default renders Check for complete, X for error, step number otherwise. */\n children?: ReactNode;\n} & ComponentProps<'span'>;\n\n/**\n * Circular indicator slot. Renders the status icon (Check / X) or the step number automatically based on\n * the parent `Stepper.Step` status. Pass `children` to override.\n */\nexport const StepperStepIndicator = ({ children, className, ...props }: Props) => {\n const { index, status } = useStepItemContext();\n\n const content = (() => {\n if (children !== undefined) return children;\n if (status === 'complete') return <Check aria-hidden />;\n if (status === 'error') return <X aria-hidden />;\n return index + 1;\n })();\n\n return (\n <span\n aria-hidden={children === undefined}\n className={cn(indicatorVariants({ status }), className)}\n {...props}\n >\n {content}\n </span>\n );\n};\n","import { Children, type HTMLAttributes, isValidElement, type ReactNode } from 'react';\n\nimport { cn } from '../../utils';\n\nimport {\n StepItemContext,\n type StepStatus,\n useStepperContext,\n useStepPositionContext,\n} from './StepperContext';\nimport { StepperStepConnector } from './StepperStepConnector';\nimport { StepperStepIndicator } from './StepperStepIndicator';\nimport { stepVariants } from './styles';\n\ntype Props = {\n /** Visual state of the step. Drives indicator + connector colour. Defaults to `'upcoming'`. */\n status?: StepStatus;\n children: ReactNode;\n // Use generic HTML attributes so passthrough works for either `<div>` or `<button>`.\n} & Omit<HTMLAttributes<HTMLElement>, 'children'>;\n\n/**\n * One step in a `Stepper`. Render `Stepper.StepIndicator`, `Stepper.StepLabel`, and optional\n * `Stepper.StepDescription` as children — order within the step is irrelevant; the indicator is\n * extracted and rendered in the indicator slot.\n *\n * Set `Stepper`'s `onStepClick` prop to make every step a button; otherwise the Step renders as `<div>`.\n */\nexport const StepperStep = ({ status = 'upcoming', children, className, ...props }: Props) => {\n const { orientation, onStepClick } = useStepperContext();\n const { index, isLast } = useStepPositionContext();\n const interactive = Boolean(onStepClick);\n\n // Pull the indicator child out of `children` so we can position it\n // independently from the label/description block. Falls back to a default\n // indicator if the consumer didn't render one.\n // oxlint-disable-next-line react-x/no-children-to-array -- need to split indicator from label/description\n const allChildren = Children.toArray(children);\n const indicatorChild = allChildren.find(\n (child) => isValidElement(child) && child.type === StepperStepIndicator,\n );\n const contentChildren = allChildren.filter((child) => child !== indicatorChild);\n const indicator: ReactNode = indicatorChild ?? <StepperStepIndicator />;\n\n const handleClick = () => onStepClick?.(index);\n\n const stepContext = { index, isLast, status };\n\n const stepClassName = cn(stepVariants({ orientation, interactive }), className);\n\n const ariaCurrent = status === 'active' ? ('step' as const) : undefined;\n\n const inner =\n orientation === 'vertical' ? (\n <>\n <span className=\"tw:flex tw:flex-col tw:items-center tw:self-stretch\">\n {indicator}\n {!isLast && <StepperStepConnector />}\n </span>\n <span className=\"tw:flex tw:min-w-0 tw:flex-col tw:items-start tw:pb-6 tw:text-left\">\n {contentChildren}\n </span>\n </>\n ) : (\n <>\n {indicator}\n <span className=\"tw:flex tw:flex-col tw:items-center tw:text-center\">\n {contentChildren}\n </span>\n </>\n );\n\n return (\n <StepItemContext value={stepContext}>\n {interactive ? (\n <button\n {...props}\n type=\"button\"\n onClick={handleClick}\n aria-current={ariaCurrent}\n data-status={status}\n className={stepClassName}\n >\n {inner}\n </button>\n ) : (\n <div {...props} aria-current={ariaCurrent} data-status={status} className={stepClassName}>\n {inner}\n </div>\n )}\n </StepItemContext>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { descriptionClassnames } from './styles';\n\ntype Props = ComponentProps<'span'>;\n\n/** Optional secondary text below the step label. */\nexport const StepperStepDescription = ({ className, ...props }: Props) => (\n <span className={cn(descriptionClassnames, className)} {...props} />\n);\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { useStepItemContext } from './StepperContext';\nimport { labelVariants } from './styles';\n\ntype Props = ComponentProps<'span'>;\n\n/** Step title — short label describing the step (e.g. \"Account\", \"Payment\"). */\nexport const StepperStepLabel = ({ className, ...props }: Props) => {\n const { status } = useStepItemContext();\n return <span className={cn(labelVariants({ status }), className)} {...props} />;\n};\n","import {\n Children,\n type ComponentProps,\n isValidElement,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport type { VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../utils';\n\nimport {\n StepItemContext,\n StepperContext,\n type StepperOrientation,\n StepPositionContext,\n type StepStatus,\n} from './StepperContext';\nimport { StepperStep } from './StepperStep';\nimport { StepperStepConnector } from './StepperStepConnector';\nimport { StepperStepDescription } from './StepperStepDescription';\nimport { StepperStepIndicator } from './StepperStepIndicator';\nimport { StepperStepLabel } from './StepperStepLabel';\nimport { stepperVariants } from './styles';\n\ntype Props = {\n orientation?: StepperOrientation;\n /** Given, steps render as `<button>`s; omitted, as visual-only `<div>`s. */\n onStepClick?: (index: number) => void;\n children: ReactNode;\n} & Omit<ComponentProps<'ol'>, 'children'> &\n VariantProps<typeof stepperVariants>;\n\ntype StepElement = ReactElement<{ status?: StepStatus }>;\n\nconst isStepElement = (child: ReactNode): child is StepElement =>\n isValidElement(child) && child.type === StepperStep;\n\nconst getStepStatus = (step: StepElement): StepStatus => step.props.status ?? 'upcoming';\n\n/**\n * Linear progress indicator for a multi-step flow.\n *\n * **When to use:** a finite, ordered sequence (wizard, multi-step form, deploy pipeline).\n * **When NOT to use:** branching navigation → `Tabs`; unordered status list → `Timeline`;\n * a single percentage → `Progress`.\n * **Composition:** `Stepper.Step` + `StepIndicator` + `StepLabel`; connectors render automatically.\n */\nexport const Stepper = ({\n orientation = 'horizontal',\n onStepClick,\n children,\n className,\n ...props\n}: Props) => {\n // oxlint-disable-next-line react-x/no-children-to-array -- need step count for connectors + positional context\n const steps = Children.toArray(children).filter(isStepElement);\n const lastIndex = steps.length - 1;\n\n return (\n <StepperContext value={{ orientation, onStepClick }}>\n <ol\n className={cn(\n 'tailwindcss-preflight',\n 'tw:list-none',\n 'tw:p-0',\n 'tw:m-0',\n stepperVariants({ orientation }),\n className,\n )}\n {...props}\n >\n {steps.map((step, index) => {\n const isLast = index === lastIndex;\n const wrappedStep = (\n <StepPositionContext value={{ index, isLast }}>{step}</StepPositionContext>\n );\n\n // The <ol> keeps only <li> children; the horizontal connector goes inside the step's <li>.\n if (orientation === 'vertical') {\n return (\n // oxlint-disable-next-line react-x/no-array-index-key\n <li key={step.key ?? index} className=\"tw:contents\">\n {wrappedStep}\n </li>\n );\n }\n\n return (\n // oxlint-disable-next-line react-x/no-array-index-key\n <li key={step.key ?? index} className=\"tw:contents\">\n {wrappedStep}\n {!isLast && (\n // Coloured by the preceding step's status.\n <StepItemContext value={{ index: -1, isLast: false, status: getStepStatus(step) }}>\n <StepperStepConnector />\n </StepItemContext>\n )}\n </li>\n );\n })}\n </ol>\n </StepperContext>\n );\n};\n\nStepper.Step = StepperStep;\nStepper.StepIndicator = StepperStepIndicator;\nStepper.StepLabel = StepperStepLabel;\nStepper.StepDescription = StepperStepDescription;\nStepper.StepConnector = StepperStepConnector;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Stepper-D7VspVEt.js","names":[],"sources":["../src/components/Stepper/StepperContext.tsx","../src/components/Stepper/styles.ts","../src/components/Stepper/StepperStepConnector.tsx","../src/components/Stepper/StepperStepIndicator.tsx","../src/components/Stepper/StepperStep.tsx","../src/components/Stepper/StepperStepDescription.tsx","../src/components/Stepper/StepperStepLabel.tsx","../src/components/Stepper/Stepper.tsx"],"sourcesContent":["import { createContext, use } from 'react';\n\nexport type StepperOrientation = 'horizontal' | 'vertical';\n\ntype StepperContextType = {\n orientation: StepperOrientation;\n onStepClick?: (index: number) => void;\n};\n\nexport const StepperContext = createContext<StepperContextType>({\n orientation: 'horizontal',\n});\n\nexport const useStepperContext = () => use(StepperContext);\n\ntype StepItemContextType = {\n index: number;\n isLast: boolean;\n status: StepStatus;\n};\n\nexport const StepItemContext = createContext<StepItemContextType | null>(null);\n\nexport const useStepItemContext = () => {\n const ctx = use(StepItemContext);\n if (!ctx) {\n throw new Error('Stepper.Step subcomponents must be used inside <Stepper.Step>.');\n }\n return ctx;\n};\n\n// Position context provided by `Stepper` to each child `Stepper.Step` —\n// carries the step's index in the rendered list and whether it's the last.\n// Separated from `StepItemContext` so the connector + step share a status\n// channel but only the step needs positional info.\ntype StepPositionContextType = {\n index: number;\n isLast: boolean;\n};\n\nexport const StepPositionContext = createContext<StepPositionContextType>({\n index: 0,\n isLast: true,\n});\n\nexport const useStepPositionContext = () => use(StepPositionContext);\n\nconst STEP_STATUS = {\n complete: 'complete',\n active: 'active',\n upcoming: 'upcoming',\n error: 'error',\n} as const;\n\nexport type StepStatus = (typeof STEP_STATUS)[keyof typeof STEP_STATUS];\n","import { cva } from 'class-variance-authority';\n\nexport const stepperVariants = cva([], {\n defaultVariants: {\n orientation: 'horizontal',\n },\n variants: {\n orientation: {\n // Single row of steps + inter-step connectors. Steps shrink to content; connectors flex-fill the gaps.\n horizontal: ['tw:flex', 'tw:flex-row', 'tw:items-start', 'tw:w-full'],\n // Stack steps vertically; each step renders its own indicator column with an internal connector.\n vertical: ['tw:flex', 'tw:flex-col', 'tw:w-full'],\n },\n },\n});\n\nexport const stepVariants = cva(['tw:group/step'], {\n defaultVariants: {\n orientation: 'horizontal',\n },\n variants: {\n orientation: {\n // Indicator on top, label/description below.\n horizontal: ['tw:flex', 'tw:flex-col', 'tw:items-center', 'tw:text-center', 'tw:gap-2'],\n // Indicator column on the left (with the vertical connector stretching beneath it),\n // content column on the right with the label/description.\n vertical: ['tw:flex', 'tw:flex-row', 'tw:items-stretch', 'tw:gap-3'],\n },\n interactive: {\n true: [\n // Reset native `<button>` chrome so the Step looks identical to its non-interactive sibling.\n 'tw:cursor-pointer',\n 'tw:bg-transparent',\n 'tw:border-0',\n 'tw:p-0',\n 'tw:font-[inherit]',\n 'tw:focus-visible:outline-hidden',\n 'tw:focus-visible:ring-2',\n 'tw:focus-visible:ring-ring/50',\n 'tw:focus-visible:rounded-md',\n ],\n false: [],\n },\n },\n});\n\nexport const indicatorVariants = cva(\n [\n 'tw:flex',\n 'tw:items-center',\n 'tw:justify-center',\n 'tw:shrink-0',\n 'tw:size-8',\n 'tw:rounded-full',\n 'tw:border',\n 'tw:text-sm',\n 'tw:font-medium',\n 'tw:transition-colors',\n 'tw:[&_svg]:size-4',\n ],\n {\n defaultVariants: {\n status: 'upcoming',\n },\n variants: {\n status: {\n complete: ['tw:bg-success', 'tw:text-success-foreground', 'tw:border-success'],\n active: ['tw:bg-primary', 'tw:text-primary-foreground', 'tw:border-primary'],\n upcoming: ['tw:bg-muted', 'tw:text-muted-foreground', 'tw:border-border'],\n error: ['tw:bg-destructive', 'tw:text-destructive-foreground', 'tw:border-destructive'],\n },\n },\n },\n);\n\nexport const labelVariants = cva(['tw:text-sm', 'tw:font-medium', 'tw:leading-5'], {\n defaultVariants: {\n status: 'upcoming',\n },\n variants: {\n status: {\n complete: ['tw:text-foreground'],\n active: ['tw:text-foreground'],\n upcoming: ['tw:text-muted-foreground'],\n error: ['tw:text-destructive'],\n },\n },\n});\n\nexport const descriptionClassnames = 'tw:text-xs tw:text-muted-foreground tw:mt-0.5';\n\n// Connector colour follows the preceding step's status (complete → success line forward,\n// error → destructive, otherwise muted border).\nexport const connectorVariants = cva(['tw:shrink-0', 'tw:transition-colors'], {\n defaultVariants: {\n orientation: 'horizontal',\n status: 'upcoming',\n },\n variants: {\n orientation: {\n // Inline sibling between horizontal steps. Push down by half the indicator height (16px).\n horizontal: ['tw:h-0.5', 'tw:flex-1', 'tw:mt-4', 'tw:min-w-8'],\n // Inside the indicator column under the indicator. `flex-1` + `min-h-6` ensures it\n // stretches to fill the space alongside the content block.\n vertical: ['tw:w-0.5', 'tw:flex-1', 'tw:min-h-6'],\n },\n status: {\n complete: ['tw:bg-success'],\n active: ['tw:bg-border'],\n upcoming: ['tw:bg-border'],\n error: ['tw:bg-destructive'],\n },\n },\n});\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { useStepItemContext, useStepperContext } from './StepperContext';\nimport { connectorVariants } from './styles';\n\ntype Props = ComponentProps<'span'>;\n\n/**\n * Visual line between two steps. Internal — `Stepper` renders connectors automatically between\n * adjacent `Stepper.Step`s. Connector colour follows the preceding step's status.\n */\nexport const StepperStepConnector = ({ className, ...props }: Props) => {\n const { orientation } = useStepperContext();\n const { status } = useStepItemContext();\n return (\n <span\n aria-hidden\n className={cn(connectorVariants({ orientation, status }), className)}\n {...props}\n />\n );\n};\n","import type { ComponentProps, ReactNode } from 'react';\n\nimport { Check, X } from '../../icons';\nimport { cn } from '../../utils';\n\nimport { useStepItemContext } from './StepperContext';\nimport { indicatorVariants } from './styles';\n\ntype Props = {\n /** Override the default content. By default renders Check for complete, X for error, step number otherwise. */\n children?: ReactNode;\n} & ComponentProps<'span'>;\n\n/**\n * Circular indicator slot. Renders the status icon (Check / X) or the step number automatically based on\n * the parent `Stepper.Step` status. Pass `children` to override.\n */\nexport const StepperStepIndicator = ({ children, className, ...props }: Props) => {\n const { index, status } = useStepItemContext();\n\n const content = (() => {\n if (children !== undefined) return children;\n if (status === 'complete') return <Check aria-hidden />;\n if (status === 'error') return <X aria-hidden />;\n return index + 1;\n })();\n\n return (\n <span\n aria-hidden={children === undefined}\n className={cn(indicatorVariants({ status }), className)}\n {...props}\n >\n {content}\n </span>\n );\n};\n","import { Children, type HTMLAttributes, isValidElement, type ReactNode } from 'react';\n\nimport { cn } from '../../utils';\n\nimport {\n StepItemContext,\n type StepStatus,\n useStepperContext,\n useStepPositionContext,\n} from './StepperContext';\nimport { StepperStepConnector } from './StepperStepConnector';\nimport { StepperStepIndicator } from './StepperStepIndicator';\nimport { stepVariants } from './styles';\n\ntype Props = {\n /** Visual state of the step. Drives indicator + connector colour. Defaults to `'upcoming'`. */\n status?: StepStatus;\n children: ReactNode;\n // Use generic HTML attributes so passthrough works for either `<div>` or `<button>`.\n} & Omit<HTMLAttributes<HTMLElement>, 'children'>;\n\n/**\n * One step in a `Stepper`. Render `Stepper.StepIndicator`, `Stepper.StepLabel`, and optional\n * `Stepper.StepDescription` as children — order within the step is irrelevant; the indicator is\n * extracted and rendered in the indicator slot.\n *\n * Set `Stepper`'s `onStepClick` prop to make every step a button; otherwise the Step renders as `<div>`.\n */\nexport const StepperStep = ({ status = 'upcoming', children, className, ...props }: Props) => {\n const { orientation, onStepClick } = useStepperContext();\n const { index, isLast } = useStepPositionContext();\n const interactive = Boolean(onStepClick);\n\n // Pull the indicator child out of `children` so we can position it\n // independently from the label/description block. Falls back to a default\n // indicator if the consumer didn't render one.\n // oxlint-disable-next-line react-x/no-children-to-array -- need to split indicator from label/description\n const allChildren = Children.toArray(children);\n const indicatorChild = allChildren.find(\n (child) => isValidElement(child) && child.type === StepperStepIndicator,\n );\n const contentChildren = allChildren.filter((child) => child !== indicatorChild);\n const indicator: ReactNode = indicatorChild ?? <StepperStepIndicator />;\n\n const handleClick = () => onStepClick?.(index);\n\n const stepContext = { index, isLast, status };\n\n const stepClassName = cn(stepVariants({ orientation, interactive }), className);\n\n const ariaCurrent = status === 'active' ? ('step' as const) : undefined;\n\n const inner =\n orientation === 'vertical' ? (\n <>\n <span className=\"tw:flex tw:flex-col tw:items-center tw:self-stretch\">\n {indicator}\n {!isLast && <StepperStepConnector />}\n </span>\n <span className=\"tw:flex tw:min-w-0 tw:flex-col tw:items-start tw:pb-6 tw:text-left\">\n {contentChildren}\n </span>\n </>\n ) : (\n <>\n {indicator}\n <span className=\"tw:flex tw:flex-col tw:items-center tw:text-center\">\n {contentChildren}\n </span>\n </>\n );\n\n return (\n <StepItemContext value={stepContext}>\n {interactive ? (\n <button\n {...props}\n type=\"button\"\n onClick={handleClick}\n aria-current={ariaCurrent}\n data-status={status}\n className={stepClassName}\n >\n {inner}\n </button>\n ) : (\n <div {...props} aria-current={ariaCurrent} data-status={status} className={stepClassName}>\n {inner}\n </div>\n )}\n </StepItemContext>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { descriptionClassnames } from './styles';\n\ntype Props = ComponentProps<'span'>;\n\n/** Optional secondary text below the step label. */\nexport const StepperStepDescription = ({ className, ...props }: Props) => (\n <span className={cn(descriptionClassnames, className)} {...props} />\n);\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { useStepItemContext } from './StepperContext';\nimport { labelVariants } from './styles';\n\ntype Props = ComponentProps<'span'>;\n\n/** Step title — short label describing the step (e.g. \"Account\", \"Payment\"). */\nexport const StepperStepLabel = ({ className, ...props }: Props) => {\n const { status } = useStepItemContext();\n return <span className={cn(labelVariants({ status }), className)} {...props} />;\n};\n","import {\n Children,\n type ComponentProps,\n isValidElement,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport type { VariantProps } from 'class-variance-authority';\n\nimport { cn } from '../../utils';\n\nimport {\n StepItemContext,\n StepperContext,\n type StepperOrientation,\n StepPositionContext,\n type StepStatus,\n} from './StepperContext';\nimport { StepperStep } from './StepperStep';\nimport { StepperStepConnector } from './StepperStepConnector';\nimport { StepperStepDescription } from './StepperStepDescription';\nimport { StepperStepIndicator } from './StepperStepIndicator';\nimport { StepperStepLabel } from './StepperStepLabel';\nimport { stepperVariants } from './styles';\n\ntype Props = {\n orientation?: StepperOrientation;\n /** Given, steps render as `<button>`s; omitted, as visual-only `<div>`s. */\n onStepClick?: (index: number) => void;\n children: ReactNode;\n} & Omit<ComponentProps<'ol'>, 'children'> &\n VariantProps<typeof stepperVariants>;\n\ntype StepElement = ReactElement<{ status?: StepStatus }>;\n\nconst isStepElement = (child: ReactNode): child is StepElement =>\n isValidElement(child) && child.type === StepperStep;\n\nconst getStepStatus = (step: StepElement): StepStatus => step.props.status ?? 'upcoming';\n\n/**\n * Linear progress indicator for a multi-step flow.\n *\n * **When to use:** a finite, ordered sequence (wizard, multi-step form, deploy pipeline).\n * **When NOT to use:** branching navigation → `Tabs`; unordered status list → `Timeline`;\n * a single percentage → `Progress`.\n * **Composition:** `Stepper.Step` + `StepIndicator` + `StepLabel`; connectors render automatically.\n */\nexport const Stepper = ({\n orientation = 'horizontal',\n onStepClick,\n children,\n className,\n ...props\n}: Props) => {\n // oxlint-disable-next-line react-x/no-children-to-array -- need step count for connectors + positional context\n const steps = Children.toArray(children).filter(isStepElement);\n const lastIndex = steps.length - 1;\n\n return (\n <StepperContext value={{ orientation, onStepClick }}>\n <ol\n className={cn(\n 'tailwindcss-preflight',\n 'tw:list-none',\n 'tw:p-0',\n 'tw:m-0',\n stepperVariants({ orientation }),\n className,\n )}\n {...props}\n >\n {steps.map((step, index) => {\n const isLast = index === lastIndex;\n const wrappedStep = (\n <StepPositionContext value={{ index, isLast }}>{step}</StepPositionContext>\n );\n\n // The <ol> keeps only <li> children; the horizontal connector goes inside the step's <li>.\n if (orientation === 'vertical') {\n return (\n // oxlint-disable-next-line react-x/no-array-index-key\n <li key={step.key ?? index} className=\"tw:contents\">\n {wrappedStep}\n </li>\n );\n }\n\n return (\n // oxlint-disable-next-line react-x/no-array-index-key\n <li key={step.key ?? index} className=\"tw:contents\">\n {wrappedStep}\n {!isLast && (\n // Coloured by the preceding step's status.\n <StepItemContext value={{ index: -1, isLast: false, status: getStepStatus(step) }}>\n <StepperStepConnector />\n </StepItemContext>\n )}\n </li>\n );\n })}\n </ol>\n </StepperContext>\n );\n};\n\nStepper.Step = StepperStep;\nStepper.StepIndicator = StepperStepIndicator;\nStepper.StepLabel = StepperStepLabel;\nStepper.StepDescription = StepperStepDescription;\nStepper.StepConnector = StepperStepConnector;\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { FieldBox } from "./FieldBox-BrxLkY9C.js";
1
+ import { FieldBox } from "./FieldBox-DdSdJ3ZN.js";
2
2
  import { useId } from "react";
3
3
  import { cva } from "class-variance-authority";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  import { Root, Thumb } from "@radix-ui/react-switch";
6
- //#region src/components/Switch/styles.ts
6
+ // src/components/Switch/styles.ts
7
7
  const switchVariants = cva([
8
8
  "tailwindcss-preflight",
9
9
  "tw:shrink-0",
@@ -38,8 +38,7 @@ const thumbVariants = cva([
38
38
  "tw:data-[state=checked]:translate-x-[16px]",
39
39
  "tw:data-[state=unchecked]:translate-x-0.5"
40
40
  ]);
41
- //#endregion
42
- //#region src/components/Switch/Switch.tsx
41
+ // src/components/Switch/Switch.tsx
43
42
  const Switch = ({ ref, className, disabled = false, id: idProp, children, description, variant, position, ...props }) => {
44
43
  const fallbackId = useId();
45
44
  const id = idProp?.toString() ?? fallbackId;
@@ -60,7 +59,6 @@ const Switch = ({ ref, className, disabled = false, id: idProp, children, descri
60
59
  children: [/* @__PURE__ */ jsx(FieldBox.Title, { children }), description && /* @__PURE__ */ jsx(FieldBox.Description, { children: description })]
61
60
  });
62
61
  };
63
- //#endregion
64
62
  export { Switch };
65
63
 
66
- //# sourceMappingURL=Switch-DccpSpzC.js.map
64
+ //# sourceMappingURL=Switch-DONWW7ju.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Switch-DccpSpzC.js","names":[],"sources":["../src/components/Switch/styles.ts","../src/components/Switch/Switch.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const switchVariants = cva([\n 'tailwindcss-preflight',\n 'tw:shrink-0',\n 'tw:cursor-pointer',\n 'tw:disabled:cursor-not-allowed',\n 'tw:disabled:opacity-disabled',\n 'tw:peer',\n 'tw:inline-flex',\n 'tw:items-center',\n\n // track\n 'tw:w-9',\n 'tw:h-5',\n 'tw:rounded-full',\n 'tw:border',\n 'tw:border-transparent',\n 'tw:bg-input',\n 'tw:transition-colors',\n\n // checked\n 'tw:data-[state=checked]:bg-primary',\n\n // focus\n 'tw:focus-visible:outline-hidden',\n 'tw:focus-visible:border-primary',\n 'tw:focus-visible:ring-3',\n 'tw:focus-visible:ring-ring/50',\n]);\n\nexport const thumbVariants = cva([\n 'tw:block',\n 'tw:shrink-0',\n 'tw:pointer-events-none',\n 'tw:bg-white',\n 'tw:rounded-full',\n 'tw:size-4',\n 'tw:shadow-sm',\n 'tw:transition-transform',\n 'tw:data-[state=checked]:translate-x-[16px]',\n 'tw:data-[state=unchecked]:translate-x-0.5',\n]);\n","import { useId } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { Root, Thumb } from '@radix-ui/react-switch';\nimport type { VariantProps } from 'class-variance-authority';\n\nimport { FieldBox } from '../FieldBox';\nimport type { fieldBoxVariants } from '../FieldBox/styles';\n\nimport { switchVariants, thumbVariants } from './styles';\n\ntype Props = {\n id?: string | number;\n children?: ReactNode;\n description?: ReactNode;\n variant?: VariantProps<typeof fieldBoxVariants>['variant'];\n position?: 'start' | 'end';\n} & Omit<ComponentProps<typeof Root>, 'asChild' | 'id'>;\n\nexport const Switch = ({\n ref,\n className,\n disabled = false,\n id: idProp,\n children,\n description,\n variant,\n position,\n ...props\n}: Props) => {\n const fallbackId = useId();\n const id = idProp?.toString() ?? fallbackId;\n\n const switchElement = (\n <Root\n {...props}\n ref={ref}\n id={id}\n disabled={disabled}\n className={switchVariants({ className })}\n >\n <Thumb className={thumbVariants()} />\n </Root>\n );\n\n if (!children) return switchElement;\n\n return (\n <FieldBox htmlFor={id} variant={variant} position={position} control={switchElement}>\n <FieldBox.Title>{children}</FieldBox.Title>\n {description && <FieldBox.Description>{description}</FieldBox.Description>}\n </FieldBox>\n );\n};\n"],"mappings":";;;;;;AAEA,MAAa,iBAAiB,IAAI;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CAGA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAa,gBAAgB,IAAI;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;;;ACxBD,MAAa,UAAU,EACrB,KACA,WACA,WAAW,OACX,IAAI,QACJ,UACA,aACA,SACA,UACA,GAAG,YACQ;CACX,MAAM,aAAa,MAAM;CACzB,MAAM,KAAK,QAAQ,SAAS,KAAK;CAEjC,MAAM,gBACJ,oBAAC,MAAD;EACE,GAAI;EACC;EACD;EACM;EACV,WAAW,eAAe,EAAE,UAAU,CAAC;EAEvC,UAAA,oBAAC,OAAD,EAAO,WAAW,cAAc,EAAI,CAAA;CAChC,CAAA;CAGR,IAAI,CAAC,UAAU,OAAO;CAEtB,OACE,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;;AAEd"}
1
+ {"version":3,"file":"Switch-DONWW7ju.js","names":[],"sources":["../src/components/Switch/styles.ts","../src/components/Switch/Switch.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\nexport const switchVariants = cva([\n 'tailwindcss-preflight',\n 'tw:shrink-0',\n 'tw:cursor-pointer',\n 'tw:disabled:cursor-not-allowed',\n 'tw:disabled:opacity-disabled',\n 'tw:peer',\n 'tw:inline-flex',\n 'tw:items-center',\n\n // track\n 'tw:w-9',\n 'tw:h-5',\n 'tw:rounded-full',\n 'tw:border',\n 'tw:border-transparent',\n 'tw:bg-input',\n 'tw:transition-colors',\n\n // checked\n 'tw:data-[state=checked]:bg-primary',\n\n // focus\n 'tw:focus-visible:outline-hidden',\n 'tw:focus-visible:border-primary',\n 'tw:focus-visible:ring-3',\n 'tw:focus-visible:ring-ring/50',\n]);\n\nexport const thumbVariants = cva([\n 'tw:block',\n 'tw:shrink-0',\n 'tw:pointer-events-none',\n 'tw:bg-white',\n 'tw:rounded-full',\n 'tw:size-4',\n 'tw:shadow-sm',\n 'tw:transition-transform',\n 'tw:data-[state=checked]:translate-x-[16px]',\n 'tw:data-[state=unchecked]:translate-x-0.5',\n]);\n","import { useId } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { Root, Thumb } from '@radix-ui/react-switch';\nimport type { VariantProps } from 'class-variance-authority';\n\nimport { FieldBox } from '../FieldBox';\nimport type { fieldBoxVariants } from '../FieldBox/styles';\n\nimport { switchVariants, thumbVariants } from './styles';\n\ntype Props = {\n id?: string | number;\n children?: ReactNode;\n description?: ReactNode;\n variant?: VariantProps<typeof fieldBoxVariants>['variant'];\n position?: 'start' | 'end';\n} & Omit<ComponentProps<typeof Root>, 'asChild' | 'id'>;\n\nexport const Switch = ({\n ref,\n className,\n disabled = false,\n id: idProp,\n children,\n description,\n variant,\n position,\n ...props\n}: Props) => {\n const fallbackId = useId();\n const id = idProp?.toString() ?? fallbackId;\n\n const switchElement = (\n <Root\n {...props}\n ref={ref}\n id={id}\n disabled={disabled}\n className={switchVariants({ className })}\n >\n <Thumb className={thumbVariants()} />\n </Root>\n );\n\n if (!children) return switchElement;\n\n return (\n <FieldBox htmlFor={id} variant={variant} position={position} control={switchElement}>\n <FieldBox.Title>{children}</FieldBox.Title>\n {description && <FieldBox.Description>{description}</FieldBox.Description>}\n </FieldBox>\n );\n};\n"],"mappings":";;;;;;AAEA,MAAa,iBAAiB,IAAI;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CAGA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAa,gBAAgB,IAAI;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;;ACxBD,MAAa,UAAU,EACrB,KACA,WACA,WAAW,OACX,IAAI,QACJ,UACA,aACA,SACA,UACA,GAAG,YACQ;CACX,MAAM,aAAa,MAAM;CACzB,MAAM,KAAK,QAAQ,SAAS,KAAK;CAEjC,MAAM,gBACJ,oBAAC,MAAD;EACE,GAAI;EACC;EACD;EACM;EACV,WAAW,eAAe,EAAE,UAAU,CAAC;EAEvC,UAAA,oBAAC,OAAD,EAAO,WAAW,cAAc,EAAI,CAAA;CAChC,CAAA;CAGR,IAAI,CAAC,UAAU,OAAO;CAEtB,OACE,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;;AAEd"}
@@ -1,55 +1,49 @@
1
- import { cn } from "./classNames-DcGnTh2N.js";
2
- import { ChevronDown, ChevronUp, ChevronsUpDown } from "./icons-ZIeZXXS7.js";
1
+ import { cn } from "./classNames-DkX30VJU.js";
2
+ import { ChevronDown, ChevronUp, ChevronsUpDown } from "./icons-DDR9dFSr.js";
3
3
  import { Skeleton } from "./internal/components/Skeleton/Skeleton.js";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
- //#region src/components/Table/TableBody.tsx
5
+ // src/components/Table/TableBody.tsx
6
6
  const TableBody = ({ withBorderSeparator = true, className, ...props }) => {
7
7
  return /* @__PURE__ */ jsx("tbody", {
8
8
  className: cn({ "tw:[&_tr]:border-0 tw:[&_tr]:border-b-border tw:[&_tr]:border-b tw:[&_tr]:border-solid tw:[&_tr:last-child]:border-0": withBorderSeparator }, className),
9
9
  ...props
10
10
  });
11
11
  };
12
- //#endregion
13
- //#region src/components/Table/TableCell.tsx
12
+ // src/components/Table/TableCell.tsx
14
13
  const TableCell = ({ className, ...props }) => {
15
14
  return /* @__PURE__ */ jsx("td", {
16
15
  className: cn("tw:px-3 tw:py-2", className),
17
16
  ...props
18
17
  });
19
18
  };
20
- //#endregion
21
- //#region src/components/Table/TableFooter.tsx
19
+ // src/components/Table/TableFooter.tsx
22
20
  const TableFooter = ({ className, ...props }) => {
23
21
  return /* @__PURE__ */ jsx("tfoot", {
24
22
  className: cn("tw:bg-muted/50 tw:border-t tw:border-border tw:font-medium tw:[&>tr]:last:border-b-0", className),
25
23
  ...props
26
24
  });
27
25
  };
28
- //#endregion
29
- //#region src/components/Table/TableHead.tsx
26
+ // src/components/Table/TableHead.tsx
30
27
  const TableHead = ({ className, ...props }) => {
31
28
  return /* @__PURE__ */ jsx("th", {
32
29
  className: cn("tw:px-3 tw:py-2 tw:text-left tw:font-medium tw:whitespace-nowrap tw:[&:has([role=checkbox])]:pr-0 tw:[&>[role=checkbox]]:translate-y-[2px] tw:focus-within:ring-2 tw:focus-within:ring-ring/50", className),
33
30
  ...props
34
31
  });
35
32
  };
36
- //#endregion
37
- //#region src/components/Table/TableHeader.tsx
33
+ // src/components/Table/TableHeader.tsx
38
34
  const TableHeader = ({ withShadow = false, className, ...props }) => {
39
35
  return /* @__PURE__ */ jsx("thead", {
40
36
  className: cn("tw:sticky tw:top-0 tw:z-10 tw:bg-card tw:[&_tr]:h-11 tw:[&_tr]:hover:bg-transparent tw:[&_tr]:border-b tw:[&_tr]:border-border", { "tw:shadow-table": withShadow }, className),
41
37
  ...props
42
38
  });
43
39
  };
44
- //#endregion
45
- //#region src/components/Table/TableRow.tsx
40
+ // src/components/Table/TableRow.tsx
46
41
  const TableRow = ({ ref, className, ...props }) => /* @__PURE__ */ jsx("tr", {
47
42
  ref,
48
43
  className: cn("tw:hover:bg-[var(--hover,color-mix(in_oklab,rgb(var(--muted))_50%,transparent))] tw:aria-selected:bg-selected tw:aria-selected:hover:bg-selected tw:aria-selected:text-[var(--selected-foreground,currentColor)]", className),
49
44
  ...props
50
45
  });
51
- //#endregion
52
- //#region src/components/Table/TableSkeletonRows.tsx
46
+ // src/components/Table/TableSkeletonRows.tsx
53
47
  const NAME_WIDTHS = [
54
48
  "tw:w-2/5",
55
49
  "tw:w-1/3",
@@ -105,8 +99,7 @@ const TableSkeletonRows = ({ columns, noun, rows = 5 }) => Array.from({ length:
105
99
  })]
106
100
  }, index))
107
101
  }, row));
108
- //#endregion
109
- //#region src/components/Table/TableSortHeader.tsx
102
+ // src/components/Table/TableSortHeader.tsx
110
103
  /** Maps a sort direction to the `aria-sort` value for the enclosing `Table.Head`. */
111
104
  const tableAriaSort = (sorted) => sorted === "asc" ? "ascending" : sorted === "desc" ? "descending" : "none";
112
105
  /**
@@ -125,8 +118,7 @@ const TableSortHeader = ({ sorted, children, className, ...props }) => {
125
118
  children: [children, /* @__PURE__ */ jsx(Icon, { className: "tw:size-3 tw:text-muted-foreground" })]
126
119
  });
127
120
  };
128
- //#endregion
129
- //#region src/components/Table/Table.tsx
121
+ // src/components/Table/Table.tsx
130
122
  /**
131
123
  * Presentational table for rows sharing one schema; sort/filter state is the consumer's.
132
124
  *
@@ -152,7 +144,6 @@ Table.Cell = TableCell;
152
144
  Table.Footer = TableFooter;
153
145
  Table.SortHeader = TableSortHeader;
154
146
  Table.SkeletonRows = TableSkeletonRows;
155
- //#endregion
156
147
  export { Table, TableSortHeader, tableAriaSort };
157
148
 
158
- //# sourceMappingURL=Table-CilEvpMq.js.map
149
+ //# sourceMappingURL=Table-BwgBm3hJ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Table-CilEvpMq.js","names":[],"sources":["../src/components/Table/TableBody.tsx","../src/components/Table/TableCell.tsx","../src/components/Table/TableFooter.tsx","../src/components/Table/TableHead.tsx","../src/components/Table/TableHeader.tsx","../src/components/Table/TableRow.tsx","../src/components/Table/TableSkeletonRows.tsx","../src/components/Table/TableSortHeader.tsx","../src/components/Table/Table.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nexport const TableBody = ({\n withBorderSeparator = true,\n className,\n ...props\n}: { withBorderSeparator?: boolean } & ComponentProps<'tbody'>) => {\n return (\n <tbody\n className={cn(\n {\n 'tw:[&_tr]:border-0 tw:[&_tr]:border-b-border tw:[&_tr]:border-b tw:[&_tr]:border-solid tw:[&_tr:last-child]:border-0':\n withBorderSeparator,\n },\n className,\n )}\n {...props}\n />\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nexport const TableCell = ({ className, ...props }: ComponentProps<'td'>) => {\n return <td className={cn('tw:px-3 tw:py-2', className)} {...props} />;\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nexport const TableFooter = ({ className, ...props }: ComponentProps<'tfoot'>) => {\n return (\n <tfoot\n className={cn(\n 'tw:bg-muted/50 tw:border-t tw:border-border tw:font-medium tw:[&>tr]:last:border-b-0',\n className,\n )}\n {...props}\n />\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nexport const TableHead = ({ className, ...props }: ComponentProps<'th'>) => {\n return (\n <th\n className={cn(\n 'tw:px-3 tw:py-2 tw:text-left tw:font-medium tw:whitespace-nowrap tw:[&:has([role=checkbox])]:pr-0 tw:[&>[role=checkbox]]:translate-y-[2px] tw:focus-within:ring-2 tw:focus-within:ring-ring/50',\n className,\n )}\n {...props}\n />\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nexport const TableHeader = ({\n withShadow = false,\n className,\n ...props\n}: { withShadow?: boolean } & ComponentProps<'thead'>) => {\n return (\n <thead\n className={cn(\n // - The surface sits on `thead`, so a caller's `bg-*` replaces it at rest and on hover.\n // - `[&_tr]:hover:` (0,2,1) outranks `TableRow`'s hover tint (0,2,0): a header is not hoverable.\n 'tw:sticky tw:top-0 tw:z-10 tw:bg-card tw:[&_tr]:h-11 tw:[&_tr]:hover:bg-transparent tw:[&_tr]:border-b tw:[&_tr]:border-border',\n { 'tw:shadow-table': withShadow },\n className,\n )}\n {...props}\n />\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nexport const TableRow = ({ ref, className, ...props }: ComponentProps<'tr'>) => (\n <tr\n ref={ref}\n className={cn(\n 'tw:hover:bg-[var(--hover,color-mix(in_oklab,rgb(var(--muted))_50%,transparent))] tw:aria-selected:bg-selected tw:aria-selected:hover:bg-selected tw:aria-selected:text-[var(--selected-foreground,currentColor)]',\n className,\n )}\n {...props}\n />\n);\n","import { cn } from '../../utils';\nimport { Skeleton } from '../Skeleton/Skeleton';\n\nimport { TableCell } from './TableCell';\nimport { TableRow } from './TableRow';\n\n/** A width class, or one per row so the placeholders don't line up into a block. */\ntype Width = string | string[];\n\n/**\n * What one column shows while the rows load.\n *\n * - `className` and `colSpan` match the real column's cells, so the placeholders keep their layout.\n * - `text` (default): one line of `widthClassName`.\n * - `name`: an optional icon (`gapClassName` from the lines, `tw:gap-3.5` by default), a name line\n * varied per row by default, an optional description line.\n * - `empty`: nothing, e.g. for a row's actions.\n */\nexport type TableSkeletonColumn = { className?: string; colSpan?: number } & (\n | { type?: 'text'; widthClassName?: Width }\n | {\n type: 'name';\n iconClassName?: string;\n gapClassName?: string;\n widthClassName?: Width;\n descriptionClassName?: Width;\n }\n | { type: 'empty' }\n);\n\nconst NAME_WIDTHS = ['tw:w-2/5', 'tw:w-1/3', 'tw:w-1/2', 'tw:w-1/4', 'tw:w-2/5 tw:max-w-60'];\n\nconst widthOf = (width: Width, row: number) =>\n typeof width === 'string' ? width : width[row % width.length];\n\nconst SkeletonCellContent = ({ column, row }: { column: TableSkeletonColumn; row: number }) => {\n switch (column.type) {\n case 'empty':\n return null;\n case 'name':\n return (\n <div className={cn('tw:flex tw:items-center', column.gapClassName ?? 'tw:gap-3.5')}>\n {column.iconClassName && (\n <Skeleton height=\"sm\" className={cn('tw:shrink-0', column.iconClassName)} />\n )}\n <div className=\"tw:flex tw:min-w-0 tw:flex-1 tw:flex-col tw:gap-1.5\">\n <Skeleton height=\"xs\" className={widthOf(column.widthClassName ?? NAME_WIDTHS, row)} />\n {column.descriptionClassName && (\n <Skeleton height=\"xxs\" className={widthOf(column.descriptionClassName, row)} />\n )}\n </div>\n </div>\n );\n default:\n return <Skeleton height=\"xs\" className={widthOf(column.widthClassName ?? 'tw:w-3/4', row)} />;\n }\n};\n\n/**\n * Placeholder rows in a table's own columns while its rows load.\n *\n * - Render inside `Table.Body` in place of the rows.\n * - The first row announces `Loading {noun}` to screen readers; pass the plural noun, e.g. `jobs`.\n * - The rows don't take the hover tint, as there is nothing to act on yet.\n */\nexport const TableSkeletonRows = ({\n columns,\n noun,\n rows = 5,\n}: {\n columns: TableSkeletonColumn[];\n noun: string;\n rows?: number;\n}) =>\n Array.from({ length: rows }, (_, row) => (\n // oxlint-disable-next-line react/no-array-index-key -- the rows are identical placeholders\n <TableRow key={row} className=\"tw:hover:bg-transparent\">\n {columns.map((column, index) => (\n // oxlint-disable-next-line react/no-array-index-key -- columns have no id of their own\n <TableCell key={index} className={column.className} colSpan={column.colSpan}>\n {row === 0 && index === 0 && (\n <span role=\"status\" className=\"tw:sr-only\">{`Loading ${noun}`}</span>\n )}\n <SkeletonCellContent column={column} row={row} />\n </TableCell>\n ))}\n </TableRow>\n ));\n","import type { ComponentProps, ReactNode } from 'react';\n\nimport { ChevronDown, ChevronsUpDown, ChevronUp } from '../../icons';\nimport { cn } from '../../utils';\n\nexport type TableSortDirection = 'asc' | 'desc' | false;\n\n/** Maps a sort direction to the `aria-sort` value for the enclosing `Table.Head`. */\nexport const tableAriaSort = (sorted: TableSortDirection): ComponentProps<'th'>['aria-sort'] =>\n sorted === 'asc' ? 'ascending' : sorted === 'desc' ? 'descending' : 'none';\n\ntype Props = {\n /** Current sort state for this column: `'asc'`, `'desc'`, or `false` when unsorted. */\n sorted: TableSortDirection;\n children: ReactNode;\n} & Omit<ComponentProps<'button'>, 'children' | 'type'>;\n\n/**\n * Clickable column-header label with a sort-direction chevron, for use inside `Table.Head`.\n *\n * Presentational only — it owns no sort state. Pair it with your sort model (a `useState`\n * key/direction pair, or `@tanstack/react-table`'s `getToggleSortingHandler()` / `getIsSorted()`)\n * and set `aria-sort` on the enclosing `Table.Head` via {@link tableAriaSort}.\n */\nexport const TableSortHeader = ({ sorted, children, className, ...props }: Props) => {\n const Icon = sorted === false ? ChevronsUpDown : sorted === 'asc' ? ChevronUp : ChevronDown;\n return (\n <button\n className={cn(\n 'tw:group tw:flex tw:cursor-pointer tw:items-center tw:gap-1 tw:border-0 tw:bg-transparent tw:p-0 tw:font-medium tw:text-inherit',\n className,\n )}\n {...props}\n type=\"button\"\n >\n {children}\n <Icon className=\"tw:size-3 tw:text-muted-foreground\" />\n </button>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { TableBody } from './TableBody';\nimport { TableCell } from './TableCell';\nimport { TableFooter } from './TableFooter';\nimport { TableHead } from './TableHead';\nimport { TableHeader } from './TableHeader';\nimport { TableRow } from './TableRow';\nimport { TableSkeletonRows } from './TableSkeletonRows';\nimport { TableSortHeader } from './TableSortHeader';\n\n/**\n * - `borderCollapsed`: collapsed borders vs separate row spacing.\n * - `bordered`: rounded bordered container with overflow scrolling.\n */\ntype Props = {\n borderCollapsed?: boolean;\n bordered?: boolean;\n containerClassName?: string;\n} & ComponentProps<'table'>;\n\n/**\n * Presentational table for rows sharing one schema; sort/filter state is the consumer's.\n *\n * - Not for rows of differing shape — use a `Card` list.\n * - Wrap in `PageLayout.Content`.\n *\n * @see RECIPES.md#list-detail\n */\nexport const Table = ({\n borderCollapsed = true,\n bordered = false,\n containerClassName,\n className,\n ...props\n}: Props) => {\n return (\n <div\n className={cn(\n 'tw:relative tw:w-full',\n bordered && 'tw:overflow-auto tw:rounded-[10px] tw:border tw:border-solid tw:border-border',\n containerClassName,\n )}\n >\n <table\n className={cn(\n // - Semantic tokens so text and fill flip under `[data-theme='dark']`.\n // - The body sits on the card surface, like `Table.Header`.\n 'tw:w-full tw:caption-bottom tw:bg-card tw:text-sm tw:text-foreground',\n borderCollapsed ? 'tw:border-collapse' : 'tw:border-separate tw:border-spacing-y-1',\n className,\n )}\n {...props}\n />\n </div>\n );\n};\n\nTable.Header = TableHeader;\nTable.Head = TableHead;\nTable.Body = TableBody;\nTable.Row = TableRow;\nTable.Cell = TableCell;\nTable.Footer = TableFooter;\nTable.SortHeader = TableSortHeader;\nTable.SkeletonRows = TableSkeletonRows;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Table-BwgBm3hJ.js","names":[],"sources":["../src/components/Table/TableBody.tsx","../src/components/Table/TableCell.tsx","../src/components/Table/TableFooter.tsx","../src/components/Table/TableHead.tsx","../src/components/Table/TableHeader.tsx","../src/components/Table/TableRow.tsx","../src/components/Table/TableSkeletonRows.tsx","../src/components/Table/TableSortHeader.tsx","../src/components/Table/Table.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nexport const TableBody = ({\n withBorderSeparator = true,\n className,\n ...props\n}: { withBorderSeparator?: boolean } & ComponentProps<'tbody'>) => {\n return (\n <tbody\n className={cn(\n {\n 'tw:[&_tr]:border-0 tw:[&_tr]:border-b-border tw:[&_tr]:border-b tw:[&_tr]:border-solid tw:[&_tr:last-child]:border-0':\n withBorderSeparator,\n },\n className,\n )}\n {...props}\n />\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nexport const TableCell = ({ className, ...props }: ComponentProps<'td'>) => {\n return <td className={cn('tw:px-3 tw:py-2', className)} {...props} />;\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nexport const TableFooter = ({ className, ...props }: ComponentProps<'tfoot'>) => {\n return (\n <tfoot\n className={cn(\n 'tw:bg-muted/50 tw:border-t tw:border-border tw:font-medium tw:[&>tr]:last:border-b-0',\n className,\n )}\n {...props}\n />\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nexport const TableHead = ({ className, ...props }: ComponentProps<'th'>) => {\n return (\n <th\n className={cn(\n 'tw:px-3 tw:py-2 tw:text-left tw:font-medium tw:whitespace-nowrap tw:[&:has([role=checkbox])]:pr-0 tw:[&>[role=checkbox]]:translate-y-[2px] tw:focus-within:ring-2 tw:focus-within:ring-ring/50',\n className,\n )}\n {...props}\n />\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nexport const TableHeader = ({\n withShadow = false,\n className,\n ...props\n}: { withShadow?: boolean } & ComponentProps<'thead'>) => {\n return (\n <thead\n className={cn(\n // - The surface sits on `thead`, so a caller's `bg-*` replaces it at rest and on hover.\n // - `[&_tr]:hover:` (0,2,1) outranks `TableRow`'s hover tint (0,2,0): a header is not hoverable.\n 'tw:sticky tw:top-0 tw:z-10 tw:bg-card tw:[&_tr]:h-11 tw:[&_tr]:hover:bg-transparent tw:[&_tr]:border-b tw:[&_tr]:border-border',\n { 'tw:shadow-table': withShadow },\n className,\n )}\n {...props}\n />\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nexport const TableRow = ({ ref, className, ...props }: ComponentProps<'tr'>) => (\n <tr\n ref={ref}\n className={cn(\n 'tw:hover:bg-[var(--hover,color-mix(in_oklab,rgb(var(--muted))_50%,transparent))] tw:aria-selected:bg-selected tw:aria-selected:hover:bg-selected tw:aria-selected:text-[var(--selected-foreground,currentColor)]',\n className,\n )}\n {...props}\n />\n);\n","import { cn } from '../../utils';\nimport { Skeleton } from '../Skeleton/Skeleton';\n\nimport { TableCell } from './TableCell';\nimport { TableRow } from './TableRow';\n\n/** A width class, or one per row so the placeholders don't line up into a block. */\ntype Width = string | string[];\n\n/**\n * What one column shows while the rows load.\n *\n * - `className` and `colSpan` match the real column's cells, so the placeholders keep their layout.\n * - `text` (default): one line of `widthClassName`.\n * - `name`: an optional icon (`gapClassName` from the lines, `tw:gap-3.5` by default), a name line\n * varied per row by default, an optional description line.\n * - `empty`: nothing, e.g. for a row's actions.\n */\nexport type TableSkeletonColumn = { className?: string; colSpan?: number } & (\n | { type?: 'text'; widthClassName?: Width }\n | {\n type: 'name';\n iconClassName?: string;\n gapClassName?: string;\n widthClassName?: Width;\n descriptionClassName?: Width;\n }\n | { type: 'empty' }\n);\n\nconst NAME_WIDTHS = ['tw:w-2/5', 'tw:w-1/3', 'tw:w-1/2', 'tw:w-1/4', 'tw:w-2/5 tw:max-w-60'];\n\nconst widthOf = (width: Width, row: number) =>\n typeof width === 'string' ? width : width[row % width.length];\n\nconst SkeletonCellContent = ({ column, row }: { column: TableSkeletonColumn; row: number }) => {\n switch (column.type) {\n case 'empty':\n return null;\n case 'name':\n return (\n <div className={cn('tw:flex tw:items-center', column.gapClassName ?? 'tw:gap-3.5')}>\n {column.iconClassName && (\n <Skeleton height=\"sm\" className={cn('tw:shrink-0', column.iconClassName)} />\n )}\n <div className=\"tw:flex tw:min-w-0 tw:flex-1 tw:flex-col tw:gap-1.5\">\n <Skeleton height=\"xs\" className={widthOf(column.widthClassName ?? NAME_WIDTHS, row)} />\n {column.descriptionClassName && (\n <Skeleton height=\"xxs\" className={widthOf(column.descriptionClassName, row)} />\n )}\n </div>\n </div>\n );\n default:\n return <Skeleton height=\"xs\" className={widthOf(column.widthClassName ?? 'tw:w-3/4', row)} />;\n }\n};\n\n/**\n * Placeholder rows in a table's own columns while its rows load.\n *\n * - Render inside `Table.Body` in place of the rows.\n * - The first row announces `Loading {noun}` to screen readers; pass the plural noun, e.g. `jobs`.\n * - The rows don't take the hover tint, as there is nothing to act on yet.\n */\nexport const TableSkeletonRows = ({\n columns,\n noun,\n rows = 5,\n}: {\n columns: TableSkeletonColumn[];\n noun: string;\n rows?: number;\n}) =>\n Array.from({ length: rows }, (_, row) => (\n // oxlint-disable-next-line react/no-array-index-key -- the rows are identical placeholders\n <TableRow key={row} className=\"tw:hover:bg-transparent\">\n {columns.map((column, index) => (\n // oxlint-disable-next-line react/no-array-index-key -- columns have no id of their own\n <TableCell key={index} className={column.className} colSpan={column.colSpan}>\n {row === 0 && index === 0 && (\n <span role=\"status\" className=\"tw:sr-only\">{`Loading ${noun}`}</span>\n )}\n <SkeletonCellContent column={column} row={row} />\n </TableCell>\n ))}\n </TableRow>\n ));\n","import type { ComponentProps, ReactNode } from 'react';\n\nimport { ChevronDown, ChevronsUpDown, ChevronUp } from '../../icons';\nimport { cn } from '../../utils';\n\nexport type TableSortDirection = 'asc' | 'desc' | false;\n\n/** Maps a sort direction to the `aria-sort` value for the enclosing `Table.Head`. */\nexport const tableAriaSort = (sorted: TableSortDirection): ComponentProps<'th'>['aria-sort'] =>\n sorted === 'asc' ? 'ascending' : sorted === 'desc' ? 'descending' : 'none';\n\ntype Props = {\n /** Current sort state for this column: `'asc'`, `'desc'`, or `false` when unsorted. */\n sorted: TableSortDirection;\n children: ReactNode;\n} & Omit<ComponentProps<'button'>, 'children' | 'type'>;\n\n/**\n * Clickable column-header label with a sort-direction chevron, for use inside `Table.Head`.\n *\n * Presentational only — it owns no sort state. Pair it with your sort model (a `useState`\n * key/direction pair, or `@tanstack/react-table`'s `getToggleSortingHandler()` / `getIsSorted()`)\n * and set `aria-sort` on the enclosing `Table.Head` via {@link tableAriaSort}.\n */\nexport const TableSortHeader = ({ sorted, children, className, ...props }: Props) => {\n const Icon = sorted === false ? ChevronsUpDown : sorted === 'asc' ? ChevronUp : ChevronDown;\n return (\n <button\n className={cn(\n 'tw:group tw:flex tw:cursor-pointer tw:items-center tw:gap-1 tw:border-0 tw:bg-transparent tw:p-0 tw:font-medium tw:text-inherit',\n className,\n )}\n {...props}\n type=\"button\"\n >\n {children}\n <Icon className=\"tw:size-3 tw:text-muted-foreground\" />\n </button>\n );\n};\n","import type { ComponentProps } from 'react';\n\nimport { cn } from '../../utils';\n\nimport { TableBody } from './TableBody';\nimport { TableCell } from './TableCell';\nimport { TableFooter } from './TableFooter';\nimport { TableHead } from './TableHead';\nimport { TableHeader } from './TableHeader';\nimport { TableRow } from './TableRow';\nimport { TableSkeletonRows } from './TableSkeletonRows';\nimport { TableSortHeader } from './TableSortHeader';\n\n/**\n * - `borderCollapsed`: collapsed borders vs separate row spacing.\n * - `bordered`: rounded bordered container with overflow scrolling.\n */\ntype Props = {\n borderCollapsed?: boolean;\n bordered?: boolean;\n containerClassName?: string;\n} & ComponentProps<'table'>;\n\n/**\n * Presentational table for rows sharing one schema; sort/filter state is the consumer's.\n *\n * - Not for rows of differing shape — use a `Card` list.\n * - Wrap in `PageLayout.Content`.\n *\n * @see RECIPES.md#list-detail\n */\nexport const Table = ({\n borderCollapsed = true,\n bordered = false,\n containerClassName,\n className,\n ...props\n}: Props) => {\n return (\n <div\n className={cn(\n 'tw:relative tw:w-full',\n bordered && 'tw:overflow-auto tw:rounded-[10px] tw:border tw:border-solid tw:border-border',\n containerClassName,\n )}\n >\n <table\n className={cn(\n // - Semantic tokens so text and fill flip under `[data-theme='dark']`.\n // - The body sits on the card surface, like `Table.Header`.\n 'tw:w-full tw:caption-bottom tw:bg-card tw:text-sm tw:text-foreground',\n borderCollapsed ? 'tw:border-collapse' : 'tw:border-separate tw:border-spacing-y-1',\n className,\n )}\n {...props}\n />\n </div>\n );\n};\n\nTable.Header = TableHeader;\nTable.Head = TableHead;\nTable.Body = TableBody;\nTable.Row = TableRow;\nTable.Cell = TableCell;\nTable.Footer = TableFooter;\nTable.SortHeader = TableSortHeader;\nTable.SkeletonRows = TableSkeletonRows;\n"],"mappings":"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"}
@@ -1,16 +1,15 @@
1
- import { cn } from "./classNames-DcGnTh2N.js";
2
- import { X } from "./icons-ZIeZXXS7.js";
3
- import { Button } from "./Button-BNkyYU8u.js";
1
+ import { cn } from "./classNames-DkX30VJU.js";
2
+ import { X } from "./icons-DDR9dFSr.js";
3
+ import { Button } from "./Button-DbvGzEDb.js";
4
4
  import { ScrollArea } from "./internal/components/ScrollArea.js";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import * as RadixTabs from "@radix-ui/react-tabs";
7
- //#region src/components/Tabs/styles.ts
7
+ // src/components/Tabs/styles.ts
8
8
  const tabsListWrapperClass = "tw:shrink-0 tw:border-t-0 tw:border-x-0 tw:border-b tw:border-solid tw:border-border";
9
9
  const tabsListClass = "tw:flex tw:gap-8 tw:shrink-0 tw:w-max";
10
10
  const tabsTriggerGroupClass = "tw:group/tab-trigger-group tw:flex tw:shrink-0 tw:items-center";
11
11
  const tabsTriggerClass = "tw:focus-visible:outline-hidden tw:focus-visible:ring-2 tw:focus-visible:ring-inset tw:focus-visible:ring-ring tw:flex tw:justify-center tw:items-center tw:gap-1.5 tw:bg-transparent tw:shrink-0 tw:border-t-0 tw:border-x-0 tw:border-b-[3px] tw:border-solid tw:border-transparent tw:pt-2.5 tw:pb-5 tw:px-0 tw:m-0 tw:font-medium tw:leading-5 tw:text-muted-foreground tw:text-base tw:data-[state=active]:text-primary tw:data-[state=active]:border-primary tw:data-[disabled]:text-muted-foreground tw:data-[disabled]:opacity-disabled tw:data-[disabled]:cursor-not-allowed tw:group-hover/tab-trigger-group:enabled:text-primary tw:group-hover/tab-trigger-group:enabled:border-primary tw:group-hover/tab-trigger-group:enabled:cursor-pointer";
12
- //#endregion
13
- //#region src/components/Tabs/TabsList.tsx
12
+ // src/components/Tabs/TabsList.tsx
14
13
  const TabsList = ({ className, children, ...rest }) => /* @__PURE__ */ jsx(ScrollArea, {
15
14
  orientation: "horizontal",
16
15
  className: tabsListWrapperClass,
@@ -21,15 +20,13 @@ const TabsList = ({ className, children, ...rest }) => /* @__PURE__ */ jsx(Scrol
21
20
  children
22
21
  })
23
22
  });
24
- //#endregion
25
- //#region src/components/Tabs/TabsTrigger.tsx
23
+ // src/components/Tabs/TabsTrigger.tsx
26
24
  const TabsTrigger = ({ className, compact = false, ...rest }) => /* @__PURE__ */ jsx(RadixTabs.Trigger, {
27
25
  "data-slot": "tabs-trigger",
28
26
  ...rest,
29
27
  className: cn(tabsTriggerClass, compact && "tw:text-sm tw:pb-4", className)
30
28
  });
31
- //#endregion
32
- //#region src/components/Tabs/Tabs.tsx
29
+ // src/components/Tabs/Tabs.tsx
33
30
  const Tabs = ({ triggers, compact = false, children, defaultValue, onValueChange, rootClassName, listClassName, triggerClassName, triggerGroupClassName, ...rest }) => /* @__PURE__ */ jsxs(RadixTabs.Root, {
34
31
  ...rest,
35
32
  "data-slot": "tabs-root",
@@ -61,14 +58,12 @@ const Tabs = ({ triggers, compact = false, children, defaultValue, onValueChange
61
58
  }, value))
62
59
  }), children]
63
60
  });
64
- //#endregion
65
- //#region src/components/Tabs/TabsContent.tsx
61
+ // src/components/Tabs/TabsContent.tsx
66
62
  const TabsContent = (props) => /* @__PURE__ */ jsx(RadixTabs.Content, {
67
63
  "data-slot": "tabs-content",
68
64
  tabIndex: -1,
69
65
  ...props
70
66
  });
71
- //#endregion
72
67
  export { Tabs, TabsContent };
73
68
 
74
- //# sourceMappingURL=Tabs-Ck4uWf8U.js.map
69
+ //# sourceMappingURL=Tabs-DmJB4l_N.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs-Ck4uWf8U.js","names":[],"sources":["../src/components/Tabs/styles.ts","../src/components/Tabs/TabsList.tsx","../src/components/Tabs/TabsTrigger.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Tabs/TabsContent.tsx"],"sourcesContent":["// Directional resets (border-t-0/border-x-0), NOT border-0: under Tailwind v4 a\n// consumer app's `border-0` utility can land after design's compiled bottom-border in\n// the shared `utilities` layer and zero its width (same layer + specificity → source\n// order wins), dropping the line. With directional resets, only the bottom-border\n// utility (`border-b` on the wrapper, `border-b-[3px]` on the trigger) sets the bottom.\nexport const tabsListWrapperClass =\n 'tw:shrink-0 tw:border-t-0 tw:border-x-0 tw:border-b tw:border-solid tw:border-border';\n\nexport const tabsListClass = 'tw:flex tw:gap-8 tw:shrink-0 tw:w-max';\n\nexport const tabsTriggerGroupClass =\n 'tw:group/tab-trigger-group tw:flex tw:shrink-0 tw:items-center';\n\n// The focus ring is **inset**, not an outline. `TabsList` wraps the row in a horizontal\n// `ScrollArea`, whose viewport is `overflow-y: hidden`, and a trigger is exactly as tall as that\n// viewport — so there is 0px of slack for anything painted outside the border box, and a focus\n// outline (the browser's, or a host app's global rule) gets cropped on the top and bottom edges,\n// plus the left edge on the first trigger. Painting inside the box cannot be clipped by any\n// ancestor. Owning the affordance here is also what stops the consumer's global rule applying.\nexport const tabsTriggerClass =\n 'tw:focus-visible:outline-hidden tw:focus-visible:ring-2 tw:focus-visible:ring-inset tw:focus-visible:ring-ring tw:flex tw:justify-center tw:items-center tw:gap-1.5 tw:bg-transparent tw:shrink-0 tw:border-t-0 tw:border-x-0 tw:border-b-[3px] tw:border-solid tw:border-transparent tw:pt-2.5 tw:pb-5 tw:px-0 tw:m-0 tw:font-medium tw:leading-5 tw:text-muted-foreground tw:text-base tw:data-[state=active]:text-primary tw:data-[state=active]:border-primary tw:data-[disabled]:text-muted-foreground tw:data-[disabled]:opacity-disabled tw:data-[disabled]:cursor-not-allowed tw:group-hover/tab-trigger-group:enabled:text-primary tw:group-hover/tab-trigger-group:enabled:border-primary tw:group-hover/tab-trigger-group:enabled:cursor-pointer';\n\nexport const tabsTriggerCompactClass = 'tw:text-sm tw:pb-4';\n","import * as RadixTabs from '@radix-ui/react-tabs';\n\nimport { cn } from '../../utils';\nimport { ScrollArea } from '../ScrollArea';\n\nimport { tabsListClass, tabsListWrapperClass } from './styles';\n\ntype Props = Omit<RadixTabs.TabsListProps, 'asChild'>;\n\nexport const TabsList = ({ className, children, ...rest }: Props) => (\n <ScrollArea orientation=\"horizontal\" className={tabsListWrapperClass}>\n <RadixTabs.List {...rest} data-slot=\"tabs-list\" className={cn(tabsListClass, className)}>\n {children}\n </RadixTabs.List>\n </ScrollArea>\n);\n","import * as RadixTabs from '@radix-ui/react-tabs';\n\nimport { cn } from '../../utils';\n\nimport { tabsTriggerClass, tabsTriggerCompactClass } from './styles';\n\ntype Props = Omit<RadixTabs.TabsTriggerProps, 'asChild'> & {\n compact?: boolean;\n};\n\nexport const TabsTrigger = ({ className, compact = false, ...rest }: Props) => (\n <RadixTabs.Trigger\n data-slot=\"tabs-trigger\"\n {...rest}\n className={cn(tabsTriggerClass, compact && tabsTriggerCompactClass, className)}\n />\n);\n","import type { ReactNode } from 'react';\nimport * as RadixTabs from '@radix-ui/react-tabs';\n\nimport { X } from '../../icons';\nimport { cn } from '../../utils';\nimport { Button } from '../Button';\n\nimport { tabsTriggerGroupClass } from './styles';\nimport { TabsList } from './TabsList';\nimport { TabsTrigger } from './TabsTrigger';\n\nexport type Trigger<T extends string> = {\n value: T;\n title: ReactNode;\n onClose?: (value: T) => void;\n} & Omit<RadixTabs.TabsTriggerProps, 'title' | 'asChild'>;\n\ntype Props<T extends string> = {\n triggers: readonly Trigger<T>[];\n compact?: boolean;\n children: ReactNode;\n defaultValue?: string;\n onValueChange?: (value: T) => void;\n rootClassName?: string;\n listClassName?: string;\n triggerClassName?: string;\n triggerGroupClassName?: string;\n} & Omit<RadixTabs.TabsProps, 'onValueChange'>;\n\nexport const Tabs = <T extends string>({\n triggers,\n compact = false,\n children,\n defaultValue,\n onValueChange,\n rootClassName,\n listClassName,\n triggerClassName,\n triggerGroupClassName,\n ...rest\n}: Props<T>) => (\n <RadixTabs.Root\n {...rest}\n data-slot=\"tabs-root\"\n className={cn('tw:flex tw:flex-col tw:gap-6', rootClassName)}\n defaultValue={defaultValue ?? triggers[0]?.value}\n onValueChange={onValueChange as (value: string) => void}\n >\n <TabsList className={listClassName}>\n {triggers.map(({ value, title, onClose, className: callerClassName, ...triggerRest }) => (\n <div\n key={value}\n className={cn(tabsTriggerGroupClass, triggerGroupClassName)}\n data-slot=\"tabs-trigger-group\"\n >\n <TabsTrigger\n value={value}\n compact={compact}\n {...triggerRest}\n className={cn(triggerClassName, callerClassName)}\n >\n {title}\n </TabsTrigger>\n {onClose && (\n <Button\n type=\"button\"\n variant=\"inline\"\n size=\"icon-3xs\"\n disabled={triggerRest.disabled}\n onClick={() => onClose(value)}\n onMouseDown={(e) => e.preventDefault()}\n className=\"tw:!size-8 tw:opacity-0 tw:duration-200 tw:focus-visible:opacity-100 tw:group-focus-within/tab-trigger-group:opacity-100 tw:group-hover/tab-trigger-group:opacity-100\"\n aria-label={typeof title === 'string' ? `Close ${title}` : 'Close tab'}\n >\n <X className=\"tw:size-4\" />\n </Button>\n )}\n </div>\n ))}\n </TabsList>\n {children}\n </RadixTabs.Root>\n);\n","import * as RadixTabs from '@radix-ui/react-tabs';\n\nexport const TabsContent = (props: RadixTabs.TabsContentProps) => (\n <RadixTabs.Content data-slot=\"tabs-content\" tabIndex={-1} {...props} />\n);\n"],"mappings":";;;;;;;AAKA,MAAa,uBACX;AAEF,MAAa,gBAAgB;AAE7B,MAAa,wBACX;AAQF,MAAa,mBACX;;;ACXF,MAAa,YAAY,EAAE,WAAW,UAAU,GAAG,WACjD,oBAAC,YAAD;CAAY,aAAY;CAAa,WAAW;CAC9C,UAAA,oBAAC,UAAU,MAAX;EAAgB,GAAI;EAAM,aAAU;EAAY,WAAW,GAAG,eAAe,SAAS;EACnF;CACa,CAAA;AACN,CAAA;;;ACJd,MAAa,eAAe,EAAE,WAAW,UAAU,OAAO,GAAG,WAC3D,oBAAC,UAAU,SAAX;CACE,aAAU;CACV,GAAI;CACJ,WAAW,GAAG,kBAAkB,WAAA,sBAAoC,SAAS;AAC9E,CAAA;;;ACcH,MAAa,QAA0B,EACrC,UACA,UAAU,OACV,UACA,cACA,eACA,eACA,eACA,kBACA,uBACA,GAAG,WAEH,qBAAC,UAAU,MAAX;CACE,GAAI;CACJ,aAAU;CACV,WAAW,GAAG,gCAAgC,aAAa;CAC3D,cAAc,gBAAgB,SAAS,EAAE,EAAE;CAC5B;CALjB,UAAA,CAOE,oBAAC,UAAD;EAAU,WAAW;EAClB,UAAA,SAAS,KAAK,EAAE,OAAO,OAAO,SAAS,WAAW,iBAAiB,GAAG,kBACrE,qBAAC,OAAD;GAEE,WAAW,GAAG,uBAAuB,qBAAqB;GAC1D,aAAU;GAHZ,UAAA,CAKE,oBAAC,aAAD;IACS;IACE;IACT,GAAI;IACJ,WAAW,GAAG,kBAAkB,eAAe;IAE9C,UAAA;GACU,CAAA,GACZ,WACC,oBAAC,QAAD;IACE,MAAK;IACL,SAAQ;IACR,MAAK;IACL,UAAU,YAAY;IACtB,eAAe,QAAQ,KAAK;IAC5B,cAAc,MAAM,EAAE,eAAe;IACrC,WAAU;IACV,cAAY,OAAO,UAAU,WAAW,SAAS,UAAU;IAE3D,UAAA,oBAAC,GAAD,EAAG,WAAU,YAAa,CAAA;GACpB,CAAA,CAEP;EA1BE,GAAA,KA0BF,CACN;CACO,CAAA,GACT,QACa;;;;AC/ElB,MAAa,eAAe,UAC1B,oBAAC,UAAU,SAAX;CAAmB,aAAU;CAAe,UAAU;CAAI,GAAI;AAAQ,CAAA"}
1
+ {"version":3,"file":"Tabs-DmJB4l_N.js","names":[],"sources":["../src/components/Tabs/styles.ts","../src/components/Tabs/TabsList.tsx","../src/components/Tabs/TabsTrigger.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Tabs/TabsContent.tsx"],"sourcesContent":["// Directional resets (border-t-0/border-x-0), NOT border-0: under Tailwind v4 a\n// consumer app's `border-0` utility can land after design's compiled bottom-border in\n// the shared `utilities` layer and zero its width (same layer + specificity → source\n// order wins), dropping the line. With directional resets, only the bottom-border\n// utility (`border-b` on the wrapper, `border-b-[3px]` on the trigger) sets the bottom.\nexport const tabsListWrapperClass =\n 'tw:shrink-0 tw:border-t-0 tw:border-x-0 tw:border-b tw:border-solid tw:border-border';\n\nexport const tabsListClass = 'tw:flex tw:gap-8 tw:shrink-0 tw:w-max';\n\nexport const tabsTriggerGroupClass =\n 'tw:group/tab-trigger-group tw:flex tw:shrink-0 tw:items-center';\n\n// The focus ring is **inset**, not an outline. `TabsList` wraps the row in a horizontal\n// `ScrollArea`, whose viewport is `overflow-y: hidden`, and a trigger is exactly as tall as that\n// viewport — so there is 0px of slack for anything painted outside the border box, and a focus\n// outline (the browser's, or a host app's global rule) gets cropped on the top and bottom edges,\n// plus the left edge on the first trigger. Painting inside the box cannot be clipped by any\n// ancestor. Owning the affordance here is also what stops the consumer's global rule applying.\nexport const tabsTriggerClass =\n 'tw:focus-visible:outline-hidden tw:focus-visible:ring-2 tw:focus-visible:ring-inset tw:focus-visible:ring-ring tw:flex tw:justify-center tw:items-center tw:gap-1.5 tw:bg-transparent tw:shrink-0 tw:border-t-0 tw:border-x-0 tw:border-b-[3px] tw:border-solid tw:border-transparent tw:pt-2.5 tw:pb-5 tw:px-0 tw:m-0 tw:font-medium tw:leading-5 tw:text-muted-foreground tw:text-base tw:data-[state=active]:text-primary tw:data-[state=active]:border-primary tw:data-[disabled]:text-muted-foreground tw:data-[disabled]:opacity-disabled tw:data-[disabled]:cursor-not-allowed tw:group-hover/tab-trigger-group:enabled:text-primary tw:group-hover/tab-trigger-group:enabled:border-primary tw:group-hover/tab-trigger-group:enabled:cursor-pointer';\n\nexport const tabsTriggerCompactClass = 'tw:text-sm tw:pb-4';\n","import * as RadixTabs from '@radix-ui/react-tabs';\n\nimport { cn } from '../../utils';\nimport { ScrollArea } from '../ScrollArea';\n\nimport { tabsListClass, tabsListWrapperClass } from './styles';\n\ntype Props = Omit<RadixTabs.TabsListProps, 'asChild'>;\n\nexport const TabsList = ({ className, children, ...rest }: Props) => (\n <ScrollArea orientation=\"horizontal\" className={tabsListWrapperClass}>\n <RadixTabs.List {...rest} data-slot=\"tabs-list\" className={cn(tabsListClass, className)}>\n {children}\n </RadixTabs.List>\n </ScrollArea>\n);\n","import * as RadixTabs from '@radix-ui/react-tabs';\n\nimport { cn } from '../../utils';\n\nimport { tabsTriggerClass, tabsTriggerCompactClass } from './styles';\n\ntype Props = Omit<RadixTabs.TabsTriggerProps, 'asChild'> & {\n compact?: boolean;\n};\n\nexport const TabsTrigger = ({ className, compact = false, ...rest }: Props) => (\n <RadixTabs.Trigger\n data-slot=\"tabs-trigger\"\n {...rest}\n className={cn(tabsTriggerClass, compact && tabsTriggerCompactClass, className)}\n />\n);\n","import type { ReactNode } from 'react';\nimport * as RadixTabs from '@radix-ui/react-tabs';\n\nimport { X } from '../../icons';\nimport { cn } from '../../utils';\nimport { Button } from '../Button';\n\nimport { tabsTriggerGroupClass } from './styles';\nimport { TabsList } from './TabsList';\nimport { TabsTrigger } from './TabsTrigger';\n\nexport type Trigger<T extends string> = {\n value: T;\n title: ReactNode;\n onClose?: (value: T) => void;\n} & Omit<RadixTabs.TabsTriggerProps, 'title' | 'asChild'>;\n\ntype Props<T extends string> = {\n triggers: readonly Trigger<T>[];\n compact?: boolean;\n children: ReactNode;\n defaultValue?: string;\n onValueChange?: (value: T) => void;\n rootClassName?: string;\n listClassName?: string;\n triggerClassName?: string;\n triggerGroupClassName?: string;\n} & Omit<RadixTabs.TabsProps, 'onValueChange'>;\n\nexport const Tabs = <T extends string>({\n triggers,\n compact = false,\n children,\n defaultValue,\n onValueChange,\n rootClassName,\n listClassName,\n triggerClassName,\n triggerGroupClassName,\n ...rest\n}: Props<T>) => (\n <RadixTabs.Root\n {...rest}\n data-slot=\"tabs-root\"\n className={cn('tw:flex tw:flex-col tw:gap-6', rootClassName)}\n defaultValue={defaultValue ?? triggers[0]?.value}\n onValueChange={onValueChange as (value: string) => void}\n >\n <TabsList className={listClassName}>\n {triggers.map(({ value, title, onClose, className: callerClassName, ...triggerRest }) => (\n <div\n key={value}\n className={cn(tabsTriggerGroupClass, triggerGroupClassName)}\n data-slot=\"tabs-trigger-group\"\n >\n <TabsTrigger\n value={value}\n compact={compact}\n {...triggerRest}\n className={cn(triggerClassName, callerClassName)}\n >\n {title}\n </TabsTrigger>\n {onClose && (\n <Button\n type=\"button\"\n variant=\"inline\"\n size=\"icon-3xs\"\n disabled={triggerRest.disabled}\n onClick={() => onClose(value)}\n onMouseDown={(e) => e.preventDefault()}\n className=\"tw:!size-8 tw:opacity-0 tw:duration-200 tw:focus-visible:opacity-100 tw:group-focus-within/tab-trigger-group:opacity-100 tw:group-hover/tab-trigger-group:opacity-100\"\n aria-label={typeof title === 'string' ? `Close ${title}` : 'Close tab'}\n >\n <X className=\"tw:size-4\" />\n </Button>\n )}\n </div>\n ))}\n </TabsList>\n {children}\n </RadixTabs.Root>\n);\n","import * as RadixTabs from '@radix-ui/react-tabs';\n\nexport const TabsContent = (props: RadixTabs.TabsContentProps) => (\n <RadixTabs.Content data-slot=\"tabs-content\" tabIndex={-1} {...props} />\n);\n"],"mappings":";;;;;;;AAKA,MAAa,uBACX;AAEF,MAAa,gBAAgB;AAE7B,MAAa,wBACX;AAQF,MAAa,mBACX;;ACXF,MAAa,YAAY,EAAE,WAAW,UAAU,GAAG,WACjD,oBAAC,YAAD;CAAY,aAAY;CAAa,WAAW;CAC9C,UAAA,oBAAC,UAAU,MAAX;EAAgB,GAAI;EAAM,aAAU;EAAY,WAAW,GAAG,eAAe,SAAS;EACnF;CACa,CAAA;AACN,CAAA;;ACJd,MAAa,eAAe,EAAE,WAAW,UAAU,OAAO,GAAG,WAC3D,oBAAC,UAAU,SAAX;CACE,aAAU;CACV,GAAI;CACJ,WAAW,GAAG,kBAAkB,WAAA,sBAAoC,SAAS;AAC9E,CAAA;;ACcH,MAAa,QAA0B,EACrC,UACA,UAAU,OACV,UACA,cACA,eACA,eACA,eACA,kBACA,uBACA,GAAG,WAEH,qBAAC,UAAU,MAAX;CACE,GAAI;CACJ,aAAU;CACV,WAAW,GAAG,gCAAgC,aAAa;CAC3D,cAAc,gBAAgB,SAAS,EAAE,EAAE;CAC5B;CALjB,UAAA,CAOE,oBAAC,UAAD;EAAU,WAAW;EAClB,UAAA,SAAS,KAAK,EAAE,OAAO,OAAO,SAAS,WAAW,iBAAiB,GAAG,kBACrE,qBAAC,OAAD;GAEE,WAAW,GAAG,uBAAuB,qBAAqB;GAC1D,aAAU;GAHZ,UAAA,CAKE,oBAAC,aAAD;IACS;IACE;IACT,GAAI;IACJ,WAAW,GAAG,kBAAkB,eAAe;IAE9C,UAAA;GACU,CAAA,GACZ,WACC,oBAAC,QAAD;IACE,MAAK;IACL,SAAQ;IACR,MAAK;IACL,UAAU,YAAY;IACtB,eAAe,QAAQ,KAAK;IAC5B,cAAc,MAAM,EAAE,eAAe;IACrC,WAAU;IACV,cAAY,OAAO,UAAU,WAAW,SAAS,UAAU;IAE3D,UAAA,oBAAC,GAAD,EAAG,WAAU,YAAa,CAAA;GACpB,CAAA,CAEP;EA1BE,GAAA,KA0BF,CACN;CACO,CAAA,GACT,QACa;;;AC/ElB,MAAa,eAAe,UAC1B,oBAAC,UAAU,SAAX;CAAmB,aAAU;CAAe,UAAU;CAAI,GAAI;AAAQ,CAAA"}
@@ -1,12 +1,12 @@
1
- import { cn } from "./classNames-DcGnTh2N.js";
2
- import { createChangeInputEvent, createPrefixedString } from "./utils-DwC9u0tM.js";
1
+ import { cn } from "./classNames-DkX30VJU.js";
2
+ import { createChangeInputEvent, createPrefixedString } from "./utils-DjFceY3H.js";
3
3
  import { mergeRefs } from "./internal/utils/mergeRefs.js";
4
- import { X } from "./icons-ZIeZXXS7.js";
5
- import { InputGroup } from "./InputGroup-CZv_7QlM.js";
6
- import { useControllableState } from "./useControllableState-CUYXMsfz.js";
4
+ import { X } from "./icons-DDR9dFSr.js";
5
+ import { InputGroup } from "./InputGroup-BWeanEo7.js";
6
+ import { useControllableState } from "./useControllableState-BCvUOC6G.js";
7
7
  import { useRef } from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
- //#region src/blocks/TextInput/utils.ts
9
+ // src/blocks/TextInput/utils.ts
10
10
  const genInputTestId = (prefix = "") => {
11
11
  const ps = createPrefixedString(prefix);
12
12
  return {
@@ -16,8 +16,7 @@ const genInputTestId = (prefix = "") => {
16
16
  clearButton: ps`clear-button`
17
17
  };
18
18
  };
19
- //#endregion
20
- //#region src/blocks/TextInput/TextInput.tsx
19
+ // src/blocks/TextInput/TextInput.tsx
21
20
  const sanitizeTextInputValue = (value) => {
22
21
  if (typeof value === "string" && value.trim() === "") return "";
23
22
  return value;
@@ -98,7 +97,6 @@ const TextInput = ({ ref: forwardedRef, state = "default", className, prefix = n
98
97
  ]
99
98
  });
100
99
  };
101
- //#endregion
102
100
  export { TextInput };
103
101
 
104
- //# sourceMappingURL=TextInput-CR0_USaY.js.map
102
+ //# sourceMappingURL=TextInput--1CfZybC.js.map