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

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