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