@alfalab/core-components-tabs 7.7.1 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/{cssm/Component-3e68f8db.d.ts → Component-4cd3936b.d.ts} +5 -4
  2. package/Component-5e1b8383.d.ts +99 -3
  3. package/Component-63dec22f.d.ts +167 -0
  4. package/Component-8b2c2707.d.ts +14 -0
  5. package/Component-9211a437.d.ts +38 -0
  6. package/Component-e81c389f.d.ts +5 -0
  7. package/Component.desktop-2e2b2125.d.ts +6 -0
  8. package/Component.desktop-785df74d.d.ts +6 -0
  9. package/Component.mobile-755fbaa3.d.ts +6 -0
  10. package/Component.mobile-d7e9f69d.d.ts +6 -0
  11. package/Component.mobile-ebda875c.d.ts +6 -0
  12. package/Component.responsive-785df74d.d.ts +26 -0
  13. package/collapsible.d.ts +7 -0
  14. package/collapsible.js +40 -0
  15. package/components/primary-tablist/Component.collapsible.d.ts +5 -0
  16. package/components/primary-tablist/Component.collapsible.desktop.d.ts +5 -0
  17. package/components/primary-tablist/Component.collapsible.desktop.js +32 -0
  18. package/components/primary-tablist/Component.collapsible.js +81 -0
  19. package/components/primary-tablist/Component.collapsible.mobile.d.ts +6 -0
  20. package/components/primary-tablist/Component.collapsible.mobile.js +35 -0
  21. package/components/primary-tablist/Component.collapsible.responsive.d.ts +5 -0
  22. package/components/primary-tablist/Component.collapsible.responsive.js +36 -0
  23. package/components/primary-tablist/Component.d.ts +2 -1
  24. package/components/primary-tablist/Component.desktop.d.ts +2 -1
  25. package/components/primary-tablist/Component.desktop.js +2 -8
  26. package/components/primary-tablist/Component.js +8 -40
  27. package/components/primary-tablist/Component.mobile.d.ts +3 -2
  28. package/components/primary-tablist/Component.mobile.js +4 -12
  29. package/components/primary-tablist/Component.responsive.d.ts +2 -1
  30. package/components/primary-tablist/Component.responsive.js +7 -14
  31. package/components/primary-tablist/index.css +29 -29
  32. package/components/primary-tablist/mobile.css +40 -32
  33. package/components/scrollable-container/Component.d.ts +3 -2
  34. package/components/scrollable-container/Component.js +1 -1
  35. package/components/scrollable-container/index.css +5 -5
  36. package/components/secondary-tablist/Component.d.ts +2 -1
  37. package/components/secondary-tablist/Component.desktop.d.ts +3 -2
  38. package/components/secondary-tablist/Component.desktop.js +4 -3
  39. package/components/secondary-tablist/Component.js +5 -3
  40. package/components/secondary-tablist/Component.mobile.d.ts +2 -1
  41. package/components/secondary-tablist/Component.mobile.js +5 -4
  42. package/components/secondary-tablist/Component.responsive.d.ts +2 -1
  43. package/components/secondary-tablist/Component.responsive.js +8 -9
  44. package/components/secondary-tablist/index.css +11 -11
  45. package/components/secondary-tablist/mobile.css +21 -13
  46. package/components/tab/Component.d.ts +2 -1
  47. package/components/tab/Component.js +1 -1
  48. package/components/tab/index.css +3 -3
  49. package/components/tabs/Component.collabsible.desktop.d.ts +6 -0
  50. package/components/tabs/Component.collabsible.desktop.js +34 -0
  51. package/components/tabs/Component.collapsible.mobile.d.ts +6 -0
  52. package/components/tabs/Component.collapsible.mobile.js +35 -0
  53. package/components/tabs/Component.collapsible.responsive.d.ts +6 -0
  54. package/components/tabs/Component.collapsible.responsive.js +37 -0
  55. package/components/tabs/Component.d.ts +2 -1
  56. package/components/tabs/Component.desktop.d.ts +3 -2
  57. package/components/tabs/Component.desktop.js +4 -10
  58. package/components/tabs/Component.js +2 -2
  59. package/components/tabs/Component.mobile.d.ts +3 -2
  60. package/components/tabs/Component.mobile.js +5 -10
  61. package/components/tabs/Component.responsive.d.ts +3 -2
  62. package/components/tabs/Component.responsive.js +7 -10
  63. package/{esm/Component-3e68f8db.d.ts → cssm/Component-4cd3936b.d.ts} +5 -4
  64. package/cssm/Component-5e1b8383.d.ts +99 -3
  65. package/cssm/Component-63dec22f.d.ts +167 -0
  66. package/cssm/Component-8b2c2707.d.ts +14 -0
  67. package/cssm/Component-9211a437.d.ts +38 -0
  68. package/cssm/Component-e81c389f.d.ts +5 -0
  69. package/cssm/Component.desktop-2e2b2125.d.ts +6 -0
  70. package/cssm/Component.desktop-785df74d.d.ts +6 -0
  71. package/cssm/Component.mobile-755fbaa3.d.ts +6 -0
  72. package/cssm/Component.mobile-d7e9f69d.d.ts +6 -0
  73. package/cssm/Component.mobile-ebda875c.d.ts +6 -0
  74. package/cssm/Component.responsive-785df74d.d.ts +26 -0
  75. package/cssm/collapsible.d.ts +7 -0
  76. package/cssm/collapsible.js +41 -0
  77. package/cssm/components/primary-tablist/Component.collapsible.d.ts +5 -0
  78. package/cssm/components/primary-tablist/Component.collapsible.desktop.d.ts +5 -0
  79. package/cssm/components/primary-tablist/Component.collapsible.desktop.js +33 -0
  80. package/cssm/components/primary-tablist/Component.collapsible.js +81 -0
  81. package/cssm/components/primary-tablist/Component.collapsible.mobile.d.ts +6 -0
  82. package/cssm/components/primary-tablist/Component.collapsible.mobile.js +37 -0
  83. package/cssm/components/primary-tablist/Component.collapsible.responsive.d.ts +5 -0
  84. package/cssm/components/primary-tablist/Component.collapsible.responsive.js +36 -0
  85. package/cssm/components/primary-tablist/Component.d.ts +2 -1
  86. package/cssm/components/primary-tablist/Component.desktop.d.ts +2 -1
  87. package/cssm/components/primary-tablist/Component.desktop.js +1 -7
  88. package/cssm/components/primary-tablist/Component.js +8 -40
  89. package/cssm/components/primary-tablist/Component.mobile.d.ts +3 -2
  90. package/cssm/components/primary-tablist/Component.mobile.js +1 -7
  91. package/cssm/components/primary-tablist/Component.responsive.d.ts +2 -1
  92. package/cssm/components/primary-tablist/Component.responsive.js +5 -13
  93. package/cssm/components/scrollable-container/Component.d.ts +3 -2
  94. package/cssm/components/secondary-tablist/Component.d.ts +2 -1
  95. package/cssm/components/secondary-tablist/Component.desktop.d.ts +3 -2
  96. package/cssm/components/secondary-tablist/Component.desktop.js +3 -2
  97. package/cssm/components/secondary-tablist/Component.js +5 -3
  98. package/cssm/components/secondary-tablist/Component.mobile.d.ts +2 -1
  99. package/cssm/components/secondary-tablist/Component.mobile.js +3 -2
  100. package/cssm/components/secondary-tablist/Component.responsive.d.ts +2 -1
  101. package/cssm/components/secondary-tablist/Component.responsive.js +7 -8
  102. package/cssm/components/tab/Component.d.ts +2 -1
  103. package/cssm/components/tabs/Component.collabsible.desktop.d.ts +6 -0
  104. package/cssm/components/tabs/Component.collabsible.desktop.js +34 -0
  105. package/cssm/components/tabs/Component.collapsible.mobile.d.ts +6 -0
  106. package/cssm/components/tabs/Component.collapsible.mobile.js +35 -0
  107. package/cssm/components/tabs/Component.collapsible.responsive.d.ts +6 -0
  108. package/cssm/components/tabs/Component.collapsible.responsive.js +37 -0
  109. package/cssm/components/tabs/Component.d.ts +2 -1
  110. package/cssm/components/tabs/Component.desktop.d.ts +3 -2
  111. package/cssm/components/tabs/Component.desktop.js +2 -8
  112. package/cssm/components/tabs/Component.js +2 -2
  113. package/cssm/components/tabs/Component.mobile.d.ts +3 -2
  114. package/cssm/components/tabs/Component.mobile.js +2 -8
  115. package/cssm/components/tabs/Component.responsive.d.ts +3 -2
  116. package/cssm/components/tabs/Component.responsive.js +4 -8
  117. package/cssm/desktop-2e2b2125.d.ts +2 -0
  118. package/cssm/desktop.d.ts +0 -4
  119. package/cssm/desktop.js +6 -15
  120. package/cssm/{hook-3e68f8db.d.ts → hook-9ea9e32c.d.ts} +10 -8
  121. package/cssm/hooks/use-tablist-titles.d.ts +2 -1
  122. package/cssm/hooks/use-tablist-titles.js +7 -5
  123. package/cssm/hooks/use-tabs.d.ts +1 -0
  124. package/cssm/hooks/use-tabs.js +3 -6
  125. package/cssm/index-8b2c2707.d.ts +6 -0
  126. package/cssm/index-c44170fe.d.ts +23 -0
  127. package/cssm/index-e81c389f.d.ts +142 -3
  128. package/cssm/index-ebda875c.d.ts +86 -18
  129. package/cssm/index-f12ee135.d.ts +307 -3
  130. package/cssm/index.d.ts +1 -4
  131. package/cssm/index.js +9 -15
  132. package/cssm/mobile-755fbaa3.d.ts +2 -0
  133. package/cssm/mobile-96988a65.d.ts +2 -0
  134. package/cssm/mobile.d.ts +0 -3
  135. package/cssm/mobile.js +6 -14
  136. package/{esm/index-3e68f8db.d.ts → cssm/shared-4cd3936b.d.ts} +50 -16
  137. package/cssm/shared.d.ts +4 -0
  138. package/cssm/shared.js +21 -0
  139. package/cssm/types-4480ac4f.d.ts +3 -0
  140. package/cssm/typings-5e1b8383.d.ts +2 -1
  141. package/cssm/typings-9211a437.d.ts +95 -0
  142. package/cssm/typings.d.ts +11 -10
  143. package/desktop-2e2b2125.d.ts +2 -0
  144. package/desktop.d.ts +0 -4
  145. package/desktop.js +7 -16
  146. package/{Component-3e68f8db.d.ts → esm/Component-4cd3936b.d.ts} +5 -4
  147. package/esm/Component-5e1b8383.d.ts +99 -3
  148. package/esm/Component-63dec22f.d.ts +167 -0
  149. package/esm/Component-8b2c2707.d.ts +14 -0
  150. package/esm/Component-9211a437.d.ts +38 -0
  151. package/esm/Component-e81c389f.d.ts +5 -0
  152. package/esm/Component.desktop-2e2b2125.d.ts +6 -0
  153. package/esm/Component.desktop-785df74d.d.ts +6 -0
  154. package/esm/Component.mobile-755fbaa3.d.ts +6 -0
  155. package/esm/Component.mobile-d7e9f69d.d.ts +6 -0
  156. package/esm/Component.mobile-ebda875c.d.ts +6 -0
  157. package/esm/Component.responsive-785df74d.d.ts +26 -0
  158. package/esm/collapsible.d.ts +7 -0
  159. package/esm/collapsible.js +26 -0
  160. package/esm/components/primary-tablist/Component.collapsible.d.ts +5 -0
  161. package/esm/components/primary-tablist/Component.collapsible.desktop.d.ts +5 -0
  162. package/esm/components/primary-tablist/Component.collapsible.desktop.js +24 -0
  163. package/esm/components/primary-tablist/Component.collapsible.js +72 -0
  164. package/esm/components/primary-tablist/Component.collapsible.mobile.d.ts +6 -0
  165. package/esm/components/primary-tablist/Component.collapsible.mobile.js +26 -0
  166. package/esm/components/primary-tablist/Component.collapsible.responsive.d.ts +5 -0
  167. package/esm/components/primary-tablist/Component.collapsible.responsive.js +28 -0
  168. package/esm/components/primary-tablist/Component.d.ts +2 -1
  169. package/esm/components/primary-tablist/Component.desktop.d.ts +2 -1
  170. package/esm/components/primary-tablist/Component.desktop.js +2 -8
  171. package/esm/components/primary-tablist/Component.js +10 -42
  172. package/esm/components/primary-tablist/Component.mobile.d.ts +3 -2
  173. package/esm/components/primary-tablist/Component.mobile.js +3 -11
  174. package/esm/components/primary-tablist/Component.responsive.d.ts +2 -1
  175. package/esm/components/primary-tablist/Component.responsive.js +7 -14
  176. package/esm/components/primary-tablist/index.css +29 -29
  177. package/esm/components/primary-tablist/mobile.css +40 -32
  178. package/esm/components/scrollable-container/Component.d.ts +3 -2
  179. package/esm/components/scrollable-container/Component.js +1 -1
  180. package/esm/components/scrollable-container/index.css +5 -5
  181. package/esm/components/secondary-tablist/Component.d.ts +2 -1
  182. package/esm/components/secondary-tablist/Component.desktop.d.ts +3 -2
  183. package/esm/components/secondary-tablist/Component.desktop.js +4 -3
  184. package/esm/components/secondary-tablist/Component.js +5 -3
  185. package/esm/components/secondary-tablist/Component.mobile.d.ts +2 -1
  186. package/esm/components/secondary-tablist/Component.mobile.js +5 -4
  187. package/esm/components/secondary-tablist/Component.responsive.d.ts +2 -1
  188. package/esm/components/secondary-tablist/Component.responsive.js +8 -9
  189. package/esm/components/secondary-tablist/index.css +11 -11
  190. package/esm/components/secondary-tablist/mobile.css +21 -13
  191. package/esm/components/tab/Component.d.ts +2 -1
  192. package/esm/components/tab/Component.js +1 -1
  193. package/esm/components/tab/index.css +3 -3
  194. package/esm/components/tabs/Component.collabsible.desktop.d.ts +6 -0
  195. package/esm/components/tabs/Component.collabsible.desktop.js +26 -0
  196. package/esm/components/tabs/Component.collapsible.mobile.d.ts +6 -0
  197. package/esm/components/tabs/Component.collapsible.mobile.js +27 -0
  198. package/esm/components/tabs/Component.collapsible.responsive.d.ts +6 -0
  199. package/esm/components/tabs/Component.collapsible.responsive.js +29 -0
  200. package/esm/components/tabs/Component.d.ts +2 -1
  201. package/esm/components/tabs/Component.desktop.d.ts +3 -2
  202. package/esm/components/tabs/Component.desktop.js +4 -10
  203. package/esm/components/tabs/Component.js +2 -2
  204. package/esm/components/tabs/Component.mobile.d.ts +3 -2
  205. package/esm/components/tabs/Component.mobile.js +5 -10
  206. package/esm/components/tabs/Component.responsive.d.ts +3 -2
  207. package/esm/components/tabs/Component.responsive.js +7 -10
  208. package/esm/desktop-2e2b2125.d.ts +2 -0
  209. package/esm/desktop.d.ts +0 -4
  210. package/esm/desktop.js +7 -13
  211. package/{hook-3e68f8db.d.ts → esm/hook-9ea9e32c.d.ts} +10 -8
  212. package/esm/hooks/use-tablist-titles.d.ts +2 -1
  213. package/esm/hooks/use-tablist-titles.js +7 -5
  214. package/esm/hooks/use-tabs.d.ts +1 -0
  215. package/esm/hooks/use-tabs.js +2 -5
  216. package/esm/index-8b2c2707.d.ts +6 -0
  217. package/esm/index-c44170fe.d.ts +23 -0
  218. package/esm/index-e81c389f.d.ts +142 -3
  219. package/esm/index-ebda875c.d.ts +86 -18
  220. package/esm/index-f12ee135.d.ts +307 -3
  221. package/esm/index.d.ts +1 -4
  222. package/esm/index.js +11 -14
  223. package/esm/index.module-08248cf3.js +4 -0
  224. package/esm/index.module-2bed7b44.js +4 -0
  225. package/esm/mobile-755fbaa3.d.ts +2 -0
  226. package/esm/mobile-96988a65.d.ts +2 -0
  227. package/esm/mobile.d.ts +0 -3
  228. package/esm/mobile.js +8 -13
  229. package/esm/mobile.module-d8a1b124.js +4 -0
  230. package/{index-3e68f8db.d.ts → esm/shared-4cd3936b.d.ts} +50 -16
  231. package/esm/shared.d.ts +4 -0
  232. package/esm/shared.js +10 -0
  233. package/esm/types-4480ac4f.d.ts +3 -0
  234. package/esm/typings-5e1b8383.d.ts +2 -1
  235. package/esm/typings-9211a437.d.ts +95 -0
  236. package/esm/typings.d.ts +11 -10
  237. package/{modern/hook-3e68f8db.d.ts → hook-9ea9e32c.d.ts} +10 -8
  238. package/hooks/use-tablist-titles.d.ts +2 -1
  239. package/hooks/use-tablist-titles.js +7 -5
  240. package/hooks/use-tabs.d.ts +1 -0
  241. package/hooks/use-tabs.js +3 -6
  242. package/index-8b2c2707.d.ts +6 -0
  243. package/index-c44170fe.d.ts +23 -0
  244. package/index-e81c389f.d.ts +142 -3
  245. package/index-ebda875c.d.ts +86 -18
  246. package/index-f12ee135.d.ts +307 -3
  247. package/index.d.ts +1 -4
  248. package/index.js +11 -16
  249. package/index.module-0d10b544.js +6 -0
  250. package/index.module-49556b0f.js +6 -0
  251. package/mobile-755fbaa3.d.ts +2 -0
  252. package/mobile-96988a65.d.ts +2 -0
  253. package/mobile.d.ts +0 -3
  254. package/mobile.js +8 -15
  255. package/mobile.module-541101fc.js +6 -0
  256. package/modern/{Component-3e68f8db.d.ts → Component-4cd3936b.d.ts} +5 -4
  257. package/modern/Component-5e1b8383.d.ts +99 -3
  258. package/modern/Component-63dec22f.d.ts +167 -0
  259. package/modern/Component-8b2c2707.d.ts +14 -0
  260. package/modern/Component-9211a437.d.ts +38 -0
  261. package/modern/Component-e81c389f.d.ts +5 -0
  262. package/modern/Component.desktop-2e2b2125.d.ts +6 -0
  263. package/modern/Component.desktop-785df74d.d.ts +6 -0
  264. package/modern/Component.mobile-755fbaa3.d.ts +6 -0
  265. package/modern/Component.mobile-d7e9f69d.d.ts +6 -0
  266. package/modern/Component.mobile-ebda875c.d.ts +6 -0
  267. package/modern/Component.responsive-785df74d.d.ts +26 -0
  268. package/modern/collapsible.d.ts +7 -0
  269. package/modern/collapsible.js +25 -0
  270. package/modern/components/primary-tablist/Component.collapsible.d.ts +5 -0
  271. package/modern/components/primary-tablist/Component.collapsible.desktop.d.ts +5 -0
  272. package/modern/components/primary-tablist/Component.collapsible.desktop.js +20 -0
  273. package/modern/components/primary-tablist/Component.collapsible.js +61 -0
  274. package/modern/components/primary-tablist/Component.collapsible.mobile.d.ts +6 -0
  275. package/modern/components/primary-tablist/Component.collapsible.mobile.js +25 -0
  276. package/modern/components/primary-tablist/Component.collapsible.responsive.d.ts +5 -0
  277. package/modern/components/primary-tablist/Component.collapsible.responsive.js +26 -0
  278. package/modern/components/primary-tablist/Component.d.ts +2 -1
  279. package/modern/components/primary-tablist/Component.desktop.d.ts +2 -1
  280. package/modern/components/primary-tablist/Component.desktop.js +2 -8
  281. package/modern/components/primary-tablist/Component.js +8 -37
  282. package/modern/components/primary-tablist/Component.mobile.d.ts +3 -2
  283. package/modern/components/primary-tablist/Component.mobile.js +3 -11
  284. package/modern/components/primary-tablist/Component.responsive.d.ts +2 -1
  285. package/modern/components/primary-tablist/Component.responsive.js +7 -14
  286. package/modern/components/primary-tablist/index.css +29 -29
  287. package/modern/components/primary-tablist/mobile.css +40 -32
  288. package/modern/components/scrollable-container/Component.d.ts +3 -2
  289. package/modern/components/scrollable-container/Component.js +1 -1
  290. package/modern/components/scrollable-container/index.css +5 -5
  291. package/modern/components/secondary-tablist/Component.d.ts +2 -1
  292. package/modern/components/secondary-tablist/Component.desktop.d.ts +3 -2
  293. package/modern/components/secondary-tablist/Component.desktop.js +4 -3
  294. package/modern/components/secondary-tablist/Component.js +12 -8
  295. package/modern/components/secondary-tablist/Component.mobile.d.ts +2 -1
  296. package/modern/components/secondary-tablist/Component.mobile.js +5 -4
  297. package/modern/components/secondary-tablist/Component.responsive.d.ts +2 -1
  298. package/modern/components/secondary-tablist/Component.responsive.js +8 -9
  299. package/modern/components/secondary-tablist/index.css +11 -11
  300. package/modern/components/secondary-tablist/mobile.css +21 -13
  301. package/modern/components/tab/Component.d.ts +2 -1
  302. package/modern/components/tab/Component.js +1 -1
  303. package/modern/components/tab/index.css +3 -3
  304. package/modern/components/tabs/Component.collabsible.desktop.d.ts +6 -0
  305. package/modern/components/tabs/Component.collabsible.desktop.js +22 -0
  306. package/modern/components/tabs/Component.collapsible.mobile.d.ts +6 -0
  307. package/modern/components/tabs/Component.collapsible.mobile.js +23 -0
  308. package/modern/components/tabs/Component.collapsible.responsive.d.ts +6 -0
  309. package/modern/components/tabs/Component.collapsible.responsive.js +25 -0
  310. package/modern/components/tabs/Component.d.ts +2 -1
  311. package/modern/components/tabs/Component.desktop.d.ts +3 -2
  312. package/modern/components/tabs/Component.desktop.js +4 -10
  313. package/modern/components/tabs/Component.js +2 -2
  314. package/modern/components/tabs/Component.mobile.d.ts +3 -2
  315. package/modern/components/tabs/Component.mobile.js +5 -10
  316. package/modern/components/tabs/Component.responsive.d.ts +3 -2
  317. package/modern/components/tabs/Component.responsive.js +7 -10
  318. package/modern/desktop-2e2b2125.d.ts +2 -0
  319. package/modern/desktop.d.ts +0 -4
  320. package/modern/desktop.js +7 -13
  321. package/{esm/hook-3e68f8db.d.ts → modern/hook-9ea9e32c.d.ts} +10 -8
  322. package/modern/hooks/use-tablist-titles.d.ts +2 -1
  323. package/modern/hooks/use-tablist-titles.js +7 -5
  324. package/modern/hooks/use-tabs.d.ts +1 -0
  325. package/modern/hooks/use-tabs.js +2 -5
  326. package/modern/index-8b2c2707.d.ts +6 -0
  327. package/modern/index-c44170fe.d.ts +23 -0
  328. package/modern/index-e81c389f.d.ts +142 -3
  329. package/modern/index-ebda875c.d.ts +86 -18
  330. package/modern/index-f12ee135.d.ts +307 -3
  331. package/modern/index.d.ts +1 -4
  332. package/modern/index.js +11 -14
  333. package/modern/index.module-264a8450.js +4 -0
  334. package/modern/index.module-fede443b.js +4 -0
  335. package/modern/mobile-755fbaa3.d.ts +2 -0
  336. package/modern/mobile-96988a65.d.ts +2 -0
  337. package/modern/mobile.d.ts +0 -3
  338. package/modern/mobile.js +8 -13
  339. package/modern/mobile.module-9693b0a4.js +4 -0
  340. package/{cssm/index-3e68f8db.d.ts → modern/shared-4cd3936b.d.ts} +50 -16
  341. package/modern/shared.d.ts +4 -0
  342. package/modern/shared.js +9 -0
  343. package/modern/types-4480ac4f.d.ts +3 -0
  344. package/modern/typings-5e1b8383.d.ts +2 -1
  345. package/modern/typings-9211a437.d.ts +95 -0
  346. package/modern/typings.d.ts +11 -10
  347. package/package.json +36 -5
  348. package/{modern/index-3e68f8db.d.ts → shared-4cd3936b.d.ts} +50 -16
  349. package/shared.d.ts +4 -0
  350. package/shared.js +20 -0
  351. package/src/collapsible.ts +10 -0
  352. package/src/components/primary-tablist/Component.collapsible.desktop.tsx +11 -0
  353. package/src/components/primary-tablist/Component.collapsible.mobile.tsx +27 -0
  354. package/src/components/primary-tablist/Component.collapsible.responsive.tsx +34 -0
  355. package/src/components/primary-tablist/Component.collapsible.tsx +132 -0
  356. package/src/components/primary-tablist/Component.desktop.tsx +11 -0
  357. package/src/components/primary-tablist/Component.mobile.tsx +20 -0
  358. package/src/components/primary-tablist/Component.responsive.tsx +34 -0
  359. package/src/components/primary-tablist/Component.tsx +74 -0
  360. package/src/components/primary-tablist/index.module.css +181 -0
  361. package/src/components/primary-tablist/mobile.module.css +20 -0
  362. package/src/components/scrollable-container/Component.tsx +66 -0
  363. package/src/components/scrollable-container/index.module.css +26 -0
  364. package/src/components/scrollable-container/index.ts +1 -0
  365. package/src/components/secondary-tablist/Component.desktop.tsx +24 -0
  366. package/src/components/secondary-tablist/Component.mobile.tsx +31 -0
  367. package/src/components/secondary-tablist/Component.responsive.tsx +24 -0
  368. package/src/components/secondary-tablist/Component.tsx +70 -0
  369. package/src/components/secondary-tablist/index.module.css +49 -0
  370. package/src/components/secondary-tablist/mobile.module.css +11 -0
  371. package/src/components/tab/Component.tsx +25 -0
  372. package/src/components/tab/index.module.css +7 -0
  373. package/src/components/tab/index.ts +1 -0
  374. package/src/components/tabs/Component.collabsible.desktop.tsx +15 -0
  375. package/src/components/tabs/Component.collapsible.mobile.tsx +15 -0
  376. package/src/components/tabs/Component.collapsible.responsive.tsx +12 -0
  377. package/src/components/tabs/Component.desktop.tsx +26 -0
  378. package/src/components/tabs/Component.mobile.tsx +20 -0
  379. package/src/components/tabs/Component.responsive.tsx +20 -0
  380. package/src/components/tabs/Component.tsx +67 -0
  381. package/src/components/title/Component.tsx +51 -0
  382. package/src/components/title/index.ts +1 -0
  383. package/src/desktop.ts +4 -0
  384. package/src/hooks/use-collapsible-elements.ts +69 -0
  385. package/src/hooks/use-tablist-titles.ts +91 -0
  386. package/src/hooks/use-tabs.tsx +129 -0
  387. package/src/index.ts +7 -0
  388. package/src/mobile.ts +4 -0
  389. package/src/shared.ts +4 -0
  390. package/src/synthetic-events.ts +70 -0
  391. package/src/typings.ts +187 -0
  392. package/src/vars.css +68 -0
  393. package/types-4480ac4f.d.ts +3 -0
  394. package/typings-5e1b8383.d.ts +2 -1
  395. package/typings-9211a437.d.ts +95 -0
  396. package/typings.d.ts +11 -10
  397. package/Component-2aef4eba.d.ts +0 -50
  398. package/Component-3885b0d7.d.ts +0 -71
  399. package/Component-3ebe4754.d.ts +0 -176
  400. package/Component.mobile-b2c0420d.d.ts +0 -35
  401. package/Component.responsive-2aef4eba.d.ts +0 -30
  402. package/component-3885b0d7.d.ts +0 -43
  403. package/cssm/Component-2aef4eba.d.ts +0 -50
  404. package/cssm/Component-3885b0d7.d.ts +0 -71
  405. package/cssm/Component-3ebe4754.d.ts +0 -176
  406. package/cssm/Component.mobile-b2c0420d.d.ts +0 -35
  407. package/cssm/Component.responsive-2aef4eba.d.ts +0 -30
  408. package/cssm/component-3885b0d7.d.ts +0 -43
  409. package/cssm/index-2aef4eba.d.ts +0 -5
  410. package/cssm/index-3885b0d7.d.ts +0 -3
  411. package/cssm/index-3ebe4754.d.ts +0 -1
  412. package/cssm/index-701e77da.d.ts +0 -4
  413. package/cssm/responsive.d.ts +0 -8
  414. package/cssm/responsive.js +0 -47
  415. package/cssm/types-ebda875c.d.ts +0 -113
  416. package/cssm/types-fae20163.d.ts +0 -227
  417. package/cssm/utils-b64479aa.d.ts +0 -8
  418. package/esm/Component-2aef4eba.d.ts +0 -50
  419. package/esm/Component-3885b0d7.d.ts +0 -71
  420. package/esm/Component-3ebe4754.d.ts +0 -176
  421. package/esm/Component.mobile-b2c0420d.d.ts +0 -35
  422. package/esm/Component.responsive-2aef4eba.d.ts +0 -30
  423. package/esm/component-3885b0d7.d.ts +0 -43
  424. package/esm/index-2aef4eba.d.ts +0 -5
  425. package/esm/index-3885b0d7.d.ts +0 -3
  426. package/esm/index-3ebe4754.d.ts +0 -1
  427. package/esm/index-701e77da.d.ts +0 -4
  428. package/esm/index.module-09cc006f.js +0 -4
  429. package/esm/index.module-a8ec81ea.js +0 -4
  430. package/esm/responsive.d.ts +0 -8
  431. package/esm/responsive.js +0 -29
  432. package/esm/types-ebda875c.d.ts +0 -113
  433. package/esm/types-fae20163.d.ts +0 -227
  434. package/esm/utils-b64479aa.d.ts +0 -8
  435. package/index-2aef4eba.d.ts +0 -5
  436. package/index-3885b0d7.d.ts +0 -3
  437. package/index-3ebe4754.d.ts +0 -1
  438. package/index-701e77da.d.ts +0 -4
  439. package/index.module-489cc8bc.js +0 -6
  440. package/index.module-728b55ca.js +0 -6
  441. package/modern/Component-2aef4eba.d.ts +0 -50
  442. package/modern/Component-3885b0d7.d.ts +0 -71
  443. package/modern/Component-3ebe4754.d.ts +0 -176
  444. package/modern/Component.mobile-b2c0420d.d.ts +0 -35
  445. package/modern/Component.responsive-2aef4eba.d.ts +0 -30
  446. package/modern/component-3885b0d7.d.ts +0 -43
  447. package/modern/index-2aef4eba.d.ts +0 -5
  448. package/modern/index-3885b0d7.d.ts +0 -3
  449. package/modern/index-3ebe4754.d.ts +0 -1
  450. package/modern/index-701e77da.d.ts +0 -4
  451. package/modern/index.module-75cf2354.js +0 -4
  452. package/modern/index.module-77d8ef59.js +0 -4
  453. package/modern/responsive.d.ts +0 -8
  454. package/modern/responsive.js +0 -28
  455. package/modern/types-ebda875c.d.ts +0 -113
  456. package/modern/types-fae20163.d.ts +0 -227
  457. package/modern/utils-b64479aa.d.ts +0 -8
  458. package/responsive.d.ts +0 -8
  459. package/responsive.js +0 -43
  460. package/types-ebda875c.d.ts +0 -113
  461. package/types-fae20163.d.ts +0 -227
  462. package/utils-b64479aa.d.ts +0 -8
