@leaflink/stash 51.11.0 → 51.12.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 (343) hide show
  1. package/README.md +41 -12
  2. package/dist/Accordion.js.map +1 -1
  3. package/dist/Accordion.vue.d.ts +37 -6
  4. package/dist/ActionsDropdown.js +2 -2
  5. package/dist/ActionsDropdown.js.map +1 -1
  6. package/dist/ActionsDropdown.vue.d.ts +74 -0
  7. package/dist/AddressSelect.js +60 -56
  8. package/dist/AddressSelect.js.map +1 -1
  9. package/dist/AddressSelect.vue.d.ts +65 -8
  10. package/dist/Alert.js.map +1 -1
  11. package/dist/Alert.vue.d.ts +41 -4
  12. package/dist/AppNavigationItem.js.map +1 -1
  13. package/dist/AppNavigationItem.vue.d.ts +31 -4
  14. package/dist/AppSidebar.js.map +1 -1
  15. package/dist/AppSidebar.vue.d.ts +35 -8
  16. package/dist/AppTopbar.js +1 -1
  17. package/dist/AppTopbar.js.map +1 -1
  18. package/dist/AppTopbar.vue.d.ts +33 -4
  19. package/dist/Avatar.js.map +1 -1
  20. package/dist/Avatar.vue.d.ts +44 -5
  21. package/dist/Backdrop.js.map +1 -1
  22. package/dist/Backdrop.vue.d.ts +1 -1
  23. package/dist/Badge.js.map +1 -1
  24. package/dist/Badge.vue.d.ts +55 -6
  25. package/dist/Box.vue.d.ts +36 -3
  26. package/dist/Box.vue_vue_type_script_setup_true_lang-rFnvwLVY.js.map +1 -1
  27. package/dist/Button.js.map +1 -1
  28. package/dist/Button.vue.d.ts +50 -5
  29. package/dist/ButtonGroup.js +37 -33
  30. package/dist/ButtonGroup.js.map +1 -1
  31. package/dist/ButtonGroup.vue.d.ts +39 -6
  32. package/dist/Card.js.map +1 -1
  33. package/dist/Card.vue.d.ts +32 -5
  34. package/dist/CardContent.js.map +1 -1
  35. package/dist/CardContent.vue.d.ts +1 -1
  36. package/dist/CardFooter.js.map +1 -1
  37. package/dist/CardFooter.vue.d.ts +1 -1
  38. package/dist/CardHeader.js.map +1 -1
  39. package/dist/CardHeader.vue.d.ts +15 -2
  40. package/dist/CardMedia.js.map +1 -1
  41. package/dist/CardMedia.vue.d.ts +15 -2
  42. package/dist/Carousel.js +72 -66
  43. package/dist/Carousel.js.map +1 -1
  44. package/dist/Carousel.vue.d.ts +10 -10
  45. package/dist/Checkbox.js.map +1 -1
  46. package/dist/Checkbox.vue.d.ts +53 -8
  47. package/dist/ChevronToggle.vue.d.ts +34 -7
  48. package/dist/ChevronToggle.vue_vue_type_script_setup_true_lang-Ce_qOXfR.js.map +1 -1
  49. package/dist/Chip.js.map +1 -1
  50. package/dist/Chip.vue.d.ts +52 -10
  51. package/dist/ConfirmationCodeInput.js +44 -40
  52. package/dist/ConfirmationCodeInput.js.map +1 -1
  53. package/dist/ConfirmationCodeInput.vue.d.ts +43 -8
  54. package/dist/ContextSwitcher.js.map +1 -1
  55. package/dist/ContextSwitcher.vue.d.ts +41 -6
  56. package/dist/Copy.js.map +1 -1
  57. package/dist/Copy.vue.d.ts +34 -3
  58. package/dist/CurrencyInput.js +21 -20
  59. package/dist/CurrencyInput.js.map +1 -1
  60. package/dist/CurrencyInput.vue.d.ts +46 -125
  61. package/dist/DataView.js +96 -94
  62. package/dist/DataView.js.map +1 -1
  63. package/dist/DataView.vue.d.ts +57 -12
  64. package/dist/DataViewFilters.js +139 -127
  65. package/dist/DataViewFilters.js.map +1 -1
  66. package/dist/DataViewFilters.vue.d.ts +54 -9
  67. package/dist/DataViewSortButton.js +2 -2
  68. package/dist/DataViewSortButton.js.map +1 -1
  69. package/dist/DataViewSortButton.vue.d.ts +30 -3
  70. package/dist/DataViewToolbar.js +81 -148
  71. package/dist/DataViewToolbar.js.map +1 -1
  72. package/dist/DataViewToolbar.vue.d.ts +40 -106
  73. package/dist/DatePicker.js +4640 -4528
  74. package/dist/DatePicker.js.map +1 -1
  75. package/dist/DatePicker.vue.d.ts +79 -30
  76. package/dist/DescriptionList.js.map +1 -1
  77. package/dist/DescriptionList.vue.d.ts +32 -3
  78. package/dist/DescriptionListDetail.js.map +1 -1
  79. package/dist/DescriptionListDetail.vue.d.ts +1 -1
  80. package/dist/DescriptionListGroup.js.map +1 -1
  81. package/dist/DescriptionListGroup.vue.d.ts +1 -1
  82. package/dist/DescriptionListTerm.js.map +1 -1
  83. package/dist/DescriptionListTerm.vue.d.ts +1 -1
  84. package/dist/Dialog.js.map +1 -1
  85. package/dist/Dialog.vue.d.ts +53 -10
  86. package/dist/Divider.js.map +1 -1
  87. package/dist/Dropdown.js +95 -89
  88. package/dist/Dropdown.js.map +1 -1
  89. package/dist/Dropdown.vue.d.ts +48 -12
  90. package/dist/EmptyState.js +1 -1
  91. package/dist/EmptyState.js.map +1 -1
  92. package/dist/EmptyState.vue.d.ts +62 -5
  93. package/dist/Expand.vue.d.ts +40 -10
  94. package/dist/Expand.vue_vue_type_script_setup_true_lang-CiONJfAp.js.map +1 -1
  95. package/dist/Field.vue.d.ts +53 -4
  96. package/dist/Field.vue_vue_type_script_setup_true_lang-DI6z3AE9.js.map +1 -1
  97. package/dist/FileUpload.js +74 -72
  98. package/dist/FileUpload.js.map +1 -1
  99. package/dist/FileUpload.vue.d.ts +44 -10
  100. package/dist/FilterChip.js.map +1 -1
  101. package/dist/FilterChip.vue.d.ts +41 -6
  102. package/dist/FilterDrawerItem.js +21 -21
  103. package/dist/FilterDrawerItem.js.map +1 -1
  104. package/dist/FilterDrawerItem.vue.d.ts +23 -6
  105. package/dist/FilterDropdown.js +69 -63
  106. package/dist/FilterDropdown.js.map +1 -1
  107. package/dist/FilterDropdown.vue.d.ts +35 -122
  108. package/dist/FilterSelect.js.map +1 -1
  109. package/dist/FilterSelect.vue.d.ts +31 -4
  110. package/dist/Filters.js +164 -157
  111. package/dist/Filters.js.map +1 -1
  112. package/dist/Filters.vue.d.ts +2190 -0
  113. package/dist/HttpError.js +7 -7
  114. package/dist/HttpError.js.map +1 -1
  115. package/dist/HttpError.vue.d.ts +41 -4
  116. package/dist/Icon.js +17 -17
  117. package/dist/Icon.js.map +1 -1
  118. package/dist/Icon.vue.d.ts +36 -3
  119. package/dist/IconLabel.js.map +1 -1
  120. package/dist/IconLabel.vue.d.ts +40 -5
  121. package/dist/Illustration.js +2 -2
  122. package/dist/Illustration.vue.d.ts +42 -3
  123. package/dist/{Illustration.vue_vue_type_script_setup_true_lang-BVzzNsRt.js → Illustration.vue_vue_type_script_setup_true_lang-BrqEF8xe.js} +11 -11
  124. package/dist/{Illustration.vue_vue_type_script_setup_true_lang-BVzzNsRt.js.map → Illustration.vue_vue_type_script_setup_true_lang-BrqEF8xe.js.map} +1 -1
  125. package/dist/Image.js +2 -2
  126. package/dist/Image.vue.d.ts +40 -5
  127. package/dist/{Image.vue_vue_type_script_setup_true_lang-Dg2Zk2r2.js → Image.vue_vue_type_script_setup_true_lang-D5u4av0_.js} +41 -37
  128. package/dist/{Image.vue_vue_type_script_setup_true_lang-Dg2Zk2r2.js.map → Image.vue_vue_type_script_setup_true_lang-D5u4av0_.js.map} +1 -1
  129. package/dist/InlineEdit.js.map +1 -1
  130. package/dist/InlineEdit.vue.d.ts +47 -126
  131. package/dist/Input.js.map +1 -1
  132. package/dist/Input.vue.d.ts +45 -12
  133. package/dist/InputOptions.js +69 -66
  134. package/dist/InputOptions.js.map +1 -1
  135. package/dist/InputOptions.vue.d.ts +55 -10
  136. package/dist/IntegrationIcon.js +7 -7
  137. package/dist/IntegrationIcon.js.map +1 -1
  138. package/dist/IntegrationIcon.vue.d.ts +36 -3
  139. package/dist/Label.vue.d.ts +42 -3
  140. package/dist/Label.vue_vue_type_script_setup_true_lang-CNquF3AP.js.map +1 -1
  141. package/dist/LicenseChip.js.map +1 -1
  142. package/dist/LicenseChip.vue.d.ts +30 -3
  143. package/dist/ListItem.js.map +1 -1
  144. package/dist/ListItem.vue.d.ts +294 -0
  145. package/dist/ListItemCell.js.map +1 -1
  146. package/dist/ListItemCell.vue.d.ts +21 -0
  147. package/dist/ListView.js +7 -4
  148. package/dist/ListView.js.map +1 -1
  149. package/dist/ListView.types.d.ts +29 -0
  150. package/dist/ListView.vue.d.ts +5496 -0
  151. package/dist/Loading.js +2 -2
  152. package/dist/Loading.js.map +1 -1
  153. package/dist/Loading.vue.d.ts +1 -1
  154. package/dist/Logo.js +1 -1
  155. package/dist/Logo.vue.d.ts +41 -6
  156. package/dist/{Logo.vue_vue_type_script_setup_true_lang-Y3iE9utm.js → Logo.vue_vue_type_script_setup_true_lang-Dz8c98sc.js} +17 -17
  157. package/dist/Logo.vue_vue_type_script_setup_true_lang-Dz8c98sc.js.map +1 -0
  158. package/dist/Menu.js.map +1 -1
  159. package/dist/Menu.vue.d.ts +1 -1
  160. package/dist/MenuItem.js.map +1 -1
  161. package/dist/MenuItem.vue.d.ts +1 -1
  162. package/dist/MenusPlugin-Bk6UW6o9.js +12 -0
  163. package/dist/{MenusPlugin-B4jpNe7x.js.map → MenusPlugin-Bk6UW6o9.js.map} +1 -1
  164. package/dist/Metric.js.map +1 -1
  165. package/dist/Metric.vue.d.ts +34 -3
  166. package/dist/Modal.js +64 -62
  167. package/dist/Modal.js.map +1 -1
  168. package/dist/Modal.vue.d.ts +60 -13
  169. package/dist/Modals.js +18 -17
  170. package/dist/Modals.js.map +1 -1
  171. package/dist/ModalsPlugin.js +11 -11
  172. package/dist/ModalsPlugin.js.map +1 -1
  173. package/dist/Module.js.map +1 -1
  174. package/dist/Module.vue.d.ts +29 -2
  175. package/dist/ModuleContent.js.map +1 -1
  176. package/dist/ModuleContent.vue.d.ts +3 -3
  177. package/dist/ModuleFooter.js.map +1 -1
  178. package/dist/ModuleFooter.vue.d.ts +1 -1
  179. package/dist/ModuleHeader.js.map +1 -1
  180. package/dist/ModuleHeader.vue.d.ts +39 -5
  181. package/dist/MoreActions.js +125 -123
  182. package/dist/MoreActions.js.map +1 -1
  183. package/dist/MoreActions.vue.d.ts +46 -123
  184. package/dist/ObfuscateText.js.map +1 -1
  185. package/dist/ObfuscateText.vue.d.ts +40 -3
  186. package/dist/PageContent.js.map +1 -1
  187. package/dist/PageContent.vue.d.ts +30 -3
  188. package/dist/PageHeader.js.map +1 -1
  189. package/dist/PageHeader.vue.d.ts +35 -6
  190. package/dist/PageNavigation.js +50 -50
  191. package/dist/PageNavigation.js.map +1 -1
  192. package/dist/PageNavigation.vue.d.ts +36 -7
  193. package/dist/Paginate.js.map +1 -1
  194. package/dist/Paginate.vue.d.ts +40 -5
  195. package/dist/PlaidLink.js.map +1 -1
  196. package/dist/PlaidLink.vue.d.ts +49 -12
  197. package/dist/QuickAction.js.map +1 -1
  198. package/dist/QuickAction.vue.d.ts +15 -2
  199. package/dist/Radio.js.map +1 -1
  200. package/dist/Radio.vue.d.ts +93 -0
  201. package/dist/RadioGroup.js +101 -94
  202. package/dist/RadioGroup.js.map +1 -1
  203. package/dist/RadioGroup.vue.d.ts +42 -116
  204. package/dist/RadioNew.js +99 -96
  205. package/dist/RadioNew.js.map +1 -1
  206. package/dist/RadioNew.vue.d.ts +48 -7
  207. package/dist/RangeInput.js.map +1 -1
  208. package/dist/RangeInput.vue.d.ts +1 -1
  209. package/dist/SearchBar.js +39 -38
  210. package/dist/SearchBar.js.map +1 -1
  211. package/dist/SearchBar.vue.d.ts +44 -127
  212. package/dist/SectionHeader.js.map +1 -1
  213. package/dist/SectionHeader.vue.d.ts +36 -5
  214. package/dist/Select.js +183 -171
  215. package/dist/Select.js.map +1 -1
  216. package/dist/Select.vue.d.ts +102 -23
  217. package/dist/SelectStatus.js +38 -38
  218. package/dist/SelectStatus.js.map +1 -1
  219. package/dist/SelectStatus.vue.d.ts +46 -226
  220. package/dist/Skeleton.js.map +1 -1
  221. package/dist/Skeleton.vue.d.ts +34 -3
  222. package/dist/Step.js +44 -44
  223. package/dist/Step.js.map +1 -1
  224. package/dist/Step.vue.d.ts +43 -4
  225. package/dist/Stepper.js.map +1 -1
  226. package/dist/Stepper.vue.d.ts +44 -9
  227. package/dist/Switch.js.map +1 -1
  228. package/dist/Switch.vue.d.ts +47 -8
  229. package/dist/Tab.js +9 -9
  230. package/dist/Tab.js.map +1 -1
  231. package/dist/Tab.vue.d.ts +15 -2
  232. package/dist/TabPanel.js.map +1 -1
  233. package/dist/TabPanel.vue.d.ts +30 -3
  234. package/dist/Table.js +59 -53
  235. package/dist/Table.js.map +1 -1
  236. package/dist/Table.vue.d.ts +50 -3
  237. package/dist/TableCell.js +1 -1
  238. package/dist/TableCell.js.map +1 -1
  239. package/dist/TableCell.vue.d.ts +32 -3
  240. package/dist/TableHeaderCell.js +1 -1
  241. package/dist/TableHeaderCell.js.map +1 -1
  242. package/dist/TableHeaderCell.vue.d.ts +30 -3
  243. package/dist/TableHeaderRow.js +1 -1
  244. package/dist/TableHeaderRow.js.map +1 -1
  245. package/dist/TableHeaderRow.vue.d.ts +34 -5
  246. package/dist/TableRow.js +44 -43
  247. package/dist/TableRow.js.map +1 -1
  248. package/dist/TableRow.vue.d.ts +48 -7
  249. package/dist/Tabs.js +2 -2
  250. package/dist/Tabs.vue.d.ts +31 -4
  251. package/dist/Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js +159 -0
  252. package/dist/Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js.map +1 -0
  253. package/dist/TextEditor.js +2422 -2416
  254. package/dist/TextEditor.js.map +1 -1
  255. package/dist/TextEditor.vue.d.ts +39 -8
  256. package/dist/Textarea.js +32 -29
  257. package/dist/Textarea.js.map +1 -1
  258. package/dist/Textarea.vue.d.ts +44 -9
  259. package/dist/Thumbnail.js +1 -1
  260. package/dist/Thumbnail.js.map +1 -1
  261. package/dist/Thumbnail.vue.d.ts +4 -4
  262. package/dist/ThumbnailEmpty.js.map +1 -1
  263. package/dist/ThumbnailEmpty.vue.d.ts +1 -1
  264. package/dist/ThumbnailGroup.js.map +1 -1
  265. package/dist/ThumbnailGroup.vue.d.ts +22 -26
  266. package/dist/Timeline.js.map +1 -1
  267. package/dist/Timeline.vue.d.ts +32 -3
  268. package/dist/TimelineItem.js.map +1 -1
  269. package/dist/TimelineItem.vue.d.ts +1 -1
  270. package/dist/Toast.js.map +1 -1
  271. package/dist/Toast.vue.d.ts +30 -3
  272. package/dist/Toasts.js.map +1 -1
  273. package/dist/ToastsPlugin.js +11 -11
  274. package/dist/ToastsPlugin.js.map +1 -1
  275. package/dist/Tooltip.js +30 -29
  276. package/dist/Tooltip.js.map +1 -1
  277. package/dist/Tooltip.vue.d.ts +43 -11
  278. package/dist/components.css +1 -1
  279. package/dist/directives/observe.js +8 -8
  280. package/dist/directives/observe.js.map +1 -1
  281. package/dist/directives/tooltip.js +3 -3
  282. package/dist/directives/tooltip.js.map +1 -1
  283. package/dist/directives/viewable.js +44 -39
  284. package/dist/directives/viewable.js.map +1 -1
  285. package/dist/floating-ui.vue-DLFiymOf.js +1093 -0
  286. package/dist/floating-ui.vue-DLFiymOf.js.map +1 -0
  287. package/dist/formatDateTime-Dz8bXV0R.js +1418 -0
  288. package/dist/formatDateTime-Dz8bXV0R.js.map +1 -0
  289. package/dist/index-D6bxWkZ1.js.map +1 -1
  290. package/dist/{index-XZqpB2_R.js → index-DA_ft08e.js} +9 -9
  291. package/dist/index-DA_ft08e.js.map +1 -0
  292. package/dist/index.js +106 -101
  293. package/dist/index.js.map +1 -1
  294. package/dist/isValid-DN-HkCoi.js.map +1 -1
  295. package/dist/obfuscateText.d.ts +1 -1
  296. package/dist/parseISO-wlfIB_QJ.js.map +1 -1
  297. package/dist/searchFuzzy-B3TsUO-V.js +409 -0
  298. package/dist/searchFuzzy-B3TsUO-V.js.map +1 -0
  299. package/dist/toTimeZone-Coq1oPTt.js.map +1 -1
  300. package/dist/useDialog.d.ts +2 -2
  301. package/dist/useDialog.js +25 -21
  302. package/dist/useDialog.js.map +1 -1
  303. package/dist/useGoogleMaps.js +110 -108
  304. package/dist/useGoogleMaps.js.map +1 -1
  305. package/dist/useMediaQuery.d.ts +6 -0
  306. package/dist/useMediaQuery.js +15 -11
  307. package/dist/useMediaQuery.js.map +1 -1
  308. package/dist/useModals.d.ts +1 -1
  309. package/dist/usePlaidLink.js +27 -20
  310. package/dist/usePlaidLink.js.map +1 -1
  311. package/dist/useSearch.js +13 -13
  312. package/dist/useSearch.js.map +1 -1
  313. package/dist/useSelection.js +56 -56
  314. package/dist/useSelection.js.map +1 -1
  315. package/dist/useSortable.js +63 -54
  316. package/dist/useSortable.js.map +1 -1
  317. package/dist/useStepper.d.ts +2 -2
  318. package/dist/useStepper.js +40 -36
  319. package/dist/useStepper.js.map +1 -1
  320. package/dist/useToasts.js +23 -23
  321. package/dist/useToasts.js.map +1 -1
  322. package/dist/useValidation.js +100 -96
  323. package/dist/useValidation.js.map +1 -1
  324. package/dist/utils/calculateElementOverflow.js +4 -4
  325. package/dist/utils/calculateElementOverflow.js.map +1 -1
  326. package/dist/utils/formatDateTime.js +1 -1
  327. package/dist/utils/obfuscateText.js +6 -6
  328. package/dist/utils/obfuscateText.js.map +1 -1
  329. package/dist/utils/searchFuzzy.js +1 -1
  330. package/dist/utils/storage.js +23 -23
  331. package/dist/utils/storage.js.map +1 -1
  332. package/package.json +32 -19
  333. package/dist/Logo.vue_vue_type_script_setup_true_lang-Y3iE9utm.js.map +0 -1
  334. package/dist/MenusPlugin-B4jpNe7x.js +0 -12
  335. package/dist/Tabs.vue_vue_type_script_setup_true_lang-BlJVDr7o.js +0 -78
  336. package/dist/Tabs.vue_vue_type_script_setup_true_lang-BlJVDr7o.js.map +0 -1
  337. package/dist/floating-ui.vue-CL01Y9ER.js +0 -1075
  338. package/dist/floating-ui.vue-CL01Y9ER.js.map +0 -1
  339. package/dist/formatDateTime-DG7kBc2T.js +0 -1414
  340. package/dist/formatDateTime-DG7kBc2T.js.map +0 -1
  341. package/dist/index-XZqpB2_R.js.map +0 -1
  342. package/dist/searchFuzzy-DBDE6jkd.js +0 -408
  343. package/dist/searchFuzzy-DBDE6jkd.js.map +0 -1
