@soroush.tech/design-system 2.0.0-rc.1 → 2.0.0-rc.3

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 (324) hide show
  1. package/README.md +30 -10
  2. package/dist/AppBar.d.cts +1 -3
  3. package/dist/AppBar.d.mts +1 -3
  4. package/dist/Avatar.cjs +1 -1
  5. package/dist/Avatar.d.cts +1 -3
  6. package/dist/Avatar.d.mts +1 -3
  7. package/dist/Avatar.mjs +1 -1
  8. package/dist/Backdrop.d.cts +1 -1
  9. package/dist/Backdrop.d.mts +1 -1
  10. package/dist/Breadcrumbs.cjs +132 -0
  11. package/dist/Breadcrumbs.d.cts +40 -0
  12. package/dist/Breadcrumbs.d.mts +40 -0
  13. package/dist/Breadcrumbs.mjs +131 -0
  14. package/dist/Button.cjs +1 -1
  15. package/dist/Button.d.cts +1 -1
  16. package/dist/Button.d.mts +1 -1
  17. package/dist/Button.mjs +1 -1
  18. package/dist/ButtonGroup.d.cts +1 -1
  19. package/dist/ButtonGroup.d.mts +1 -1
  20. package/dist/Card.cjs +3 -3
  21. package/dist/Card.d.cts +4 -3
  22. package/dist/Card.d.mts +4 -3
  23. package/dist/Card.mjs +3 -3
  24. package/dist/Checkbox.d.cts +1 -2
  25. package/dist/Checkbox.d.mts +1 -2
  26. package/dist/CircularProgress.d.cts +2 -3
  27. package/dist/CircularProgress.d.mts +2 -3
  28. package/dist/Drawer.d.cts +3 -2
  29. package/dist/Drawer.d.mts +3 -2
  30. package/dist/Flex.d.cts +1 -1
  31. package/dist/Flex.d.mts +1 -1
  32. package/dist/Form.d.cts +1 -1
  33. package/dist/Form.d.mts +1 -1
  34. package/dist/FormControl.cjs +10 -2
  35. package/dist/FormControl.d.cts +9 -2
  36. package/dist/FormControl.d.mts +9 -2
  37. package/dist/FormControl.mjs +10 -2
  38. package/dist/FormHelperText.d.cts +1 -1
  39. package/dist/FormHelperText.d.mts +1 -1
  40. package/dist/FormLabel.cjs +9 -1
  41. package/dist/FormLabel.d.cts +2 -2
  42. package/dist/FormLabel.d.mts +2 -2
  43. package/dist/FormLabel.mjs +10 -2
  44. package/dist/Grid.d.cts +1 -3
  45. package/dist/Grid.d.mts +1 -3
  46. package/dist/{Icon-CH3asUJu.mjs → Icon-BihOAP4u.mjs} +52 -2
  47. package/dist/{Icon-CI6q2Eyi.cjs → Icon-D-EWsBVg.cjs} +52 -2
  48. package/dist/Icon.cjs +1 -1
  49. package/dist/Icon.d.cts +1 -1
  50. package/dist/Icon.d.mts +1 -1
  51. package/dist/Icon.mjs +1 -1
  52. package/dist/Image.d.cts +1 -2
  53. package/dist/Image.d.mts +1 -2
  54. package/dist/InputRange.cjs +675 -0
  55. package/dist/InputRange.d.cts +79 -0
  56. package/dist/InputRange.d.mts +79 -0
  57. package/dist/InputRange.mjs +673 -0
  58. package/dist/LinearProgress.d.cts +2 -3
  59. package/dist/LinearProgress.d.mts +2 -3
  60. package/dist/Link.cjs +1 -1
  61. package/dist/Link.d.cts +1 -1
  62. package/dist/Link.d.mts +1 -1
  63. package/dist/Link.mjs +1 -1
  64. package/dist/Menu/ContextMenu.cjs +146 -0
  65. package/dist/Menu/ContextMenu.d.cts +52 -0
  66. package/dist/Menu/ContextMenu.d.mts +52 -0
  67. package/dist/Menu/ContextMenu.mjs +145 -0
  68. package/dist/Menu/Menu.cjs +3 -0
  69. package/dist/Menu/Menu.d.cts +2 -0
  70. package/dist/Menu/Menu.d.mts +2 -0
  71. package/dist/Menu/Menu.mjs +2 -0
  72. package/dist/Menu/MenuDivider.cjs +29 -0
  73. package/dist/Menu/MenuDivider.d.cts +12 -0
  74. package/dist/Menu/MenuDivider.d.mts +12 -0
  75. package/dist/Menu/MenuDivider.mjs +28 -0
  76. package/dist/Menu/MenuItems.cjs +29 -0
  77. package/dist/Menu/MenuItems.d.cts +2 -0
  78. package/dist/Menu/MenuItems.d.mts +2 -0
  79. package/dist/Menu/MenuItems.mjs +28 -0
  80. package/dist/Menu/MenuList.cjs +3 -0
  81. package/dist/Menu/MenuList.d.cts +38 -0
  82. package/dist/Menu/MenuList.d.mts +38 -0
  83. package/dist/Menu/MenuList.mjs +2 -0
  84. package/dist/Menu-Cgg-sX4W.cjs +173 -0
  85. package/dist/Menu-CrzHc_cn.mjs +168 -0
  86. package/dist/Menu.cjs +13 -0
  87. package/dist/Menu.d.cts +7 -0
  88. package/dist/Menu.d.mts +7 -0
  89. package/dist/Menu.mjs +6 -0
  90. package/dist/MenuItem-BTP7Ijwi.cjs +673 -0
  91. package/dist/MenuItem-DUn4IZKK.mjs +649 -0
  92. package/dist/MenuItem.cjs +2 -148
  93. package/dist/MenuItem.d.cts +2 -52
  94. package/dist/MenuItem.d.mts +2 -52
  95. package/dist/MenuItem.mjs +1 -147
  96. package/dist/MenuList-B7msJ1IG.mjs +187 -0
  97. package/dist/MenuList-D4imLXAa.cjs +223 -0
  98. package/dist/MenuListContext-DKUOhNyw.d.cts +21 -0
  99. package/dist/MenuListContext-x-7lH4CH.d.mts +21 -0
  100. package/dist/Modal.d.cts +1 -1
  101. package/dist/Modal.d.mts +1 -1
  102. package/dist/NativeSelect.cjs +9 -8
  103. package/dist/NativeSelect.d.cts +3 -4
  104. package/dist/NativeSelect.d.mts +3 -4
  105. package/dist/NativeSelect.mjs +9 -8
  106. package/dist/NumberField.cjs +476 -0
  107. package/dist/NumberField.d.cts +74 -0
  108. package/dist/NumberField.d.mts +74 -0
  109. package/dist/NumberField.mjs +474 -0
  110. package/dist/Pagination/PaginationItem.cjs +1 -1
  111. package/dist/Pagination/PaginationItem.d.cts +1 -1
  112. package/dist/Pagination/PaginationItem.d.mts +1 -1
  113. package/dist/Pagination/PaginationItem.mjs +1 -1
  114. package/dist/Pagination.d.cts +2 -2
  115. package/dist/Pagination.d.mts +2 -2
  116. package/dist/Paper.cjs +1 -1
  117. package/dist/Paper.d.cts +2 -1
  118. package/dist/Paper.d.mts +2 -1
  119. package/dist/Paper.mjs +1 -1
  120. package/dist/{Popover-TpwRSORC.cjs → Popover-CiZfgiKE.cjs} +5 -125
  121. package/dist/Popover-QjM5Z1CR.mjs +133 -0
  122. package/dist/Popover.cjs +1 -1
  123. package/dist/Popover.d.cts +6 -7
  124. package/dist/Popover.d.mts +6 -7
  125. package/dist/Popover.mjs +1 -1
  126. package/dist/Pressable.cjs +1 -1
  127. package/dist/Pressable.d.cts +1 -1
  128. package/dist/Pressable.d.mts +1 -1
  129. package/dist/Pressable.mjs +1 -1
  130. package/dist/Quote.d.cts +2 -3
  131. package/dist/Quote.d.mts +2 -3
  132. package/dist/Radio.d.cts +1 -2
  133. package/dist/Radio.d.mts +1 -2
  134. package/dist/Rating.cjs +373 -0
  135. package/dist/Rating.d.cts +57 -0
  136. package/dist/Rating.d.mts +57 -0
  137. package/dist/Rating.mjs +371 -0
  138. package/dist/Select.cjs +5 -4
  139. package/dist/Select.d.cts +3 -4
  140. package/dist/Select.d.mts +3 -4
  141. package/dist/Select.mjs +7 -6
  142. package/dist/Sidebar/Sidebar.d.cts +1 -1
  143. package/dist/Sidebar/Sidebar.d.mts +1 -1
  144. package/dist/Sidebar/SidebarItem.cjs +1 -1
  145. package/dist/Sidebar/SidebarItem.d.cts +3 -4
  146. package/dist/Sidebar/SidebarItem.d.mts +3 -4
  147. package/dist/Sidebar/SidebarItem.mjs +3 -3
  148. package/dist/Skeleton.d.cts +1 -2
  149. package/dist/Skeleton.d.mts +1 -2
  150. package/dist/Switch.cjs +23 -16
  151. package/dist/Switch.d.cts +2 -3
  152. package/dist/Switch.d.mts +2 -3
  153. package/dist/Switch.mjs +25 -18
  154. package/dist/Table/Table.d.cts +2 -3
  155. package/dist/Table/Table.d.mts +2 -3
  156. package/dist/Table/TableBody.d.cts +1 -2
  157. package/dist/Table/TableBody.d.mts +1 -2
  158. package/dist/Table/TableCell.d.cts +1 -1
  159. package/dist/Table/TableCell.d.mts +1 -1
  160. package/dist/Table/TableContainer.d.cts +1 -3
  161. package/dist/Table/TableContainer.d.mts +1 -3
  162. package/dist/Table/TableControl.d.cts +1 -1
  163. package/dist/Table/TableControl.d.mts +1 -1
  164. package/dist/Table/TableControl.mjs +2 -2
  165. package/dist/Table/TableFooter.d.cts +1 -2
  166. package/dist/Table/TableFooter.d.mts +1 -2
  167. package/dist/Table/TableHead.d.cts +1 -2
  168. package/dist/Table/TableHead.d.mts +1 -2
  169. package/dist/Table/TablePagination.d.cts +2 -2
  170. package/dist/Table/TablePagination.d.mts +2 -2
  171. package/dist/Table/TablePaginationActions.cjs +1 -1
  172. package/dist/Table/TablePaginationActions.d.cts +1 -1
  173. package/dist/Table/TablePaginationActions.d.mts +1 -1
  174. package/dist/Table/TablePaginationActions.mjs +1 -1
  175. package/dist/Table/TableRow.d.cts +1 -2
  176. package/dist/Table/TableRow.d.mts +1 -2
  177. package/dist/Table/TableSortLabel.cjs +1 -1
  178. package/dist/Table/TableSortLabel.d.cts +1 -1
  179. package/dist/Table/TableSortLabel.d.mts +1 -1
  180. package/dist/Table/TableSortLabel.mjs +1 -1
  181. package/dist/Table/hooks.d.cts +1 -1
  182. package/dist/Table/hooks.d.mts +1 -1
  183. package/dist/Table.d.cts +5 -5
  184. package/dist/Table.d.mts +5 -5
  185. package/dist/{TableContext-BeCxbtHH.d.cts → TableContext-DhuRf6Wy.d.mts} +1 -1
  186. package/dist/{TableContext-BiRiYkVZ.d.mts → TableContext-Duj1nVG7.d.cts} +1 -1
  187. package/dist/Tabs/Tab.cjs +306 -0
  188. package/dist/Tabs/Tab.d.cts +62 -0
  189. package/dist/Tabs/Tab.d.mts +62 -0
  190. package/dist/Tabs/Tab.mjs +305 -0
  191. package/dist/Tabs/TabContext.cjs +34 -0
  192. package/dist/Tabs/TabContext.d.cts +20 -0
  193. package/dist/Tabs/TabContext.d.mts +20 -0
  194. package/dist/Tabs/TabContext.mjs +33 -0
  195. package/dist/Tabs/TabList.cjs +31 -0
  196. package/dist/Tabs/TabList.d.cts +11 -0
  197. package/dist/Tabs/TabList.d.mts +11 -0
  198. package/dist/Tabs/TabList.mjs +30 -0
  199. package/dist/Tabs/TabPanel.cjs +40 -0
  200. package/dist/Tabs/TabPanel.d.cts +27 -0
  201. package/dist/Tabs/TabPanel.d.mts +27 -0
  202. package/dist/Tabs/TabPanel.mjs +38 -0
  203. package/dist/Tabs/TabScrollButton.cjs +93 -0
  204. package/dist/Tabs/TabScrollButton.d.cts +2 -0
  205. package/dist/Tabs/TabScrollButton.d.mts +2 -0
  206. package/dist/Tabs/TabScrollButton.mjs +91 -0
  207. package/dist/Tabs/Tabs.cjs +3 -0
  208. package/dist/Tabs/Tabs.d.cts +3 -0
  209. package/dist/Tabs/Tabs.d.mts +3 -0
  210. package/dist/Tabs/Tabs.mjs +2 -0
  211. package/dist/Tabs-BTNOJx5v.mjs +634 -0
  212. package/dist/Tabs-D4tWCq78.cjs +646 -0
  213. package/dist/Tabs.cjs +13 -0
  214. package/dist/Tabs.d.cts +8 -0
  215. package/dist/Tabs.d.mts +8 -0
  216. package/dist/Tabs.mjs +7 -0
  217. package/dist/TabsContext-B_XHbjcS.d.cts +6 -0
  218. package/dist/TabsContext-Dn2kqUwr.d.mts +6 -0
  219. package/dist/TabsValueContext-D40zGCpE.cjs +19 -0
  220. package/dist/TabsValueContext-DvL3inf7.mjs +8 -0
  221. package/dist/TextInput.cjs +4 -4
  222. package/dist/TextInput.d.cts +2 -3
  223. package/dist/TextInput.d.mts +2 -3
  224. package/dist/TextInput.mjs +4 -4
  225. package/dist/ToggleButton/ToggleButton.cjs +1 -1
  226. package/dist/ToggleButton/ToggleButton.d.cts +1 -1
  227. package/dist/ToggleButton/ToggleButton.d.mts +1 -1
  228. package/dist/ToggleButton/ToggleButton.mjs +1 -1
  229. package/dist/ToggleButton/ToggleButtonGroup.cjs +1 -1
  230. package/dist/ToggleButton/ToggleButtonGroup.d.cts +1 -1
  231. package/dist/ToggleButton/ToggleButtonGroup.d.mts +1 -1
  232. package/dist/ToggleButton/ToggleButtonGroup.mjs +1 -1
  233. package/dist/TransferList.cjs +356 -0
  234. package/dist/TransferList.d.cts +67 -0
  235. package/dist/TransferList.d.mts +67 -0
  236. package/dist/TransferList.mjs +354 -0
  237. package/dist/Typography.cjs +1 -1
  238. package/dist/Typography.d.cts +2 -2
  239. package/dist/Typography.d.mts +2 -2
  240. package/dist/Typography.mjs +1 -1
  241. package/dist/View.d.cts +1 -1
  242. package/dist/View.d.mts +1 -1
  243. package/dist/catalog.cjs +4568 -0
  244. package/dist/catalog.d.cts +90 -0
  245. package/dist/catalog.d.mts +90 -0
  246. package/dist/catalog.mjs +4567 -0
  247. package/dist/computePopoverPosition-BIprs_xo.mjs +123 -0
  248. package/dist/computePopoverPosition-DiyEOHnU.cjs +128 -0
  249. package/dist/dividerLine-BNljcGlv.cjs +66 -0
  250. package/dist/dividerLine-FahY-M6_.mjs +31 -0
  251. package/dist/engine.d.cts +1 -1
  252. package/dist/engine.d.mts +1 -1
  253. package/dist/index-B1RFybA_.d.mts +72 -0
  254. package/dist/index-B4TeaB7b.d.cts +72 -0
  255. package/dist/{index-BUoVTCqX.d.mts → index-BGbTuHP9.d.mts} +1 -2
  256. package/dist/{index-Celm-8iN.d.cts → index-BHKgEOZJ.d.cts} +2 -3
  257. package/dist/{index-Chg6pSrr.d.mts → index-BQWjh4rK.d.mts} +2 -3
  258. package/dist/{index-B78VkB0-.d.cts → index-BelFIizY.d.cts} +2 -3
  259. package/dist/index-BkzZxHVj.d.mts +35 -0
  260. package/dist/{index-DbEnSf2m.d.cts → index-BrgwkY6z.d.mts} +3 -4
  261. package/dist/{index-Wnv6jCR3.d.mts → index-Bx0-6yeX.d.mts} +1 -2
  262. package/dist/index-BxVTIMnB.d.cts +1 -0
  263. package/dist/{index-BfZuh9c2.d.mts → index-ByYxVl9O.d.mts} +2 -3
  264. package/dist/index-CE5JG1us.d.mts +34 -0
  265. package/dist/{index-BhibLnZ0.d.cts → index-CG_1uPrD.d.mts} +2 -3
  266. package/dist/{themes-RX2UX5gD.d.mts → index-CJhK7JND.d.mts} +265 -8
  267. package/dist/{index-BB-dLv5V.d.mts → index-CQfJZADG.d.cts} +3 -4
  268. package/dist/{index-CxUsrlg1.d.cts → index-CUz2h5xY.d.mts} +2 -3
  269. package/dist/{index-Bid71KeF.d.cts → index-CbFaWtjK.d.mts} +2 -2
  270. package/dist/{index-DdqdSOct.d.cts → index-ChXeKJCk.d.cts} +1 -2
  271. package/dist/index-CknoXDLQ.d.cts +35 -0
  272. package/dist/{index-BSqet8aO.d.cts → index-ClZyaZrR.d.mts} +2 -3
  273. package/dist/{index-DXvQ-JVZ.d.mts → index-DAwcmIjN.d.cts} +2 -3
  274. package/dist/index-DGnXJwLj.d.mts +72 -0
  275. package/dist/{themes-Kbk9h5cN.d.cts → index-DJ0f69wh.d.cts} +262 -5
  276. package/dist/index-DWjz5ZzG.d.cts +72 -0
  277. package/dist/{index-DNwF3DUX.d.cts → index-DYF8sRE-.d.cts} +2 -3
  278. package/dist/index-DaIIo5QU.d.mts +1 -0
  279. package/dist/{index-CrN4MSUF.d.cts → index-DchHf5cF.d.cts} +1 -1
  280. package/dist/{index-S-ClM6WM.d.mts → index-DtYjdBvO.d.cts} +2 -2
  281. package/dist/{index-Ctqajtac.d.cts → index-Dv_fk1_F.d.cts} +27 -3
  282. package/dist/{index-smqjMLAZ.d.mts → index-K5exjvnX.d.cts} +2 -3
  283. package/dist/index-KnXhlKMr.d.cts +34 -0
  284. package/dist/index-WHFhjfgy.d.cts +98 -0
  285. package/dist/{index-GpnmW6vu.d.mts → index-YKrfFC_I.d.cts} +2 -3
  286. package/dist/index-bpnLB_4K.d.mts +98 -0
  287. package/dist/{index-VOsBSWEu.d.mts → index-h4dYtVrp.d.mts} +1 -1
  288. package/dist/{index-DO9J-Fla.d.mts → index-ha1WjSZ5.d.mts} +27 -3
  289. package/dist/{index-Belxmt1X.d.cts → index-nqUA_6J_.d.cts} +1 -2
  290. package/dist/{index-nc4Sxiy9.d.mts → index-pTNq3iQn.d.mts} +2 -3
  291. package/dist/index.d.cts +1 -2
  292. package/dist/index.d.mts +1 -2
  293. package/dist/isRtl-BJDtm86G.mjs +7 -0
  294. package/dist/isRtl-DTkYHRPo.cjs +12 -0
  295. package/dist/precision-B1lhxnnO.mjs +25 -0
  296. package/dist/precision-B58cTPB2.cjs +48 -0
  297. package/dist/style.cjs +1 -1
  298. package/dist/style.d.cts +2 -2
  299. package/dist/style.d.mts +2 -2
  300. package/dist/style.mjs +1 -1
  301. package/dist/surfaceSystem-BGQBoXv_.cjs +38 -0
  302. package/dist/surfaceSystem-D8TbmKy3.mjs +21 -0
  303. package/dist/theme-BxXuXRgQ.cjs +137 -0
  304. package/dist/theme-Z9_QludW.mjs +102 -0
  305. package/dist/theme.cjs +25 -24
  306. package/dist/theme.d.cts +3 -3
  307. package/dist/theme.d.mts +3 -3
  308. package/dist/theme.mjs +2 -1
  309. package/dist/{theme-CDVxig_g.mjs → themes-L-dE7_ck.mjs} +10 -110
  310. package/dist/{theme-BXlAP3xf.cjs → themes-gd6tcmqS.cjs} +0 -136
  311. package/dist/useControlled-C666KpQ0.cjs +18 -0
  312. package/dist/useControlled-CBRLsO-H.mjs +13 -0
  313. package/dist/{useTablePagination-COTiNH_8.d.mts → useTablePagination-C-u3ru4N.d.cts} +1 -1
  314. package/dist/{useTablePagination-WFkaUZu8.d.cts → useTablePagination-D-39ZmQh.d.mts} +1 -1
  315. package/package.json +83 -2
  316. package/dist/Popover-DwnSLpp1.mjs +0 -253
  317. package/dist/index-B_dKjEDR.d.mts +0 -23
  318. package/dist/index-C1WqEDtQ.d.mts +0 -69
  319. package/dist/index-CA7HnbtH.d.cts +0 -21
  320. package/dist/index-CKZaErxJ.d.mts +0 -21
  321. package/dist/index-DBUwu65Z.d.cts +0 -69
  322. package/dist/index-DzQJSYIh.d.cts +0 -23
  323. package/dist/index-cuv3o-L7.d.mts +0 -34
  324. package/dist/index-nB94D7UM.d.cts +0 -34