@@ -0,0 +1,70 @@
1
+ import React from 'react';
2
+ import cn from 'classnames';
3
+
4
+ import { useTabs } from '../../hooks/use-tabs';
5
+ import { SecondaryTabListProps, Styles } from '../../typings';
6
+ import { ScrollableContainer } from '../scrollable-container';
7
+
8
+ export const SecondaryTabList = ({
9
+ styles = {},
10
+ className,
11
+ containerClassName,
12
+ size,
13
+ titles = [],
14
+ selectedId = titles.length ? titles[0].id : undefined,
15
+ scrollable = true,
16
+ fullWidthScroll,
17
+ tagSize = 'xs',
18
+ onChange,
19
+ dataTestId,
20
+ TagComponent,
21
+ }: SecondaryTabListProps & Styles) => {
22
+ const { focusedTab, selectedTab, getTabListItemProps } = useTabs({
23
+ titles,
24
+ selectedId,
25
+ onChange,
26
+ });
27
+
28
+ const renderContent = () => {
29
+ if (!TagComponent) return null;
30
+
31
+ return (
32
+ <div
33
+ role='tablist'
34
+ data-test-id={dataTestId}
35
+ className={cn(styles.component, className, size && styles[size], {
36
+ [styles.fullWidthScroll]: fullWidthScroll,
37
+ })}
38
+ >
39
+ {titles.map((item, index) => {
40
+ if (item.hidden) return null;
41
+
42
+ return (
43
+ <TagComponent
44
+ {...getTabListItemProps(index)}
45
+ key={item.id}
46
+ className={cn(styles.title, item.toggleClassName)}
47
+ checked={item.id === selectedId}
48
+ size={tagSize}
49
+ rightAddons={item.rightAddons}
50
+ >
51
+ {item.title}
52
+ </TagComponent>
53
+ );
54
+ })}
55
+ </div>
56
+ );
57
+ };
58
+
59
+ return scrollable ? (
60
+ <ScrollableContainer
61
+ activeChild={focusedTab || selectedTab}
62
+ containerClassName={containerClassName}
63
+ fullWidthScroll={fullWidthScroll}
64
+ >
65
+ {renderContent()}
66
+ </ScrollableContainer>
67
+ ) : (
68
+ <div className={cn(styles.container, containerClassName)}>{renderContent()}</div>
69
+ );
70
+ };
@@ -0,0 +1,49 @@
1
+ @import '@alfalab/core-components-themes/src/default.css';
2
+ @import '../../vars.css';
3
+
4
+ .component {
5
+ position: relative;
6
+ display: inline-flex;
7
+ }
8
+
9
+ .fullWidthScroll {
10
+ margin: 0 var(--gap-m);
11
+ }
12
+
13
+ .container {
14
+ overflow: hidden;
15
+
16
+ /* focus-outline fix */
17
+ margin: var(--gap-2xs-neg) 0 var(--gap-2xs-neg) var(--gap-2xs-neg);
18
+ padding: var(--gap-2xs) 0 var(--gap-2xs) var(--gap-2xs);
19
+ }
20
+
21
+ .title {
22
+ white-space: nowrap;
23
+ }
24
+
25
+ /* sizes */
26
+
27
+ .xxs .title + .title {
28
+ margin-left: var(--secondary-tablist-xxs-gaps);
29
+ }
30
+
31
+ .xs .title + .title {
32
+ margin-left: var(--secondary-tablist-xs-gaps);
33
+ }
34
+
35
+ .s .title + .title {
36
+ margin-left: var(--secondary-tablist-s-gaps);
37
+ }
38
+
39
+ .m .title + .title {
40
+ margin-left: var(--secondary-tablist-m-gaps);
41
+ }
42
+
43
+ .l .title + .title {
44
+ margin-left: var(--secondary-tablist-l-gaps);
45
+ }
46
+
47
+ .xl .title + .title {
48
+ margin-left: var(--secondary-tablist-xl-gaps);
49
+ }
@@ -0,0 +1,11 @@
1
+ @import '../../vars.css';
2
+
3
+ .title {
4
+ composes: title from 'index.module.css';
5
+ }
6
+
7
+ .mobile {
8
+ & .title + .title {
9
+ margin-left: var(--secondary-tablist-mobile-gaps);
10
+ }
11
+ }
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import cn from 'classnames';
3
+
4
+ import { TabProps } from '../../typings';
5
+
6
+ import styles from './index.module.css';
7
+
8
+ export const Tab = ({ children, hidden, className, disabled, dataTestId }: TabProps) =>
9
+ children ? (
10
+ <div
11
+ className={cn(
12
+ styles.component,
13
+ {
14
+ [styles.hidden]: hidden,
15
+ },
16
+ className,
17
+ )}
18
+ hidden={hidden}
19
+ role='tabpanel'
20
+ tabIndex={disabled ? -1 : 0}
21
+ data-test-id={dataTestId}
22
+ >
23
+ {children}
24
+ </div>
25
+ ) : null;
@@ -0,0 +1,7 @@
1
+ .component {
2
+ outline: none;
3
+ }
4
+
5
+ .hidden {
6
+ display: none;
7
+ }
@@ -0,0 +1 @@
1
+ export * from './Component';
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+
3
+ import { TabsProps } from '../../typings';
4
+ import { CollapsiblePrimaryTabListDesktop } from '../primary-tablist/Component.collapsible.desktop';
5
+
6
+ import { Tabs } from './Component';
7
+
8
+ export type TabsCollapsibleDesktopProps = Omit<
9
+ TabsProps,
10
+ 'TabList' | 'fullWidthScroll' | 'scrollable' | 'view'
11
+ >;
12
+
13
+ export const TabsCollapsibleDesktop = ({ ...restProps }: TabsCollapsibleDesktopProps) => (
14
+ <Tabs TabList={CollapsiblePrimaryTabListDesktop} {...restProps} />
15
+ );
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+
3
+ import { TabsProps } from '../../typings';
4
+ import { CollapsiblePrimaryTabListMobile } from '../primary-tablist/Component.collapsible.mobile';
5
+
6
+ import { Tabs } from './Component';
7
+
8
+ export type TabsCollapsibleMobileProps = Omit<
9
+ TabsProps,
10
+ 'TabList' | 'scrollable' | 'view' | 'size'
11
+ >;
12
+
13
+ export const TabsCollapsibleMobile = ({ ...restProps }: TabsCollapsibleMobileProps) => (
14
+ <Tabs TabList={CollapsiblePrimaryTabListMobile} {...restProps} />
15
+ );
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+
3
+ import { TabsProps } from '../../typings';
4
+ import { CollapsiblePrimaryTabListResponsive } from '../primary-tablist/Component.collapsible.responsive';
5
+
6
+ import { Tabs } from './Component';
7
+
8
+ export type TabsCollapsibleResponsiveProps = Omit<TabsProps, 'TabList' | 'scrollable' | 'view'>;
9
+
10
+ export const TabsCollapsibleResponsive = ({ ...restProps }: TabsCollapsibleResponsiveProps) => (
11
+ <Tabs TabList={CollapsiblePrimaryTabListResponsive} {...restProps} />
12
+ );
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+
3
+ import { TabsProps } from '../../typings';
4
+ import { PrimaryTabListDesktop } from '../primary-tablist/Component.desktop';
5
+ import { SecondaryTabListDesktop } from '../secondary-tablist/Component.desktop';
6
+
7
+ import { Tabs } from './Component';
8
+
9
+ const views = {
10
+ primary: PrimaryTabListDesktop,
11
+ secondary: SecondaryTabListDesktop,
12
+ };
13
+
14
+ export type TabsDesktopProps = Omit<
15
+ TabsProps,
16
+ 'TabList' | 'fullWidthScroll' | 'breakpoint' | 'collapsedTabsIds'
17
+ >;
18
+
19
+ export const TabsDesktop = ({
20
+ view = 'primary',
21
+ scrollable = false,
22
+ size = view === 'primary' ? 'm' : 's',
23
+ ...restProps
24
+ }: TabsDesktopProps) => (
25
+ <Tabs TabList={views[view]} scrollable={scrollable} size={size} {...restProps} />
26
+ );
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+
3
+ import { TabsProps } from '../../typings';
4
+ import { PrimaryTabListMobile } from '../primary-tablist/Component.mobile';
5
+ import { SecondaryTabListMobile } from '../secondary-tablist/Component.mobile';
6
+
7
+ import { Tabs } from './Component';
8
+
9
+ const views = {
10
+ primary: PrimaryTabListMobile,
11
+ secondary: SecondaryTabListMobile,
12
+ };
13
+
14
+ export type TabsMobileProps = Omit<TabsProps, 'TabList' | 'size' | 'collapsedTabsIds'>;
15
+
16
+ export const TabsMobile = ({
17
+ view = 'primary',
18
+ scrollable = true,
19
+ ...restProps
20
+ }: TabsMobileProps) => <Tabs TabList={views[view]} scrollable={scrollable} {...restProps} />;
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+
3
+ import { TabsProps } from '../../typings';
4
+ import { PrimaryTabListResponsive } from '../primary-tablist/Component.responsive';
5
+ import { SecondaryTabListResponsive } from '../secondary-tablist/Component.responsive';
6
+
7
+ import { Tabs } from './Component';
8
+
9
+ const views = {
10
+ primary: PrimaryTabListResponsive,
11
+ secondary: SecondaryTabListResponsive,
12
+ };
13
+
14
+ export type TabsResponsiveProps = Omit<TabsProps, 'TabList' | 'collapsedTabsIds'>;
15
+
16
+ export const TabsResponsive = ({
17
+ view = 'primary',
18
+ scrollable = false,
19
+ ...restProps
20
+ }: TabsResponsiveProps) => <Tabs TabList={views[view]} scrollable={scrollable} {...restProps} />;
@@ -0,0 +1,67 @@
1
+ import React, { cloneElement } from 'react';
2
+
3
+ import { TabsProps } from '../../typings';
4
+
5
+ export const Tabs = ({
6
+ TabList,
7
+ className,
8
+ containerClassName,
9
+ size,
10
+ defaultMatchMediaValue,
11
+ children,
12
+ selectedId,
13
+ scrollable,
14
+ collapsedTabsIds,
15
+ fullWidthScroll = false,
16
+ keepMounted = false,
17
+ dataTestId,
18
+ onChange,
19
+ breakpoint = 1024,
20
+ }: Omit<TabsProps, 'view'>) => {
21
+ const tabsArray = React.Children.toArray(children) as TabsProps['children'];
22
+ const titles = tabsArray.map(
23
+ ({
24
+ props: {
25
+ title,
26
+ id,
27
+ rightAddons,
28
+ disabled,
29
+ hidden,
30
+ toggleClassName,
31
+ dataTestId: toggleTestId,
32
+ },
33
+ }) => ({
34
+ title,
35
+ id,
36
+ disabled,
37
+ rightAddons,
38
+ hidden,
39
+ toggleClassName,
40
+ dataTestId: toggleTestId,
41
+ }),
42
+ );
43
+
44
+ const tabs = tabsArray.filter(
45
+ (tab) => tab.props.id === selectedId || tab.props.keepMounted || keepMounted,
46
+ );
47
+
48
+ return (
49
+ <div className={className}>
50
+ <TabList
51
+ containerClassName={containerClassName}
52
+ size={size}
53
+ titles={titles}
54
+ selectedId={selectedId}
55
+ scrollable={scrollable}
56
+ collapsedTabsIds={collapsedTabsIds}
57
+ onChange={onChange}
58
+ dataTestId={dataTestId}
59
+ defaultMatchMediaValue={defaultMatchMediaValue}
60
+ fullWidthScroll={fullWidthScroll}
61
+ breakpoint={breakpoint}
62
+ />
63
+
64
+ {tabs.map((tab) => cloneElement(tab, { hidden: tab.props.id !== selectedId }))}
65
+ </div>
66
+ );
67
+ };
@@ -0,0 +1,51 @@
1
+ import React, { ButtonHTMLAttributes, forwardRef } from 'react';
2
+ import cn from 'classnames';
3
+
4
+ import { Styles, TabListTitle } from '../../typings';
5
+
6
+ type Props = TabListTitle &
7
+ Styles &
8
+ Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'id'> & { focused?: boolean; isOption?: boolean };
9
+
10
+ export const Title = forwardRef<HTMLButtonElement, Props>(
11
+ (
12
+ {
13
+ id,
14
+ toggleClassName,
15
+ title,
16
+ styles = {},
17
+ rightAddons = null,
18
+ hidden = false,
19
+ selected = false,
20
+ disabled = false,
21
+ collapsed = false,
22
+ focused = false,
23
+ isOption = false,
24
+ ...restProps
25
+ },
26
+ ref,
27
+ ) =>
28
+ hidden ? null : (
29
+ <button
30
+ {...restProps}
31
+ ref={ref}
32
+ disabled={disabled}
33
+ type='button'
34
+ id={String(id)}
35
+ className={cn(
36
+ styles.title,
37
+ {
38
+ [styles.selected]: selected,
39
+ [styles.disabled]: disabled,
40
+ [styles.collapsed]: collapsed && !isOption,
41
+ [styles.option]: isOption,
42
+ },
43
+ toggleClassName,
44
+ )}
45
+ >
46
+ <span className={cn(styles.content, { [styles.focused]: focused })}>{title}</span>
47
+
48
+ {rightAddons && <span className={styles.rightAddons}>{rightAddons}</span>}
49
+ </button>
50
+ ),
51
+ );
@@ -0,0 +1 @@
1
+ export * from './Component';
package/src/desktop.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './components/primary-tablist/Component.desktop';
2
+ export * from './components/secondary-tablist/Component.desktop';
3
+ export * from './components/tab';
4
+ export * from './components/tabs/Component.desktop';
@@ -0,0 +1,69 @@
1
+ import { DependencyList, useRef, useState } from 'react';
2
+ import { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';
3
+
4
+ import { useLayoutEffect_SAFE_FOR_SSR } from '@alfalab/hooks';
5
+
6
+ export const useCollapsibleElements = <
7
+ ContainerType extends HTMLElement,
8
+ AddonType extends HTMLElement,
9
+ >(
10
+ selectors: string,
11
+ deps: DependencyList = [],
12
+ ) => {
13
+ const [idsCollapsedElements, setIdsCollapsedElements] = useState<string[]>([]);
14
+
15
+ const containerRef = useRef<ContainerType>(null);
16
+ const addonRef = useRef<AddonType>(null);
17
+
18
+ useLayoutEffect_SAFE_FOR_SSR(() => {
19
+ const collapseElements = (inlineSize?: number) => {
20
+ const container = containerRef.current;
21
+
22
+ if (!container) return;
23
+
24
+ const addon = addonRef.current;
25
+ const containerWidth =
26
+ (inlineSize || container.clientWidth) - (addon?.scrollWidth || 0) * 1.5; // при расчётах, даём кнопке "Ещё" чуть больше места, чтобы точно влезла
27
+ const elements = Array.from(container.querySelectorAll(selectors)) as HTMLElement[];
28
+
29
+ const collapsedIds = elements.reduce<string[]>((acc, element) => {
30
+ const { offsetLeft, scrollWidth, id } = element;
31
+ const elementOffset = offsetLeft + scrollWidth;
32
+ const isCollapsedElement = getComputedStyle(element).visibility === 'collapse';
33
+ const maxWidth =
34
+ addon && !isCollapsedElement
35
+ ? containerWidth -
36
+ (addon.scrollWidth + parseFloat(getComputedStyle(addon).marginLeft))
37
+ : containerWidth;
38
+
39
+ if (elementOffset >= maxWidth) acc.push(id);
40
+
41
+ return acc;
42
+ }, []);
43
+
44
+ setIdsCollapsedElements(collapsedIds);
45
+ };
46
+
47
+ const handleElementsResize = (entries: ResizeObserverEntry[]) => {
48
+ const [{ inlineSize }] = entries[0].contentBoxSize;
49
+
50
+ collapseElements(inlineSize);
51
+ };
52
+
53
+ const ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;
54
+ const observer = new ResizeObserver(handleElementsResize);
55
+
56
+ if (containerRef.current) {
57
+ collapseElements();
58
+ observer.observe(containerRef.current);
59
+ }
60
+
61
+ return () => observer.disconnect();
62
+ }, [selectors, ...deps]);
63
+
64
+ return {
65
+ containerRef,
66
+ addonRef,
67
+ idsCollapsedElements,
68
+ };
69
+ };
@@ -0,0 +1,91 @@
1
+ import { useMemo } from 'react';
2
+
3
+ import { useMatchMedia } from '@alfalab/core-components-mq';
4
+
5
+ import { TabListProps } from '../typings';
6
+
7
+ import { useCollapsibleElements } from './use-collapsible-elements';
8
+ import { useTabs } from './use-tabs';
9
+
10
+ export const useTablistTitles = ({
11
+ titles = [],
12
+ selectedId,
13
+ collapsedTabsIds,
14
+ breakpoint,
15
+ onChange,
16
+ defaultMatchMediaValue,
17
+ }: Pick<
18
+ TabListProps,
19
+ 'titles' | 'selectedId' | 'collapsedTabsIds' | 'onChange' | 'defaultMatchMediaValue'
20
+ > &
21
+ Required<Pick<TabListProps, 'breakpoint'>>) => {
22
+ const { containerRef, addonRef, idsCollapsedElements } = useCollapsibleElements<
23
+ HTMLDivElement,
24
+ HTMLInputElement
25
+ >('[role=tab]', [titles, collapsedTabsIds]);
26
+
27
+ const [isDesktop] = useMatchMedia(`(min-width: ${breakpoint}px)`, defaultMatchMediaValue);
28
+
29
+ const tablistTitles = useMemo(() => {
30
+ const idsCollapsedTitles: string[] = [];
31
+ const idsCollapsed = idsCollapsedElements.concat(collapsedTabsIds || []);
32
+
33
+ if (isDesktop) {
34
+ const visibleTitles = titles.filter(({ id }) => !idsCollapsed.includes(String(id)));
35
+ const lastVisibleTitle = collapsedTabsIds
36
+ ? null
37
+ : visibleTitles[visibleTitles.length - 1];
38
+
39
+ idsCollapsed.forEach((id) => {
40
+ if (selectedId === id && lastVisibleTitle) {
41
+ idsCollapsedTitles.push(String(lastVisibleTitle.id));
42
+ }
43
+ if (selectedId !== id) {
44
+ idsCollapsedTitles.push(id);
45
+ }
46
+ });
47
+ }
48
+
49
+ const titlesMapped = titles.map((title) => ({
50
+ ...title,
51
+ collapsed: idsCollapsedTitles.includes(String(title.id)),
52
+ selected: title.id === selectedId,
53
+ }));
54
+
55
+ if (collapsedTabsIds?.length) {
56
+ titlesMapped.sort((a, b) => {
57
+ const hasA = collapsedTabsIds.includes(String(a.id));
58
+ const hasB = collapsedTabsIds.includes(String(b.id));
59
+
60
+ if (hasA === hasB) {
61
+ return 0;
62
+ }
63
+
64
+ return hasA ? 1 : -1;
65
+ });
66
+ }
67
+
68
+ return titlesMapped.sort((a, b) => {
69
+ if (a.collapsed === b.collapsed) {
70
+ return 0;
71
+ }
72
+
73
+ return a.collapsed ? 1 : -1;
74
+ });
75
+ }, [collapsedTabsIds, idsCollapsedElements, isDesktop, titles, selectedId]);
76
+
77
+ const { selectedTab, focusedTab, getTabListItemProps } = useTabs({
78
+ titles: tablistTitles,
79
+ selectedId,
80
+ onChange,
81
+ });
82
+
83
+ return {
84
+ containerRef,
85
+ addonRef,
86
+ tablistTitles,
87
+ selectedTab,
88
+ focusedTab,
89
+ getTabListItemProps,
90
+ };
91
+ };