package/dist/TableRow.js CHANGED
@@ -1,12 +1,12 @@
1
- import { defineComponent as A, useAttrs as D, useCssModule as M, useSlots as V, inject as j, ref as P, computed as k, watch as q, createElementBlock as w, openBlock as r, Fragment as z, createElementVNode as F, createCommentVNode as p, mergeProps as J, unref as e, createBlock as E, renderSlot as y, normalizeClass as n, withCtx as x, createVNode as _ } from "vue";
1
+ import { defineComponent as A, useAttrs as D, useCssModule as M, useSlots as V, inject as j, ref as P, computed as k, watch as q, createElementBlock as x, openBlock as r, Fragment as z, createElementVNode as F, createCommentVNode as u, mergeProps as J, unref as e, createBlock as E, renderSlot as y, normalizeClass as c, withCtx as _, createVNode as b } from "vue";
2
2
  import L from "lodash-es/uniqueId";
3
- import { t as b } from "./locale.js";
3
+ import { t as h } from "./locale.js";
4
4
  import O from "./Checkbox.js";
5
5
  import { _ as U } from "./ChevronToggle.vue_vue_type_script_setup_true_lang-Ce_qOXfR.js";
6
6
  import { _ as G } from "./Expand.vue_vue_type_script_setup_true_lang-CiONJfAp.js";
