@leaflink/stash 51.9.3 → 51.11.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 (375) hide show
  1. package/assets/icons/cloud-share.svg +1 -0
  2. package/assets/spritesheet.svg +1 -1
  3. package/dist/Accordion.js.map +1 -1
  4. package/dist/Accordion.vue.d.ts +7 -38
  5. package/dist/ActionsDropdown.js +2 -2
  6. package/dist/ActionsDropdown.js.map +1 -1
  7. package/dist/ActionsDropdown.vue.d.ts +0 -74
  8. package/dist/AddressSelect.js +56 -60
  9. package/dist/AddressSelect.js.map +1 -1
  10. package/dist/AddressSelect.vue.d.ts +8 -65
  11. package/dist/Alert.js.map +1 -1
  12. package/dist/Alert.vue.d.ts +4 -41
  13. package/dist/AppNavigationItem.js.map +1 -1
  14. package/dist/AppNavigationItem.vue.d.ts +5 -32
  15. package/dist/AppSidebar.js.map +1 -1
  16. package/dist/AppSidebar.vue.d.ts +8 -35
  17. package/dist/AppTopbar.js +1 -1
  18. package/dist/AppTopbar.js.map +1 -1
  19. package/dist/AppTopbar.vue.d.ts +4 -33
  20. package/dist/Avatar.js.map +1 -1
  21. package/dist/Avatar.vue.d.ts +5 -44
  22. package/dist/Backdrop.js.map +1 -1
  23. package/dist/Backdrop.vue.d.ts +1 -1
  24. package/dist/Badge.js.map +1 -1
  25. package/dist/Badge.vue.d.ts +6 -55
  26. package/dist/Box.vue.d.ts +3 -36
  27. package/dist/Box.vue_vue_type_script_setup_true_lang-rFnvwLVY.js.map +1 -1
  28. package/dist/Button.js.map +1 -1
  29. package/dist/Button.vue.d.ts +5 -50
  30. package/dist/ButtonGroup.js +33 -37
  31. package/dist/ButtonGroup.js.map +1 -1
  32. package/dist/ButtonGroup.vue.d.ts +6 -39
  33. package/dist/Card.js.map +1 -1
  34. package/dist/Card.vue.d.ts +5 -32
  35. package/dist/CardContent.js.map +1 -1
  36. package/dist/CardContent.vue.d.ts +1 -1
  37. package/dist/CardFooter.js.map +1 -1
  38. package/dist/CardFooter.vue.d.ts +1 -1
  39. package/dist/CardHeader.js.map +1 -1
  40. package/dist/CardHeader.vue.d.ts +2 -15
  41. package/dist/CardMedia.js.map +1 -1
  42. package/dist/CardMedia.vue.d.ts +2 -15
  43. package/dist/Carousel.js +66 -72
  44. package/dist/Carousel.js.map +1 -1
  45. package/dist/Carousel.vue.d.ts +10 -10
  46. package/dist/Checkbox.js.map +1 -1
  47. package/dist/Checkbox.vue.d.ts +8 -53
  48. package/dist/ChevronToggle.vue.d.ts +7 -34
  49. package/dist/ChevronToggle.vue_vue_type_script_setup_true_lang-Ce_qOXfR.js.map +1 -1
  50. package/dist/Chip.js.map +1 -1
  51. package/dist/Chip.vue.d.ts +10 -52
  52. package/dist/ConfirmationCodeInput.js +40 -44
  53. package/dist/ConfirmationCodeInput.js.map +1 -1
  54. package/dist/ConfirmationCodeInput.vue.d.ts +8 -43
  55. package/dist/ContextSwitcher.js.map +1 -1
  56. package/dist/ContextSwitcher.vue.d.ts +6 -41
  57. package/dist/Copy.js.map +1 -1
  58. package/dist/Copy.vue.d.ts +3 -34
  59. package/dist/CurrencyInput.js +20 -21
  60. package/dist/CurrencyInput.js.map +1 -1
  61. package/dist/CurrencyInput.vue.d.ts +125 -46
  62. package/dist/CustomRender.js.map +1 -1
  63. package/dist/DataView.js +94 -96
  64. package/dist/DataView.js.map +1 -1
  65. package/dist/DataView.keys-aSOnA4AD.js.map +1 -1
  66. package/dist/DataView.vue.d.ts +15 -57
  67. package/dist/DataViewFilters.js +127 -139
  68. package/dist/DataViewFilters.js.map +1 -1
  69. package/dist/DataViewFilters.keys-BLu07FiP.js.map +1 -1
  70. package/dist/DataViewFilters.vue.d.ts +9 -54
  71. package/dist/DataViewSortButton.js +2 -2
  72. package/dist/DataViewSortButton.js.map +1 -1
  73. package/dist/DataViewSortButton.vue.d.ts +3 -30
  74. package/dist/DataViewToolbar.js +146 -71
  75. package/dist/DataViewToolbar.js.map +1 -1
  76. package/dist/DataViewToolbar.vue.d.ts +106 -40
  77. package/dist/DatePicker.js +4524 -4636
  78. package/dist/DatePicker.js.map +1 -1
  79. package/dist/DatePicker.vue.d.ts +32 -81
  80. package/dist/DescriptionList.js.map +1 -1
  81. package/dist/DescriptionList.vue.d.ts +3 -32
  82. package/dist/DescriptionListDetail.js.map +1 -1
  83. package/dist/DescriptionListDetail.vue.d.ts +1 -1
  84. package/dist/DescriptionListGroup.js.map +1 -1
  85. package/dist/DescriptionListGroup.vue.d.ts +1 -1
  86. package/dist/DescriptionListTerm.js.map +1 -1
  87. package/dist/DescriptionListTerm.vue.d.ts +1 -1
  88. package/dist/Dialog.js.map +1 -1
  89. package/dist/Dialog.vue.d.ts +10 -53
  90. package/dist/Divider.js.map +1 -1
  91. package/dist/Dropdown.js +89 -95
  92. package/dist/Dropdown.js.map +1 -1
  93. package/dist/Dropdown.vue.d.ts +12 -48
  94. package/dist/EmptyState.js +1 -1
  95. package/dist/EmptyState.js.map +1 -1
  96. package/dist/EmptyState.vue.d.ts +5 -62
  97. package/dist/Expand.vue.d.ts +10 -40
  98. package/dist/Expand.vue_vue_type_script_setup_true_lang-CiONJfAp.js.map +1 -1
  99. package/dist/Field.vue.d.ts +4 -53
  100. package/dist/Field.vue_vue_type_script_setup_true_lang-DI6z3AE9.js.map +1 -1
  101. package/dist/FileUpload.js +72 -74
  102. package/dist/FileUpload.js.map +1 -1
  103. package/dist/FileUpload.vue.d.ts +10 -44
  104. package/dist/FilterChip.js.map +1 -1
  105. package/dist/FilterChip.vue.d.ts +6 -41
  106. package/dist/FilterDrawerItem.js +21 -21
  107. package/dist/FilterDrawerItem.js.map +1 -1
  108. package/dist/FilterDrawerItem.vue.d.ts +6 -23
  109. package/dist/FilterDropdown.js +63 -69
  110. package/dist/FilterDropdown.js.map +1 -1
  111. package/dist/FilterDropdown.vue.d.ts +122 -35
  112. package/dist/FilterSelect.js.map +1 -1
  113. package/dist/FilterSelect.vue.d.ts +4 -31
  114. package/dist/Filters.js +157 -164
  115. package/dist/Filters.js.map +1 -1
  116. package/dist/Filters.vue.d.ts +0 -2190
  117. package/dist/HttpError.js +7 -7
  118. package/dist/HttpError.js.map +1 -1
  119. package/dist/HttpError.vue.d.ts +4 -41
  120. package/dist/Icon.js +16 -15
  121. package/dist/Icon.js.map +1 -1
  122. package/dist/Icon.vue.d.ts +4 -37
  123. package/dist/IconLabel.js.map +1 -1
  124. package/dist/IconLabel.vue.d.ts +6 -41
  125. package/dist/Illustration.js +2 -2
  126. package/dist/Illustration.vue.d.ts +3 -42
  127. package/dist/{Illustration.vue_vue_type_script_setup_true_lang-BrqEF8xe.js → Illustration.vue_vue_type_script_setup_true_lang-BVzzNsRt.js} +11 -11
  128. package/dist/{Illustration.vue_vue_type_script_setup_true_lang-BrqEF8xe.js.map → Illustration.vue_vue_type_script_setup_true_lang-BVzzNsRt.js.map} +1 -1
  129. package/dist/Image.js +2 -2
  130. package/dist/Image.vue.d.ts +5 -40
  131. package/dist/{Image.vue_vue_type_script_setup_true_lang-D5u4av0_.js → Image.vue_vue_type_script_setup_true_lang-Dg2Zk2r2.js} +37 -41
  132. package/dist/{Image.vue_vue_type_script_setup_true_lang-D5u4av0_.js.map → Image.vue_vue_type_script_setup_true_lang-Dg2Zk2r2.js.map} +1 -1
  133. package/dist/InlineEdit.js.map +1 -1
  134. package/dist/InlineEdit.vue.d.ts +126 -47
  135. package/dist/Input.js.map +1 -1
  136. package/dist/Input.vue.d.ts +12 -45
  137. package/dist/InputOptions.js +66 -69
  138. package/dist/InputOptions.js.map +1 -1
  139. package/dist/InputOptions.vue.d.ts +10 -55
  140. package/dist/IntegrationIcon.js +7 -7
  141. package/dist/IntegrationIcon.js.map +1 -1
  142. package/dist/IntegrationIcon.vue.d.ts +3 -36
  143. package/dist/Label.vue.d.ts +3 -42
  144. package/dist/Label.vue_vue_type_script_setup_true_lang-CNquF3AP.js.map +1 -1
  145. package/dist/LicenseChip.js.map +1 -1
  146. package/dist/LicenseChip.vue.d.ts +3 -30
  147. package/dist/ListItem.js.map +1 -1
  148. package/dist/ListItem.vue.d.ts +0 -294
  149. package/dist/ListItemCell.js.map +1 -1
  150. package/dist/ListItemCell.vue.d.ts +0 -21
  151. package/dist/ListView.js +4 -7
  152. package/dist/ListView.js.map +1 -1
  153. package/dist/ListView.types.d.ts +0 -29
  154. package/dist/ListView.vue.d.ts +0 -5496
  155. package/dist/Loading.js +2 -2
  156. package/dist/Loading.js.map +1 -1
  157. package/dist/Loading.vue.d.ts +1 -1
  158. package/dist/Logo.js +1 -1
  159. package/dist/Logo.vue.d.ts +6 -41
  160. package/dist/{Logo.vue_vue_type_script_setup_true_lang-Dz8c98sc.js → Logo.vue_vue_type_script_setup_true_lang-Y3iE9utm.js} +17 -17
  161. package/dist/Logo.vue_vue_type_script_setup_true_lang-Y3iE9utm.js.map +1 -0
  162. package/dist/Menu.js.map +1 -1
  163. package/dist/Menu.vue.d.ts +1 -1
  164. package/dist/MenuItem.js.map +1 -1
  165. package/dist/MenuItem.vue.d.ts +1 -1
  166. package/dist/MenusPlugin-B4jpNe7x.js +12 -0
  167. package/dist/{MenusPlugin-Bk6UW6o9.js.map → MenusPlugin-B4jpNe7x.js.map} +1 -1
  168. package/dist/Metric.js.map +1 -1
  169. package/dist/Metric.vue.d.ts +3 -34
  170. package/dist/Modal.js +62 -64
  171. package/dist/Modal.js.map +1 -1
  172. package/dist/Modal.vue.d.ts +13 -60
  173. package/dist/Modals.js +17 -18
  174. package/dist/Modals.js.map +1 -1
  175. package/dist/ModalsPlugin.js +11 -11
  176. package/dist/ModalsPlugin.js.map +1 -1
  177. package/dist/Module.js.map +1 -1
  178. package/dist/Module.keys-CEsrW2f0.js.map +1 -1
  179. package/dist/Module.types-B1FfGGac.js.map +1 -1
  180. package/dist/Module.vue.d.ts +2 -29
  181. package/dist/ModuleContent.js.map +1 -1
  182. package/dist/ModuleContent.vue.d.ts +3 -3
  183. package/dist/ModuleFooter.js.map +1 -1
  184. package/dist/ModuleFooter.vue.d.ts +1 -1
  185. package/dist/ModuleHeader.js.map +1 -1
  186. package/dist/ModuleHeader.vue.d.ts +5 -39
  187. package/dist/MoreActions.js +489 -0
  188. package/dist/MoreActions.js.map +1 -0
  189. package/dist/MoreActions.vue.d.ts +203 -0
  190. package/dist/ObfuscateText.js.map +1 -1
  191. package/dist/ObfuscateText.vue.d.ts +3 -40
  192. package/dist/PageContent.js.map +1 -1
  193. package/dist/PageContent.vue.d.ts +3 -30
  194. package/dist/PageHeader.js.map +1 -1
  195. package/dist/PageHeader.vue.d.ts +6 -35
  196. package/dist/PageNavigation.js +50 -50
  197. package/dist/PageNavigation.js.map +1 -1
  198. package/dist/PageNavigation.vue.d.ts +7 -36
  199. package/dist/Paginate.js.map +1 -1
  200. package/dist/Paginate.vue.d.ts +5 -40
  201. package/dist/PlaidLink.js.map +1 -1
  202. package/dist/PlaidLink.vue.d.ts +12 -49
  203. package/dist/QuickAction.js.map +1 -1
  204. package/dist/QuickAction.vue.d.ts +3 -16
  205. package/dist/Radio.js.map +1 -1
  206. package/dist/Radio.vue.d.ts +0 -93
  207. package/dist/RadioGroup.js +94 -101
  208. package/dist/RadioGroup.js.map +1 -1
  209. package/dist/RadioGroup.vue.d.ts +116 -42
  210. package/dist/RadioNew.js +96 -99
  211. package/dist/RadioNew.js.map +1 -1
  212. package/dist/RadioNew.vue.d.ts +7 -48
  213. package/dist/RangeInput.js.map +1 -1
  214. package/dist/RangeInput.vue.d.ts +1 -1
  215. package/dist/SearchBar.js +38 -39
  216. package/dist/SearchBar.js.map +1 -1
  217. package/dist/SearchBar.vue.d.ts +127 -44
  218. package/dist/SectionHeader.js.map +1 -1
  219. package/dist/SectionHeader.vue.d.ts +6 -37
  220. package/dist/Select.js +171 -183
  221. package/dist/Select.js.map +1 -1
  222. package/dist/Select.vue.d.ts +23 -102
  223. package/dist/SelectStatus.js +38 -38
  224. package/dist/SelectStatus.js.map +1 -1
  225. package/dist/SelectStatus.vue.d.ts +227 -47
  226. package/dist/Skeleton.js.map +1 -1
  227. package/dist/Skeleton.vue.d.ts +3 -34
  228. package/dist/Step.js +44 -44
  229. package/dist/Step.js.map +1 -1
  230. package/dist/Step.vue.d.ts +4 -43
  231. package/dist/Stepper.js.map +1 -1
  232. package/dist/Stepper.vue.d.ts +9 -44
  233. package/dist/Switch.js.map +1 -1
  234. package/dist/Switch.vue.d.ts +8 -47
  235. package/dist/Tab.js +9 -9
  236. package/dist/Tab.js.map +1 -1
  237. package/dist/Tab.vue.d.ts +2 -15
  238. package/dist/TabPanel.js.map +1 -1
  239. package/dist/TabPanel.vue.d.ts +3 -30
  240. package/dist/Table.js +53 -59
  241. package/dist/Table.js.map +1 -1
  242. package/dist/Table.keys-LHQf6FEH.js.map +1 -1
  243. package/dist/Table.vue.d.ts +3 -50
  244. package/dist/TableCell.js +1 -1
  245. package/dist/TableCell.js.map +1 -1
  246. package/dist/TableCell.vue.d.ts +3 -32
  247. package/dist/TableHeaderCell.js +1 -1
  248. package/dist/TableHeaderCell.js.map +1 -1
  249. package/dist/TableHeaderCell.vue.d.ts +3 -30
  250. package/dist/TableHeaderRow.js +47 -45
  251. package/dist/TableHeaderRow.js.map +1 -1
  252. package/dist/TableHeaderRow.vue.d.ts +5 -34
  253. package/dist/TableRow.js +60 -61
  254. package/dist/TableRow.js.map +1 -1
  255. package/dist/TableRow.vue.d.ts +7 -48
  256. package/dist/Tabs.js +2 -2
  257. package/dist/Tabs.vue.d.ts +4 -31
  258. package/dist/Tabs.vue_vue_type_script_setup_true_lang-BlJVDr7o.js +78 -0
  259. package/dist/Tabs.vue_vue_type_script_setup_true_lang-BlJVDr7o.js.map +1 -0
  260. package/dist/TextEditor.js +2414 -2420
  261. package/dist/TextEditor.js.map +1 -1
  262. package/dist/TextEditor.vue.d.ts +9 -40
  263. package/dist/Textarea.js +69 -69
  264. package/dist/Textarea.js.map +1 -1
  265. package/dist/Textarea.vue.d.ts +9 -44
  266. package/dist/Thumbnail.js +1 -1
  267. package/dist/Thumbnail.js.map +1 -1
  268. package/dist/Thumbnail.vue.d.ts +4 -4
  269. package/dist/ThumbnailEmpty.js.map +1 -1
  270. package/dist/ThumbnailEmpty.vue.d.ts +1 -1
  271. package/dist/ThumbnailGroup.js.map +1 -1
  272. package/dist/ThumbnailGroup.keys-EJ4qFNhx.js.map +1 -1
  273. package/dist/ThumbnailGroup.vue.d.ts +26 -22
  274. package/dist/Timeline.js.map +1 -1
  275. package/dist/Timeline.vue.d.ts +3 -32
  276. package/dist/TimelineItem.js.map +1 -1
  277. package/dist/TimelineItem.vue.d.ts +1 -1
  278. package/dist/Toast.js.map +1 -1
  279. package/dist/Toast.vue.d.ts +3 -30
  280. package/dist/Toasts.js.map +1 -1
  281. package/dist/ToastsPlugin.js +11 -11
  282. package/dist/ToastsPlugin.js.map +1 -1
  283. package/dist/Tooltip.js +29 -30
  284. package/dist/Tooltip.js.map +1 -1
  285. package/dist/Tooltip.vue.d.ts +11 -43
  286. package/dist/colors-DDDVvqfQ.js.map +1 -1
  287. package/dist/components.css +1 -1
  288. package/dist/constants.js.map +1 -1
  289. package/dist/directives/autofocus.js.map +1 -1
  290. package/dist/directives/clickoutside.js.map +1 -1
  291. package/dist/directives/observe.js.map +1 -1
  292. package/dist/directives/sticky.js.map +1 -1
  293. package/dist/directives/tooltip.js +3 -3
  294. package/dist/directives/tooltip.js.map +1 -1
  295. package/dist/directives/viewable.js +39 -44
  296. package/dist/directives/viewable.js.map +1 -1
  297. package/dist/{floating-ui.vue-pzUuloyX.js → floating-ui.vue-CL01Y9ER.js} +2 -2
  298. package/dist/{floating-ui.vue-pzUuloyX.js.map → floating-ui.vue-CL01Y9ER.js.map} +1 -1
  299. package/dist/formatDateTime-DG7kBc2T.js +1414 -0
  300. package/dist/{formatDateTime-Dz8bXV0R.js.map → formatDateTime-DG7kBc2T.js.map} +1 -1
  301. package/dist/index-D6bxWkZ1.js.map +1 -1
  302. package/dist/index-XZqpB2_R.js +294 -0
  303. package/dist/{index-ConQ3o31.js.map → index-XZqpB2_R.js.map} +1 -1
  304. package/dist/index.js +99 -104
  305. package/dist/index.js.map +1 -1
  306. package/dist/isDefined-DzVx0B6k.js.map +1 -1
  307. package/dist/keys-BEdEsanp.js.map +1 -1
  308. package/dist/keys-C8Zfr_By.js.map +1 -1
  309. package/dist/locale.js.map +1 -1
  310. package/dist/misc-CHQs-G03.js.map +1 -1
  311. package/dist/obfuscateText.d.ts +1 -1
  312. package/dist/parseISO-wlfIB_QJ.js.map +1 -1
  313. package/dist/searchFuzzy-DBDE6jkd.js +408 -0
  314. package/dist/{searchFuzzy-DRasJ33G.js.map → searchFuzzy-DBDE6jkd.js.map} +1 -1
  315. package/dist/statusLevels-D8EgtE_L.js.map +1 -1
  316. package/dist/storage.js.map +1 -1
  317. package/dist/tailwind-base.d.ts +18 -0
  318. package/dist/tailwind-base.js +19 -9
  319. package/dist/tailwind-base.js.map +1 -1
  320. package/dist/toTimeZone-Coq1oPTt.js.map +1 -1
  321. package/dist/useConfirmBeforeClosing.js.map +1 -1
  322. package/dist/useDialog.d.ts +2 -2
  323. package/dist/useDialog.js +21 -25
  324. package/dist/useDialog.js.map +1 -1
  325. package/dist/useGoogleMaps.js +108 -110
  326. package/dist/useGoogleMaps.js.map +1 -1
  327. package/dist/useMediaQuery.d.ts +0 -6
  328. package/dist/useMediaQuery.js +11 -15
  329. package/dist/useMediaQuery.js.map +1 -1
  330. package/dist/useModals.d.ts +1 -1
  331. package/dist/useModals.js.map +1 -1
  332. package/dist/usePaginationStats-d_q39naC.js.map +1 -1
  333. package/dist/usePlaidLink.js +20 -27
  334. package/dist/usePlaidLink.js.map +1 -1
  335. package/dist/useScriptTag.js.map +1 -1
  336. package/dist/useSearch.js +13 -13
  337. package/dist/useSearch.js.map +1 -1
  338. package/dist/useSelection.js +56 -56
  339. package/dist/useSelection.js.map +1 -1
  340. package/dist/useSortable.js +54 -63
  341. package/dist/useSortable.js.map +1 -1
  342. package/dist/useStepper.d.ts +2 -2
  343. package/dist/useStepper.js +36 -40
  344. package/dist/useStepper.js.map +1 -1
  345. package/dist/useToasts.js +23 -23
  346. package/dist/useToasts.js.map +1 -1
  347. package/dist/useValidation.js +96 -100
  348. package/dist/useValidation.js.map +1 -1
  349. package/dist/utils/calculateElementOverflow.js +4 -4
  350. package/dist/utils/calculateElementOverflow.js.map +1 -1
  351. package/dist/utils/colorScheme.js +2 -2
  352. package/dist/utils/colorScheme.js.map +1 -1
  353. package/dist/utils/createQueryString.js.map +1 -1
  354. package/dist/utils/createValidDate.js.map +1 -1
  355. package/dist/utils/formatDateTime.js +1 -1
  356. package/dist/utils/getContrastingTextColor.js.map +1 -1
  357. package/dist/utils/helpers.js.map +1 -1
  358. package/dist/utils/i18n.js.map +1 -1
  359. package/dist/utils/normalizeDate.js.map +1 -1
  360. package/dist/utils/obfuscateText.js +6 -6
  361. package/dist/utils/obfuscateText.js.map +1 -1
  362. package/dist/utils/searchFuzzy.js +1 -1
  363. package/dist/utils/storage.js +23 -23
  364. package/dist/utils/storage.js.map +1 -1
  365. package/package.json +12 -13
  366. package/tailwind-base.ts +12 -1
  367. package/types/vite.d.ts +7 -0
  368. package/types/vitest.d.ts +7 -0
  369. package/dist/Logo.vue_vue_type_script_setup_true_lang-Dz8c98sc.js.map +0 -1
  370. package/dist/MenusPlugin-Bk6UW6o9.js +0 -12
  371. package/dist/Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js +0 -159
  372. package/dist/Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js.map +0 -1
  373. package/dist/formatDateTime-Dz8bXV0R.js +0 -1418
  374. package/dist/index-ConQ3o31.js +0 -128
  375. package/dist/searchFuzzy-DRasJ33G.js +0 -409