@@ -0,0 +1,646 @@
1
+ const require_src = require("./src-DU81aGy9.cjs");
2
+ const require_View = require("./View.cjs");
3
+ const require_themeDefault = require("./themeDefault-Cebi08Cv.cjs");
4
+ const require_theme = require("./theme-BxXuXRgQ.cjs");
5
+ const require_Icon = require("./Icon-D-EWsBVg.cjs");
6
+ const require_isRtl = require("./isRtl-DTkYHRPo.cjs");
7
+ const require_MenuItem = require("./MenuItem-BTP7Ijwi.cjs");
8
+ const require_Menu = require("./Menu-Cgg-sX4W.cjs");
9
+ const require_dividerLine = require("./dividerLine-BNljcGlv.cjs");
10
+ const require_Tabs_TabScrollButton = require("./Tabs/TabScrollButton.cjs");
11
+ const require_surfaceSystem = require("./surfaceSystem-BGQBoXv_.cjs");
12
+ let react = require("react");
13
+ let react_jsx_runtime = require("react/jsx-runtime");
14
+ let _soroush_tech_styled_system_should_forward_prop = require("@soroush.tech/styled-system/should-forward-prop");
15
+ //#region src/Tabs/utils/fitTabs.ts
16
+ /**
17
+ * The tabs that don't fit **whole** in `room` pixels along the row, with `gap` between them -
18
+ * the ones its menu lists. The selected tab counts first, then the others in order while the
19
+ * next still fits; the first that doesn't ends the row, and every one after it goes too, even a
20
+ * later short one, so the row never reads out of order. A tab not measured yet counts as nothing,
21
+ * so it is drawn and measured. With no room measured - nothing laid out - every tab fits.
22
+ */
23
+ const fitTabs = (values, selected, sizes, room, gap) => {
24
+ if (room <= 0) return [];
25
+ const sizeOf = (value) => sizes.get(value) ?? 0;
26
+ const shown = /* @__PURE__ */ new Set();
27
+ let used = 0;
28
+ if (selected !== null && values.includes(selected)) {
29
+ shown.add(selected);
30
+ used = sizeOf(selected);
31
+ }
32
+ for (const value of values) {
33
+ if (value === selected) continue;
34
+ const next = used + (shown.size > 0 ? gap : 0) + sizeOf(value);
35
+ if (next > room) break;
36
+ shown.add(value);
37
+ used = next;
38
+ }
39
+ return values.filter((value) => !shown.has(value));
40
+ };
41
+ //#endregion
42
+ //#region src/Tabs/hooks/useTabsOverflow.ts
43
+ const px = (value) => Number.parseFloat(value) || 0;
44
+ /**
45
+ * The tabs of a row that don't fit whole in its list, for the row's menu - none unless
46
+ * `isEnabled`. Each drawn tab is measured along the row (its `data-tab-value` root) and its size
47
+ * kept, so a tab put in the menu comes back when the room grows. The room is the list's size less
48
+ * its padding, and the gap its own, so the row's own content and the menu's button take their
49
+ * room first. Measured after every render - a tab added, closed or renamed changes the answer -
50
+ * and on every resize of the list; a measurement that changes nothing renders nothing, so the
51
+ * button appearing can't make the row go back and forth. `update` measures again on demand.
52
+ */
53
+ function useTabsOverflow(listRef, isEnabled, isVertical, values, selected) {
54
+ const sizes = (0, react.useRef)(/* @__PURE__ */ new Map());
55
+ const [hidden, setHidden] = (0, react.useState)([]);
56
+ const measure = () => {
57
+ const list = listRef.current;
58
+ let out = [];
59
+ if (isEnabled && list) {
60
+ const valueOf = new Map(values.map((value) => [String(value), value]));
61
+ for (const tab of list.querySelectorAll("[data-tab-value]")) {
62
+ const box = tab.getBoundingClientRect();
63
+ sizes.current.set(valueOf.get(tab.dataset.tabValue), isVertical ? box.height : box.width);
64
+ }
65
+ const style = getComputedStyle(list);
66
+ const room = isVertical ? list.clientHeight - px(style.paddingTop) - px(style.paddingBottom) : list.clientWidth - px(style.paddingLeft) - px(style.paddingRight);
67
+ const gap = px(isVertical ? style.rowGap : style.columnGap);
68
+ out = fitTabs(values, selected, sizes.current, room, gap);
69
+ }
70
+ setHidden((before) => before.length === out.length && before.every((value, at) => value === out[at]) ? before : out);
71
+ };
72
+ const measureRef = (0, react.useRef)(measure);
73
+ (0, react.useLayoutEffect)(() => {
74
+ measureRef.current = measure;
75
+ measure();
76
+ });
77
+ (0, react.useLayoutEffect)(() => {
78
+ const list = listRef.current;
79
+ if (!isEnabled || !list || typeof ResizeObserver === "undefined") return void 0;
80
+ const observer = new ResizeObserver(() => measureRef.current());
81
+ observer.observe(list);
82
+ return () => observer.disconnect();
83
+ }, [listRef, isEnabled]);
84
+ return {
85
+ hidden,
86
+ update: (0, react.useCallback)(() => measureRef.current(), [])
87
+ };
88
+ }
89
+ //#endregion
90
+ //#region src/Tabs/hooks/useTabsScroll.ts
91
+ const AT_REST = {
92
+ isOverflowing: false,
93
+ canScrollStart: false,
94
+ canScrollEnd: false
95
+ };
96
+ /** Where a scrolling list stands, its start edge first whatever the direction. */
97
+ function readScroll(list, isVertical) {
98
+ const size = isVertical ? list.clientHeight : list.clientWidth;
99
+ const total = isVertical ? list.scrollHeight : list.scrollWidth;
100
+ const offset = Math.abs(isVertical ? list.scrollTop : list.scrollLeft);
101
+ return {
102
+ isOverflowing: total > size,
103
+ canScrollStart: offset > 0,
104
+ canScrollEnd: offset + size < total - 1
105
+ };
106
+ }
107
+ /**
108
+ * Keeps track of a scrolling tab list - whether its tabs overflow, and on which side some
109
+ * are out of view - as it scrolls, resizes and re-renders.
110
+ */
111
+ function useTabsScroll(listRef, isEnabled, isVertical) {
112
+ const [state, setState] = (0, react.useState)(AT_REST);
113
+ const update = (0, react.useCallback)(() => {
114
+ if (!isEnabled) return;
115
+ const next = readScroll(listRef.current, isVertical);
116
+ setState((previous) => previous.isOverflowing === next.isOverflowing && previous.canScrollStart === next.canScrollStart && previous.canScrollEnd === next.canScrollEnd ? previous : next);
117
+ }, [
118
+ listRef,
119
+ isEnabled,
120
+ isVertical
121
+ ]);
122
+ (0, react.useLayoutEffect)(update);
123
+ (0, react.useEffect)(() => {
124
+ if (!isEnabled) return void 0;
125
+ const list = listRef.current;
126
+ list.addEventListener("scroll", update);
127
+ window.addEventListener("resize", update);
128
+ const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(update);
129
+ observer?.observe(list);
130
+ return () => {
131
+ list.removeEventListener("scroll", update);
132
+ window.removeEventListener("resize", update);
133
+ observer?.disconnect();
134
+ };
135
+ }, [
136
+ listRef,
137
+ isEnabled,
138
+ update
139
+ ]);
140
+ const scrollByView = (direction) => {
141
+ const list = listRef.current;
142
+ const isReduced = window.matchMedia?.("(prefers-reduced-motion: reduce)").matches ?? false;
143
+ const distance = (!isVertical && require_isRtl.isRtl(list) ? -direction : direction) * (isVertical ? list.clientHeight : list.clientWidth);
144
+ list.scrollBy({
145
+ [isVertical ? "top" : "left"]: distance,
146
+ behavior: isReduced ? "auto" : "smooth"
147
+ });
148
+ };
149
+ return {
150
+ ...state,
151
+ update,
152
+ scrollByView
153
+ };
154
+ }
155
+ //#endregion
156
+ //#region src/Tabs/TabListContext.ts
157
+ const TabListContext = (0, react.createContext)(null);
158
+ /** The `TabList` these tabs render for, if any - which links them to their panels. */
159
+ const useTabList = () => (0, react.useContext)(TabListContext);
160
+ //#endregion
161
+ //#region src/Tabs/utils/getNextTab.ts
162
+ /** A tab the keys can reach: not disabled. */
163
+ const isTabEnabled = (tab) => tab.getAttribute("aria-disabled") !== "true";
164
+ /**
165
+ * The enabled tab a key moves focus to from `current`. Disabled tabs are skipped, and
166
+ * `next` past the last tab comes round to the first (and `previous` the other way).
167
+ */
168
+ function getNextTab(tabs, current, step) {
169
+ const enabled = tabs.filter(isTabEnabled);
170
+ if (step === "first") return enabled[0];
171
+ if (step === "last") return enabled.at(-1);
172
+ const index = enabled.indexOf(current);
173
+ if (index === -1) return step === "next" ? enabled[0] : enabled.at(-1);
174
+ const offset = step === "next" ? 1 : -1;
175
+ return enabled.at((index + offset) % enabled.length);
176
+ }
177
+ //#endregion
178
+ //#region src/Tabs/Tabs/Tabs.tsx
179
+ const shouldForwardProp = (0, _soroush_tech_styled_system_should_forward_prop.createShouldForwardProp)([
180
+ ..._soroush_tech_styled_system_should_forward_prop.props,
181
+ "variant",
182
+ "color",
183
+ "size",
184
+ "orientation",
185
+ "fullWidth",
186
+ "hasDivider",
187
+ "isCentered"
188
+ ]);
189
+ const TabsRoot = require_src.styled("div", {
190
+ name: "Tabs",
191
+ label: "Tabs",
192
+ shouldForwardProp,
193
+ systemProps: [require_src.src_exports.space, require_surfaceSystem.surfaceSystem]
194
+ })(({ theme, orientation, variant, color, hasDivider }) => {
195
+ const isVertical = orientation === "vertical";
196
+ return {
197
+ display: "flex",
198
+ flexDirection: isVertical ? "column" : "row",
199
+ alignItems: "stretch",
200
+ minWidth: 0,
201
+ ...hasDivider && variant !== "enclosed" && { boxShadow: require_dividerLine.getDividerShadow(theme, isVertical, require_dividerLine.getDividerColor(theme, variant, color)) }
202
+ };
203
+ });
204
+ const TabsList = require_src.styled("div", {
205
+ name: "Tabs",
206
+ slot: "list",
207
+ label: "TabsList",
208
+ shouldForwardProp: (0, _soroush_tech_styled_system_should_forward_prop.createShouldForwardProp)([
209
+ ..._soroush_tech_styled_system_should_forward_prop.props,
210
+ "variant",
211
+ "color",
212
+ "size",
213
+ "orientation",
214
+ "fullWidth",
215
+ "hasDivider",
216
+ "isCentered",
217
+ "isScrolling",
218
+ "isFitting",
219
+ "hasVisibleScrollbar"
220
+ ])
221
+ })((styleProps) => {
222
+ const { theme, orientation, isCentered, variant, fullWidth, isScrolling, isFitting, hasVisibleScrollbar } = styleProps;
223
+ const isVertical = orientation === "vertical";
224
+ const enclosedEnds = {
225
+ "&::before, &::after": {
226
+ content: "\"\"",
227
+ flexShrink: 0,
228
+ ...require_dividerLine.getEnclosedPieceStyle(theme, styleProps)
229
+ },
230
+ "&::before": { flexGrow: isCentered ? 1 : 0 },
231
+ "&::after": { flexGrow: isCentered || !fullWidth ? 1 : 0 }
232
+ };
233
+ return {
234
+ position: "relative",
235
+ display: "flex",
236
+ flexDirection: isVertical ? "column" : "row",
237
+ justifyContent: isCentered ? "center" : "flex-start",
238
+ gap: variant === "boxed" ? theme.space[.5] : 0,
239
+ flex: 1,
240
+ minWidth: 0,
241
+ ...variant === "enclosed" && enclosedEnds,
242
+ ...isFitting && { overflow: "hidden" },
243
+ ...isScrolling && {
244
+ [isVertical ? "overflowY" : "overflowX"]: "auto",
245
+ [isVertical ? "overflowX" : "overflowY"]: "hidden",
246
+ ...!hasVisibleScrollbar && {
247
+ scrollbarWidth: "none",
248
+ "&::-webkit-scrollbar": { display: "none" }
249
+ }
250
+ }
251
+ };
252
+ });
253
+ const TabsIndicator = require_src.styled("span", {
254
+ name: "Tabs",
255
+ slot: "indicator",
256
+ label: "TabsIndicator",
257
+ shouldForwardProp
258
+ })(({ theme, color, orientation }) => {
259
+ const isVertical = orientation === "vertical";
260
+ return {
261
+ position: "absolute",
262
+ backgroundColor: (0, require_src.src_exports.get)(theme, `palette.${color}.main`),
263
+ pointerEvents: "none",
264
+ transition: "left 0.15s ease, width 0.15s ease, top 0.15s ease, height 0.15s ease",
265
+ ...isVertical ? {
266
+ insetInlineEnd: 0,
267
+ width: theme.borderWidths.base
268
+ } : {
269
+ bottom: 0,
270
+ height: theme.borderWidths.base
271
+ },
272
+ "@media (prefers-reduced-motion: reduce)": { transition: "none" }
273
+ };
274
+ });
275
+ const StartContent = require_src.styled("div", {
276
+ name: "Tabs",
277
+ slot: "startContent",
278
+ label: "TabsStart",
279
+ shouldForwardProp
280
+ })(({ theme, ...styleProps }) => ({
281
+ display: "flex",
282
+ alignItems: "center",
283
+ flexShrink: 0,
284
+ [styleProps.orientation === "vertical" ? "paddingBlockEnd" : "paddingInlineEnd"]: theme.space[2],
285
+ ...require_dividerLine.getEnclosedPieceStyle(theme, styleProps)
286
+ }));
287
+ const EndContent = require_src.styled("div", {
288
+ name: "Tabs",
289
+ slot: "endContent",
290
+ label: "TabsEnd",
291
+ shouldForwardProp
292
+ })(({ theme, ...styleProps }) => ({
293
+ display: "flex",
294
+ alignItems: "center",
295
+ flexShrink: 0,
296
+ [styleProps.orientation === "vertical" ? "paddingBlockStart" : "paddingInlineStart"]: theme.space[2],
297
+ ...require_dividerLine.getEnclosedPieceStyle(theme, styleProps)
298
+ }));
299
+ const OverflowButton = require_src.styled("button", {
300
+ name: "Tabs",
301
+ slot: "overflowButton",
302
+ label: "TabsOverflowButton",
303
+ shouldForwardProp
304
+ })(({ theme, ...styleProps }) => {
305
+ const main = (0, require_src.src_exports.get)(theme, `palette.${styleProps.color}.main`);
306
+ return {
307
+ ...require_dividerLine.getEnclosedPieceStyle(theme, styleProps),
308
+ appearance: "none",
309
+ display: "grid",
310
+ placeItems: "center",
311
+ flex: "1 1 auto",
312
+ ...styleProps.orientation === "vertical" ? { minHeight: theme.space[5] } : { minWidth: theme.icon.lg },
313
+ padding: 0,
314
+ border: "none",
315
+ backgroundColor: "transparent",
316
+ color: (0, require_src.src_exports.get)(theme, "text.primary"),
317
+ cursor: "pointer",
318
+ outline: "none",
319
+ "&:focus-visible": {
320
+ outline: `${theme.borderWidths.base} solid ${main}`,
321
+ outlineOffset: `-${theme.borderWidths.base}`
322
+ }
323
+ };
324
+ });
325
+ const OverflowClose = require_src.styled("button", {
326
+ name: "Tabs",
327
+ slot: "overflowClose",
328
+ label: "TabsOverflowClose",
329
+ shouldForwardProp
330
+ })(({ theme, color }) => {
331
+ const main = (0, require_src.src_exports.get)(theme, `palette.${color}.main`);
332
+ return {
333
+ appearance: "none",
334
+ display: "grid",
335
+ placeItems: "center",
336
+ width: theme.icon.sm,
337
+ height: theme.icon.sm,
338
+ padding: 0,
339
+ border: "none",
340
+ borderRadius: theme.radii.sm,
341
+ backgroundColor: "transparent",
342
+ color: (0, require_src.src_exports.get)(theme, "text.secondary"),
343
+ cursor: "pointer",
344
+ "&:hover": { backgroundColor: `${main}1F` }
345
+ };
346
+ });
347
+ const readTabs = (children) => react.Children.toArray(children).flatMap((child, index) => {
348
+ if (!(0, react.isValidElement)(child)) return [];
349
+ const { value, disabled, label, icon, closeLabel, color, size } = child.props;
350
+ return [{
351
+ value: value ?? index,
352
+ disabled: disabled ?? false,
353
+ label,
354
+ icon,
355
+ closeLabel,
356
+ color,
357
+ size
358
+ }];
359
+ });
360
+ const getLargestSpace = (steps) => steps.reduce((largest, step) => largest === void 0 || Number(step) > Number(largest) ? step : largest, void 0);
361
+ const getFocusableValue = (children, selectedValue) => {
362
+ const enabled = readTabs(children).filter((tab) => !tab.disabled);
363
+ return enabled.find((tab) => tab.value === selectedValue)?.value ?? enabled[0]?.value ?? null;
364
+ };
365
+ const STEP_BY_KEY = {
366
+ Home: "first",
367
+ End: "last"
368
+ };
369
+ /**
370
+ * @description A row of tabs. By default a `tablist`: one tab in the page's tab order, the
371
+ * arrow keys of its orientation moving between tabs, Enter or Space selecting (or moving
372
+ * focus selecting, with `shouldSelectOnFocus`). With `as="nav"`, the same look as a
373
+ * navigation, its current tab marked `aria-current="page"`. Content of the row's own sits
374
+ * before and after the tabs.
375
+ */
376
+ function Tabs({ children, value: valueProp, defaultValue, onChange, onTabClose, as = "div", orientation = "horizontal", variant: variantProp, color: colorProp, textColor, size: sizeProp, fullWidth = false, isCentered = false, shouldSelectOnFocus = false, overflowBehavior = "none", overflowLabel, scrollButtons = "auto", shouldShowScrollButtonsOnMobile = false, hasVisibleScrollbar = false, hasDivider: hasDividerProp, bg, selectedBg: selectedBgProp, slots, startContent, endContent, action, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, id, className, "data-testid": dataTestid, ...spaceProps }) {
377
+ const theme = require_theme.useTheme();
378
+ const dp = require_theme.useDefaultProps("Tabs");
379
+ const variant = variantProp ?? dp.variant ?? "underline";
380
+ const color = colorProp ?? dp.color ?? require_themeDefault.themeDefault(theme, "color", "primary");
381
+ const size = sizeProp ?? dp.size ?? require_themeDefault.themeDefault(theme, "size", "md");
382
+ const hasDivider = hasDividerProp ?? dp.hasDivider ?? variant !== "boxed";
383
+ const isFilled = variant === "boxed" || variant === "enclosed" && !hasDivider;
384
+ const selectedBg = selectedBgProp ?? dp.selectedBg ?? (isFilled ? "paper" : void 0);
385
+ const tabList = useTabList();
386
+ const isControlled = valueProp !== void 0;
387
+ const [ownValue, setOwnValue] = (0, react.useState)(defaultValue ?? null);
388
+ const selectedValue = isControlled ? valueProp : ownValue;
389
+ const ownId = (0, react.useId)();
390
+ const baseId = tabList?.baseId ?? ownId;
391
+ const listRef = (0, react.useRef)(null);
392
+ const indicatorRef = (0, react.useRef)(null);
393
+ const isNavigation = as === "nav";
394
+ const isVertical = orientation === "vertical";
395
+ const select = (0, react.useCallback)((next) => {
396
+ if (!isControlled) setOwnValue(next);
397
+ onChange?.(next);
398
+ }, [isControlled, onChange]);
399
+ const focusableValue = getFocusableValue(children, selectedValue);
400
+ const tabDp = require_theme.useDefaultProps("Tab");
401
+ const selectedColor = readTabs(children).find((tab) => tab.value === selectedValue)?.color ?? colorProp ?? tabDp.color ?? color;
402
+ const tabSizes = readTabs(children).map((tab) => theme.sizes[tab.size ?? sizeProp ?? tabDp.size ?? size]);
403
+ const rowPaddingTop = getLargestSpace(tabSizes.map((tabSize) => tabSize.paddingTop)) ?? theme.sizes[size].paddingTop;
404
+ const rowPaddingBottom = getLargestSpace(tabSizes.map((tabSize) => tabSize.paddingBottom)) ?? theme.sizes[size].paddingBottom;
405
+ const rowProps = (0, react.useMemo)(() => ({
406
+ color: colorProp,
407
+ textColor,
408
+ size: sizeProp,
409
+ selectedBg: selectedBgProp
410
+ }), [
411
+ colorProp,
412
+ textColor,
413
+ sizeProp,
414
+ selectedBgProp
415
+ ]);
416
+ const context = (0, react.useMemo)(() => ({
417
+ selectedValue,
418
+ focusableValue,
419
+ select,
420
+ onTabClose,
421
+ getTabId: (value) => require_surfaceSystem.getTabId(baseId, value),
422
+ getPanelId: (value) => tabList ? require_surfaceSystem.getPanelId(baseId, value) : void 0,
423
+ isNavigation,
424
+ isVertical,
425
+ variant,
426
+ color,
427
+ textColor,
428
+ size,
429
+ fullWidth,
430
+ hasDivider,
431
+ selectedBg,
432
+ selectedColor,
433
+ rowPaddingTop,
434
+ rowPaddingBottom,
435
+ rowProps,
436
+ shouldSelectOnFocus,
437
+ shouldShowScrollButtonsOnMobile
438
+ }), [
439
+ selectedValue,
440
+ focusableValue,
441
+ select,
442
+ onTabClose,
443
+ baseId,
444
+ tabList,
445
+ isNavigation,
446
+ isVertical,
447
+ variant,
448
+ color,
449
+ textColor,
450
+ size,
451
+ fullWidth,
452
+ hasDivider,
453
+ selectedBg,
454
+ selectedColor,
455
+ rowPaddingTop,
456
+ rowPaddingBottom,
457
+ rowProps,
458
+ shouldSelectOnFocus,
459
+ shouldShowScrollButtonsOnMobile
460
+ ]);
461
+ const updateIndicator = (0, react.useCallback)(() => {
462
+ const indicator = indicatorRef.current;
463
+ if (!indicator) return;
464
+ const selected = listRef.current.querySelector("[data-tab-selected]");
465
+ if (!selected) {
466
+ indicator.style.display = "none";
467
+ return;
468
+ }
469
+ indicator.style.display = "block";
470
+ if (isVertical) {
471
+ indicator.style.left = "";
472
+ indicator.style.width = "";
473
+ indicator.style.top = `${selected.offsetTop}px`;
474
+ indicator.style.height = `${selected.offsetHeight}px`;
475
+ } else {
476
+ indicator.style.top = "";
477
+ indicator.style.height = "";
478
+ indicator.style.left = `${selected.offsetLeft}px`;
479
+ indicator.style.width = `${selected.offsetWidth}px`;
480
+ }
481
+ }, [isVertical]);
482
+ (0, react.useLayoutEffect)(updateIndicator);
483
+ const isScrolling = overflowBehavior === "scroll";
484
+ const scroll = useTabsScroll(listRef, isScrolling, isVertical);
485
+ const isFitting = overflowBehavior === "menu";
486
+ const tabs = readTabs(children);
487
+ const overflow = useTabsOverflow(listRef, isFitting, isVertical, tabs.map((tab) => tab.value), focusableValue);
488
+ const hiddenTabs = tabs.filter((tab) => overflow.hidden.includes(tab.value));
489
+ const handleOverflowKeyDown = (event) => {
490
+ if (event.key !== "Delete") return;
491
+ const row = event.target.dataset.value;
492
+ const tab = hiddenTabs.find((hidden) => String(hidden.value) === row);
493
+ if (tab?.closeLabel === void 0) return;
494
+ event.preventDefault();
495
+ onTabClose?.(tab.value);
496
+ };
497
+ const updateOverflow = isFitting ? overflow.update : scroll.update;
498
+ (0, react.useImperativeHandle)(action, () => ({
499
+ updateIndicator,
500
+ updateOverflow
501
+ }), [updateIndicator, updateOverflow]);
502
+ (0, react.useEffect)(() => {
503
+ if (!isScrolling) return;
504
+ const selected = listRef.current.querySelector("[data-tab-selected]");
505
+ if (typeof selected?.scrollIntoView === "function") selected.scrollIntoView({
506
+ block: "nearest",
507
+ inline: "nearest"
508
+ });
509
+ }, [isScrolling, selectedValue]);
510
+ const hasScrollButtons = isScrolling && (scrollButtons === "always" || scrollButtons === "auto" && scroll.isOverflowing);
511
+ const ScrollButton = slots?.scrollButton ?? require_Tabs_TabScrollButton.TabScrollButton;
512
+ const renderScrollButton = (direction) => {
513
+ const canScroll = direction === -1 ? scroll.canScrollStart : scroll.canScrollEnd;
514
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollButton, {
515
+ direction: direction === -1 ? "start" : "end",
516
+ orientation,
517
+ disabled: scrollButtons === "always" && !canScroll,
518
+ isHidden: scrollButtons === "auto" && !canScroll,
519
+ onClick: () => scroll.scrollByView(direction)
520
+ });
521
+ };
522
+ const handleKeyDown = (event) => {
523
+ if (isNavigation || event.target.dataset.tab === void 0) return;
524
+ const list = event.currentTarget;
525
+ const forward = require_isRtl.isRtl(list) ? "ArrowLeft" : "ArrowRight";
526
+ const backward = require_isRtl.isRtl(list) ? "ArrowRight" : "ArrowLeft";
527
+ const nextKey = isVertical ? "ArrowDown" : forward;
528
+ const previousKey = isVertical ? "ArrowUp" : backward;
529
+ let step = STEP_BY_KEY[event.key];
530
+ if (event.key === nextKey) step = "next";
531
+ if (event.key === previousKey) step = "previous";
532
+ if (!step) return;
533
+ const target = getNextTab(Array.from(list.querySelectorAll("[data-tab]")), list.ownerDocument.activeElement, step);
534
+ event.preventDefault();
535
+ target?.focus();
536
+ };
537
+ const styleProps = {
538
+ variant,
539
+ color: selectedColor,
540
+ size,
541
+ orientation,
542
+ fullWidth,
543
+ hasDivider
544
+ };
545
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_dividerLine.TabsContext.Provider, {
546
+ value: context,
547
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(TabsRoot, {
548
+ ...spaceProps,
549
+ ...styleProps,
550
+ bg,
551
+ as,
552
+ id,
553
+ className,
554
+ "data-testid": dataTestid,
555
+ "aria-label": isNavigation ? ariaLabel : void 0,
556
+ "aria-labelledby": isNavigation ? ariaLabelledBy : void 0,
557
+ children: [
558
+ startContent != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StartContent, {
559
+ ...styleProps,
560
+ children: startContent
561
+ }),
562
+ hasScrollButtons && renderScrollButton(-1),
563
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(TabsList, {
564
+ ...styleProps,
565
+ ref: listRef,
566
+ isCentered,
567
+ isScrolling,
568
+ isFitting,
569
+ hasVisibleScrollbar,
570
+ role: isNavigation ? void 0 : "tablist",
571
+ "aria-orientation": isNavigation ? void 0 : orientation,
572
+ "aria-label": isNavigation ? void 0 : ariaLabel,
573
+ "aria-labelledby": isNavigation ? void 0 : ariaLabelledBy,
574
+ onKeyDown: handleKeyDown,
575
+ children: [react.Children.toArray(children).map((child, index) => {
576
+ const value = (0, react.isValidElement)(child) ? child.props.value ?? index : index;
577
+ if (overflow.hidden.includes(value)) return null;
578
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_dividerLine.TabIndexContext.Provider, {
579
+ value: index,
580
+ children: child
581
+ }, (0, react.isValidElement)(child) ? child.key : index);
582
+ }), variant === "underline" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TabsIndicator, {
583
+ ...styleProps,
584
+ ref: indicatorRef,
585
+ "aria-hidden": true
586
+ })]
587
+ }),
588
+ hasScrollButtons && renderScrollButton(1),
589
+ hiddenTabs.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_View.View, {
590
+ display: "contents",
591
+ onKeyDown: handleOverflowKeyDown,
592
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Menu.Menu, {
593
+ align: "end",
594
+ onSelect: select,
595
+ trigger: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OverflowButton, {
596
+ type: "button",
597
+ ...styleProps,
598
+ "aria-label": overflowLabel,
599
+ title: overflowLabel,
600
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
601
+ name: "expand_more",
602
+ size: "sm",
603
+ color: "inherit"
604
+ })
605
+ }),
606
+ children: hiddenTabs.map((tab) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MenuItem.MenuItem, {
607
+ value: tab.value,
608
+ disabled: tab.disabled,
609
+ secondaryAction: tab.closeLabel === void 0 ? void 0 : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OverflowClose, {
610
+ type: "button",
611
+ color: selectedColor,
612
+ "aria-hidden": true,
613
+ title: tab.closeLabel,
614
+ tabIndex: -1,
615
+ onClick: () => onTabClose?.(tab.value),
616
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
617
+ name: "close",
618
+ size: "0.75rem",
619
+ color: "inherit"
620
+ })
621
+ }),
622
+ children: tab.label ?? tab.icon
623
+ }, tab.value))
624
+ })
625
+ }),
626
+ endContent != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EndContent, {
627
+ ...styleProps,
628
+ children: endContent
629
+ })
630
+ ]
631
+ })
632
+ });
633
+ }
634
+ //#endregion
635
+ Object.defineProperty(exports, "TabListContext", {
636
+ enumerable: true,
637
+ get: function() {
638
+ return TabListContext;
639
+ }
640
+ });
641
+ Object.defineProperty(exports, "Tabs", {
642
+ enumerable: true,
643
+ get: function() {
644
+ return Tabs;
645
+ }
646
+ });
package/dist/Tabs.cjs ADDED
@@ -0,0 +1,13 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_Tabs_Tab = require("./Tabs/Tab.cjs");
3
+ const require_Tabs_TabContext = require("./Tabs/TabContext.cjs");
4
+ const require_Tabs_TabScrollButton = require("./Tabs/TabScrollButton.cjs");
5
+ const require_Tabs = require("./Tabs-D4tWCq78.cjs");
6
+ const require_Tabs_TabList = require("./Tabs/TabList.cjs");
7
+ const require_Tabs_TabPanel = require("./Tabs/TabPanel.cjs");
8
+ exports.Tab = require_Tabs_Tab.Tab;
9
+ exports.TabContext = require_Tabs_TabContext.TabContext;
10
+ exports.TabList = require_Tabs_TabList.TabList;
11
+ exports.TabPanel = require_Tabs_TabPanel.TabPanel;
12
+ exports.TabScrollButton = require_Tabs_TabScrollButton.TabScrollButton;
13
+ exports.Tabs = require_Tabs.Tabs;
@@ -0,0 +1,8 @@
1
+ import { t as TabValue } from "./TabsContext-B_XHbjcS.cjs";
2
+ import { Tab, TabIconPosition, TabProps } from "./Tabs/Tab.cjs";
3
+ import { TabContext, TabContextProps } from "./Tabs/TabContext.cjs";
4
+ import { n as TabScrollButtonProps, r as TabScrollDirection, t as TabScrollButton } from "./index-KnXhlKMr.cjs";
5
+ import { a as TabsProps, i as TabsOverflowBehavior, n as TabsActions, o as TabsScrollButtons, r as TabsOrientation, s as TabsVariant, t as Tabs } from "./index-WHFhjfgy.cjs";
6
+ import { TabList, TabListProps } from "./Tabs/TabList.cjs";
7
+ import { TabPanel, TabPanelProps } from "./Tabs/TabPanel.cjs";
8
+ export { Tab, TabContext, TabContextProps, TabIconPosition, TabList, TabListProps, TabPanel, TabPanelProps, TabProps, TabScrollButton, TabScrollButtonProps, TabScrollDirection, type TabValue, Tabs, TabsActions, TabsOrientation, TabsOverflowBehavior, TabsProps, TabsScrollButtons, TabsVariant };
@@ -0,0 +1,8 @@
1
+ import { t as TabValue } from "./TabsContext-Dn2kqUwr.mjs";
2
+ import { Tab, TabIconPosition, TabProps } from "./Tabs/Tab.mjs";
3
+ import { TabContext, TabContextProps } from "./Tabs/TabContext.mjs";
4
+ import { n as TabScrollButtonProps, r as TabScrollDirection, t as TabScrollButton } from "./index-CE5JG1us.mjs";
5
+ import { a as TabsProps, i as TabsOverflowBehavior, n as TabsActions, o as TabsScrollButtons, r as TabsOrientation, s as TabsVariant, t as Tabs } from "./index-bpnLB_4K.mjs";
6
+ import { TabList, TabListProps } from "./Tabs/TabList.mjs";
7
+ import { TabPanel, TabPanelProps } from "./Tabs/TabPanel.mjs";
8
+ export { Tab, TabContext, TabContextProps, TabIconPosition, TabList, TabListProps, TabPanel, TabPanelProps, TabProps, TabScrollButton, TabScrollButtonProps, TabScrollDirection, type TabValue, Tabs, TabsActions, TabsOrientation, TabsOverflowBehavior, TabsProps, TabsScrollButtons, TabsVariant };
package/dist/Tabs.mjs ADDED
@@ -0,0 +1,7 @@
1
+ import { Tab } from "./Tabs/Tab.mjs";
2
+ import { TabContext } from "./Tabs/TabContext.mjs";
3
+ import { TabScrollButton } from "./Tabs/TabScrollButton.mjs";
4
+ import { t as Tabs } from "./Tabs-BTNOJx5v.mjs";
5
+ import { TabList } from "./Tabs/TabList.mjs";
6
+ import { TabPanel } from "./Tabs/TabPanel.mjs";
7
+ export { Tab, TabContext, TabList, TabPanel, TabScrollButton, Tabs };