7
7
  import "lodash-es/cloneDeep";
8
8
  import "./DataView.keys-aSOnA4AD.js";
9
- import "./Illustration.vue_vue_type_script_setup_true_lang-BVzzNsRt.js";
9
+ import "./Illustration.vue_vue_type_script_setup_true_lang-BrqEF8xe.js";
10
10
  import g from "./TableCell.js";
11
11
  import { T as H } from "./Table.keys-LHQf6FEH.js";
12
12
  import { _ as K } from "./_plugin-vue_export-helper-CHgC5LLL.js";
@@ -22,82 +22,83 @@ const Q = /* @__PURE__ */ A({
22
22
  },
23
23
  emits: ["update:isSelected", "update:isExpanded"],
24
24
  setup(S, { emit: T }) {
25
- const t = S, h = T, B = D(), o = M(), m = V(), f = j(H.key);
25
+ const t = S, m = T, B = D(), o = M(), i = V(), f = j(H.key);
26
26
  if (!f)
27
27
  throw new Error("TableRow must be used within a Table component");
28
- const { hasActions: R, hasCustomExpandToggle: v, isExpandable: $, isSelectable: u, layout: i } = f, l = P(t.isExpanded), s = k(() => $.value && !!m.expansion), I = k(() => {
29
- let a = m.default?.({ toggleExpand: d }).length ?? 0;
30
- return u.value && (a += 1), s.value && !v.value && (a += 1), a;
28
+ const { hasActions: R, hasCustomExpandToggle: v, isExpandable: $, isSelectable: w, layout: d } = f, l = P(t.isExpanded), n = k(() => $.value && !!i.expansion), I = k(() => {
29
+ var s;
30
+ let a = ((s = i.default) == null ? void 0 : s.call(i, { toggleExpand: p }).length) ?? 0;
31
+ return w.value && (a += 1), n.value && !v.value && (a += 1), a;
31
32
  }), C = L("table-row-");
32
- function d(a) {
33
- if (!s.value)
33
+ function p(a) {
34
+ if (!n.value)
34
35
  throw new Error("Cannot call `toggleExpand` on a non-expandable row. Provide an `expansion` slot.");
35
- const c = typeof a == "boolean" ? a : !l.value;
36
- l.value = c, h("update:isExpanded", c);
36
+ const s = typeof a == "boolean" ? a : !l.value;
37
+ l.value = s, m("update:isExpanded", s);
37
38
  }
38
39
  return q(
39
40
  () => t.isExpanded,
40
- () => d(t.isExpanded)
41
- ), (a, c) => (r(), w(z, null, [
41
+ () => p(t.isExpanded)
42
+ ), (a, s) => (r(), x(z, null, [
42
43
  F("tr", J({
43
44
  class: ["stash-table-row", [
44
45
  e(o).root,
45
- e(o)[`layout--${e(i)}`],
46
+ e(o)[`layout--${e(d)}`],
46
47
  {
47
- [e(o)["is-expandable"]]: s.value,
48
+ [e(o)["is-expandable"]]: n.value,
48
49
  [e(o)["is-expanded"]]: l.value,
49
50
  [e(o)["root--hidden-divider"]]: a.hideExpansionDivider,
50
- "tw-p-gutter": e(i) === "stack",
51
- "tw-mb-6 tw-shadow lg:tw-mb-0 lg:tw-shadow-none": e(i) === "stack" && !s.value,
52
- "tw-pt-[60px]": e(R) && e(i) === "stack" && !e(u),
51
+ "tw-p-gutter": e(d) === "stack",
52
+ "tw-mb-6 tw-shadow lg:tw-mb-0 lg:tw-shadow-none": e(d) === "stack" && !n.value,
53
+ "tw-pt-[60px]": e(R) && e(d) === "stack" && !e(w),
53
54
  "stash-table-row--accent": t.accentColor,
54
55
  "tw-relative": t.accentColor
55
56
  }
56
57
  ]],
57
58
  "data-test": "stash-table-row"
58
59
  }, e(B)), [
59
- e(u) ? (r(), E(g, {
60
+ e(w) ? (r(), E(g, {
60
61
  key: 0,
61
62
  "is-control": "",
62
- class: n(["stash-table-row__selection-cell tw-min-w-[48px]", e(o)["row-control-cell"]]),
63
+ class: c(["stash-table-row__selection-cell tw-min-w-[48px]", e(o)["row-control-cell"]]),
63
64
  "data-test": "stash-table-row|selection-cell"
64
65
  }, {
65
- default: x(() => [
66
- _(O, {
67
- class: n(e(o)["row-selection-checkbox"]),
66
+ default: _(() => [
67
+ b(O, {
68
+ class: c(e(o)["row-selection-checkbox"]),
68
69
  checked: t.isSelected,
69
70
  disabled: t.isSelectDisabled,
70
- title: e(b)("ll.select.self"),
71
- "onUpdate:checked": c[0] || (c[0] = (N) => h("update:isSelected", N))
71
+ title: e(h)("ll.select.self"),
72
+ "onUpdate:checked": s[0] || (s[0] = (N) => m("update:isSelected", N))
72
73
  }, null, 8, ["class", "checked", "disabled", "title"])
73
74
  ]),
74
75
  _: 1
75
- }, 8, ["class"])) : p("", !0),
76
- s.value && !e(v) ? (r(), E(g, {
76
+ }, 8, ["class"])) : u("", !0),
77
+ n.value && !e(v) ? (r(), E(g, {
77
78
  key: 1,
78
- class: n(["stash-table-row__toggle-expansion-cell tw-px-0", e(o)["row-control-cell"]]),
79
+ class: c(["stash-table-row__toggle-expansion-cell tw-px-0", e(o)["row-control-cell"]]),
79
80
  "data-test": "stash-table-row|custom-expansion-cell",
80
81
  "is-control": ""
81
82
  }, {
82
- default: x(() => [
83
- _(U, {
83
+ default: _(() => [
84
+ b(U, {
84
85
  "aria-controls": e(C),
85
- "aria-label": l.value ? e(b)("ll.table.collapseRow") : e(b)("ll.table.expandRow"),
86
+ "aria-label": l.value ? e(h)("ll.table.collapseRow") : e(h)("ll.table.expandRow"),
86
87
  direction: l.value ? "up" : "down",
87
88
  "is-expanded": l.value,
88
- onClick: d
89
+ onClick: p
89
90
  }, null, 8, ["aria-controls", "aria-label", "direction", "is-expanded"])
90
91
  ]),
91
92
  _: 1
92
- }, 8, ["class"])) : p("", !0),
93
+ }, 8, ["class"])) : u("", !0),
93
94
  y(a.$slots, "default", {
94
95
  isRowExpanded: l.value,
95
- toggleExpand: d
96
+ toggleExpand: p
96
97
  }),
97
- t.accentColor ? (r(), w("div", {
98
+ t.accentColor ? (r(), x("div", {
98
99
  key: 2,
99
100
  "data-test": "stash-table-row|accent",
100
- class: n({
101
+ class: c({
101
102
  "tw-absolute": t.accentColor,
102
103
  [`tw-bg-${t.accentColor}`]: t.accentColor,
103
104
  "tw-block": t.accentColor,
@@ -106,27 +107,27 @@ const Q = /* @__PURE__ */ A({
106
107
  "tw-top-0": t.accentColor,
107
108
  "tw-left-0": t.accentColor
108
109
  })
109
- }, null, 2)) : p("", !0)
110
+ }, null, 2)) : u("", !0)
110
111
  ], 16),
111
- s.value ? (r(), w("tr", {
112
+ n.value ? (r(), x("tr", {
112
113
  key: 0,
113
- class: n(["stash-table-row stash-table-row--expandable", e(o)["row-expansion"]]),
114
+ class: c(["stash-table-row stash-table-row--expandable", e(o)["row-expansion"]]),
114
115
  "data-test": "stash-table-row|expansion-row"
115
116
  }, [
116
- _(G, {
117
+ b(G, {
117
118
  is: "td",
118
119
  id: e(C),
119
- class: n(["tw-border-none tw-bg-white tw-px-3 tw-py-0", e(o)["row-expansion-content"]]),
120
+ class: c(["tw-border-none tw-bg-white tw-px-3 tw-py-0", e(o)["row-expansion-content"]]),
120
121
  "data-test": "stash-table-row|expansion-cell",
121
122
  colspan: I.value,
122
123
  "is-expanded": l.value
123
124
  }, {
124
- default: x(() => [
125
+ default: _(() => [
125
126
  y(a.$slots, "expansion")
126
127
  ]),
127
128
  _: 3
128
129
  }, 8, ["id", "class", "colspan", "is-expanded"])
129
- ], 2)) : p("", !0)
130
+ ], 2)) : u("", !0)
130
131
  ], 64));
131
132
  }
132
133
  }), W = "_root_1h1vo_2", X = {
@@ -1 +1 @@
1
- {"version":3,"file":"TableRow.js","sources":["../src/components/TableRow/TableRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, inject, ref, useAttrs, useCssModule, watch } from 'vue';\n\n import { StashCommonColor } from '../../../types/colors';\n import { t } from '../../locale';\n import Checkbox, { CheckboxProps } from '../Checkbox/Checkbox.vue';\n import ChevronToggle from '../ChevronToggle/ChevronToggle.vue';\n import Expand from '../Expand/Expand.vue';\n import { TABLE_INJECTION } from '../Table/Table.vue';\n import TableCell from '../TableCell/TableCell.vue';\n\n defineOptions({ inheritAttrs: false });\n\n export interface TableRowProps {\n hideExpansionDivider?: boolean;\n isExpanded?: boolean;\n isSelected?: boolean;\n isSelectDisabled?: boolean;\n /**\n * The accent color for the TableRow.\n */\n accentColor?: StashCommonColor;\n }\n\n const props = withDefaults(defineProps<TableRowProps>(), {\n /**\n * If true, hides the divider between the parent row and expansion row\n */\n hideExpansionDivider: false,\n isExpanded: false,\n isSelected: false,\n isSelectDisabled: false,\n accentColor: undefined,\n });\n\n const emit = defineEmits<{\n 'update:isSelected': [isChecked: CheckboxProps['checked']];\n 'update:isExpanded': [isExpanded: boolean];\n }>();\n\n const attrs = useAttrs();\n const classes = useCssModule();\n const slots = defineSlots<{\n default(props: { isRowExpanded?: boolean; toggleExpand: (value?: boolean) => void }): unknown[];\n expansion(): unknown[];\n }>();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n\n if (!tableInjection) {\n throw new Error('TableRow must be used within a Table component');\n }\n\n const { hasActions, hasCustomExpandToggle, isExpandable, isSelectable, layout } = tableInjection;\n\n const isRowExpanded = ref(props.isExpanded);\n const isRowExpandable = computed(() => isExpandable.value && !!slots.expansion);\n\n const childCellCount = computed(() => {\n let count = slots.default?.({ toggleExpand }).length ?? 0;\n\n if (isSelectable.value) {\n count += 1;\n }\n\n if (isRowExpandable.value && !hasCustomExpandToggle.value) {\n count += 1;\n }\n\n return count;\n });\n const rowId = uniqueId('table-row-');\n\n function toggleExpand(value?: boolean) {\n if (!isRowExpandable.value) {\n throw new Error('Cannot call `toggleExpand` on a non-expandable row. Provide an `expansion` slot.');\n }\n\n const isExpanded = typeof value === 'boolean' ? value : !isRowExpanded.value;\n\n isRowExpanded.value = isExpanded;\n emit('update:isExpanded', isExpanded);\n }\n\n watch(\n () => props.isExpanded,\n () => toggleExpand(props.isExpanded),\n );\n</script>\n\n<template>\n <tr\n class=\"stash-table-row\"\n :class=\"[\n classes.root,\n classes[`layout--${layout}`],\n {\n [classes['is-expandable']]: isRowExpandable,\n [classes['is-expanded']]: isRowExpanded,\n [classes['root--hidden-divider']]: hideExpansionDivider,\n 'tw-p-gutter': layout === 'stack',\n 'tw-mb-6 tw-shadow lg:tw-mb-0 lg:tw-shadow-none': layout === 'stack' && !isRowExpandable,\n 'tw-pt-[60px]': hasActions && layout === 'stack' && !isSelectable,\n 'stash-table-row--accent': props.accentColor,\n 'tw-relative': props.accentColor,\n },\n ]\"\n data-test=\"stash-table-row\"\n v-bind=\"attrs\"\n >\n <TableCell\n v-if=\"isSelectable\"\n is-control\n class=\"stash-table-row__selection-cell tw-min-w-[48px]\"\n :class=\"classes['row-control-cell']\"\n data-test=\"stash-table-row|selection-cell\"\n >\n <Checkbox\n :class=\"classes['row-selection-checkbox']\"\n :checked=\"props.isSelected\"\n :disabled=\"props.isSelectDisabled\"\n :title=\"t('ll.select.self')\"\n @update:checked=\"emit('update:isSelected', $event)\"\n />\n </TableCell>\n <TableCell\n v-if=\"isRowExpandable && !hasCustomExpandToggle\"\n class=\"stash-table-row__toggle-expansion-cell tw-px-0\"\n data-test=\"stash-table-row|custom-expansion-cell\"\n is-control\n :class=\"classes['row-control-cell']\"\n >\n <ChevronToggle\n :aria-controls=\"rowId\"\n :aria-label=\"isRowExpanded ? t('ll.table.collapseRow') : t('ll.table.expandRow')\"\n :direction=\"isRowExpanded ? 'up' : 'down'\"\n :is-expanded=\"isRowExpanded\"\n @click=\"toggleExpand\"\n />\n </TableCell>\n <!-- @slot default -->\n <slot :is-row-expanded=\"isRowExpanded\" :toggle-expand=\"toggleExpand\"></slot>\n <!-- Displays a 4px accent on the left of the table row -->\n <div\n v-if=\"props.accentColor\"\n data-test=\"stash-table-row|accent\"\n :class=\"{\n 'tw-absolute': props.accentColor,\n [`tw-bg-${props.accentColor}`]: props.accentColor,\n 'tw-block': props.accentColor,\n 'tw-h-full': props.accentColor,\n 'tw-w-1': props.accentColor,\n 'tw-top-0': props.accentColor,\n 'tw-left-0': props.accentColor,\n }\"\n ></div>\n </tr>\n <tr\n v-if=\"isRowExpandable\"\n class=\"stash-table-row stash-table-row--expandable\"\n :class=\"classes['row-expansion']\"\n data-test=\"stash-table-row|expansion-row\"\n >\n <Expand\n is=\"td\"\n :id=\"rowId\"\n class=\"tw-border-none tw-bg-white tw-px-3 tw-py-0\"\n data-test=\"stash-table-row|expansion-cell\"\n :class=\"classes['row-expansion-content']\"\n :colspan=\"childCellCount\"\n :is-expanded=\"isRowExpanded\"\n >\n <!-- @slot expansion, for expandable content -->\n <slot name=\"expansion\"></slot>\n </Expand>\n </tr>\n</template>\n\n<style module>\n .root {\n border: 0;\n }\n\n /**\n * Only takes effect when hideExpansionDivider is true, for a softer collapse transition as the bottom border re-appears\n */\n .is-expandable > td {\n border-bottom-color: var(--color-ice-200);\n transition: border-bottom-color 0.5s;\n }\n\n .root--hidden-divider.is-expanded > td {\n transition: border-bottom-color 0s;\n /**\n * Removes the grey cell background for 'control' cells at lower breakpoints, letting the white of the tr come through.\n */\n border-bottom-color: transparent;\n }\n\n .layout--scroll {\n border-radius: 0;\n box-shadow: none !important;\n margin: 0;\n }\n\n .layout--scroll:last-of-type {\n border: 0;\n }\n\n .layout--scroll:last-of-type td {\n border-bottom: none;\n }\n\n .layout--stack {\n align-items: stretch;\n background-color: var(--color-white);\n column-gap: var(--grid-gutter);\n display: grid;\n grid-template-columns: repeat(12, 1fr);\n position: relative;\n row-gap: var(--grid-gutter);\n }\n\n .layout--stack:not(.is-expanded) {\n border-radius: theme('borderRadius.DEFAULT');\n transition: border-radius 0.5s;\n }\n\n .layout--stack.is-expanded {\n border-top-left-radius: theme('borderRadius.DEFAULT');\n border-top-right-radius: theme('borderRadius.DEFAULT');\n }\n\n .row-selection-checkbox label {\n padding: 0;\n vertical-align: middle;\n }\n\n .layout--stack .row-control-cell {\n display: flex;\n align-items: center;\n min-width: 0;\n }\n\n /* On mobile, display controls on their own row, pushing other cells below */\n .row-control-cell + :not(.row-control-cell) {\n grid-column-start: 1;\n }\n\n .row-expansion-content {\n box-shadow: inset 0 -1px 0 0 var(--color-ice-200);\n }\n\n .layout--stack + .row-expansion,\n .layout--stack + .row-expansion > .row-expansion-content {\n display: block;\n }\n\n .layout--stack + .row-expansion > .row-expansion-content {\n border-top: 1px solid var(--color-ice-200);\n border-bottom-left-radius: theme('borderRadius.DEFAULT');\n border-bottom-right-radius: theme('borderRadius.DEFAULT');\n margin-bottom: theme('spacing.6');\n }\n\n .layout--stack.root--hidden-divider + .row-expansion > .row-expansion-content {\n border-top: none;\n }\n\n /* On large screens, match the styles for layout-SCROLL */\n @media screen('lg') {\n .layout--stack {\n align-items: unset;\n background-color: unset;\n border: 0;\n border-bottom: 1px solid var(--color-ice-200);\n border-radius: 0;\n box-shadow: none;\n column-gap: unset;\n display: table-row;\n grid-template-columns: unset;\n row-gap: unset;\n }\n\n .layout--stack:last-of-type {\n border-bottom: 0;\n }\n\n .layout--stack .row-control-cell {\n display: table-cell;\n }\n\n .layout--stack + .row-expansion {\n display: table-row;\n }\n\n .layout--stack + .row-expansion > .row-expansion-content {\n border-top: unset;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n display: table-cell;\n margin-bottom: unset;\n }\n\n .row-control-cell + :not(.row-control-cell) {\n grid-column-start: unset;\n }\n }\n</style>\n"],"names":["props","__props","emit","__emit","attrs","useAttrs","classes","useCssModule","slots","_useSlots","tableInjection","inject","TABLE_INJECTION","hasActions","hasCustomExpandToggle","isExpandable","isSelectable","layout","isRowExpanded","ref","isRowExpandable","computed","childCellCount","count","toggleExpand","rowId","uniqueId","value","isExpanded","watch","_createElementVNode","_mergeProps","_unref","hideExpansionDivider","_createBlock","TableCell","_normalizeClass","_createVNode","Checkbox","t","_cache","$event","ChevronToggle","_renderSlot","_ctx","_createElementBlock","Expand"],"mappings":"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"}
1
+ {"version":3,"file":"TableRow.js","sources":["../src/components/TableRow/TableRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, inject, ref, useAttrs, useCssModule, watch } from 'vue';\n\n import { StashCommonColor } from '../../../types/colors';\n import { t } from '../../locale';\n import Checkbox, { CheckboxProps } from '../Checkbox/Checkbox.vue';\n import ChevronToggle from '../ChevronToggle/ChevronToggle.vue';\n import Expand from '../Expand/Expand.vue';\n import { TABLE_INJECTION } from '../Table/Table.vue';\n import TableCell from '../TableCell/TableCell.vue';\n\n defineOptions({ inheritAttrs: false });\n\n export interface TableRowProps {\n hideExpansionDivider?: boolean;\n isExpanded?: boolean;\n isSelected?: boolean;\n isSelectDisabled?: boolean;\n /**\n * The accent color for the TableRow.\n */\n accentColor?: StashCommonColor;\n }\n\n const props = withDefaults(defineProps<TableRowProps>(), {\n /**\n * If true, hides the divider between the parent row and expansion row\n */\n hideExpansionDivider: false,\n isExpanded: false,\n isSelected: false,\n isSelectDisabled: false,\n accentColor: undefined,\n });\n\n const emit = defineEmits<{\n 'update:isSelected': [isChecked: CheckboxProps['checked']];\n 'update:isExpanded': [isExpanded: boolean];\n }>();\n\n const attrs = useAttrs();\n const classes = useCssModule();\n const slots = defineSlots<{\n default(props: { isRowExpanded?: boolean; toggleExpand: (value?: boolean) => void }): unknown[];\n expansion(): unknown[];\n }>();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n\n if (!tableInjection) {\n throw new Error('TableRow must be used within a Table component');\n }\n\n const { hasActions, hasCustomExpandToggle, isExpandable, isSelectable, layout } = tableInjection;\n\n const isRowExpanded = ref(props.isExpanded);\n const isRowExpandable = computed(() => isExpandable.value && !!slots.expansion);\n\n const childCellCount = computed(() => {\n let count = slots.default?.({ toggleExpand }).length ?? 0;\n\n if (isSelectable.value) {\n count += 1;\n }\n\n if (isRowExpandable.value && !hasCustomExpandToggle.value) {\n count += 1;\n }\n\n return count;\n });\n const rowId = uniqueId('table-row-');\n\n function toggleExpand(value?: boolean) {\n if (!isRowExpandable.value) {\n throw new Error('Cannot call `toggleExpand` on a non-expandable row. Provide an `expansion` slot.');\n }\n\n const isExpanded = typeof value === 'boolean' ? value : !isRowExpanded.value;\n\n isRowExpanded.value = isExpanded;\n emit('update:isExpanded', isExpanded);\n }\n\n watch(\n () => props.isExpanded,\n () => toggleExpand(props.isExpanded),\n );\n</script>\n\n<template>\n <tr\n class=\"stash-table-row\"\n :class=\"[\n classes.root,\n classes[`layout--${layout}`],\n {\n [classes['is-expandable']]: isRowExpandable,\n [classes['is-expanded']]: isRowExpanded,\n [classes['root--hidden-divider']]: hideExpansionDivider,\n 'tw-p-gutter': layout === 'stack',\n 'tw-mb-6 tw-shadow lg:tw-mb-0 lg:tw-shadow-none': layout === 'stack' && !isRowExpandable,\n 'tw-pt-[60px]': hasActions && layout === 'stack' && !isSelectable,\n 'stash-table-row--accent': props.accentColor,\n 'tw-relative': props.accentColor,\n },\n ]\"\n data-test=\"stash-table-row\"\n v-bind=\"attrs\"\n >\n <TableCell\n v-if=\"isSelectable\"\n is-control\n class=\"stash-table-row__selection-cell tw-min-w-[48px]\"\n :class=\"classes['row-control-cell']\"\n data-test=\"stash-table-row|selection-cell\"\n >\n <Checkbox\n :class=\"classes['row-selection-checkbox']\"\n :checked=\"props.isSelected\"\n :disabled=\"props.isSelectDisabled\"\n :title=\"t('ll.select.self')\"\n @update:checked=\"emit('update:isSelected', $event)\"\n />\n </TableCell>\n <TableCell\n v-if=\"isRowExpandable && !hasCustomExpandToggle\"\n class=\"stash-table-row__toggle-expansion-cell tw-px-0\"\n data-test=\"stash-table-row|custom-expansion-cell\"\n is-control\n :class=\"classes['row-control-cell']\"\n >\n <ChevronToggle\n :aria-controls=\"rowId\"\n :aria-label=\"isRowExpanded ? t('ll.table.collapseRow') : t('ll.table.expandRow')\"\n :direction=\"isRowExpanded ? 'up' : 'down'\"\n :is-expanded=\"isRowExpanded\"\n @click=\"toggleExpand\"\n />\n </TableCell>\n <!-- @slot default -->\n <slot :is-row-expanded=\"isRowExpanded\" :toggle-expand=\"toggleExpand\"></slot>\n <!-- Displays a 4px accent on the left of the table row -->\n <div\n v-if=\"props.accentColor\"\n data-test=\"stash-table-row|accent\"\n :class=\"{\n 'tw-absolute': props.accentColor,\n [`tw-bg-${props.accentColor}`]: props.accentColor,\n 'tw-block': props.accentColor,\n 'tw-h-full': props.accentColor,\n 'tw-w-1': props.accentColor,\n 'tw-top-0': props.accentColor,\n 'tw-left-0': props.accentColor,\n }\"\n ></div>\n </tr>\n <tr\n v-if=\"isRowExpandable\"\n class=\"stash-table-row stash-table-row--expandable\"\n :class=\"classes['row-expansion']\"\n data-test=\"stash-table-row|expansion-row\"\n >\n <Expand\n is=\"td\"\n :id=\"rowId\"\n class=\"tw-border-none tw-bg-white tw-px-3 tw-py-0\"\n data-test=\"stash-table-row|expansion-cell\"\n :class=\"classes['row-expansion-content']\"\n :colspan=\"childCellCount\"\n :is-expanded=\"isRowExpanded\"\n >\n <!-- @slot expansion, for expandable content -->\n <slot name=\"expansion\"></slot>\n </Expand>\n </tr>\n</template>\n\n<style module>\n .root {\n border: 0;\n }\n\n /**\n * Only takes effect when hideExpansionDivider is true, for a softer collapse transition as the bottom border re-appears\n */\n .is-expandable > td {\n border-bottom-color: var(--color-ice-200);\n transition: border-bottom-color 0.5s;\n }\n\n .root--hidden-divider.is-expanded > td {\n transition: border-bottom-color 0s;\n /**\n * Removes the grey cell background for 'control' cells at lower breakpoints, letting the white of the tr come through.\n */\n border-bottom-color: transparent;\n }\n\n .layout--scroll {\n border-radius: 0;\n box-shadow: none !important;\n margin: 0;\n }\n\n .layout--scroll:last-of-type {\n border: 0;\n }\n\n .layout--scroll:last-of-type td {\n border-bottom: none;\n }\n\n .layout--stack {\n align-items: stretch;\n background-color: var(--color-white);\n column-gap: var(--grid-gutter);\n display: grid;\n grid-template-columns: repeat(12, 1fr);\n position: relative;\n row-gap: var(--grid-gutter);\n }\n\n .layout--stack:not(.is-expanded) {\n border-radius: theme('borderRadius.DEFAULT');\n transition: border-radius 0.5s;\n }\n\n .layout--stack.is-expanded {\n border-top-left-radius: theme('borderRadius.DEFAULT');\n border-top-right-radius: theme('borderRadius.DEFAULT');\n }\n\n .row-selection-checkbox label {\n padding: 0;\n vertical-align: middle;\n }\n\n .layout--stack .row-control-cell {\n display: flex;\n align-items: center;\n min-width: 0;\n }\n\n /* On mobile, display controls on their own row, pushing other cells below */\n .row-control-cell + :not(.row-control-cell) {\n grid-column-start: 1;\n }\n\n .row-expansion-content {\n box-shadow: inset 0 -1px 0 0 var(--color-ice-200);\n }\n\n .layout--stack + .row-expansion,\n .layout--stack + .row-expansion > .row-expansion-content {\n display: block;\n }\n\n .layout--stack + .row-expansion > .row-expansion-content {\n border-top: 1px solid var(--color-ice-200);\n border-bottom-left-radius: theme('borderRadius.DEFAULT');\n border-bottom-right-radius: theme('borderRadius.DEFAULT');\n margin-bottom: theme('spacing.6');\n }\n\n .layout--stack.root--hidden-divider + .row-expansion > .row-expansion-content {\n border-top: none;\n }\n\n /* On large screens, match the styles for layout-SCROLL */\n @media screen('lg') {\n .layout--stack {\n align-items: unset;\n background-color: unset;\n border: 0;\n border-bottom: 1px solid var(--color-ice-200);\n border-radius: 0;\n box-shadow: none;\n column-gap: unset;\n display: table-row;\n grid-template-columns: unset;\n row-gap: unset;\n }\n\n .layout--stack:last-of-type {\n border-bottom: 0;\n }\n\n .layout--stack .row-control-cell {\n display: table-cell;\n }\n\n .layout--stack + .row-expansion {\n display: table-row;\n }\n\n .layout--stack + .row-expansion > .row-expansion-content {\n border-top: unset;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n display: table-cell;\n margin-bottom: unset;\n }\n\n .row-control-cell + :not(.row-control-cell) {\n grid-column-start: unset;\n }\n }\n</style>\n"],"names":["props","__props","emit","__emit","attrs","useAttrs","classes","useCssModule","slots","_useSlots","tableInjection","inject","TABLE_INJECTION","hasActions","hasCustomExpandToggle","isExpandable","isSelectable","layout","isRowExpanded","ref","isRowExpandable","computed","childCellCount","count","_a","toggleExpand","rowId","uniqueId","value","isExpanded","watch"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAyBE,UAAMA,IAAQC,GAWRC,IAAOC,GAKPC,IAAQC,EAAA,GACRC,IAAUC,EAAA,GACVC,IAAQC,EAAA,GAKRC,IAAiBC,EAAOC,EAAgB,GAAG;AAEjD,QAAI,CAACF;AACH,YAAM,IAAI,MAAM,gDAAgD;AAGlE,UAAM,EAAE,YAAAG,GAAY,uBAAAC,GAAuB,cAAAC,GAAc,cAAAC,GAAc,QAAAC,MAAWP,GAE5EQ,IAAgBC,EAAInB,EAAM,UAAU,GACpCoB,IAAkBC,EAAS,MAAMN,EAAa,SAAS,CAAC,CAACP,EAAM,SAAS,GAExEc,IAAiBD,EAAS,MAAM;;AACpC,UAAIE,MAAQC,IAAAhB,EAAM,YAAN,gBAAAgB,EAAA,KAAAhB,GAAgB,EAAE,cAAAiB,EAAA,GAAgB,WAAU;AAExD,aAAIT,EAAa,UACfO,KAAS,IAGPH,EAAgB,SAAS,CAACN,EAAsB,UAClDS,KAAS,IAGJA;AAAA,IACT,CAAC,GACKG,IAAQC,EAAS,YAAY;AAEnC,aAASF,EAAaG,GAAiB;AACrC,UAAI,CAACR,EAAgB;AACnB,cAAM,IAAI,MAAM,kFAAkF;AAGpG,YAAMS,IAAa,OAAOD,KAAU,YAAYA,IAAQ,CAACV,EAAc;AAEvE,MAAAA,EAAc,QAAQW,GACtB3B,EAAK,qBAAqB2B,CAAU;AAAA,IACtC;AAEA,WAAAC;AAAA,MACE,MAAM9B,EAAM;AAAA,MACZ,MAAMyB,EAAazB,EAAM,UAAU;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,27 +1,68 @@
1
1
  import { ComponentOptionsMixin } from 'vue';
2
2
  import { ComponentProvideOptions } from 'vue';
3
3
  import { DefineComponent } from 'vue';
4
+ import { ExtractPropTypes } from 'vue';
5
+ import { PropType } from 'vue';
4
6
  import { PublicProps } from 'vue';
5
7
 
8
+ declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
9
+
10
+ declare type __VLS_Prettify<T> = {
11
+ [K in keyof T]: T[K];
12
+ } & {};
13
+
14
+ declare type __VLS_TypePropsToRuntimeProps<T> = {
15
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
16
+ type: PropType<__VLS_NonUndefinedable<T[K]>>;
17
+ } : {
18
+ type: PropType<T[K]>;
19
+ required: true;
20
+ };
21
+ };
22
+
23
+ declare type __VLS_WithDefaults<P, D> = {
24
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
25
+ default: D[K];
26
+ }> : P[K];
27
+ };
28
+
6
29
  declare type __VLS_WithTemplateSlots<T, S> = T & {
7
30
  new (): {
8
31
  $slots: S;
9
32
  };
10
33
  };
11
34
 
12
- declare const _default: __VLS_WithTemplateSlots<DefineComponent<TableRowProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
13
- "update:isSelected": (isChecked: boolean | (string | number)[]) => any;
14
- "update:isExpanded": (isExpanded: boolean) => any;
15
- }, string, PublicProps, Readonly<TableRowProps> & Readonly<{
35
+ declare const _default: __VLS_WithTemplateSlots<DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TableRowProps>, {
36
+ /**
37
+ * If true, hides the divider between the parent row and expansion row
38
+ */
39
+ hideExpansionDivider: boolean;
40
+ isExpanded: boolean;
41
+ isSelected: boolean;
42
+ isSelectDisabled: boolean;
43
+ accentColor: undefined;
44
+ }>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
45
+ "update:isSelected": (isChecked: boolean | (string | number)[]) => void;
46
+ "update:isExpanded": (isExpanded: boolean) => void;
47
+ }, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TableRowProps>, {
48
+ /**
49
+ * If true, hides the divider between the parent row and expansion row
50
+ */
51
+ hideExpansionDivider: boolean;
52
+ isExpanded: boolean;
53
+ isSelected: boolean;
54
+ isSelectDisabled: boolean;
55
+ accentColor: undefined;
56
+ }>>> & Readonly<{
16
57
  "onUpdate:isSelected"?: ((isChecked: boolean | (string | number)[]) => any) | undefined;
17
58
  "onUpdate:isExpanded"?: ((isExpanded: boolean) => any) | undefined;
18
59
  }>, {
19
- accentColor: "ice-700" | "white" | "black" | "red-500" | "orange-500" | "blue-500" | "green-500" | "purple-700" | "purple-500" | "purple-100" | "royal-700" | "royal-500" | "royal-100" | "blue-700" | "blue-100" | "teal-700" | "teal-500" | "teal-100" | "green-700" | "green-100" | "seafoam-700" | "seafoam-500" | "seafoam-100" | "yellow-700" | "yellow-500" | "yellow-100" | "orange-700" | "orange-100" | "red-700" | "red-100" | "ice-500" | "ice-200" | "ice-100";
20
60
  isExpanded: boolean;
21
61
  isSelected: boolean;
62
+ accentColor: "ice-700" | "purple-700" | "purple-500" | "purple-100" | "royal-700" | "royal-500" | "royal-100" | "blue-700" | "blue-500" | "blue-100" | "teal-700" | "teal-500" | "teal-100" | "green-700" | "green-500" | "green-100" | "seafoam-700" | "seafoam-500" | "seafoam-100" | "yellow-700" | "yellow-500" | "yellow-100" | "orange-700" | "orange-500" | "orange-100" | "red-700" | "red-500" | "red-100" | "ice-500" | "ice-200" | "ice-100" | "white" | "black";
22
63
  hideExpansionDivider: boolean;
23
64
  isSelectDisabled: boolean;
24
- }, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>, Readonly<{
65
+ }, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>, Readonly<{
25
66
  default(props: {
26
67
  isRowExpanded?: boolean | undefined;
27
68
  toggleExpand: (value?: boolean | undefined) => void;
@@ -77,7 +118,7 @@ declare enum StashCommonColors {
77
118
  Black = "black"
78
119
  }
79
120
 
80
- declare interface TableRowProps {
121
+ export declare interface TableRowProps {
81
122
  hideExpansionDivider?: boolean;
82
123
  isExpanded?: boolean;
83
124
  isSelected?: boolean;
package/dist/Tabs.js CHANGED
@@ -1,5 +1,5 @@
1
- import { _ as s } from "./Tabs.vue_vue_type_script_setup_true_lang-BlJVDr7o.js";
2
- import { T as c, a as f } from "./Tabs.vue_vue_type_script_setup_true_lang-BlJVDr7o.js";
1
+ import { _ as s } from "./Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js";
2
+ import { T as c, a as f } from "./Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js";
3
3
  import { _ as a } from "./_plugin-vue_export-helper-CHgC5LLL.js";
4
4
  const t = {
5
5
  "menu-tab": "_menu-tab_frbn6_2"
@@ -2,22 +2,49 @@ import { ComponentOptionsMixin } from 'vue';
2
2
  import { ComponentProvideOptions } from 'vue';
3
3
  import { ComputedRef } from 'vue';
4
4
  import { DefineComponent } from 'vue';
5
+ import { ExtractPropTypes } from 'vue';
5
6
  import { InjectionKey } from 'vue';
7
+ import { PropType } from 'vue';
6
8
  import { PublicProps } from 'vue';
7
9
 
10
+ declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
11
+
12
+ declare type __VLS_Prettify<T> = {
13
+ [K in keyof T]: T[K];
14
+ } & {};
15
+
16
+ declare type __VLS_TypePropsToRuntimeProps<T> = {
17
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
18
+ type: PropType<__VLS_NonUndefinedable<T[K]>>;
19
+ } : {
20
+ type: PropType<T[K]>;
21
+ required: true;
22
+ };
23
+ };
24
+
25
+ declare type __VLS_WithDefaults<P, D> = {
26
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
27
+ default: D[K];
28
+ }> : P[K];
29
+ };
30
+
8
31
  declare type __VLS_WithTemplateSlots<T, S> = T & {
9
32
  new (): {
10
33
  $slots: S;
11
34
  };
12
35
  };
13
36
 
14
- declare const _default: __VLS_WithTemplateSlots<DefineComponent<TabsProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
15
- "update:activeTab": (newTabValue: string) => any;
16
- }, string, PublicProps, Readonly<TabsProps> & Readonly<{
37
+ declare const _default: __VLS_WithTemplateSlots<DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TabsProps>, {
38
+ variant: TabVariant;
39
+ }>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
40
+ "update:activeTab": (newTabValue: string) => void;
41
+ }, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TabsProps>, {
42
+ variant: TabVariant;
43
+ }>>> & Readonly<{
17
44
  "onUpdate:activeTab"?: ((newTabValue: string) => any) | undefined;
18
45
  }>, {
19
46
  variant: "line" | "enclosed";
20
- }, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>, {
47
+ }, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>, {
21
48
  default?(_: {}): any;
22
49
  }>;
23
50
  export default _default;
@@ -0,0 +1,159 @@
1
+ import { defineComponent as U, useCssModule as V, ref as s, computed as f, provide as q, onMounted as J, onUpdated as R, onDeactivated as F, onBeforeUnmount as H, createElementBlock as K, openBlock as k, createElementVNode as m, normalizeClass as I, normalizeStyle as W, renderSlot as A, createBlock as Y, createCommentVNode as Z, withCtx as N, unref as h, createTextVNode as G, createVNode as P, toDisplayString as Q } from "vue";
2
+ import X from "lodash-es/debounce";
3
+ import ee from "lodash-es/uniqueId";
4
+ import { DEBOUNCE as te } from "./constants.js";
5
+ import { t as oe } from "./locale.js";
6
+ import re from "./Dropdown.js";
7
+ import ae from "./Icon.js";
8
+ const se = Object.freeze({
9
+ key: Symbol("TABS_INJECTION_KEY")
10
+ });
11
+ var M = /* @__PURE__ */ ((i) => (i.Line = "line", i.Enclosed = "enclosed", i))(M || {});
12
+ const ie = {
13
+ class: "stash-tabs tw-relative",
14
+ role: "tabList",
15
+ "data-test": "stash-tabs"
16
+ }, ne = ["aria-controls", "aria-expanded", "onClick"], le = ["id"], fe = /* @__PURE__ */ U({
17
+ __name: "Tabs",
18
+ props: {
19
+ activeTab: {},
20
+ variant: { default: M.Line }
21
+ },
22
+ emits: ["update:activeTab"],
23
+ setup(i, { emit: O }) {
24
+ const B = O, d = i, D = V(), l = s(), c = s(), n = s(void 0), S = "IntersectionObserver" in window, a = s(/* @__PURE__ */ new Set()), g = s(0), E = s(), x = ee("more-dropdown-menu-"), u = s(!1), v = f({
25
+ get() {
26
+ return d.activeTab;
27
+ },
28
+ set(t) {
29
+ B("update:activeTab", t);
30
+ }
31
+ });
32
+ function $(t) {
33
+ v.value = t;
34
+ }
35
+ q(se.key, {
36
+ activeTab: f(() => v.value),
37
+ variant: f(() => d.variant),
38
+ setActiveTab: $
39
+ });
40
+ function y() {
41
+ var p, L, T;
42
+ if (!S || !l.value)
43
+ return;
44
+ const t = Array.from((p = l.value) == null ? void 0 : p.children), _ = {
45
+ root: l.value,
46
+ rootMargin: "0px",
47
+ threshold: Array.from({ length: 100 }).map((e, o) => (o + 1) / 100)
48
+ };
49
+ if (n.value = new IntersectionObserver((e) => {
50
+ e.forEach((o) => {
51
+ const r = o.target.getAttribute("id");
52
+ o.intersectionRatio > 0.94 ? a.value.has(r) && a.value.delete(r) : r && !a.value.has(r) && a.value.add(r);
53
+ });
54
+ }, _), t.forEach((e) => {
55
+ var o;
56
+ (o = n.value) == null || o.observe(e), a.value.has(e.getAttribute("id")) ? e.classList.add("tw-invisible") : e.classList.remove("tw-invisible");
57
+ }), g.value = ((T = (L = E.value) == null ? void 0 : L.$el) == null ? void 0 : T.getBoundingClientRect().width) || 0, !c.value)
58
+ return;
59
+ Array.from(c.value.children).forEach((e) => {
60
+ var r;
61
+ const o = e.firstElementChild;
62
+ if (o.className = "", e.className = "", e.classList.add(
63
+ D["menu-tab"],
64
+ "tw-flex",
65
+ "tw-items-center",
66
+ "tw-justify-between",
67
+ "tw-rounded",
68
+ "tw-text-sm",
69
+ "tw-p-1.5",
70
+ "tw-text-left",
71
+ "tw-cursor-pointer",
72
+ "tw-text-ice-700",
73
+ "hover:!tw-bg-ice-200",
74
+ "aria-disabled:tw-text-ice-500",
75
+ "aria-disabled:tw-pointer-events-none",
76
+ "aria-disabled:hover:tw-text-ice-500",
77
+ "aria-disabled:hover:tw-bg-inherit",
78
+ "aria-disabled:hover:tw-cursor-default",
79
+ "aria-selected:tw-bg-blue-100"
80
+ ), (r = e.querySelector(".stash-tabs__dropdown-selected-tab-icon")) == null || r.remove(), e.getAttribute("id") === `tab-${v.value}`) {
81
+ const b = document.createElement("span");
82
+ b.className = "stash-tabs__dropdown-selected-tab-icon", b.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" class="tw-text-blue-500 tw-w-6 tw-h-6" viewBox="0 0 24 24" fill="none"><path fill="currentColor" fill-rule="evenodd" d="M20.707 6.854 9 18.561l-5.707-5.707 1.414-1.414L9 15.733 19.293 5.44l1.414 1.414Z" clip-rule="evenodd"/></svg>', e.appendChild(b);
83
+ }
84
+ a.value.has(e.getAttribute("id")) ? e.classList.remove("tw-hidden") : e.classList.add("tw-hidden"), e.removeEventListener("click", () => {
85
+ });
86
+ });
87
+ }
88
+ const z = X(y, te.FAST, { leading: !0 });
89
+ function w() {
90
+ n.value && (n.value.disconnect(), n.value = void 0);
91
+ }
92
+ J(() => {
93
+ y();
94
+ }), R(() => {
95
+ w(), z();
96
+ }), F(() => {
97
+ w();
98
+ }), H(() => {
99
+ w();
100
+ });
101
+ function j(t) {
102
+ t(), u.value = !u.value;
103
+ }
104
+ return (t, _) => (k(), K("div", ie, [
105
+ m("ul", {
106
+ ref_key: "tabListEl",
107
+ ref: l,
108
+ style: W({
109
+ width: `calc(100% - ${g.value}px)`
110
+ }),
111
+ class: I(["stash-tabs-list tw-flex tw-items-end", {
112
+ "stash-tabs-list--line": t.variant === "line",
113
+ "stash-tabs-list--enclosed": t.variant === "enclosed",
114
+ "tw-gap-6": t.variant === "line"
115
+ }])
116
+ }, [
117
+ A(t.$slots, "default"),
118
+ a.value.size ? (k(), Y(re, {
119
+ key: 0,
120
+ ref_key: "moreDropdownEl",
121
+ ref: E,
122
+ class: "!tw-absolute tw-right-0 tw-top-0"
123
+ }, {
124
+ toggle: N(({ toggle: C }) => [
125
+ m("button", {
126
+ "aria-haspopup": "menu",
127
+ "aria-controls": h(x),
128
+ "aria-expanded": u.value,
129
+ class: I(["tw-flex tw-cursor-pointer tw-items-center tw-justify-center tw-border-solid tw-px-6 tw-py-1.5 tw-text-sm tw-font-medium tw-text-blue-500 hover:tw-text-blue-700", { "tw-border-t-4 tw-border-transparent": d.variant === "enclosed" }]),
130
+ type: "button",
131
+ onClick: (p) => j(C)
132
+ }, [
133
+ G(Q(h(oe)("ll.more")) + " ", 1),
134
+ P(ae, { name: "caret-down" })
135
+ ], 10, ne)
136
+ ]),
137
+ default: N(() => [
138
+ m("ul", {
139
+ id: h(x),
140
+ ref_key: "moreDropdownMenuEl",
141
+ ref: c,
142
+ class: "tw-space-y-1.5 tw-px-1.5 tw-pb-1.5",
143
+ role: "menu"
144
+ }, [
145
+ A(t.$slots, "default")
146
+ ], 8, le)
147
+ ]),
148
+ _: 3
149
+ }, 512)) : Z("", !0)
150
+ ], 6)
151
+ ]));
152
+ }
153
+ });
154
+ export {
155
+ se as T,
156
+ fe as _,
157
+ M as a
158
+ };
159
+ //# sourceMappingURL=Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js","sources":["../src/components/Tabs/keys.ts","../src/components/Tabs/models.ts","../src/components/Tabs/Tabs.vue"],"sourcesContent":["import { Injection } from '../../../types/utils';\nimport { TabsInjection } from './models';\n\nexport const TABS_INJECTION: Injection<TabsInjection> = Object.freeze({\n key: Symbol('TABS_INJECTION_KEY'),\n});\n","import { ComputedRef } from 'vue';\n\nexport enum TabVariant {\n Line = 'line',\n Enclosed = 'enclosed',\n}\n\nexport type TabVariants = `${TabVariant}`;\n\nexport interface TabsInjection {\n activeTab: ComputedRef<string>;\n variant: ComputedRef<TabVariants>;\n setActiveTab: (newTabValue: string) => void;\n}\n","<script lang=\"ts\">\n import { TabVariant, TabVariants } from './models';\n\n export * from './keys';\n export * from './models';\n\n export interface TabsProps {\n /**\n * The currently active tab value\n */\n activeTab: string;\n\n /**\n * Tabs variant\n */\n variant?: TabVariants;\n }\n</script>\n\n<script setup lang=\"ts\">\n import debounce from 'lodash-es/debounce';\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, onBeforeUnmount, onDeactivated, onMounted, onUpdated, provide, Ref, ref, useCssModule } from 'vue';\n\n import { DEBOUNCE } from '../../constants';\n import { t } from '../../locale';\n import Dropdown from '../Dropdown/Dropdown.vue';\n import Icon from '../Icon/Icon.vue';\n import { TABS_INJECTION } from './keys';\n\n const emit = defineEmits<{\n (e: 'update:activeTab', newTabValue: TabsProps['activeTab']): void;\n }>();\n\n const props = withDefaults(defineProps<TabsProps>(), {\n variant: TabVariant.Line,\n });\n const classes = useCssModule();\n\n const tabListEl = ref();\n const moreDropdownMenuEl = ref();\n const observer: Ref<IntersectionObserver | undefined> = ref(undefined);\n const hasIntersectionObserver = 'IntersectionObserver' in window;\n const overflowIds = ref<Set<string>>(new Set());\n const moreDropdownWidth = ref(0);\n const moreDropdownEl = ref<InstanceType<typeof Dropdown>>();\n const moreMenuId = uniqueId('more-dropdown-menu-');\n const isMoreMenuOpen = ref(false);\n\n const currentActiveTab = computed({\n get() {\n return props.activeTab;\n },\n set(nv: TabsProps['activeTab']) {\n emit('update:activeTab', nv);\n },\n });\n\n function setActiveTab(newTabValue: TabsProps['activeTab']) {\n currentActiveTab.value = newTabValue;\n }\n\n provide(TABS_INJECTION.key, {\n activeTab: computed(() => currentActiveTab.value),\n variant: computed(() => props.variant),\n setActiveTab,\n });\n\n function initObserve() {\n if (!hasIntersectionObserver) {\n return;\n }\n\n if (!tabListEl.value) {\n return;\n }\n\n const tabs = Array.from(tabListEl.value?.children as HTMLLIElement[]);\n const options = {\n root: tabListEl.value,\n rootMargin: '0px',\n threshold: Array.from({ length: 100 }).map((v, i) => (i + 1) / 100),\n };\n\n observer.value = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n const dataId = entry.target.getAttribute('id') as string;\n /**\n * Check for partial intersection.\n * Zooming out can result in ratio of approx 0.984\n * Anything higher will result in nav items disappearing\n */\n if (entry.intersectionRatio > 0.94) {\n // show tab, hide in dropdown\n if (overflowIds.value.has(dataId)) {\n overflowIds.value.delete(dataId);\n }\n } else {\n // hide tab, show in dropdown\n if (dataId && !overflowIds.value.has(dataId)) {\n overflowIds.value.add(dataId);\n }\n }\n });\n }, options);\n\n tabs.forEach((element) => {\n observer.value?.observe(element);\n if (overflowIds.value.has(element.getAttribute('id') as string)) {\n element.classList.add('tw-invisible');\n } else {\n element.classList.remove('tw-invisible');\n }\n });\n\n moreDropdownWidth.value = moreDropdownEl.value?.$el?.getBoundingClientRect().width || 0;\n\n if (!moreDropdownMenuEl.value) {\n return;\n }\n\n const dropdownList = Array.from(moreDropdownMenuEl.value.children as HTMLLIElement[]);\n dropdownList.forEach((element) => {\n const firstElementChild = element.firstElementChild as Element;\n firstElementChild.className = '';\n element.className = '';\n\n element.classList.add(\n classes['menu-tab'],\n 'tw-flex',\n 'tw-items-center',\n 'tw-justify-between',\n 'tw-rounded',\n 'tw-text-sm',\n 'tw-p-1.5',\n 'tw-text-left',\n 'tw-cursor-pointer',\n 'tw-text-ice-700',\n 'hover:!tw-bg-ice-200',\n 'aria-disabled:tw-text-ice-500',\n 'aria-disabled:tw-pointer-events-none',\n 'aria-disabled:hover:tw-text-ice-500',\n 'aria-disabled:hover:tw-bg-inherit',\n 'aria-disabled:hover:tw-cursor-default',\n 'aria-selected:tw-bg-blue-100',\n );\n\n element.querySelector('.stash-tabs__dropdown-selected-tab-icon')?.remove();\n\n if (element.getAttribute('id') === `tab-${currentActiveTab.value}`) {\n const span = document.createElement('span');\n span.className = 'stash-tabs__dropdown-selected-tab-icon';\n span.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\" class=\"tw-text-blue-500 tw-w-6 tw-h-6\" viewBox=\"0 0 24 24\" fill=\"none\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M20.707 6.854 9 18.561l-5.707-5.707 1.414-1.414L9 15.733 19.293 5.44l1.414 1.414Z\" clip-rule=\"evenodd\"/></svg>`;\n element.appendChild(span);\n }\n\n if (!overflowIds.value.has(element.getAttribute('id') as string)) {\n element.classList.add('tw-hidden');\n } else {\n element.classList.remove('tw-hidden');\n }\n\n element.removeEventListener('click', () => {});\n });\n }\n\n const debouncedInitObserve = debounce(initObserve, DEBOUNCE.FAST, { leading: true });\n\n function destroyObserver() {\n if (observer.value) {\n observer.value.disconnect();\n observer.value = undefined;\n }\n }\n\n onMounted(() => {\n initObserve();\n });\n\n onUpdated(() => {\n destroyObserver();\n debouncedInitObserve();\n });\n\n onDeactivated(() => {\n destroyObserver();\n });\n\n onBeforeUnmount(() => {\n destroyObserver();\n });\n\n function onMoreClick(toggleMoreDropdown) {\n toggleMoreDropdown();\n isMoreMenuOpen.value = !isMoreMenuOpen.value;\n }\n</script>\n\n<template>\n <div class=\"stash-tabs tw-relative\" role=\"tabList\" data-test=\"stash-tabs\">\n <ul\n ref=\"tabListEl\"\n :style=\"{\n width: `calc(100% - ${moreDropdownWidth}px)`,\n }\"\n class=\"stash-tabs-list tw-flex tw-items-end\"\n :class=\"{\n 'stash-tabs-list--line': variant === 'line',\n 'stash-tabs-list--enclosed': variant === 'enclosed',\n 'tw-gap-6': variant === 'line',\n }\"\n >\n <slot></slot>\n\n <Dropdown v-if=\"overflowIds.size\" ref=\"moreDropdownEl\" class=\"!tw-absolute tw-right-0 tw-top-0\">\n <template #toggle=\"{ toggle }\">\n <button\n aria-haspopup=\"menu\"\n :aria-controls=\"moreMenuId\"\n :aria-expanded=\"isMoreMenuOpen\"\n class=\"tw-flex tw-cursor-pointer tw-items-center tw-justify-center tw-border-solid tw-px-6 tw-py-1.5 tw-text-sm tw-font-medium tw-text-blue-500 hover:tw-text-blue-700\"\n :class=\"{ 'tw-border-t-4 tw-border-transparent': props.variant === 'enclosed' }\"\n type=\"button\"\n @click=\"onMoreClick(toggle)\"\n >\n {{ t('ll.more') }}\n <Icon name=\"caret-down\" />\n </button>\n </template>\n <template #default>\n <ul :id=\"moreMenuId\" ref=\"moreDropdownMenuEl\" class=\"tw-space-y-1.5 tw-px-1.5 tw-pb-1.5\" role=\"menu\">\n <slot></slot>\n </ul>\n </template>\n </Dropdown>\n </ul>\n </div>\n</template>\n\n<style module>\n .menu-tab > a {\n /* prevents the global link styles to overwrite the overflowed tab styles */\n &,\n &:hover,\n &:focus {\n color: inherit;\n }\n }\n</style>\n"],"names":["TABS_INJECTION","TabVariant","emit","__emit","props","__props","classes","useCssModule","tabListEl","ref","moreDropdownMenuEl","observer","hasIntersectionObserver","overflowIds","moreDropdownWidth","moreDropdownEl","moreMenuId","uniqueId","isMoreMenuOpen","currentActiveTab","computed","nv","setActiveTab","newTabValue","provide","initObserve","tabs","_a","options","v","i","entries","entry","dataId","element","_c","_b","firstElementChild","span","debouncedInitObserve","debounce","DEBOUNCE","destroyObserver","onMounted","onUpdated","onDeactivated","onBeforeUnmount","onMoreClick","toggleMoreDropdown"],"mappings":"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"}