package/dist/Modal.js CHANGED
@@ -1,13 +1,13 @@
1
- import { defineComponent as R, useSlots as T, ref as d, computed as k, watch as D, onBeforeUnmount as V, createElementBlock as f, createCommentVNode as i, openBlock as n, withKeys as A, normalizeClass as r, createVNode as x, createElementVNode as g, withModifiers as L, unref as w, createBlock as j, renderSlot as m, toDisplayString as K, withCtx as F } from "vue";
2
- import q from "lodash-es/uniqueId";
3
- import { FOCUS_ELEMENTS_SELECTOR as P } from "./constants.js";
4
- import { t as H } from "./locale.js";
5
- import U from "./Backdrop.js";
6
- import I from "./Button.js";
7
- import N from "./Icon.js";
8
- import { _ as W } from "./_plugin-vue_export-helper-CHgC5LLL.js";
9
- var G = /* @__PURE__ */ ((l) => (l.Narrow = "narrow", l.Medium = "medium", l.Wide = "wide", l))(G || {}), J = /* @__PURE__ */ ((l) => (l.Center = "center", l.Left = "left", l.Right = "right", l))(J || {});
10
- const Q = ["aria-labelledby"], X = { class: "tw-flex tw-place-items-center" }, Y = ["id"], Z = { class: "stash-modal__footer__actions tw-flex tw-flex-col tw-justify-end lg:tw-flex-row" }, ee = /* @__PURE__ */ R({
1
+ import { defineComponent as M, useSlots as R, ref as d, computed as k, watch as $, onBeforeUnmount as T, createElementBlock as f, createCommentVNode as s, openBlock as i, withKeys as V, normalizeClass as n, createVNode as x, createElementVNode as g, withModifiers as D, unref as w, createBlock as L, renderSlot as m, toDisplayString as A, withCtx as j } from "vue";
2
+ import K from "lodash-es/uniqueId";
3
+ import { FOCUS_ELEMENTS_SELECTOR as q } from "./constants.js";
4
+ import { t as F } from "./locale.js";
5
+ import P from "./Backdrop.js";
6
+ import H from "./Button.js";
7
+ import I from "./Icon.js";
8
+ import { _ as U } from "./_plugin-vue_export-helper-CHgC5LLL.js";
9
+ var W = /* @__PURE__ */ ((l) => (l.Narrow = "narrow", l.Medium = "medium", l.Wide = "wide", l))(W || {}), G = /* @__PURE__ */ ((l) => (l.Center = "center", l.Left = "left", l.Right = "right", l))(G || {});
10
+ const J = ["aria-labelledby"], Q = { class: "tw-flex tw-place-items-center" }, X = ["id"], Y = { class: "stash-modal__footer__actions tw-flex tw-flex-col tw-justify-end lg:tw-flex-row" }, Z = /* @__PURE__ */ M({
11
11
  name: "ll-modal",
12
12
  __name: "Modal",
13
13
  props: {
@@ -26,12 +26,12 @@ const Q = ["aria-labelledby"], X = { class: "tw-flex tw-place-items-center" }, Y
26
26
  preventDismiss: { type: Boolean, default: !1 }
27
27
  },
28
28
  emits: ["update:open", "update:is-open", "dismiss"],
29
- setup(l, { emit: M }) {
30
- const e = l, y = M, _ = T(), u = d(), B = d(), h = d([]), b = d(), E = d(), c = d({ height: "", overflow: "" }), C = q("modal-header-"), z = k(() => !!_.actions || !!_.footer), o = k(() => e.open || e.isOpen), s = k(() => e.position === "left" || e.position === "right");
29
+ setup(l, { emit: N }) {
30
+ const e = l, y = N, _ = R(), u = d(), B = d(), h = d([]), b = d(), E = d(), c = d({ height: "", overflow: "" }), C = K("modal-header-"), z = k(() => !!_.actions || !!_.footer), o = k(() => e.open || e.isOpen), a = k(() => e.position === "left" || e.position === "right");
31
31
  function p() {
32
32
  return document.scrollingElement || document.body;
33
33
  }
34
- D(
34
+ $(
35
35
  o,
36
36
  () => {
37
37
  S(o.value ? "hide" : "show"), o.value && Object.assign(c.value, {
@@ -45,56 +45,54 @@ const Q = ["aria-labelledby"], X = { class: "tw-flex tw-place-items-center" }, Y
45
45
  });
46
46
  },
47
47
  { immediate: !0 }
48
- ), V(() => {
49
- var t;
48
+ ), T(() => {
50
49
  S("show"), Object.assign(p().style, {
51
50
  overflow: c.value.overflow,
52
51
  height: c.value.height
53
- }), document.removeEventListener("keydown", O), (t = B.value) == null || t.focus();
52
+ }), document.removeEventListener("keydown", O), B.value?.focus();
54
53
  });
55
54
  function v() {
56
55
  e.preventDismiss || (y("update:open", !1), y("update:is-open", !1), y("dismiss"));
57
56
  }
58
- D(u, () => {
59
- u.value && (B.value = document.activeElement, u.value.focus(), h.value = Array.from(u.value.querySelectorAll(P)), b.value = h.value[0], E.value = h.value[h.value.length - 1], document.addEventListener("keydown", O));
57
+ $(u, () => {
58
+ u.value && (B.value = document.activeElement, u.value.focus(), h.value = Array.from(u.value.querySelectorAll(q)), b.value = h.value[0], E.value = h.value[h.value.length - 1], document.addEventListener("keydown", O));
60
59
  });
61
60
  function O(t) {
62
- var a, $;
63
- t.key === "Tab" && (t.shiftKey && document.activeElement === b.value ? ((a = E.value) == null || a.focus(), t.preventDefault()) : document.activeElement === E.value && (($ = b.value) == null || $.focus(), t.preventDefault()));
61
+ t.key === "Tab" && (t.shiftKey && document.activeElement === b.value ? (E.value?.focus(), t.preventDefault()) : document.activeElement === E.value && (b.value?.focus(), t.preventDefault()));
64
62
  }
65
63
  function S(t) {
66
- const a = document.getElementById("launcher");
67
- !a || !a.parentElement || (a.parentElement.style.display = t === "show" ? "block" : "none");
64
+ const r = document.getElementById("launcher");
65
+ !r || !r.parentElement || (r.parentElement.style.display = t === "show" ? "block" : "none");
68
66
  }
69
- return (t, a) => o.value ? (n(), f("div", {
67
+ return (t, r) => o.value ? (i(), f("div", {
70
68
  key: 0,
71
69
  ref_key: "rootRef",
72
70
  ref: u,
73
- class: r(["stash-modal tw-fixed tw-inset-0", {
71
+ class: n(["stash-modal tw-fixed tw-inset-0", {
74
72
  "tw-invisible tw-z-behind": !o.value,
75
73
  "tw-visible tw-z-modal": o.value,
76
74
  "lg:tw-flex lg:tw-flex-col lg:tw-items-center lg:tw-justify-center": e.position === "center",
77
- "tw-overflow-y-auto": !e.scrollable && !s.value,
78
- "tw-overflow-y-hidden": s.value
75
+ "tw-overflow-y-auto": !e.scrollable && !a.value,
76
+ "tw-overflow-y-hidden": a.value
79
77
  }]),
80
78
  "data-test": "ll-modal",
81
79
  tabindex: "0",
82
- onKeydown: A(v, ["esc"])
80
+ onKeydown: V(v, ["esc"])
83
81
  }, [
84
- x(U, {
82
+ x(P, {
85
83
  class: "stash-modal__backdrop",
86
- onClick: L(v, ["stop"])
84
+ onClick: D(v, ["stop"])
87
85
  }),
88
86
  g("div", {
89
87
  "aria-modal": "true",
90
88
  role: "dialog",
91
89
  "aria-labelledby": w(C),
92
- class: r(["stash-modal__dialog tw-relative tw-flex tw-h-screen tw-w-full tw-flex-col lg:tw-shadow-3xl", [
90
+ class: n(["stash-modal__dialog tw-relative tw-flex tw-h-screen tw-w-full tw-flex-col lg:tw-shadow-3xl", [
93
91
  `stash-modal__dialog--size-${e.size}`,
94
92
  `stash-modal__dialog--position-${e.position}`,
95
93
  {
96
94
  "stash-modal__dialog--is-open": o.value,
97
- "stash-modal__dialog--is-drawer": s.value,
95
+ "stash-modal__dialog--is-drawer": a.value,
98
96
  "stash-modal__dialog--is-contrast": e.contrast,
99
97
  "stash-modal__dialog--is-scrollable": e.scrollable,
100
98
  "lg:tw-w-[360px]": e.size === "narrow",
@@ -102,37 +100,37 @@ const Q = ["aria-labelledby"], X = { class: "tw-flex tw-place-items-center" }, Y
102
100
  "lg:tw-w-[960px]": e.size === "wide",
103
101
  "lg:tw-my-0 lg:tw-h-auto lg:tw-max-h-[90vh]": e.position === "center",
104
102
  // tw-absolute causing this to break when items in bottom of container get focus
105
- "lg:tw-fixed lg:tw-h-screen": s.value,
103
+ "lg:tw-fixed lg:tw-h-screen": a.value,
106
104
  "lg:tw-left-0": e.position === "left",
107
105
  "lg:tw-right-0": e.position === "right"
108
106
  }
109
107
  ]]),
110
- onClick: a[0] || (a[0] = L(() => {
108
+ onClick: r[0] || (r[0] = D(() => {
111
109
  }, ["stop"]))
112
110
  }, [
113
- e.hideHeader ? i("", !0) : (n(), f("header", {
111
+ e.hideHeader ? s("", !0) : (i(), f("header", {
114
112
  key: 0,
115
113
  "data-test": "stash-modal__header",
116
- class: r(["stash-modal__header tw-grid tw-h-12 tw-place-items-center tw-bg-purple-500", { "lg:tw-rounded-t": !s.value }])
114
+ class: n(["stash-modal__header tw-grid tw-h-12 tw-place-items-center tw-bg-purple-500", { "lg:tw-rounded-t": !a.value }])
117
115
  }, [
118
- g("div", X, [
116
+ g("div", Q, [
119
117
  m(t.$slots, "headerAction", {}, void 0, !0)
120
118
  ]),
121
- e.title ? (n(), f("h3", {
119
+ e.title ? (i(), f("h3", {
122
120
  key: 0,
123
121
  id: w(C),
124
122
  class: "tw-m-0 tw-flex-1 tw-leading-6 tw-text-white"
125
- }, K(e.title), 9, Y)) : i("", !0),
126
- e.hideClose ? i("", !0) : (n(), j(I, {
123
+ }, A(e.title), 9, X)) : s("", !0),
124
+ e.hideClose ? s("", !0) : (i(), L(H, {
127
125
  key: 1,
128
126
  icon: "",
129
127
  "data-test": "ll-modal-close",
130
- title: w(H)("ll.closeModal"),
128
+ title: w(F)("ll.closeModal"),
131
129
  type: "button",
132
130
  onClick: v
133
131
  }, {
134
- default: F(() => [
135
- x(N, {
132
+ default: j(() => [
133
+ x(I, {
136
134
  class: "tw-text-white",
137
135
  name: "close"
138
136
  })
@@ -140,37 +138,37 @@ const Q = ["aria-labelledby"], X = { class: "tw-flex tw-place-items-center" }, Y
140
138
  _: 1
141
139
  }, 8, ["title"]))
142
140
  ], 2)),
143
- !e.hideClose && e.hideHeader ? (n(), j(I, {
141
+ !e.hideClose && e.hideHeader ? (i(), L(H, {
144
142
  key: 1,
145
143
  class: "tw-absolute tw-right-0 tw-top-0 tw-z-10",
146
144
  icon: "",
147
145
  "data-test": "ll-modal-close",
148
146
  type: "button",
149
- title: w(H)("ll.closeModal"),
147
+ title: w(F)("ll.closeModal"),
150
148
  onClick: v
151
149
  }, {
152
- default: F(() => [
153
- x(N, {
154
- class: r(["tw-drop-shadow-md", [e.closeButtonColorClass]]),
150
+ default: j(() => [
151
+ x(I, {
152
+ class: n(["tw-drop-shadow-md", [e.closeButtonColorClass]]),
155
153
  name: "close"
156
154
  }, null, 8, ["class"])
157
155
  ]),
158
156
  _: 1
159
- }, 8, ["title"])) : i("", !0),
160
- w(_)["featured-content"] ? (n(), f("div", {
157
+ }, 8, ["title"])) : s("", !0),
158
+ w(_)["featured-content"] ? (i(), f("div", {
161
159
  key: 2,
162
- class: r(["stash-modal__featured-content tw-relative", {
160
+ class: n(["stash-modal__featured-content tw-relative", {
163
161
  "tw-rounded-t": e.hideHeader
164
162
  }])
165
163
  }, [
166
164
  m(t.$slots, "featured-content", {}, void 0, !0)
167
- ], 2)) : i("", !0),
165
+ ], 2)) : s("", !0),
168
166
  g("div", {
169
- class: r(["stash-modal__body tw-flex-1 tw-overflow-y-auto", [
167
+ class: n(["stash-modal__body tw-flex-1 tw-overflow-y-auto", [
170
168
  {
171
169
  "tw-p-3 lg:tw-p-6": !e.disableBodyPadding,
172
- "lg:tw-overflow-y-visible": !e.scrollable && !s.value,
173
- "lg:tw-rounded-b": !z.value && !s.value,
170
+ "lg:tw-overflow-y-visible": !e.scrollable && !a.value,
171
+ "lg:tw-rounded-b": !z.value && !a.value,
174
172
  "tw-bg-white": !e.contrast,
175
173
  "tw-bg-ice-200": e.contrast
176
174
  }
@@ -179,23 +177,23 @@ const Q = ["aria-labelledby"], X = { class: "tw-flex tw-place-items-center" }, Y
179
177
  }, [
180
178
  m(t.$slots, "default", {}, void 0, !0)
181
179
  ], 2),
182
- z.value ? (n(), f("footer", {
180
+ z.value ? (i(), f("footer", {
183
181
  key: 3,
184
- class: r(["stash-modal__footer tw-border-t tw-border-ice-500 tw-bg-ice-100 tw-p-3 lg:tw-p-6", { "lg:tw-rounded-b": !s.value }])
182
+ class: n(["stash-modal__footer tw-border-t tw-border-ice-500 tw-bg-ice-100 tw-p-3 lg:tw-p-6", { "lg:tw-rounded-b": !a.value }])
185
183
  }, [
186
184
  m(t.$slots, "footer", {}, () => [
187
- g("div", Z, [
185
+ g("div", Y, [
188
186
  m(t.$slots, "actions", {}, void 0, !0)
189
187
  ])
190
188
  ], !0)
191
- ], 2)) : i("", !0)
192
- ], 10, Q)
193
- ], 34)) : i("", !0);
189
+ ], 2)) : s("", !0)
190
+ ], 10, J)
191
+ ], 34)) : s("", !0);
194
192
  }
195
- }), de = /* @__PURE__ */ W(ee, [["__scopeId", "data-v-fb435673"]]);
193
+ }), re = /* @__PURE__ */ U(Z, [["__scopeId", "data-v-fb435673"]]);
196
194
  export {
197
- J as ModalPosition,
198
- G as ModalSize,
199
- de as default
195
+ G as ModalPosition,
196
+ W as ModalSize,
197
+ re as default
200
198
  };
201
199
  //# sourceMappingURL=Modal.js.map
package/dist/Modal.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sources":["../src/components/Modal/Modal.types.ts","../src/components/Modal/Modal.vue"],"sourcesContent":["export enum ModalSize {\n Narrow = 'narrow',\n Medium = 'medium',\n Wide = 'wide',\n}\n\nexport type ModalSizes = `${ModalSize}`;\n\nexport enum ModalPosition {\n Center = 'center',\n Left = 'left',\n Right = 'right',\n}\n\nexport type ModalPositions = `${ModalPosition}`;\n","<script lang=\"ts\">\n import { ModalPositions, ModalSizes } from './Modal.types';\n\n export * from './Modal.types';\n\n export interface ModalProps {\n /**\n * Hides the \"close\" button\n */\n hideClose?: boolean;\n\n /**\n * Opens the modal when truthy; hides the modal when falsy.\n * @deprecated Use `isOpen` instead\n */\n open?: boolean;\n\n /**\n * Opens the modal when truthy; hides the modal when falsy.\n */\n isOpen?: boolean;\n\n /**\n * Use v-model:is-open or :is-open instead of :model-value and v-model.\n * @deprecated\n */\n modelValue?: boolean;\n\n /**\n * Sets a preset max-width on the modal.\n * Options: default (648px), narrow (360px), wide (960px)\n */\n size?: ModalSizes;\n\n /**\n * Should the modal be scrollable within the content area. This prop is treated as `true` when the `position` prop is set to \"left\" or \"right\".\n */\n scrollable?: boolean;\n\n /**\n * Gives the modal body have a light gray background\n */\n contrast?: boolean;\n\n /**\n * Text to display in the modal header\n */\n title?: string;\n\n /**\n * Disables the default padding in the modal body.\n */\n disableBodyPadding?: boolean;\n\n /**\n * The position on the screen to display the modal.\n */\n position?: ModalPositions;\n\n /**\n * Hide the header. Typically used with the featuredContent slot to display a graphic and create a \"promo\" modal.\n */\n hideHeader?: boolean;\n\n /**\n * Add classes to the close button. This can be used with the hideHeader prop and featuredContent slot to\n * accommodate images with different color backgrounds.\n */\n closeButtonColorClass?: string;\n\n /**\n * Prevents the modal from being dismissed by clicking the backdrop or pressing the escape key.\n * Example: There are in-flight api requests and you do not want the modal to close until they are done.\n */\n preventDismiss?: boolean;\n }\n</script>\n\n<script setup lang=\"ts\">\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, onBeforeUnmount, ref, useSlots, watch } from 'vue';\n\n import { FOCUS_ELEMENTS_SELECTOR } from '../../constants';\n import { t } from '../../locale';\n import Backdrop from '../Backdrop/Backdrop.vue';\n import Button from '../Button/Button.vue';\n import Icon from '../Icon/Icon.vue';\n\n defineOptions({ name: 'll-modal' });\n\n const props = withDefaults(defineProps<ModalProps>(), {\n hideClose: false,\n open: false,\n isOpen: false,\n modelValue: false,\n size: 'medium',\n scrollable: false,\n contrast: false,\n title: '',\n position: 'center',\n hideHeader: false,\n closeButtonColorClass: 'tw-text-white/50',\n preventDismiss: false,\n });\n\n const emit = defineEmits<{\n /**\n * @deprecated Use the `update:is-open` event instead\n */\n (e: 'update:open', isOpen?: boolean): void;\n (e: 'update:is-open', isOpen?: boolean): void;\n (e: 'dismiss'): void;\n }>();\n\n const slots = useSlots();\n\n const rootRef = ref<HTMLElement>();\n const lastExternalFocusedElement = ref<HTMLElement>();\n const focusElements = ref<HTMLElement[]>([]);\n const firstFocusElement = ref<HTMLElement>();\n const lastFocusElement = ref<HTMLElement>();\n const initialPageScrollingElementStyle = ref({ height: '', overflow: '' });\n const headerId = uniqueId('modal-header-');\n const hasFooterContent = computed(() => !!slots.actions || !!slots.footer);\n const isModalOpen = computed(() => props.open || props.isOpen);\n const isDrawer = computed(() => props.position === 'left' || props.position === 'right');\n\n function getPageScrollingElement() {\n return (document.scrollingElement || document.body) as HTMLElement;\n }\n\n watch(\n isModalOpen,\n () => {\n toggleHelpWidgetLauncher(isModalOpen.value ? 'hide' : 'show');\n\n if (isModalOpen.value) {\n Object.assign(initialPageScrollingElementStyle.value, {\n height: getPageScrollingElement().style.height,\n overflow: getPageScrollingElement().style.overflow,\n });\n }\n\n Object.assign(getPageScrollingElement().style, {\n overflow: isModalOpen.value ? 'hidden' : initialPageScrollingElementStyle.value.overflow, // Prevents page from scrolling when modal is open\n height: isModalOpen.value ? '100%' : initialPageScrollingElementStyle.value.height, // Ensures the backdrop covers the entire page when modal is open; see https://github.com/LeafLink/stash/pull/713#issuecomment-1184602535\n });\n },\n { immediate: true },\n );\n\n onBeforeUnmount(() => {\n toggleHelpWidgetLauncher('show');\n\n // In cases where the watchEffect for isModalOpen isn't triggered while closing/nagivating away from modal, this ensures scrolling returns to normal\n Object.assign(getPageScrollingElement().style, {\n overflow: initialPageScrollingElementStyle.value.overflow,\n height: initialPageScrollingElementStyle.value.height,\n });\n\n // Clear focus trap tab listener\n document.removeEventListener('keydown', handleTab);\n lastExternalFocusedElement.value?.focus();\n });\n\n function dismiss() {\n if (props.preventDismiss) {\n return;\n }\n emit('update:open', false);\n emit('update:is-open', false);\n emit('dismiss');\n }\n\n // This watcher ensures the Tab key cycles through focusable elements within the modal.\n watch(rootRef, () => {\n if (!rootRef.value) {\n return;\n }\n\n lastExternalFocusedElement.value = document.activeElement as HTMLElement;\n rootRef.value.focus();\n\n focusElements.value = Array.from(rootRef.value.querySelectorAll<HTMLElement>(FOCUS_ELEMENTS_SELECTOR));\n firstFocusElement.value = focusElements.value[0];\n lastFocusElement.value = focusElements.value[focusElements.value.length - 1];\n document.addEventListener('keydown', handleTab);\n });\n\n function handleTab(e) {\n if (e.key === 'Tab') {\n if (e.shiftKey && document.activeElement === firstFocusElement.value) {\n lastFocusElement.value?.focus();\n e.preventDefault();\n } else if (document.activeElement === lastFocusElement.value) {\n firstFocusElement.value?.focus();\n e.preventDefault();\n }\n }\n }\n\n /**\n * The customer support \"help widget launcher\" covers the action buttons in the Modal when the Modal uses a position value of \"right\" (for drawers).\n */\n function toggleHelpWidgetLauncher(nextState: 'show' | 'hide') {\n const launcherElement = document.getElementById('launcher');\n\n if (!launcherElement || !launcherElement.parentElement) {\n return;\n }\n\n launcherElement.parentElement.style.display = nextState === 'show' ? 'block' : 'none';\n }\n</script>\n\n<template>\n <div\n v-if=\"isModalOpen\"\n ref=\"rootRef\"\n class=\"stash-modal tw-fixed tw-inset-0\"\n :class=\"{\n 'tw-invisible tw-z-behind': !isModalOpen,\n 'tw-visible tw-z-modal': isModalOpen,\n 'lg:tw-flex lg:tw-flex-col lg:tw-items-center lg:tw-justify-center': props.position === 'center',\n 'tw-overflow-y-auto': !props.scrollable && !isDrawer,\n 'tw-overflow-y-hidden': isDrawer,\n }\"\n data-test=\"ll-modal\"\n tabindex=\"0\"\n @keydown.esc=\"dismiss\"\n >\n <Backdrop class=\"stash-modal__backdrop\" @click.stop=\"dismiss\" />\n <div\n aria-modal=\"true\"\n role=\"dialog\"\n :aria-labelledby=\"headerId\"\n class=\"stash-modal__dialog tw-relative tw-flex tw-h-screen tw-w-full tw-flex-col lg:tw-shadow-3xl\"\n :class=\"[\n `stash-modal__dialog--size-${props.size}`,\n `stash-modal__dialog--position-${props.position}`,\n {\n 'stash-modal__dialog--is-open': isModalOpen,\n 'stash-modal__dialog--is-drawer': isDrawer,\n 'stash-modal__dialog--is-contrast': props.contrast,\n 'stash-modal__dialog--is-scrollable': props.scrollable,\n 'lg:tw-w-[360px]': props.size === 'narrow',\n 'lg:tw-w-[648px]': props.size === 'medium',\n 'lg:tw-w-[960px]': props.size === 'wide',\n 'lg:tw-my-0 lg:tw-h-auto lg:tw-max-h-[90vh]': props.position === 'center',\n // tw-absolute causing this to break when items in bottom of container get focus\n 'lg:tw-fixed lg:tw-h-screen': isDrawer,\n 'lg:tw-left-0': props.position === 'left',\n 'lg:tw-right-0': props.position === 'right',\n },\n ]\"\n @click.stop\n >\n <header\n v-if=\"!props.hideHeader\"\n data-test=\"stash-modal__header\"\n class=\"stash-modal__header tw-grid tw-h-12 tw-place-items-center tw-bg-purple-500\"\n :class=\"{ 'lg:tw-rounded-t': !isDrawer }\"\n >\n <div class=\"tw-flex tw-place-items-center\">\n <!-- @slot Adds an action to the left side of the header bar. An example usage is a modal with multiple pages and a back button can be inserted here -->\n <slot name=\"headerAction\"></slot>\n </div>\n\n <h3 v-if=\"props.title\" :id=\"headerId\" class=\"tw-m-0 tw-flex-1 tw-leading-6 tw-text-white\">\n {{ props.title }}\n </h3>\n\n <Button\n v-if=\"!props.hideClose\"\n icon\n data-test=\"ll-modal-close\"\n :title=\"t('ll.closeModal')\"\n type=\"button\"\n @click=\"dismiss\"\n >\n <Icon class=\"tw-text-white\" name=\"close\" />\n </Button>\n </header>\n\n <Button\n v-if=\"!props.hideClose && props.hideHeader\"\n class=\"tw-absolute tw-right-0 tw-top-0 tw-z-10\"\n icon\n data-test=\"ll-modal-close\"\n type=\"button\"\n :title=\"t('ll.closeModal')\"\n @click=\"dismiss\"\n >\n <Icon class=\"tw-drop-shadow-md\" name=\"close\" :class=\"[props.closeButtonColorClass]\" />\n </Button>\n\n <div\n v-if=\"!!slots['featured-content']\"\n class=\"stash-modal__featured-content tw-relative\"\n :class=\"{\n 'tw-rounded-t': props.hideHeader,\n }\"\n >\n <slot name=\"featured-content\"></slot>\n </div>\n\n <div\n class=\"stash-modal__body tw-flex-1 tw-overflow-y-auto\"\n :class=\"[\n {\n 'tw-p-3 lg:tw-p-6': !props.disableBodyPadding,\n 'lg:tw-overflow-y-visible': !props.scrollable && !isDrawer,\n 'lg:tw-rounded-b': !hasFooterContent && !isDrawer,\n 'tw-bg-white': !props.contrast,\n 'tw-bg-ice-200': props.contrast,\n },\n ]\"\n data-test=\"stash-modal__body\"\n >\n <slot></slot>\n </div>\n\n <footer\n v-if=\"hasFooterContent\"\n class=\"stash-modal__footer tw-border-t tw-border-ice-500 tw-bg-ice-100 tw-p-3 lg:tw-p-6\"\n :class=\"{ 'lg:tw-rounded-b': !isDrawer }\"\n >\n <!-- @slot Overrides the whole footer section. Used for rendering custom footers with more than 2 actions. If defined, \"actions\" slot will get ignored. -->\n <slot name=\"footer\">\n <div class=\"stash-modal__footer__actions tw-flex tw-flex-col tw-justify-end lg:tw-flex-row\">\n <!-- @slot Modal footer actions, supports rendering up to 2 `<Button>` children -->\n <slot name=\"actions\"></slot>\n </div>\n </slot>\n </footer>\n </div>\n </div>\n</template>\n\n<style scoped>\n .stash-modal__header {\n grid-template-columns: 48px 1fr 48px;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(1) {\n order: 2;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(2) {\n margin-bottom: theme('spacing.3');\n order: 1;\n }\n\n @media screen('lg') {\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(1) {\n order: 1;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(2) {\n margin-bottom: 0;\n order: 2;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button + .stash-button) {\n margin-left: var(--grid-gutter);\n }\n }\n\n .stash-modal__featured-content > :deep(*) {\n border-radius: inherit;\n }\n</style>\n"],"names":["ModalSize","ModalPosition","props","__props","emit","__emit","slots","useSlots","rootRef","ref","lastExternalFocusedElement","focusElements","firstFocusElement","lastFocusElement","initialPageScrollingElementStyle","headerId","uniqueId","hasFooterContent","computed","isModalOpen","isDrawer","getPageScrollingElement","watch","toggleHelpWidgetLauncher","onBeforeUnmount","handleTab","_a","dismiss","FOCUS_ELEMENTS_SELECTOR","e","_b","nextState","launcherElement"],"mappings":"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"}
1
+ {"version":3,"file":"Modal.js","sources":["../src/components/Modal/Modal.types.ts","../src/components/Modal/Modal.vue"],"sourcesContent":["export enum ModalSize {\n Narrow = 'narrow',\n Medium = 'medium',\n Wide = 'wide',\n}\n\nexport type ModalSizes = `${ModalSize}`;\n\nexport enum ModalPosition {\n Center = 'center',\n Left = 'left',\n Right = 'right',\n}\n\nexport type ModalPositions = `${ModalPosition}`;\n","<script lang=\"ts\">\n import { ModalPositions, ModalSizes } from './Modal.types';\n\n export * from './Modal.types';\n\n export interface ModalProps {\n /**\n * Hides the \"close\" button\n */\n hideClose?: boolean;\n\n /**\n * Opens the modal when truthy; hides the modal when falsy.\n * @deprecated Use `isOpen` instead\n */\n open?: boolean;\n\n /**\n * Opens the modal when truthy; hides the modal when falsy.\n */\n isOpen?: boolean;\n\n /**\n * Use v-model:is-open or :is-open instead of :model-value and v-model.\n * @deprecated\n */\n modelValue?: boolean;\n\n /**\n * Sets a preset max-width on the modal.\n * Options: default (648px), narrow (360px), wide (960px)\n */\n size?: ModalSizes;\n\n /**\n * Should the modal be scrollable within the content area. This prop is treated as `true` when the `position` prop is set to \"left\" or \"right\".\n */\n scrollable?: boolean;\n\n /**\n * Gives the modal body have a light gray background\n */\n contrast?: boolean;\n\n /**\n * Text to display in the modal header\n */\n title?: string;\n\n /**\n * Disables the default padding in the modal body.\n */\n disableBodyPadding?: boolean;\n\n /**\n * The position on the screen to display the modal.\n */\n position?: ModalPositions;\n\n /**\n * Hide the header. Typically used with the featuredContent slot to display a graphic and create a \"promo\" modal.\n */\n hideHeader?: boolean;\n\n /**\n * Add classes to the close button. This can be used with the hideHeader prop and featuredContent slot to\n * accommodate images with different color backgrounds.\n */\n closeButtonColorClass?: string;\n\n /**\n * Prevents the modal from being dismissed by clicking the backdrop or pressing the escape key.\n * Example: There are in-flight api requests and you do not want the modal to close until they are done.\n */\n preventDismiss?: boolean;\n }\n</script>\n\n<script setup lang=\"ts\">\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, onBeforeUnmount, ref, useSlots, watch } from 'vue';\n\n import { FOCUS_ELEMENTS_SELECTOR } from '../../constants';\n import { t } from '../../locale';\n import Backdrop from '../Backdrop/Backdrop.vue';\n import Button from '../Button/Button.vue';\n import Icon from '../Icon/Icon.vue';\n\n defineOptions({ name: 'll-modal' });\n\n const props = withDefaults(defineProps<ModalProps>(), {\n hideClose: false,\n open: false,\n isOpen: false,\n modelValue: false,\n size: 'medium',\n scrollable: false,\n contrast: false,\n title: '',\n position: 'center',\n hideHeader: false,\n closeButtonColorClass: 'tw-text-white/50',\n preventDismiss: false,\n });\n\n const emit = defineEmits<{\n /**\n * @deprecated Use the `update:is-open` event instead\n */\n (e: 'update:open', isOpen?: boolean): void;\n (e: 'update:is-open', isOpen?: boolean): void;\n (e: 'dismiss'): void;\n }>();\n\n const slots = useSlots();\n\n const rootRef = ref<HTMLElement>();\n const lastExternalFocusedElement = ref<HTMLElement>();\n const focusElements = ref<HTMLElement[]>([]);\n const firstFocusElement = ref<HTMLElement>();\n const lastFocusElement = ref<HTMLElement>();\n const initialPageScrollingElementStyle = ref({ height: '', overflow: '' });\n const headerId = uniqueId('modal-header-');\n const hasFooterContent = computed(() => !!slots.actions || !!slots.footer);\n const isModalOpen = computed(() => props.open || props.isOpen);\n const isDrawer = computed(() => props.position === 'left' || props.position === 'right');\n\n function getPageScrollingElement() {\n return (document.scrollingElement || document.body) as HTMLElement;\n }\n\n watch(\n isModalOpen,\n () => {\n toggleHelpWidgetLauncher(isModalOpen.value ? 'hide' : 'show');\n\n if (isModalOpen.value) {\n Object.assign(initialPageScrollingElementStyle.value, {\n height: getPageScrollingElement().style.height,\n overflow: getPageScrollingElement().style.overflow,\n });\n }\n\n Object.assign(getPageScrollingElement().style, {\n overflow: isModalOpen.value ? 'hidden' : initialPageScrollingElementStyle.value.overflow, // Prevents page from scrolling when modal is open\n height: isModalOpen.value ? '100%' : initialPageScrollingElementStyle.value.height, // Ensures the backdrop covers the entire page when modal is open; see https://github.com/LeafLink/stash/pull/713#issuecomment-1184602535\n });\n },\n { immediate: true },\n );\n\n onBeforeUnmount(() => {\n toggleHelpWidgetLauncher('show');\n\n // In cases where the watchEffect for isModalOpen isn't triggered while closing/nagivating away from modal, this ensures scrolling returns to normal\n Object.assign(getPageScrollingElement().style, {\n overflow: initialPageScrollingElementStyle.value.overflow,\n height: initialPageScrollingElementStyle.value.height,\n });\n\n // Clear focus trap tab listener\n document.removeEventListener('keydown', handleTab);\n lastExternalFocusedElement.value?.focus();\n });\n\n function dismiss() {\n if (props.preventDismiss) {\n return;\n }\n emit('update:open', false);\n emit('update:is-open', false);\n emit('dismiss');\n }\n\n // This watcher ensures the Tab key cycles through focusable elements within the modal.\n watch(rootRef, () => {\n if (!rootRef.value) {\n return;\n }\n\n lastExternalFocusedElement.value = document.activeElement as HTMLElement;\n rootRef.value.focus();\n\n focusElements.value = Array.from(rootRef.value.querySelectorAll<HTMLElement>(FOCUS_ELEMENTS_SELECTOR));\n firstFocusElement.value = focusElements.value[0];\n lastFocusElement.value = focusElements.value[focusElements.value.length - 1];\n document.addEventListener('keydown', handleTab);\n });\n\n function handleTab(e) {\n if (e.key === 'Tab') {\n if (e.shiftKey && document.activeElement === firstFocusElement.value) {\n lastFocusElement.value?.focus();\n e.preventDefault();\n } else if (document.activeElement === lastFocusElement.value) {\n firstFocusElement.value?.focus();\n e.preventDefault();\n }\n }\n }\n\n /**\n * The customer support \"help widget launcher\" covers the action buttons in the Modal when the Modal uses a position value of \"right\" (for drawers).\n */\n function toggleHelpWidgetLauncher(nextState: 'show' | 'hide') {\n const launcherElement = document.getElementById('launcher');\n\n if (!launcherElement || !launcherElement.parentElement) {\n return;\n }\n\n launcherElement.parentElement.style.display = nextState === 'show' ? 'block' : 'none';\n }\n</script>\n\n<template>\n <div\n v-if=\"isModalOpen\"\n ref=\"rootRef\"\n class=\"stash-modal tw-fixed tw-inset-0\"\n :class=\"{\n 'tw-invisible tw-z-behind': !isModalOpen,\n 'tw-visible tw-z-modal': isModalOpen,\n 'lg:tw-flex lg:tw-flex-col lg:tw-items-center lg:tw-justify-center': props.position === 'center',\n 'tw-overflow-y-auto': !props.scrollable && !isDrawer,\n 'tw-overflow-y-hidden': isDrawer,\n }\"\n data-test=\"ll-modal\"\n tabindex=\"0\"\n @keydown.esc=\"dismiss\"\n >\n <Backdrop class=\"stash-modal__backdrop\" @click.stop=\"dismiss\" />\n <div\n aria-modal=\"true\"\n role=\"dialog\"\n :aria-labelledby=\"headerId\"\n class=\"stash-modal__dialog tw-relative tw-flex tw-h-screen tw-w-full tw-flex-col lg:tw-shadow-3xl\"\n :class=\"[\n `stash-modal__dialog--size-${props.size}`,\n `stash-modal__dialog--position-${props.position}`,\n {\n 'stash-modal__dialog--is-open': isModalOpen,\n 'stash-modal__dialog--is-drawer': isDrawer,\n 'stash-modal__dialog--is-contrast': props.contrast,\n 'stash-modal__dialog--is-scrollable': props.scrollable,\n 'lg:tw-w-[360px]': props.size === 'narrow',\n 'lg:tw-w-[648px]': props.size === 'medium',\n 'lg:tw-w-[960px]': props.size === 'wide',\n 'lg:tw-my-0 lg:tw-h-auto lg:tw-max-h-[90vh]': props.position === 'center',\n // tw-absolute causing this to break when items in bottom of container get focus\n 'lg:tw-fixed lg:tw-h-screen': isDrawer,\n 'lg:tw-left-0': props.position === 'left',\n 'lg:tw-right-0': props.position === 'right',\n },\n ]\"\n @click.stop\n >\n <header\n v-if=\"!props.hideHeader\"\n data-test=\"stash-modal__header\"\n class=\"stash-modal__header tw-grid tw-h-12 tw-place-items-center tw-bg-purple-500\"\n :class=\"{ 'lg:tw-rounded-t': !isDrawer }\"\n >\n <div class=\"tw-flex tw-place-items-center\">\n <!-- @slot Adds an action to the left side of the header bar. An example usage is a modal with multiple pages and a back button can be inserted here -->\n <slot name=\"headerAction\"></slot>\n </div>\n\n <h3 v-if=\"props.title\" :id=\"headerId\" class=\"tw-m-0 tw-flex-1 tw-leading-6 tw-text-white\">\n {{ props.title }}\n </h3>\n\n <Button\n v-if=\"!props.hideClose\"\n icon\n data-test=\"ll-modal-close\"\n :title=\"t('ll.closeModal')\"\n type=\"button\"\n @click=\"dismiss\"\n >\n <Icon class=\"tw-text-white\" name=\"close\" />\n </Button>\n </header>\n\n <Button\n v-if=\"!props.hideClose && props.hideHeader\"\n class=\"tw-absolute tw-right-0 tw-top-0 tw-z-10\"\n icon\n data-test=\"ll-modal-close\"\n type=\"button\"\n :title=\"t('ll.closeModal')\"\n @click=\"dismiss\"\n >\n <Icon class=\"tw-drop-shadow-md\" name=\"close\" :class=\"[props.closeButtonColorClass]\" />\n </Button>\n\n <div\n v-if=\"!!slots['featured-content']\"\n class=\"stash-modal__featured-content tw-relative\"\n :class=\"{\n 'tw-rounded-t': props.hideHeader,\n }\"\n >\n <slot name=\"featured-content\"></slot>\n </div>\n\n <div\n class=\"stash-modal__body tw-flex-1 tw-overflow-y-auto\"\n :class=\"[\n {\n 'tw-p-3 lg:tw-p-6': !props.disableBodyPadding,\n 'lg:tw-overflow-y-visible': !props.scrollable && !isDrawer,\n 'lg:tw-rounded-b': !hasFooterContent && !isDrawer,\n 'tw-bg-white': !props.contrast,\n 'tw-bg-ice-200': props.contrast,\n },\n ]\"\n data-test=\"stash-modal__body\"\n >\n <slot></slot>\n </div>\n\n <footer\n v-if=\"hasFooterContent\"\n class=\"stash-modal__footer tw-border-t tw-border-ice-500 tw-bg-ice-100 tw-p-3 lg:tw-p-6\"\n :class=\"{ 'lg:tw-rounded-b': !isDrawer }\"\n >\n <!-- @slot Overrides the whole footer section. Used for rendering custom footers with more than 2 actions. If defined, \"actions\" slot will get ignored. -->\n <slot name=\"footer\">\n <div class=\"stash-modal__footer__actions tw-flex tw-flex-col tw-justify-end lg:tw-flex-row\">\n <!-- @slot Modal footer actions, supports rendering up to 2 `<Button>` children -->\n <slot name=\"actions\"></slot>\n </div>\n </slot>\n </footer>\n </div>\n </div>\n</template>\n\n<style scoped>\n .stash-modal__header {\n grid-template-columns: 48px 1fr 48px;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(1) {\n order: 2;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(2) {\n margin-bottom: theme('spacing.3');\n order: 1;\n }\n\n @media screen('lg') {\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(1) {\n order: 1;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button):nth-of-type(2) {\n margin-bottom: 0;\n order: 2;\n }\n\n .stash-modal__footer__actions > :deep(.stash-button + .stash-button) {\n margin-left: var(--grid-gutter);\n }\n }\n\n .stash-modal__featured-content > :deep(*) {\n border-radius: inherit;\n }\n</style>\n"],"names":["ModalSize","ModalPosition","props","__props","emit","__emit","slots","useSlots","rootRef","ref","lastExternalFocusedElement","focusElements","firstFocusElement","lastFocusElement","initialPageScrollingElementStyle","headerId","uniqueId","hasFooterContent","computed","isModalOpen","isDrawer","getPageScrollingElement","watch","toggleHelpWidgetLauncher","onBeforeUnmount","handleTab","dismiss","FOCUS_ELEMENTS_SELECTOR","e","nextState","launcherElement","_createElementBlock","_createVNode","Backdrop","_createElementVNode","_unref","_normalizeClass","_hoisted_2","_renderSlot","_ctx","_toDisplayString","_hoisted_3","_createBlock","Button","t","Icon","_hoisted_4"],"mappings":"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"}
@@ -1,87 +1,40 @@
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';
6
4
  import { PublicProps } from 'vue';
7
5
 
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
-
29
6
  declare type __VLS_WithTemplateSlots<T, S> = T & {
30
7
  new (): {
31
8
  $slots: S;
32
9
  };
33
10
  };
34
11
 
35
- declare const _default: __VLS_WithTemplateSlots<DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<ModalProps>, {
36
- hideClose: boolean;
37
- open: boolean;
38
- isOpen: boolean;
39
- modelValue: boolean;
40
- size: string;
41
- scrollable: boolean;
42
- contrast: boolean;
43
- title: string;
44
- position: string;
45
- hideHeader: boolean;
46
- closeButtonColorClass: string;
47
- preventDismiss: boolean;
48
- }>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
49
- "update:open": (isOpen?: boolean | undefined) => void;
50
- "update:is-open": (isOpen?: boolean | undefined) => void;
51
- dismiss: () => void;
52
- }, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<ModalProps>, {
53
- hideClose: boolean;
54
- open: boolean;
55
- isOpen: boolean;
56
- modelValue: boolean;
57
- size: string;
58
- scrollable: boolean;
59
- contrast: boolean;
60
- title: string;
61
- position: string;
62
- hideHeader: boolean;
63
- closeButtonColorClass: string;
64
- preventDismiss: boolean;
65
- }>>> & Readonly<{
12
+ declare const _default: __VLS_WithTemplateSlots<DefineComponent<ModalProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
13
+ "update:open": (isOpen?: boolean | undefined) => any;
14
+ dismiss: () => any;
15
+ "update:is-open": (isOpen?: boolean | undefined) => any;
16
+ }, string, PublicProps, Readonly<ModalProps> & Readonly<{
17
+ "onUpdate:open"?: ((isOpen?: boolean | undefined) => any) | undefined;
66
18
  onDismiss?: (() => any) | undefined;
67
19
  "onUpdate:is-open"?: ((isOpen?: boolean | undefined) => any) | undefined;
68
- "onUpdate:open"?: ((isOpen?: boolean | undefined) => any) | undefined;
69
20
  }>, {
70
- title: string;
21
+ contrast: boolean;
22
+ position: "center" | "right" | "left";
71
23
  size: "medium" | "narrow" | "wide";
24
+ title: string;
72
25
  open: boolean;
73
26
  modelValue: boolean;
74
- position: "center" | "left" | "right";
75
27
  isOpen: boolean;
76
28
  hideClose: boolean;
77
29
  scrollable: boolean;
78
- contrast: boolean;
79
30
  hideHeader: boolean;
80
31
  closeButtonColorClass: string;
81
32
  preventDismiss: boolean;
82
- }, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>, {
33
+ }, {}, {}, {}, string, ComponentProvideOptions, false, {
34
+ rootRef: HTMLDivElement;
35
+ }, any>, {
83
36
  headerAction?(_: {}): any;
84
- "featured-content"?(_: {}): any;
37
+ 'featured-content'?(_: {}): any;
85
38
  default?(_: {}): any;
86
39
  footer?(_: {}): any;
87
40
  actions?(_: {}): any;
package/dist/Modals.js CHANGED
@@ -1,36 +1,35 @@
1
- import { defineComponent as d, computed as u, createBlock as s, openBlock as r, Transition as m, withCtx as a, createCommentVNode as p, resolveDynamicComponent as _, mergeProps as f, toHandlers as v, createSlots as x, renderList as M, createElementVNode as L } from "vue";
2
- import C from "./useModals.js";
3
- import { _ as h } from "./_plugin-vue_export-helper-CHgC5LLL.js";
4
- const k = ["innerHTML"], H = /* @__PURE__ */ d({
1
+ import { defineComponent as i, computed as d, createBlock as n, openBlock as s, Transition as u, withCtx as r, createCommentVNode as m, resolveDynamicComponent as p, mergeProps as _, toHandlers as f, createSlots as v, renderList as x, createElementVNode as M } from "vue";
2
+ import L from "./useModals.js";
3
+ import { _ as C } from "./_plugin-vue_export-helper-CHgC5LLL.js";
4
+ const h = ["innerHTML"], k = /* @__PURE__ */ i({
5
5
  __name: "Modals",
6
- setup(T) {
7
- const t = C(), e = u(() => t.current);
8
- function c(n) {
9
- var o;
10
- return (o = n.options) != null && o.disableDefaultListeners ? {} : {
6
+ setup(H) {
7
+ const t = L(), e = d(() => t.current);
8
+ function a(o) {
9
+ return o.options?.disableDefaultListeners ? {} : {
11
10
  dismiss: () => t.close({ index: 0 }),
12
11
  close: () => t.close({ index: 0 }),
13
12
  cancel: () => t.close({ index: 0 })
14
13
  };
15
14
  }
16
- return (n, o) => (r(), s(m, {
15
+ return (o, T) => (s(), n(u, {
17
16
  name: "modals",
18
17
  mode: "out-in"
19
18
  }, {
20
- default: a(() => [
21
- e.value ? (r(), s(_(e.value.component), f({ key: 0 }, e.value.attributes, { "is-open": !0 }, v(c(e.value))), x({ _: 2 }, [
22
- M(e.value.slots, (l, i) => ({
23
- name: i,
24
- fn: a(() => [
25
- L("div", { innerHTML: l }, null, 8, k)
19
+ default: r(() => [
20
+ e.value ? (s(), n(p(e.value.component), _({ key: 0 }, e.value.attributes, { "is-open": !0 }, f(a(e.value))), v({ _: 2 }, [
21
+ x(e.value.slots, (c, l) => ({
22
+ name: l,
23
+ fn: r(() => [
24
+ M("div", { innerHTML: c }, null, 8, h)
26
25
  ])
27
26
  }))
28
- ]), 1040)) : p("", !0)
27
+ ]), 1040)) : m("", !0)
29
28
  ]),
30
29
  _: 1
31
30
  }));
32
31
  }
33
- }), B = /* @__PURE__ */ h(H, [["__scopeId", "data-v-cf8ad226"]]);
32
+ }), B = /* @__PURE__ */ C(k, [["__scopeId", "data-v-cf8ad226"]]);
34
33
  export {
35
34
  B as default
36
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Modals.js","sources":["../src/components/Modals/Modals.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { computed, DeepReadonly } from 'vue';\n\n import useModals, { type Modal } from '../../composables/useModals/useModals';\n\n const modals = useModals();\n\n const currentModal = computed(() => modals.current);\n\n // Stupid TS version issues. Todo: remove ` | any` when TS/vite/vue deps are updated.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getListeners(modal: DeepReadonly<Modal> | any) {\n if (modal.options?.disableDefaultListeners) {\n return {};\n }\n\n return {\n dismiss: () => modals.close({ index: 0 }),\n close: () => modals.close({ index: 0 }),\n cancel: () => modals.close({ index: 0 }),\n };\n }\n</script>\n\n<template>\n <Transition name=\"modals\" mode=\"out-in\">\n <component\n :is=\"currentModal.component\"\n v-if=\"currentModal\"\n v-bind=\"currentModal.attributes\"\n :is-open=\"true\"\n v-on=\"getListeners(currentModal)\"\n >\n <template v-for=\"(value, name) in currentModal.slots\" :key=\"name\" #[name]>\n <!-- eslint-disable-next-line vue/no-v-html -->\n <div v-html=\"value\" />\n </template>\n </component>\n </Transition>\n</template>\n\n<style scoped>\n .modals-enter-active,\n .modals-leave-active {\n --swing-timing-function: cubic-bezier(0.25, 0.8, 0.5, 1); /* \"swing\" from the $transition sass map */\n transition: opacity 165ms var(--swing-timing-function);\n }\n\n .modals-enter-from,\n .modals-leave-to {\n opacity: 0;\n }\n\n .modals-enter-active :deep(.stash-modal__dialog--position-center),\n .modals-leave-active :deep(.stash-modal__dialog--position-center) {\n transition: transform 165ms var(--swing-timing-function);\n }\n\n .modals-enter-from :deep(.stash-modal__dialog--position-center),\n .modals-leave-to :deep(.stash-modal__dialog--position-center) {\n transform: translateY(20px);\n }\n\n .modals-enter-active :deep(.stash-modal__dialog--is-drawer),\n .modals-leave-active :deep(.stash-modal__dialog--is-drawer) {\n transition: transform 165ms var(--swing-timing-function);\n }\n\n .modals-enter-from :deep(.stash-modal__dialog--position-left),\n .modals-leave-to :deep(.stash-modal__dialog--position-left) {\n transform: translateX(-50px);\n }\n\n .modals-enter-from :deep(.stash-modal__dialog--position-right),\n .modals-leave-to :deep(.stash-modal__dialog--position-right) {\n transform: translateX(50px);\n }\n</style>\n"],"names":["modals","useModals","currentModal","computed","getListeners","modal","_a"],"mappings":";;;;;;AAKE,UAAMA,IAASC,EAAU,GAEnBC,IAAeC,EAAS,MAAMH,EAAO,OAAO;AAIlD,aAASI,EAAaC,GAAkC;;AAClD,cAAAC,IAAAD,EAAM,YAAN,QAAAC,EAAe,0BACV,CAAC,IAGH;AAAA,QACL,SAAS,MAAMN,EAAO,MAAM,EAAE,OAAO,GAAG;AAAA,QACxC,OAAO,MAAMA,EAAO,MAAM,EAAE,OAAO,GAAG;AAAA,QACtC,QAAQ,MAAMA,EAAO,MAAM,EAAE,OAAO,EAAG,CAAA;AAAA,MACzC;AAAA,IAAA;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Modals.js","sources":["../src/components/Modals/Modals.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n import { computed, DeepReadonly } from 'vue';\n\n import useModals, { type Modal } from '../../composables/useModals/useModals';\n\n const modals = useModals();\n\n const currentModal = computed(() => modals.current);\n\n // Stupid TS version issues. Todo: remove ` | any` when TS/vite/vue deps are updated.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function getListeners(modal: DeepReadonly<Modal> | any) {\n if (modal.options?.disableDefaultListeners) {\n return {};\n }\n\n return {\n dismiss: () => modals.close({ index: 0 }),\n close: () => modals.close({ index: 0 }),\n cancel: () => modals.close({ index: 0 }),\n };\n }\n</script>\n\n<template>\n <Transition name=\"modals\" mode=\"out-in\">\n <component\n :is=\"currentModal.component\"\n v-if=\"currentModal\"\n v-bind=\"currentModal.attributes\"\n :is-open=\"true\"\n v-on=\"getListeners(currentModal)\"\n >\n <template v-for=\"(value, name) in currentModal.slots\" :key=\"name\" #[name]>\n <!-- eslint-disable-next-line vue/no-v-html -->\n <div v-html=\"value\" />\n </template>\n </component>\n </Transition>\n</template>\n\n<style scoped>\n .modals-enter-active,\n .modals-leave-active {\n --swing-timing-function: cubic-bezier(0.25, 0.8, 0.5, 1); /* \"swing\" from the $transition sass map */\n transition: opacity 165ms var(--swing-timing-function);\n }\n\n .modals-enter-from,\n .modals-leave-to {\n opacity: 0;\n }\n\n .modals-enter-active :deep(.stash-modal__dialog--position-center),\n .modals-leave-active :deep(.stash-modal__dialog--position-center) {\n transition: transform 165ms var(--swing-timing-function);\n }\n\n .modals-enter-from :deep(.stash-modal__dialog--position-center),\n .modals-leave-to :deep(.stash-modal__dialog--position-center) {\n transform: translateY(20px);\n }\n\n .modals-enter-active :deep(.stash-modal__dialog--is-drawer),\n .modals-leave-active :deep(.stash-modal__dialog--is-drawer) {\n transition: transform 165ms var(--swing-timing-function);\n }\n\n .modals-enter-from :deep(.stash-modal__dialog--position-left),\n .modals-leave-to :deep(.stash-modal__dialog--position-left) {\n transform: translateX(-50px);\n }\n\n .modals-enter-from :deep(.stash-modal__dialog--position-right),\n .modals-leave-to :deep(.stash-modal__dialog--position-right) {\n transform: translateX(50px);\n }\n</style>\n"],"names":["modals","useModals","currentModal","computed","getListeners","modal","_createBlock","_Transition","_openBlock","_resolveDynamicComponent","_mergeProps","_toHandlers","_createSlots","_renderList","value","name","_createElementVNode","_hoisted_1"],"mappings":";;;;;;AAKE,UAAMA,IAASC,EAAA,GAETC,IAAeC,EAAS,MAAMH,EAAO,OAAO;AAIlD,aAASI,EAAaC,GAAkC;AACtD,aAAIA,EAAM,SAAS,0BACV,CAAA,IAGF;AAAA,QACL,SAAS,MAAML,EAAO,MAAM,EAAE,OAAO,GAAG;AAAA,QACxC,OAAO,MAAMA,EAAO,MAAM,EAAE,OAAO,GAAG;AAAA,QACtC,QAAQ,MAAMA,EAAO,MAAM,EAAE,OAAO,GAAG;AAAA,MAAA;AAAA,IAE3C;2BAIAM,EAaaC,GAAA;AAAA,MAbD,MAAK;AAAA,MAAS,MAAK;AAAA,IAAA;iBAC7B,MAWY;AAAA,QATJL,EAAA,SAFRM,EAAA,GAAAF,EAWYG,EAVLP,EAAA,MAAa,SAAS,GAD7BQ,EAWY,YARFR,EAAA,MAAa,YAAU,EAC9B,WAAS,GAAA,GACVS,EAAMP,EAAaF,EAAA,KAAY,CAAA,CAAA,GAAAU,EAAA,EAAA,GAAA,KAAA;AAAA,UAEGC,EAAAX,EAAA,MAAa,OAAK,CAAlCY,GAAOC;;kBAEvB,MAAsB;AAAA,cAAtBC,EAAsB,OAAA,EAAjB,WAAQF,KAAK,MAAA,GAAAG,CAAA;AAAA,YAAA;;;;;;;;"}
@@ -1,16 +1,16 @@
1
- import { createVNode as s, h as n, render as c } from "vue";
2
- import o from "./Modals.js";
3
- const m = "stash-modals-mount-node", r = {
4
- install(l, e) {
5
- const t = (e == null ? void 0 : e.mountNodeId) || m;
6
- let d = document.getElementById(t);
7
- d || (d = document.createElement("div"), d.id = t, d.dataset.test = m, document.body.appendChild(d)), e != null && e.mountNodeClass && !d.classList.contains(e.mountNodeClass) && d.classList.add(e.mountNodeClass);
8
- const a = s(n(o));
9
- a.appContext = l._context, c(a, d);
1
+ import { createVNode as a, h as m, render as l } from "vue";
2
+ import c from "./Modals.js";
3
+ const s = "stash-modals-mount-node", i = {
4
+ install(n, e) {
5
+ const o = e?.mountNodeId || s;
6
+ let t = document.getElementById(o);
7
+ t || (t = document.createElement("div"), t.id = o, t.dataset.test = s, document.body.appendChild(t)), e?.mountNodeClass && !t.classList.contains(e.mountNodeClass) && t.classList.add(e.mountNodeClass);
8
+ const d = a(m(c));
9
+ d.appContext = n._context, l(d, t);
10
10
  }
11
11
  };
12
12
  export {
13
- m as DEFAULT_MODALS_PLUGIN_NODE_ID,
14
- r as default
13
+ s as DEFAULT_MODALS_PLUGIN_NODE_ID,
14
+ i as default
15
15
  };
16
16
  //# sourceMappingURL=ModalsPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModalsPlugin.js","sources":["../src/plugins/ModalsPlugin.ts"],"sourcesContent":["import { App, createVNode, h, Plugin, render } from 'vue';\n\nimport Modals from '../components/Modals/Modals.vue';\n\nexport interface ModalsPluginOptions {\n mountNodeClass?: string;\n mountNodeId?: string;\n}\n\nexport const DEFAULT_MODALS_PLUGIN_NODE_ID = 'stash-modals-mount-node';\n\nexport default <Plugin>{\n install(app: App, options?: ModalsPluginOptions) {\n const mountNodeId = options?.mountNodeId || DEFAULT_MODALS_PLUGIN_NODE_ID;\n let mountNode = document.getElementById(mountNodeId);\n\n if (!mountNode) {\n mountNode = document.createElement('div');\n mountNode.id = mountNodeId;\n mountNode.dataset.test = DEFAULT_MODALS_PLUGIN_NODE_ID;\n document.body.appendChild(mountNode);\n }\n\n if (options?.mountNodeClass && !mountNode.classList.contains(options.mountNodeClass)) {\n mountNode.classList.add(options.mountNodeClass);\n }\n\n const vNode = createVNode(h(Modals));\n vNode.appContext = app._context;\n\n render(vNode, mountNode);\n },\n};\n"],"names":["DEFAULT_MODALS_PLUGIN_NODE_ID","ModalsPlugin","app","options","mountNodeId","mountNode","vNode","createVNode","h","Modals","render"],"mappings":";;AASO,MAAMA,IAAgC,2BAEtBC,IAAA;AAAA,EACrB,QAAQC,GAAUC,GAA+B;AACzC,UAAAC,KAAcD,KAAA,gBAAAA,EAAS,gBAAeH;AACxC,QAAAK,IAAY,SAAS,eAAeD,CAAW;AAEnD,IAAKC,MACSA,IAAA,SAAS,cAAc,KAAK,GACxCA,EAAU,KAAKD,GACfC,EAAU,QAAQ,OAAOL,GAChB,SAAA,KAAK,YAAYK,CAAS,IAGjCF,KAAA,QAAAA,EAAS,kBAAkB,CAACE,EAAU,UAAU,SAASF,EAAQ,cAAc,KACvEE,EAAA,UAAU,IAAIF,EAAQ,cAAc;AAGhD,UAAMG,IAAQC,EAAYC,EAAEC,CAAM,CAAC;AACnC,IAAAH,EAAM,aAAaJ,EAAI,UAEvBQ,EAAOJ,GAAOD,CAAS;AAAA,EAAA;AAE3B;"}
1
+ {"version":3,"file":"ModalsPlugin.js","sources":["../src/plugins/ModalsPlugin.ts"],"sourcesContent":["import { App, createVNode, h, Plugin, render } from 'vue';\n\nimport Modals from '../components/Modals/Modals.vue';\n\nexport interface ModalsPluginOptions {\n mountNodeClass?: string;\n mountNodeId?: string;\n}\n\nexport const DEFAULT_MODALS_PLUGIN_NODE_ID = 'stash-modals-mount-node';\n\nexport default <Plugin>{\n install(app: App, options?: ModalsPluginOptions) {\n const mountNodeId = options?.mountNodeId || DEFAULT_MODALS_PLUGIN_NODE_ID;\n let mountNode = document.getElementById(mountNodeId);\n\n if (!mountNode) {\n mountNode = document.createElement('div');\n mountNode.id = mountNodeId;\n mountNode.dataset.test = DEFAULT_MODALS_PLUGIN_NODE_ID;\n document.body.appendChild(mountNode);\n }\n\n if (options?.mountNodeClass && !mountNode.classList.contains(options.mountNodeClass)) {\n mountNode.classList.add(options.mountNodeClass);\n }\n\n const vNode = createVNode(h(Modals));\n vNode.appContext = app._context;\n\n render(vNode, mountNode);\n },\n};\n"],"names":["DEFAULT_MODALS_PLUGIN_NODE_ID","ModalsPlugin","app","options","mountNodeId","mountNode","vNode","createVNode","h","Modals","render"],"mappings":";;AASO,MAAMA,IAAgC,2BAE7CC,IAAuB;AAAA,EACrB,QAAQC,GAAUC,GAA+B;AAC/C,UAAMC,IAAcD,GAAS,eAAeH;AAC5C,QAAIK,IAAY,SAAS,eAAeD,CAAW;AAEnD,IAAKC,MACHA,IAAY,SAAS,cAAc,KAAK,GACxCA,EAAU,KAAKD,GACfC,EAAU,QAAQ,OAAOL,GACzB,SAAS,KAAK,YAAYK,CAAS,IAGjCF,GAAS,kBAAkB,CAACE,EAAU,UAAU,SAASF,EAAQ,cAAc,KACjFE,EAAU,UAAU,IAAIF,EAAQ,cAAc;AAGhD,UAAMG,IAAQC,EAAYC,EAAEC,CAAM,CAAC;AACnC,IAAAH,EAAM,aAAaJ,EAAI,UAEvBQ,EAAOJ,GAAOD,CAAS;AAAA,EACzB;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Module.js","sources":["../src/components/Module/Module.vue"],"sourcesContent":["<script lang=\"ts\">\n import Box, { type BoxProps } from '../Box/Box.vue';\n import { ModuleVariant, type ModuleVariants } from './Module.types';\n\n export * from './Module.keys';\n export * from './Module.types';\n\n export interface ModuleProps extends BoxProps {\n /**\n * Variant applied.\n *\n * Options: `box`, `card`, `list`.\n */\n variant?: ModuleVariants;\n }\n</script>\n\n<script setup lang=\"ts\">\n import logger from '@leaflink/snitch';\n import { computed, onMounted, provide } from 'vue';\n\n import { MODULE_INJECTION } from './Module.keys';\n\n defineOptions({\n name: 'll-module',\n });\n\n const props = withDefaults(defineProps<ModuleProps>(), {\n variant: 'box',\n });\n\n onMounted(() => {\n if (props.variant === 'card') {\n logger.warn('Card Modules are no longer a thing. You\\'re probably looking for `<RadioGroup variant=\"card\">`.');\n }\n\n if (props.variant === 'list') {\n logger.warn('Only used with deprecated ListView component. Use `table` variant with `Table` component instead.');\n }\n });\n\n provide(MODULE_INJECTION.key, { variant: computed(() => props.variant) });\n</script>\n\n<template>\n <Box\n class=\"stash-module tw-flex tw-flex-col\"\n data-test=\"stash-module\"\n :class=\"{\n 'tw-bg-transparent tw-shadow': props.variant === ModuleVariant.Table,\n 'tw-border tw-border-ice-500': props.variant === ModuleVariant.Card,\n 'tw-mb-6 tw-bg-transparent tw-shadow-none lg:tw-shadow': props.variant === ModuleVariant.List,\n }\"\n :disable-gutters=\"props.disableGutters\"\n :disable-padding=\"props.disablePadding || ['card', 'list', 'table'].includes(props.variant)\"\n :disable-elevation=\"\n props.disableElevation ||\n props.variant === ModuleVariant.Table ||\n props.variant === ModuleVariant.Card ||\n props.variant === ModuleVariant.List\n \"\n >\n <slot></slot>\n </Box>\n</template>\n"],"names":["props","__props","onMounted","logger","provide","MODULE_INJECTION","computed"],"mappings":";;;;;;;;;;;;;;;;AA2BE,UAAMA,IAAQC;AAId,WAAAC,EAAU,MAAM;AACV,MAAAF,EAAM,YAAY,UACpBG,EAAO,KAAK,iGAAiG,GAG3GH,EAAM,YAAY,UACpBG,EAAO,KAAK,mGAAmG;AAAA,IACjH,CACD,GAEOC,EAAAC,EAAiB,KAAK,EAAE,SAASC,EAAS,MAAMN,EAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Module.js","sources":["../src/components/Module/Module.vue"],"sourcesContent":["<script lang=\"ts\">\n import Box, { type BoxProps } from '../Box/Box.vue';\n import { ModuleVariant, type ModuleVariants } from './Module.types';\n\n export * from './Module.keys';\n export * from './Module.types';\n\n export interface ModuleProps extends BoxProps {\n /**\n * Variant applied.\n *\n * Options: `box`, `card`, `list`.\n */\n variant?: ModuleVariants;\n }\n</script>\n\n<script setup lang=\"ts\">\n import logger from '@leaflink/snitch';\n import { computed, onMounted, provide } from 'vue';\n\n import { MODULE_INJECTION } from './Module.keys';\n\n defineOptions({\n name: 'll-module',\n });\n\n const props = withDefaults(defineProps<ModuleProps>(), {\n variant: 'box',\n });\n\n onMounted(() => {\n if (props.variant === 'card') {\n logger.warn('Card Modules are no longer a thing. You\\'re probably looking for `<RadioGroup variant=\"card\">`.');\n }\n\n if (props.variant === 'list') {\n logger.warn('Only used with deprecated ListView component. Use `table` variant with `Table` component instead.');\n }\n });\n\n provide(MODULE_INJECTION.key, { variant: computed(() => props.variant) });\n</script>\n\n<template>\n <Box\n class=\"stash-module tw-flex tw-flex-col\"\n data-test=\"stash-module\"\n :class=\"{\n 'tw-bg-transparent tw-shadow': props.variant === ModuleVariant.Table,\n 'tw-border tw-border-ice-500': props.variant === ModuleVariant.Card,\n 'tw-mb-6 tw-bg-transparent tw-shadow-none lg:tw-shadow': props.variant === ModuleVariant.List,\n }\"\n :disable-gutters=\"props.disableGutters\"\n :disable-padding=\"props.disablePadding || ['card', 'list', 'table'].includes(props.variant)\"\n :disable-elevation=\"\n props.disableElevation ||\n props.variant === ModuleVariant.Table ||\n props.variant === ModuleVariant.Card ||\n props.variant === ModuleVariant.List\n \"\n >\n <slot></slot>\n </Box>\n</template>\n"],"names":["props","__props","onMounted","logger","provide","MODULE_INJECTION","computed","_createBlock","Box","_unref","ModuleVariant","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;AA2BE,UAAMA,IAAQC;AAId,WAAAC,EAAU,MAAM;AACd,MAAIF,EAAM,YAAY,UACpBG,EAAO,KAAK,iGAAiG,GAG3GH,EAAM,YAAY,UACpBG,EAAO,KAAK,mGAAmG;AAAA,IAEnH,CAAC,GAEDC,EAAQC,EAAiB,KAAK,EAAE,SAASC,EAAS,MAAMN,EAAM,OAAO,GAAG,mBAIxEO,EAkBMC,GAAA;AAAA,MAjBJ,UAAM,oCAAkC;AAAA,QAEO,+BAAAR,EAAM,YAAYS,EAAAC,CAAA,EAAc;AAAA,QAA4C,+BAAAV,EAAM,YAAYS,EAAAC,CAAA,EAAc;AAAA,QAAqE,yDAAAV,EAAM,YAAYS,EAAAC,CAAA,EAAc;AAAA,MAAA;MADhQ,aAAU;AAAA,MAMT,mBAAiBV,EAAM;AAAA,MACvB,mBAAiBA,EAAM,4CAA4C,SAASA,EAAM,OAAO;AAAA,MACzF,qBAA0BA,EAAM,oBAA0BA,EAAM,YAAYS,EAAAC,CAAA,EAAc,SAAeV,EAAM,YAAYS,EAAAC,CAAA,EAAc,QAAcV,EAAM,YAAYS,EAAAC,CAAA,EAAc;AAAA,IAAA;iBAOxL,MAAa;AAAA,QAAbC,EAAaC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Module.keys-CEsrW2f0.js","sources":["../src/components/Module/Module.keys.ts"],"sourcesContent":["import { InjectionWithDefaults } from '../../../types/utils';\nimport { ModuleInjection } from './Module.types';\n\nexport const MODULE_INJECTION: InjectionWithDefaults<ModuleInjection> = Object.freeze({\n key: Symbol('MODULE_INJECTION_KEY'),\n defaults: {\n variant: undefined,\n },\n});\n"],"names":["MODULE_INJECTION"],"mappings":"AAGa,MAAAA,IAA2D,OAAO,OAAO;AAAA,EACpF,KAAK,OAAO,sBAAsB;AAAA,EAClC,UAAU;AAAA,IACR,SAAS;AAAA,EAAA;AAEb,CAAC;"}
1
+ {"version":3,"file":"Module.keys-CEsrW2f0.js","sources":["../src/components/Module/Module.keys.ts"],"sourcesContent":["import { InjectionWithDefaults } from '../../../types/utils';\nimport { ModuleInjection } from './Module.types';\n\nexport const MODULE_INJECTION: InjectionWithDefaults<ModuleInjection> = Object.freeze({\n key: Symbol('MODULE_INJECTION_KEY'),\n defaults: {\n variant: undefined,\n },\n});\n"],"names":["MODULE_INJECTION"],"mappings":"AAGO,MAAMA,IAA2D,OAAO,OAAO;AAAA,EACpF,KAAK,OAAO,sBAAsB;AAAA,EAClC,UAAU;AAAA,IACR,SAAS;AAAA,EAAA;AAEb,CAAC;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Module.types-B1FfGGac.js","sources":["../src/components/Module/Module.types.ts"],"sourcesContent":["import { ComputedRef } from 'vue';\n\nexport enum ModuleVariant {\n Box = 'box',\n Table = 'table',\n /**\n * @deprecated Card Modules are no longer a thing. You're probably looking for `<RadioGroup variant=\"card\">`.\n */\n Card = 'card',\n /**\n * @deprecated Only used with deprecated ListView component. Use `table` variant with `Table` component instead.\n */\n List = 'list',\n}\n\nexport type ModuleVariants = `${ModuleVariant}`;\n\nexport interface ModuleInjection {\n /**\n * Module variant applied.\n */\n variant?: ComputedRef<ModuleVariants>;\n}\n"],"names":["ModuleVariant"],"mappings":"AAEY,IAAAA,sBAAAA,OACVA,EAAA,MAAM,OACNA,EAAA,QAAQ,SAIRA,EAAA,OAAO,QAIPA,EAAA,OAAO,QAVGA,IAAAA,KAAA,CAAA,CAAA;"}
1
+ {"version":3,"file":"Module.types-B1FfGGac.js","sources":["../src/components/Module/Module.types.ts"],"sourcesContent":["import { ComputedRef } from 'vue';\n\nexport enum ModuleVariant {\n Box = 'box',\n Table = 'table',\n /**\n * @deprecated Card Modules are no longer a thing. You're probably looking for `<RadioGroup variant=\"card\">`.\n */\n Card = 'card',\n /**\n * @deprecated Only used with deprecated ListView component. Use `table` variant with `Table` component instead.\n */\n List = 'list',\n}\n\nexport type ModuleVariants = `${ModuleVariant}`;\n\nexport interface ModuleInjection {\n /**\n * Module variant applied.\n */\n variant?: ComputedRef<ModuleVariants>;\n}\n"],"names":["ModuleVariant"],"mappings":"AAEO,IAAKA,sBAAAA,OACVA,EAAA,MAAM,OACNA,EAAA,QAAQ,SAIRA,EAAA,OAAO,QAIPA,EAAA,OAAO,QAVGA,IAAAA,KAAA,CAAA,CAAA;"}