@leaflink/stash 51.10.0 → 51.11.1

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 (370) hide show
  1. package/dist/Accordion.js.map +1 -1
  2. package/dist/Accordion.vue.d.ts +37 -6
  3. package/dist/ActionsDropdown.js +2 -2
  4. package/dist/ActionsDropdown.js.map +1 -1
  5. package/dist/ActionsDropdown.vue.d.ts +74 -0
  6. package/dist/AddressSelect.js +60 -56
  7. package/dist/AddressSelect.js.map +1 -1
  8. package/dist/AddressSelect.vue.d.ts +65 -8
  9. package/dist/Alert.js.map +1 -1
  10. package/dist/Alert.vue.d.ts +41 -4
  11. package/dist/AppNavigationItem.js.map +1 -1
  12. package/dist/AppNavigationItem.vue.d.ts +31 -4
  13. package/dist/AppSidebar.js.map +1 -1
  14. package/dist/AppSidebar.vue.d.ts +35 -8
  15. package/dist/AppTopbar.js +1 -1
  16. package/dist/AppTopbar.js.map +1 -1
  17. package/dist/AppTopbar.vue.d.ts +33 -4
  18. package/dist/Avatar.js.map +1 -1
  19. package/dist/Avatar.vue.d.ts +44 -5
  20. package/dist/Backdrop.js.map +1 -1
  21. package/dist/Backdrop.vue.d.ts +1 -1
  22. package/dist/Badge.js.map +1 -1
  23. package/dist/Badge.vue.d.ts +55 -6
  24. package/dist/Box.vue.d.ts +36 -3
  25. package/dist/Box.vue_vue_type_script_setup_true_lang-rFnvwLVY.js.map +1 -1
  26. package/dist/Button.js.map +1 -1
  27. package/dist/Button.vue.d.ts +50 -5
  28. package/dist/ButtonGroup.js +37 -33
  29. package/dist/ButtonGroup.js.map +1 -1
  30. package/dist/ButtonGroup.vue.d.ts +39 -6
  31. package/dist/Card.js.map +1 -1
  32. package/dist/Card.vue.d.ts +32 -5
  33. package/dist/CardContent.js.map +1 -1
  34. package/dist/CardContent.vue.d.ts +1 -1
  35. package/dist/CardFooter.js.map +1 -1
  36. package/dist/CardFooter.vue.d.ts +1 -1
  37. package/dist/CardHeader.js.map +1 -1
  38. package/dist/CardHeader.vue.d.ts +15 -2
  39. package/dist/CardMedia.js.map +1 -1
  40. package/dist/CardMedia.vue.d.ts +15 -2
  41. package/dist/Carousel.js +72 -66
  42. package/dist/Carousel.js.map +1 -1
  43. package/dist/Carousel.vue.d.ts +10 -10
  44. package/dist/Checkbox.js.map +1 -1
  45. package/dist/Checkbox.vue.d.ts +53 -8
  46. package/dist/ChevronToggle.vue.d.ts +34 -7
  47. package/dist/ChevronToggle.vue_vue_type_script_setup_true_lang-Ce_qOXfR.js.map +1 -1
  48. package/dist/Chip.js.map +1 -1
  49. package/dist/Chip.vue.d.ts +52 -10
  50. package/dist/ConfirmationCodeInput.js +44 -40
  51. package/dist/ConfirmationCodeInput.js.map +1 -1
  52. package/dist/ConfirmationCodeInput.vue.d.ts +43 -8
  53. package/dist/ContextSwitcher.js.map +1 -1
  54. package/dist/ContextSwitcher.vue.d.ts +41 -6
  55. package/dist/Copy.js.map +1 -1
  56. package/dist/Copy.vue.d.ts +34 -3
  57. package/dist/CurrencyInput.js +21 -20
  58. package/dist/CurrencyInput.js.map +1 -1
  59. package/dist/CurrencyInput.vue.d.ts +46 -125
  60. package/dist/CustomRender.js.map +1 -1
  61. package/dist/DataView.js +96 -94
  62. package/dist/DataView.js.map +1 -1
  63. package/dist/DataView.keys-aSOnA4AD.js.map +1 -1
  64. package/dist/DataView.vue.d.ts +57 -12
  65. package/dist/DataViewFilters.js +139 -127
  66. package/dist/DataViewFilters.js.map +1 -1
  67. package/dist/DataViewFilters.keys-BLu07FiP.js.map +1 -1
  68. package/dist/DataViewFilters.vue.d.ts +54 -9
  69. package/dist/DataViewSortButton.js +2 -2
  70. package/dist/DataViewSortButton.js.map +1 -1
  71. package/dist/DataViewSortButton.vue.d.ts +30 -3
  72. package/dist/DataViewToolbar.js +151 -83
  73. package/dist/DataViewToolbar.js.map +1 -1
  74. package/dist/DataViewToolbar.vue.d.ts +40 -5
  75. package/dist/DatePicker.js +4636 -4524
  76. package/dist/DatePicker.js.map +1 -1
  77. package/dist/DatePicker.vue.d.ts +79 -30
  78. package/dist/DescriptionList.js.map +1 -1
  79. package/dist/DescriptionList.vue.d.ts +32 -3
  80. package/dist/DescriptionListDetail.js.map +1 -1
  81. package/dist/DescriptionListDetail.vue.d.ts +1 -1
  82. package/dist/DescriptionListGroup.js.map +1 -1
  83. package/dist/DescriptionListGroup.vue.d.ts +1 -1
  84. package/dist/DescriptionListTerm.js.map +1 -1
  85. package/dist/DescriptionListTerm.vue.d.ts +1 -1
  86. package/dist/Dialog.js.map +1 -1
  87. package/dist/Dialog.vue.d.ts +53 -10
  88. package/dist/Divider.js.map +1 -1
  89. package/dist/Dropdown.js +95 -89
  90. package/dist/Dropdown.js.map +1 -1
  91. package/dist/Dropdown.vue.d.ts +48 -12
  92. package/dist/EmptyState.js +1 -1
  93. package/dist/EmptyState.js.map +1 -1
  94. package/dist/EmptyState.vue.d.ts +62 -5
  95. package/dist/Expand.vue.d.ts +40 -10
  96. package/dist/Expand.vue_vue_type_script_setup_true_lang-CiONJfAp.js.map +1 -1
  97. package/dist/Field.vue.d.ts +53 -4
  98. package/dist/Field.vue_vue_type_script_setup_true_lang-DI6z3AE9.js.map +1 -1
  99. package/dist/FileUpload.js +74 -72
  100. package/dist/FileUpload.js.map +1 -1
  101. package/dist/FileUpload.vue.d.ts +44 -10
  102. package/dist/FilterChip.js.map +1 -1
  103. package/dist/FilterChip.vue.d.ts +41 -6
  104. package/dist/FilterDrawerItem.js +21 -21
  105. package/dist/FilterDrawerItem.js.map +1 -1
  106. package/dist/FilterDrawerItem.vue.d.ts +23 -6
  107. package/dist/FilterDropdown.js +69 -63
  108. package/dist/FilterDropdown.js.map +1 -1
  109. package/dist/FilterDropdown.vue.d.ts +35 -122
  110. package/dist/FilterSelect.js.map +1 -1
  111. package/dist/FilterSelect.vue.d.ts +31 -4
  112. package/dist/Filters.js +164 -157
  113. package/dist/Filters.js.map +1 -1
  114. package/dist/Filters.vue.d.ts +2190 -0
  115. package/dist/HttpError.js +7 -7
  116. package/dist/HttpError.js.map +1 -1
  117. package/dist/HttpError.vue.d.ts +41 -4
  118. package/dist/Icon.js +17 -17
  119. package/dist/Icon.js.map +1 -1
  120. package/dist/Icon.vue.d.ts +36 -3
  121. package/dist/IconLabel.js.map +1 -1
  122. package/dist/IconLabel.vue.d.ts +40 -5
  123. package/dist/Illustration.js +2 -2
  124. package/dist/Illustration.vue.d.ts +42 -3
  125. package/dist/{Illustration.vue_vue_type_script_setup_true_lang-BVzzNsRt.js → Illustration.vue_vue_type_script_setup_true_lang-BrqEF8xe.js} +11 -11
  126. 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
  127. package/dist/Image.js +2 -2
  128. package/dist/Image.vue.d.ts +40 -5
  129. package/dist/{Image.vue_vue_type_script_setup_true_lang-Dg2Zk2r2.js → Image.vue_vue_type_script_setup_true_lang-D5u4av0_.js} +41 -37
  130. 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
  131. package/dist/InlineEdit.js.map +1 -1
  132. package/dist/InlineEdit.vue.d.ts +47 -126
  133. package/dist/Input.js.map +1 -1
  134. package/dist/Input.vue.d.ts +45 -12
  135. package/dist/InputOptions.js +69 -66
  136. package/dist/InputOptions.js.map +1 -1
  137. package/dist/InputOptions.vue.d.ts +55 -10
  138. package/dist/IntegrationIcon.js +7 -7
  139. package/dist/IntegrationIcon.js.map +1 -1
  140. package/dist/IntegrationIcon.vue.d.ts +36 -3
  141. package/dist/Label.vue.d.ts +42 -3
  142. package/dist/Label.vue_vue_type_script_setup_true_lang-CNquF3AP.js.map +1 -1
  143. package/dist/LicenseChip.js.map +1 -1
  144. package/dist/LicenseChip.vue.d.ts +30 -3
  145. package/dist/ListItem.js.map +1 -1
  146. package/dist/ListItem.vue.d.ts +294 -0
  147. package/dist/ListItemCell.js.map +1 -1
  148. package/dist/ListItemCell.vue.d.ts +21 -0
  149. package/dist/ListView.js +7 -4
  150. package/dist/ListView.js.map +1 -1
  151. package/dist/ListView.types.d.ts +29 -0
  152. package/dist/ListView.vue.d.ts +5496 -0
  153. package/dist/Loading.js +2 -2
  154. package/dist/Loading.js.map +1 -1
  155. package/dist/Loading.vue.d.ts +1 -1
  156. package/dist/Logo.js +1 -1
  157. package/dist/Logo.vue.d.ts +41 -6
  158. package/dist/{Logo.vue_vue_type_script_setup_true_lang-Y3iE9utm.js → Logo.vue_vue_type_script_setup_true_lang-Dz8c98sc.js} +17 -17
  159. package/dist/Logo.vue_vue_type_script_setup_true_lang-Dz8c98sc.js.map +1 -0
  160. package/dist/Menu.js.map +1 -1
  161. package/dist/Menu.vue.d.ts +1 -1
  162. package/dist/MenuItem.js.map +1 -1
  163. package/dist/MenuItem.vue.d.ts +1 -1
  164. package/dist/MenusPlugin-Bk6UW6o9.js +12 -0
  165. package/dist/{MenusPlugin-B4jpNe7x.js.map → MenusPlugin-Bk6UW6o9.js.map} +1 -1
  166. package/dist/Metric.js.map +1 -1
  167. package/dist/Metric.vue.d.ts +34 -3
  168. package/dist/Modal.js +64 -62
  169. package/dist/Modal.js.map +1 -1
  170. package/dist/Modal.vue.d.ts +60 -13
  171. package/dist/Modals.js +18 -17
  172. package/dist/Modals.js.map +1 -1
  173. package/dist/ModalsPlugin.js +11 -11
  174. package/dist/ModalsPlugin.js.map +1 -1
  175. package/dist/Module.js.map +1 -1
  176. package/dist/Module.keys-CEsrW2f0.js.map +1 -1
  177. package/dist/Module.types-B1FfGGac.js.map +1 -1
  178. package/dist/Module.vue.d.ts +29 -2
  179. package/dist/ModuleContent.js.map +1 -1
  180. package/dist/ModuleContent.vue.d.ts +3 -3
  181. package/dist/ModuleFooter.js.map +1 -1
  182. package/dist/ModuleFooter.vue.d.ts +1 -1
  183. package/dist/ModuleHeader.js.map +1 -1
  184. package/dist/ModuleHeader.vue.d.ts +39 -5
  185. package/dist/MoreActions.js +491 -0
  186. package/dist/MoreActions.js.map +1 -0
  187. package/dist/MoreActions.vue.d.ts +126 -0
  188. package/dist/ObfuscateText.js.map +1 -1
  189. package/dist/ObfuscateText.vue.d.ts +40 -3
  190. package/dist/PageContent.js.map +1 -1
  191. package/dist/PageContent.vue.d.ts +30 -3
  192. package/dist/PageHeader.js.map +1 -1
  193. package/dist/PageHeader.vue.d.ts +35 -6
  194. package/dist/PageNavigation.js +50 -50
  195. package/dist/PageNavigation.js.map +1 -1
  196. package/dist/PageNavigation.vue.d.ts +36 -7
  197. package/dist/Paginate.js.map +1 -1
  198. package/dist/Paginate.vue.d.ts +40 -5
  199. package/dist/PlaidLink.js.map +1 -1
  200. package/dist/PlaidLink.vue.d.ts +49 -12
  201. package/dist/QuickAction.js.map +1 -1
  202. package/dist/QuickAction.vue.d.ts +15 -2
  203. package/dist/Radio.js.map +1 -1
  204. package/dist/Radio.vue.d.ts +93 -0
  205. package/dist/RadioGroup.js +101 -94
  206. package/dist/RadioGroup.js.map +1 -1
  207. package/dist/RadioGroup.vue.d.ts +42 -116
  208. package/dist/RadioNew.js +99 -96
  209. package/dist/RadioNew.js.map +1 -1
  210. package/dist/RadioNew.vue.d.ts +48 -7
  211. package/dist/RangeInput.js.map +1 -1
  212. package/dist/RangeInput.vue.d.ts +1 -1
  213. package/dist/SearchBar.js +39 -38
  214. package/dist/SearchBar.js.map +1 -1
  215. package/dist/SearchBar.vue.d.ts +44 -127
  216. package/dist/SectionHeader.js.map +1 -1
  217. package/dist/SectionHeader.vue.d.ts +36 -5
  218. package/dist/Select.js +183 -171
  219. package/dist/Select.js.map +1 -1
  220. package/dist/Select.vue.d.ts +102 -23
  221. package/dist/SelectStatus.js +38 -38
  222. package/dist/SelectStatus.js.map +1 -1
  223. package/dist/SelectStatus.vue.d.ts +46 -226
  224. package/dist/Skeleton.js.map +1 -1
  225. package/dist/Skeleton.vue.d.ts +34 -3
  226. package/dist/Step.js +44 -44
  227. package/dist/Step.js.map +1 -1
  228. package/dist/Step.vue.d.ts +43 -4
  229. package/dist/Stepper.js.map +1 -1
  230. package/dist/Stepper.vue.d.ts +44 -9
  231. package/dist/Switch.js.map +1 -1
  232. package/dist/Switch.vue.d.ts +47 -8
  233. package/dist/Tab.js +9 -9
  234. package/dist/Tab.js.map +1 -1
  235. package/dist/Tab.vue.d.ts +15 -2
  236. package/dist/TabPanel.js.map +1 -1
  237. package/dist/TabPanel.vue.d.ts +30 -3
  238. package/dist/Table.js +59 -53
  239. package/dist/Table.js.map +1 -1
  240. package/dist/Table.keys-LHQf6FEH.js.map +1 -1
  241. package/dist/Table.vue.d.ts +50 -3
  242. package/dist/TableCell.js +1 -1
  243. package/dist/TableCell.js.map +1 -1
  244. package/dist/TableCell.vue.d.ts +32 -3
  245. package/dist/TableHeaderCell.js +1 -1
  246. package/dist/TableHeaderCell.js.map +1 -1
  247. package/dist/TableHeaderCell.vue.d.ts +30 -3
  248. package/dist/TableHeaderRow.js +1 -1
  249. package/dist/TableHeaderRow.js.map +1 -1
  250. package/dist/TableHeaderRow.vue.d.ts +34 -5
  251. package/dist/TableRow.js +44 -43
  252. package/dist/TableRow.js.map +1 -1
  253. package/dist/TableRow.vue.d.ts +48 -7
  254. package/dist/Tabs.js +2 -2
  255. package/dist/Tabs.vue.d.ts +31 -122
  256. package/dist/Tabs.vue_vue_type_script_setup_true_lang-BlJVDr7o.js +78 -0
  257. package/dist/Tabs.vue_vue_type_script_setup_true_lang-BlJVDr7o.js.map +1 -0
  258. package/dist/TextEditor.js +2420 -2414
  259. package/dist/TextEditor.js.map +1 -1
  260. package/dist/TextEditor.vue.d.ts +39 -8
  261. package/dist/Textarea.js +32 -29
  262. package/dist/Textarea.js.map +1 -1
  263. package/dist/Textarea.vue.d.ts +44 -9
  264. package/dist/Thumbnail.js +1 -1
  265. package/dist/Thumbnail.js.map +1 -1
  266. package/dist/Thumbnail.vue.d.ts +4 -4
  267. package/dist/ThumbnailEmpty.js.map +1 -1
  268. package/dist/ThumbnailEmpty.vue.d.ts +1 -1
  269. package/dist/ThumbnailGroup.js.map +1 -1
  270. package/dist/ThumbnailGroup.keys-EJ4qFNhx.js.map +1 -1
  271. package/dist/ThumbnailGroup.vue.d.ts +22 -26
  272. package/dist/Timeline.js.map +1 -1
  273. package/dist/Timeline.vue.d.ts +32 -3
  274. package/dist/TimelineItem.js.map +1 -1
  275. package/dist/TimelineItem.vue.d.ts +1 -1
  276. package/dist/Toast.js.map +1 -1
  277. package/dist/Toast.vue.d.ts +30 -3
  278. package/dist/Toasts.js.map +1 -1
  279. package/dist/ToastsPlugin.js +11 -11
  280. package/dist/ToastsPlugin.js.map +1 -1
  281. package/dist/Tooltip.js +30 -29
  282. package/dist/Tooltip.js.map +1 -1
  283. package/dist/Tooltip.vue.d.ts +43 -11
  284. package/dist/colors-DDDVvqfQ.js.map +1 -1
  285. package/dist/components.css +1 -1
  286. package/dist/constants.js.map +1 -1
  287. package/dist/directives/autofocus.js.map +1 -1
  288. package/dist/directives/clickoutside.js.map +1 -1
  289. package/dist/directives/observe.js.map +1 -1
  290. package/dist/directives/sticky.js.map +1 -1
  291. package/dist/directives/tooltip.js +3 -3
  292. package/dist/directives/tooltip.js.map +1 -1
  293. package/dist/directives/viewable.js +44 -39
  294. package/dist/directives/viewable.js.map +1 -1
  295. package/dist/{floating-ui.vue-CL01Y9ER.js → floating-ui.vue-pzUuloyX.js} +2 -2
  296. package/dist/{floating-ui.vue-CL01Y9ER.js.map → floating-ui.vue-pzUuloyX.js.map} +1 -1
  297. package/dist/formatDateTime-Dz8bXV0R.js +1418 -0
  298. package/dist/{formatDateTime-DG7kBc2T.js.map → formatDateTime-Dz8bXV0R.js.map} +1 -1
  299. package/dist/index-C14LhAwV.js +294 -0
  300. package/dist/{index-GUu9zvbg.js.map → index-C14LhAwV.js.map} +1 -1
  301. package/dist/index-D6bxWkZ1.js.map +1 -1
  302. package/dist/index.js +104 -99
  303. package/dist/index.js.map +1 -1
  304. package/dist/isDefined-DzVx0B6k.js.map +1 -1
  305. package/dist/keys-BEdEsanp.js.map +1 -1
  306. package/dist/keys-C8Zfr_By.js.map +1 -1
  307. package/dist/locale.js.map +1 -1
  308. package/dist/misc-CHQs-G03.js.map +1 -1
  309. package/dist/obfuscateText.d.ts +1 -1
  310. package/dist/parseISO-wlfIB_QJ.js.map +1 -1
  311. package/dist/searchFuzzy-DRasJ33G.js +409 -0
  312. package/dist/{searchFuzzy-DBDE6jkd.js.map → searchFuzzy-DRasJ33G.js.map} +1 -1
  313. package/dist/statusLevels-D8EgtE_L.js.map +1 -1
  314. package/dist/storage.js.map +1 -1
  315. package/dist/tailwind-base.d.ts +18 -0
  316. package/dist/tailwind-base.js +18 -8
  317. package/dist/tailwind-base.js.map +1 -1
  318. package/dist/toTimeZone-Coq1oPTt.js.map +1 -1
  319. package/dist/useConfirmBeforeClosing.js.map +1 -1
  320. package/dist/useDialog.d.ts +2 -2
  321. package/dist/useDialog.js +25 -21
  322. package/dist/useDialog.js.map +1 -1
  323. package/dist/useGoogleMaps.js +110 -108
  324. package/dist/useGoogleMaps.js.map +1 -1
  325. package/dist/useMediaQuery.d.ts +6 -0
  326. package/dist/useMediaQuery.js +15 -11
  327. package/dist/useMediaQuery.js.map +1 -1
  328. package/dist/useModals.d.ts +1 -1
  329. package/dist/useModals.js.map +1 -1
  330. package/dist/usePaginationStats-d_q39naC.js.map +1 -1
  331. package/dist/usePlaidLink.js +27 -20
  332. package/dist/usePlaidLink.js.map +1 -1
  333. package/dist/useScriptTag.js.map +1 -1
  334. package/dist/useSearch.js +13 -13
  335. package/dist/useSearch.js.map +1 -1
  336. package/dist/useSelection.js +56 -56
  337. package/dist/useSelection.js.map +1 -1
  338. package/dist/useSortable.js +63 -54
  339. package/dist/useSortable.js.map +1 -1
  340. package/dist/useStepper.d.ts +2 -2
  341. package/dist/useStepper.js +40 -36
  342. package/dist/useStepper.js.map +1 -1
  343. package/dist/useToasts.js +23 -23
  344. package/dist/useToasts.js.map +1 -1
  345. package/dist/useValidation.js +100 -96
  346. package/dist/useValidation.js.map +1 -1
  347. package/dist/utils/calculateElementOverflow.js +4 -4
  348. package/dist/utils/calculateElementOverflow.js.map +1 -1
  349. package/dist/utils/colorScheme.js.map +1 -1
  350. package/dist/utils/createQueryString.js.map +1 -1
  351. package/dist/utils/createValidDate.js.map +1 -1
  352. package/dist/utils/formatDateTime.js +1 -1
  353. package/dist/utils/getContrastingTextColor.js.map +1 -1
  354. package/dist/utils/helpers.js.map +1 -1
  355. package/dist/utils/i18n.js.map +1 -1
  356. package/dist/utils/normalizeDate.js.map +1 -1
  357. package/dist/utils/obfuscateText.js +6 -6
  358. package/dist/utils/obfuscateText.js.map +1 -1
  359. package/dist/utils/searchFuzzy.js +1 -1
  360. package/dist/utils/storage.js +23 -23
  361. package/dist/utils/storage.js.map +1 -1
  362. package/package.json +12 -12
  363. package/tailwind-base.ts +11 -0
  364. package/dist/Logo.vue_vue_type_script_setup_true_lang-Y3iE9utm.js.map +0 -1
  365. package/dist/MenusPlugin-B4jpNe7x.js +0 -12
  366. package/dist/Tabs.vue_vue_type_script_setup_true_lang-Dprx064Y.js +0 -156
  367. package/dist/Tabs.vue_vue_type_script_setup_true_lang-Dprx064Y.js.map +0 -1
  368. package/dist/formatDateTime-DG7kBc2T.js +0 -1414
  369. package/dist/index-GUu9zvbg.js +0 -128
  370. package/dist/searchFuzzy-DBDE6jkd.js +0 -408
@@ -1,35 +1,42 @@
1
- import { ref as r, watchSyncEffect as d, toValue as c, computed as s, onUnmounted as f } from "vue";
2
- import v from "./useScriptTag.js";
3
- const p = "https://cdn.plaid.com/link/v2/stable/link-initialize.js";
4
- function L(l) {
5
- const { isLoaded: t, error: i } = v(p), e = r(null), o = r(!1);
6
- d(() => {
7
- const a = c(l);
8
- if (t.value && !(!a.token && !a.receivedRedirectUri)) {
1
+ import { ref as l, watchSyncEffect as c, toValue as f, computed as s, onUnmounted as v } from "vue";
2
+ import p from "./useScriptTag.js";
3
+ const m = "https://cdn.plaid.com/link/v2/stable/link-initialize.js";
4
+ function P(u) {
5
+ const { isLoaded: i, error: r } = p(m), a = l(null), t = l(!1);
6
+ c(() => {
7
+ const e = f(u);
8
+ if (i.value && !(!e.token && !e.receivedRedirectUri)) {
9
9
  if (!window.Plaid)
10
10
  throw new Error("Error loading Plaid SDK");
11
- n(), e.value = window.Plaid.create({
12
- ...a,
11
+ n(), a.value = window.Plaid.create({
12
+ ...e,
13
13
  onLoad: () => {
14
- o.value = !0, a.onLoad?.();
14
+ var o;
15
+ t.value = !0, (o = e.onLoad) == null || o.call(e);
15
16
  }
16
17
  });
17
18
  }
18
19
  });
19
- const u = s(
20
- () => !i.value && e.value !== null && (t.value || o.value)
20
+ const d = s(
21
+ () => !r.value && a.value !== null && (i.value || t.value)
21
22
  );
22
23
  function n() {
23
- e.value && (e.value.exit({ force: !0 }), e.value.destroy(), o.value = !1);
24
+ a.value && (a.value.exit({ force: !0 }), a.value.destroy(), t.value = !1);
24
25
  }
25
- return f(n), {
26
- ready: u,
27
- error: i,
28
- open: () => e.value?.open(),
29
- exit: (a) => e.value?.exit(a)
26
+ return v(n), {
27
+ ready: d,
28
+ error: r,
29
+ open: () => {
30
+ var e;
31
+ return (e = a.value) == null ? void 0 : e.open();
32
+ },
33
+ exit: (e) => {
34
+ var o;
35
+ return (o = a.value) == null ? void 0 : o.exit(e);
36
+ }
30
37
  };
31
38
  }
32
39
  export {
33
- L as default
40
+ P as default
34
41
  };
35
42
  //# sourceMappingURL=usePlaidLink.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePlaidLink.js","sources":["../src/composables/usePlaidLink/usePlaidLink.ts"],"sourcesContent":["import { computed, MaybeRef, onUnmounted, ref, toValue, watchSyncEffect } from 'vue';\n\nimport { Plaid } from '../../../types/plaid';\nimport useScriptTag from '../useScriptTag/useScriptTag';\n\nconst PLAID_SDK_URL = 'https://cdn.plaid.com/link/v2/stable/link-initialize.js';\n\nexport default function usePlaidLink(options: MaybeRef<Plaid.CreateConfig>) {\n const { isLoaded: isPlaidScriptLoaded, error } = useScriptTag(PLAID_SDK_URL);\n\n const plaid = ref<Plaid.LinkHandler | null>(null);\n const iframeLoaded = ref(false);\n\n // We want to trigger this as soon as options ref changes\n watchSyncEffect(() => {\n const optionsVal = toValue(options);\n\n if (!isPlaidScriptLoaded.value) {\n return;\n }\n\n if (!optionsVal.token && !optionsVal.receivedRedirectUri) {\n return;\n }\n\n if (!window.Plaid) {\n throw new Error('Error loading Plaid SDK');\n }\n\n // destroy & exit existing instances so we don't\n // have multiple Plaid link modals at the same time\n teardown();\n\n plaid.value = window.Plaid.create({\n ...optionsVal,\n onLoad: () => {\n iframeLoaded.value = true;\n optionsVal.onLoad?.();\n },\n });\n });\n\n const ready = computed(\n () => !error.value && plaid.value !== null && (isPlaidScriptLoaded.value || iframeLoaded.value),\n );\n\n function teardown() {\n if (plaid.value) {\n plaid.value.exit({ force: true });\n plaid.value.destroy();\n\n iframeLoaded.value = false;\n }\n }\n\n onUnmounted(teardown);\n\n return {\n ready,\n error,\n open: () => plaid.value?.open(),\n exit: (options?: Plaid.ExitOptions) => plaid.value?.exit(options),\n };\n}\n"],"names":["PLAID_SDK_URL","usePlaidLink","options","isPlaidScriptLoaded","error","useScriptTag","plaid","ref","iframeLoaded","watchSyncEffect","optionsVal","toValue","teardown","ready","computed","onUnmounted"],"mappings":";;AAKA,MAAMA,IAAgB;AAEtB,SAAwBC,EAAaC,GAAuC;AAC1E,QAAM,EAAE,UAAUC,GAAqB,OAAAC,EAAA,IAAUC,EAAaL,CAAa,GAErEM,IAAQC,EAA8B,IAAI,GAC1CC,IAAeD,EAAI,EAAK;AAG9B,EAAAE,EAAgB,MAAM;AACpB,UAAMC,IAAaC,EAAQT,CAAO;AAElC,QAAKC,EAAoB,SAIrB,GAACO,EAAW,SAAS,CAACA,EAAW,sBAIrC;AAAA,UAAI,CAAC,OAAO;AACV,cAAM,IAAI,MAAM,yBAAyB;AAK3C,MAAAE,EAAA,GAEAN,EAAM,QAAQ,OAAO,MAAM,OAAO;AAAA,QAChC,GAAGI;AAAA,QACH,QAAQ,MAAM;AACZ,UAAAF,EAAa,QAAQ,IACrBE,EAAW,SAAA;AAAA,QACb;AAAA,MAAA,CACD;AAAA;AAAA,EACH,CAAC;AAED,QAAMG,IAAQC;AAAA,IACZ,MAAM,CAACV,EAAM,SAASE,EAAM,UAAU,SAASH,EAAoB,SAASK,EAAa;AAAA,EAAA;AAG3F,WAASI,IAAW;AAClB,IAAIN,EAAM,UACRA,EAAM,MAAM,KAAK,EAAE,OAAO,IAAM,GAChCA,EAAM,MAAM,QAAA,GAEZE,EAAa,QAAQ;AAAA,EAEzB;AAEA,SAAAO,EAAYH,CAAQ,GAEb;AAAA,IACL,OAAAC;AAAA,IACA,OAAAT;AAAA,IACA,MAAM,MAAME,EAAM,OAAO,KAAA;AAAA,IACzB,MAAM,CAACJ,MAAgCI,EAAM,OAAO,KAAKJ,CAAO;AAAA,EAAA;AAEpE;"}
1
+ {"version":3,"file":"usePlaidLink.js","sources":["../src/composables/usePlaidLink/usePlaidLink.ts"],"sourcesContent":["import { computed, MaybeRef, onUnmounted, ref, toValue, watchSyncEffect } from 'vue';\n\nimport { Plaid } from '../../../types/plaid';\nimport useScriptTag from '../useScriptTag/useScriptTag';\n\nconst PLAID_SDK_URL = 'https://cdn.plaid.com/link/v2/stable/link-initialize.js';\n\nexport default function usePlaidLink(options: MaybeRef<Plaid.CreateConfig>) {\n const { isLoaded: isPlaidScriptLoaded, error } = useScriptTag(PLAID_SDK_URL);\n\n const plaid = ref<Plaid.LinkHandler | null>(null);\n const iframeLoaded = ref(false);\n\n // We want to trigger this as soon as options ref changes\n watchSyncEffect(() => {\n const optionsVal = toValue(options);\n\n if (!isPlaidScriptLoaded.value) {\n return;\n }\n\n if (!optionsVal.token && !optionsVal.receivedRedirectUri) {\n return;\n }\n\n if (!window.Plaid) {\n throw new Error('Error loading Plaid SDK');\n }\n\n // destroy & exit existing instances so we don't\n // have multiple Plaid link modals at the same time\n teardown();\n\n plaid.value = window.Plaid.create({\n ...optionsVal,\n onLoad: () => {\n iframeLoaded.value = true;\n optionsVal.onLoad?.();\n },\n });\n });\n\n const ready = computed(\n () => !error.value && plaid.value !== null && (isPlaidScriptLoaded.value || iframeLoaded.value),\n );\n\n function teardown() {\n if (plaid.value) {\n plaid.value.exit({ force: true });\n plaid.value.destroy();\n\n iframeLoaded.value = false;\n }\n }\n\n onUnmounted(teardown);\n\n return {\n ready,\n error,\n open: () => plaid.value?.open(),\n exit: (options?: Plaid.ExitOptions) => plaid.value?.exit(options),\n };\n}\n"],"names":["PLAID_SDK_URL","usePlaidLink","options","isPlaidScriptLoaded","error","useScriptTag","plaid","ref","iframeLoaded","watchSyncEffect","optionsVal","toValue","teardown","_a","ready","computed","onUnmounted"],"mappings":";;AAKA,MAAMA,IAAgB;AAEtB,SAAwBC,EAAaC,GAAuC;AAC1E,QAAM,EAAE,UAAUC,GAAqB,OAAAC,EAAM,IAAIC,EAAaL,CAAa,GAErEM,IAAQC,EAA8B,IAAI,GAC1CC,IAAeD,EAAI,EAAK;AAG9B,EAAAE,EAAgB,MAAM;AACd,UAAAC,IAAaC,EAAQT,CAAO;AAE9B,QAACC,EAAoB,SAIrB,GAACO,EAAW,SAAS,CAACA,EAAW,sBAIjC;AAAA,UAAA,CAAC,OAAO;AACJ,cAAA,IAAI,MAAM,yBAAyB;AAKlC,MAAAE,EAAA,GAEHN,EAAA,QAAQ,OAAO,MAAM,OAAO;AAAA,QAChC,GAAGI;AAAA,QACH,QAAQ,MAAM;;AACZ,UAAAF,EAAa,QAAQ,KACrBK,IAAAH,EAAW,WAAX,QAAAG,EAAA,KAAAH;AAAA,QAAoB;AAAA,MACtB,CACD;AAAA;AAAA,EAAA,CACF;AAED,QAAMI,IAAQC;AAAA,IACZ,MAAM,CAACX,EAAM,SAASE,EAAM,UAAU,SAASH,EAAoB,SAASK,EAAa;AAAA,EAC3F;AAEA,WAASI,IAAW;AAClB,IAAIN,EAAM,UACRA,EAAM,MAAM,KAAK,EAAE,OAAO,IAAM,GAChCA,EAAM,MAAM,QAAQ,GAEpBE,EAAa,QAAQ;AAAA,EACvB;AAGF,SAAAQ,EAAYJ,CAAQ,GAEb;AAAA,IACL,OAAAE;AAAA,IACA,OAAAV;AAAA,IACA,MAAM,MAAM;;AAAA,cAAAS,IAAAP,EAAM,UAAN,gBAAAO,EAAa;AAAA;AAAA,IACzB,MAAM,CAACX,MAAAA;;AAAgC,cAAAW,IAAAP,EAAM,UAAN,gBAAAO,EAAa,KAAKX;AAAAA;AAAAA,EAC3D;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useScriptTag.js","sources":["../src/composables/useScriptTag/useScriptTag.ts"],"sourcesContent":["import { onMounted, onUnmounted, ref } from 'vue';\n\ntype UseScriptOptions = {\n manual: boolean;\n};\n\nexport default function useScriptTag(url: string, options: UseScriptOptions = { manual: false }) {\n const scriptTag = ref<HTMLScriptElement | null>(null);\n const isLoaded = ref(false);\n const error = ref<Error | null>(null);\n\n const setIsLoaded = () => (isLoaded.value = true);\n const setError = (e: ErrorEvent) => (error.value = e.error);\n\n function loadScript() {\n let el = document.querySelector<HTMLScriptElement>(`script[src=\"${url}\"]`);\n\n if (!el) {\n isLoaded.value = false;\n error.value = null;\n\n el = document.createElement('script');\n\n el.type = 'text/javascript';\n el.async = true;\n el.src = url;\n el.addEventListener('load', setIsLoaded);\n el.addEventListener('error', setError);\n document.head.appendChild(el);\n } else {\n isLoaded.value = true;\n }\n\n scriptTag.value = el;\n }\n\n function unloadScript() {\n if (!document) {\n return;\n }\n\n const elToBeRemoved = document.querySelector<HTMLScriptElement>(`script[src=\"${url}\"]`);\n\n if (elToBeRemoved) {\n elToBeRemoved.removeEventListener('load', setIsLoaded);\n elToBeRemoved.removeEventListener('error', setError);\n\n document.head.removeChild(elToBeRemoved);\n\n scriptTag.value = null;\n isLoaded.value = false;\n }\n }\n\n if (!options.manual) {\n onMounted(loadScript);\n onUnmounted(unloadScript);\n }\n\n return { scriptTag, load: loadScript, unload: unloadScript, isLoaded, error };\n}\n"],"names":["useScriptTag","url","options","scriptTag","ref","isLoaded","error","setIsLoaded","setError","loadScript","el","unloadScript","elToBeRemoved","onMounted","onUnmounted"],"mappings":";AAMA,SAAwBA,EAAaC,GAAaC,IAA4B,EAAE,QAAQ,MAAS;AAC/F,QAAMC,IAAYC,EAA8B,IAAI,GAC9CC,IAAWD,EAAI,EAAK,GACpBE,IAAQF,EAAkB,IAAI,GAE9BG,IAAc,MAAOF,EAAS,QAAQ,IACtCG,IAAW,CAAC,MAAmBF,EAAM,QAAQ,EAAE;AAErD,WAASG,IAAa;AACpB,QAAIC,IAAK,SAAS,cAAiC,eAAeT,CAAG,IAAI;AAEzE,IAAKS,IAaHL,EAAS,QAAQ,MAZjBA,EAAS,QAAQ,IACjBC,EAAM,QAAQ,MAEdI,IAAK,SAAS,cAAc,QAAQ,GAEpCA,EAAG,OAAO,mBACVA,EAAG,QAAQ,IACXA,EAAG,MAAMT,GACTS,EAAG,iBAAiB,QAAQH,CAAW,GACvCG,EAAG,iBAAiB,SAASF,CAAQ,GACrC,SAAS,KAAK,YAAYE,CAAE,IAK9BP,EAAU,QAAQO;AAAA,EACpB;AAEA,WAASC,IAAe;AACtB,QAAI,CAAC;AACH;AAGF,UAAMC,IAAgB,SAAS,cAAiC,eAAeX,CAAG,IAAI;AAEtF,IAAIW,MACFA,EAAc,oBAAoB,QAAQL,CAAW,GACrDK,EAAc,oBAAoB,SAASJ,CAAQ,GAEnD,SAAS,KAAK,YAAYI,CAAa,GAEvCT,EAAU,QAAQ,MAClBE,EAAS,QAAQ;AAAA,EAErB;AAEA,SAAKH,EAAQ,WACXW,EAAUJ,CAAU,GACpBK,EAAYH,CAAY,IAGnB,EAAE,WAAAR,GAAW,MAAMM,GAAY,QAAQE,GAAc,UAAAN,GAAU,OAAAC,EAAA;AACxE;"}
1
+ {"version":3,"file":"useScriptTag.js","sources":["../src/composables/useScriptTag/useScriptTag.ts"],"sourcesContent":["import { onMounted, onUnmounted, ref } from 'vue';\n\ntype UseScriptOptions = {\n manual: boolean;\n};\n\nexport default function useScriptTag(url: string, options: UseScriptOptions = { manual: false }) {\n const scriptTag = ref<HTMLScriptElement | null>(null);\n const isLoaded = ref(false);\n const error = ref<Error | null>(null);\n\n const setIsLoaded = () => (isLoaded.value = true);\n const setError = (e: ErrorEvent) => (error.value = e.error);\n\n function loadScript() {\n let el = document.querySelector<HTMLScriptElement>(`script[src=\"${url}\"]`);\n\n if (!el) {\n isLoaded.value = false;\n error.value = null;\n\n el = document.createElement('script');\n\n el.type = 'text/javascript';\n el.async = true;\n el.src = url;\n el.addEventListener('load', setIsLoaded);\n el.addEventListener('error', setError);\n document.head.appendChild(el);\n } else {\n isLoaded.value = true;\n }\n\n scriptTag.value = el;\n }\n\n function unloadScript() {\n if (!document) {\n return;\n }\n\n const elToBeRemoved = document.querySelector<HTMLScriptElement>(`script[src=\"${url}\"]`);\n\n if (elToBeRemoved) {\n elToBeRemoved.removeEventListener('load', setIsLoaded);\n elToBeRemoved.removeEventListener('error', setError);\n\n document.head.removeChild(elToBeRemoved);\n\n scriptTag.value = null;\n isLoaded.value = false;\n }\n }\n\n if (!options.manual) {\n onMounted(loadScript);\n onUnmounted(unloadScript);\n }\n\n return { scriptTag, load: loadScript, unload: unloadScript, isLoaded, error };\n}\n"],"names":["useScriptTag","url","options","scriptTag","ref","isLoaded","error","setIsLoaded","setError","loadScript","el","unloadScript","elToBeRemoved","onMounted","onUnmounted"],"mappings":";AAMA,SAAwBA,EAAaC,GAAaC,IAA4B,EAAE,QAAQ,MAAS;AACzF,QAAAC,IAAYC,EAA8B,IAAI,GAC9CC,IAAWD,EAAI,EAAK,GACpBE,IAAQF,EAAkB,IAAI,GAE9BG,IAAc,MAAOF,EAAS,QAAQ,IACtCG,IAAW,CAAC,MAAmBF,EAAM,QAAQ,EAAE;AAErD,WAASG,IAAa;AACpB,QAAIC,IAAK,SAAS,cAAiC,eAAeT,CAAG,IAAI;AAEzE,IAAKS,IAaHL,EAAS,QAAQ,MAZjBA,EAAS,QAAQ,IACjBC,EAAM,QAAQ,MAETI,IAAA,SAAS,cAAc,QAAQ,GAEpCA,EAAG,OAAO,mBACVA,EAAG,QAAQ,IACXA,EAAG,MAAMT,GACNS,EAAA,iBAAiB,QAAQH,CAAW,GACpCG,EAAA,iBAAiB,SAASF,CAAQ,GAC5B,SAAA,KAAK,YAAYE,CAAE,IAK9BP,EAAU,QAAQO;AAAA,EAAA;AAGpB,WAASC,IAAe;AACtB,QAAI,CAAC;AACH;AAGF,UAAMC,IAAgB,SAAS,cAAiC,eAAeX,CAAG,IAAI;AAEtF,IAAIW,MACYA,EAAA,oBAAoB,QAAQL,CAAW,GACvCK,EAAA,oBAAoB,SAASJ,CAAQ,GAE1C,SAAA,KAAK,YAAYI,CAAa,GAEvCT,EAAU,QAAQ,MAClBE,EAAS,QAAQ;AAAA,EACnB;AAGE,SAACH,EAAQ,WACXW,EAAUJ,CAAU,GACpBK,EAAYH,CAAY,IAGnB,EAAE,WAAAR,GAAW,MAAMM,GAAY,QAAQE,GAAc,UAAAN,GAAU,OAAAC,EAAM;AAC9E;"}
package/dist/useSearch.js CHANGED
@@ -1,23 +1,23 @@
1
1
  import f from "lodash-es/get";
2
- import { computed as s } from "vue";
3
- import { i as l, s as p } from "./searchFuzzy-DBDE6jkd.js";
4
- import { normalizeText as h } from "./utils/helpers.js";
5
- function S({ items: t, fieldNames: e, trackBy: a = "id" }) {
6
- const i = s(() => {
2
+ import { computed as l } from "vue";
3
+ import { i as s, s as h } from "./searchFuzzy-DRasJ33G.js";
4
+ import { normalizeText as m } from "./utils/helpers.js";
5
+ function S({ items: t, fieldNames: u, trackBy: o = "id" }) {
6
+ const c = l(() => {
7
7
  const r = {};
8
- return !e || !e.length || t.value.forEach((o) => {
9
- const n = String(o[a]);
10
- r[n] = e.map((u) => h(f(o, u.split(".")))).filter(Boolean).join(" ");
8
+ return !u || !u.length || t.value.forEach((e) => {
9
+ const n = String(e[o]);
10
+ r[n] = u.map((a) => m(f(e, a.split(".")))).filter(Boolean).join(" ");
11
11
  }), r;
12
12
  });
13
- function c(r, o) {
14
- return o?.fuzzy && l(t.value) ? p(r, t.value, { fieldNames: e }) : t.value.filter((n) => {
15
- const u = String(n[a]);
16
- return i.value[u].includes(r.trim().toLowerCase());
13
+ function i(r, e) {
14
+ return e != null && e.fuzzy && s(t.value) ? h(r, t.value, { fieldNames: u }) : t.value.filter((n) => {
15
+ const a = String(n[o]);
16
+ return c.value[a].includes(r.trim().toLowerCase());
17
17
  });
18
18
  }
19
19
  return {
20
- searchFor: c
20
+ searchFor: i
21
21
  };
22
22
  }
23
23
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"useSearch.js","sources":["../src/composables/useSearch/useSearch.ts"],"sourcesContent":["import get from 'lodash-es/get';\nimport { computed } from 'vue';\n\nimport { isListOfObjects } from '../../../types/utils';\nimport { normalizeText } from '../../utils/helpers';\nimport searchFuzzy from '../../utils/searchFuzzy';\nimport { SearchMap, UseSearchArgs } from './useSearch.types';\n\nexport default function useSearch<Item = unknown>({ items, fieldNames, trackBy = 'id' }: UseSearchArgs<Item>) {\n const searchMap = computed<SearchMap>(() => {\n const newSearchMap = {};\n\n if (!fieldNames || !fieldNames.length) {\n return newSearchMap;\n }\n\n items.value.forEach((item) => {\n const itemKey = String(item[trackBy]);\n\n newSearchMap[itemKey] = fieldNames\n .map((fieldName) => {\n return normalizeText(get(item, fieldName.split('.'))); // get the field's value\n })\n .filter(Boolean)\n .join(' ');\n });\n\n return newSearchMap;\n });\n\n /**\n * Filter `items` by the `fieldNames`'s values.\n * @param options.fuzzy - will use fuzzy search if true\n */\n function searchFor(\n searchTerm: string,\n options?: {\n fuzzy?: boolean;\n },\n ): Item[] {\n if (options?.fuzzy && isListOfObjects(items.value)) {\n return searchFuzzy<Item>(searchTerm, items.value, { fieldNames });\n }\n\n return items.value.filter((item) => {\n const itemKey = String(item[trackBy]);\n\n return searchMap.value[itemKey].includes(searchTerm.trim().toLowerCase());\n });\n }\n\n return {\n searchFor,\n };\n}\n\nexport * from './useSearch.types';\n"],"names":["useSearch","items","fieldNames","trackBy","searchMap","computed","newSearchMap","item","itemKey","fieldName","normalizeText","get","searchFor","searchTerm","options","isListOfObjects","searchFuzzy"],"mappings":";;;;AAQA,SAAwBA,EAA0B,EAAE,OAAAC,GAAO,YAAAC,GAAY,SAAAC,IAAU,QAA6B;AAC5G,QAAMC,IAAYC,EAAoB,MAAM;AAC1C,UAAMC,IAAe,CAAA;AAErB,WAAI,CAACJ,KAAc,CAACA,EAAW,UAI/BD,EAAM,MAAM,QAAQ,CAACM,MAAS;AAC5B,YAAMC,IAAU,OAAOD,EAAKJ,CAAO,CAAC;AAEpC,MAAAG,EAAaE,CAAO,IAAIN,EACrB,IAAI,CAACO,MACGC,EAAcC,EAAIJ,GAAME,EAAU,MAAM,GAAG,CAAC,CAAC,CACrD,EACA,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IACb,CAAC,GAEMH;AAAA,EACT,CAAC;AAMD,WAASM,EACPC,GACAC,GAGQ;AACR,WAAIA,GAAS,SAASC,EAAgBd,EAAM,KAAK,IACxCe,EAAkBH,GAAYZ,EAAM,OAAO,EAAE,YAAAC,GAAY,IAG3DD,EAAM,MAAM,OAAO,CAACM,MAAS;AAClC,YAAMC,IAAU,OAAOD,EAAKJ,CAAO,CAAC;AAEpC,aAAOC,EAAU,MAAMI,CAAO,EAAE,SAASK,EAAW,OAAO,aAAa;AAAA,IAC1E,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,WAAAD;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"useSearch.js","sources":["../src/composables/useSearch/useSearch.ts"],"sourcesContent":["import get from 'lodash-es/get';\nimport { computed } from 'vue';\n\nimport { isListOfObjects } from '../../../types/utils';\nimport { normalizeText } from '../../utils/helpers';\nimport searchFuzzy from '../../utils/searchFuzzy';\nimport { SearchMap, UseSearchArgs } from './useSearch.types';\n\nexport default function useSearch<Item = unknown>({ items, fieldNames, trackBy = 'id' }: UseSearchArgs<Item>) {\n const searchMap = computed<SearchMap>(() => {\n const newSearchMap = {};\n\n if (!fieldNames || !fieldNames.length) {\n return newSearchMap;\n }\n\n items.value.forEach((item) => {\n const itemKey = String(item[trackBy]);\n\n newSearchMap[itemKey] = fieldNames\n .map((fieldName) => {\n return normalizeText(get(item, fieldName.split('.'))); // get the field's value\n })\n .filter(Boolean)\n .join(' ');\n });\n\n return newSearchMap;\n });\n\n /**\n * Filter `items` by the `fieldNames`'s values.\n * @param options.fuzzy - will use fuzzy search if true\n */\n function searchFor(\n searchTerm: string,\n options?: {\n fuzzy?: boolean;\n },\n ): Item[] {\n if (options?.fuzzy && isListOfObjects(items.value)) {\n return searchFuzzy<Item>(searchTerm, items.value, { fieldNames });\n }\n\n return items.value.filter((item) => {\n const itemKey = String(item[trackBy]);\n\n return searchMap.value[itemKey].includes(searchTerm.trim().toLowerCase());\n });\n }\n\n return {\n searchFor,\n };\n}\n\nexport * from './useSearch.types';\n"],"names":["useSearch","items","fieldNames","trackBy","searchMap","computed","newSearchMap","item","itemKey","fieldName","normalizeText","get","searchFor","searchTerm","options","isListOfObjects","searchFuzzy"],"mappings":";;;;AAQA,SAAwBA,EAA0B,EAAE,OAAAC,GAAO,YAAAC,GAAY,SAAAC,IAAU,QAA6B;AACtG,QAAAC,IAAYC,EAAoB,MAAM;AAC1C,UAAMC,IAAe,CAAC;AAEtB,WAAI,CAACJ,KAAc,CAACA,EAAW,UAIzBD,EAAA,MAAM,QAAQ,CAACM,MAAS;AAC5B,YAAMC,IAAU,OAAOD,EAAKJ,CAAO,CAAC;AAEpC,MAAAG,EAAaE,CAAO,IAAIN,EACrB,IAAI,CAACO,MACGC,EAAcC,EAAIJ,GAAME,EAAU,MAAM,GAAG,CAAC,CAAC,CACrD,EACA,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA,CACZ,GAEMH;AAAA,EAAA,CACR;AAMQ,WAAAM,EACPC,GACAC,GAGQ;AACR,WAAIA,KAAA,QAAAA,EAAS,SAASC,EAAgBd,EAAM,KAAK,IACxCe,EAAkBH,GAAYZ,EAAM,OAAO,EAAE,YAAAC,GAAY,IAG3DD,EAAM,MAAM,OAAO,CAACM,MAAS;AAClC,YAAMC,IAAU,OAAOD,EAAKJ,CAAO,CAAC;AAE7B,aAAAC,EAAU,MAAMI,CAAO,EAAE,SAASK,EAAW,OAAO,aAAa;AAAA,IAAA,CACzE;AAAA,EAAA;AAGI,SAAA;AAAA,IACL,WAAAD;AAAA,EACF;AACF;"}
@@ -1,88 +1,88 @@
1
- import { computed as r, toValue as N, ref as T } from "vue";
2
- function x({
3
- items: y,
4
- trackBy: p = "id",
5
- shouldDisable: u,
1
+ import { computed as f, toValue as w, ref as x } from "vue";
2
+ function R({
3
+ items: g,
4
+ trackBy: A = "id",
5
+ shouldDisable: t,
6
6
  shouldPreselect: o
7
7
  }) {
8
- const f = r(() => N(y));
9
- function n(e) {
10
- return String(e[p]);
8
+ const v = f(() => w(g));
9
+ function r(e) {
10
+ return String(e[A]);
11
11
  }
12
- const l = r(
13
- () => f.value.reduce(
14
- (e, c) => (e[n(c)] = c, e),
12
+ const c = f(
13
+ () => v.value.reduce(
14
+ (e, u) => (e[r(u)] = u, e),
15
15
  {}
16
16
  )
17
- ), t = T(/* @__PURE__ */ new Set());
18
- function g(e) {
19
- u?.(l.value[n(e)]) || t.value.add(n(e));
17
+ ), n = x(/* @__PURE__ */ new Set());
18
+ function m(e) {
19
+ t != null && t(c.value[r(e)]) || n.value.add(r(e));
20
20
  }
21
- function A(e) {
22
- u?.(l.value[n(e)]) || t.value.delete(n(e));
21
+ function E(e) {
22
+ t != null && t(c.value[r(e)]) || n.value.delete(r(e));
23
23
  }
24
- function m(e) {
25
- if (u?.(l.value[n(e)]))
24
+ function k(e) {
25
+ if (t != null && t(c.value[r(e)]))
26
26
  return;
27
- t.value.has(n(e)) ? t.value.delete(n(e)) : t.value.add(n(e));
27
+ n.value.has(r(e)) ? n.value.delete(r(e)) : n.value.add(r(e));
28
28
  }
29
- function v() {
30
- f.value.forEach((e) => {
31
- u?.(e) || t.value.add(n(e));
29
+ function l() {
30
+ v.value.forEach((e) => {
31
+ t != null && t(e) || n.value.add(r(e));
32
32
  });
33
33
  }
34
34
  function a() {
35
- typeof u == "function" ? t.value.forEach((e, c) => {
36
- u(l.value[c]) || t.value.delete(c);
37
- }) : t.value.clear();
35
+ typeof t == "function" ? n.value.forEach((e, u) => {
36
+ t(c.value[u]) || n.value.delete(u);
37
+ }) : n.value.clear();
38
38
  }
39
- function E() {
40
- d.value ? a() : v();
39
+ function z() {
40
+ y.value ? a() : l();
41
41
  }
42
42
  function i() {
43
- a(), typeof o == "function" && f.value.forEach((e) => {
44
- o(e) && t.value.add(n(e));
43
+ a(), typeof o == "function" && v.value.forEach((e) => {
44
+ o(e) && n.value.add(r(e));
45
45
  });
46
46
  }
47
- function k(e) {
48
- return t.value.has(n(e));
47
+ function I(e) {
48
+ return n.value.has(r(e));
49
49
  }
50
- function z(e) {
51
- return typeof u != "function" ? !1 : u(l.value[n(e)]);
50
+ function K(e) {
51
+ return typeof t != "function" ? !1 : t(c.value[r(e)]);
52
52
  }
53
- const I = r(() => Array.from(t.value.keys()).map((e) => l.value[e])), s = r(() => t.value.size === f.value.length), d = r(() => {
54
- if (typeof u != "function")
55
- return s.value;
56
- for (const e of f.value)
57
- if (!u(e) && !t.value.has(n(e)))
53
+ const N = f(() => Array.from(n.value.keys()).map((e) => c.value[e])), S = f(() => n.value.size === v.value.length), y = f(() => {
54
+ if (typeof t != "function")
55
+ return S.value;
56
+ for (const e of v.value)
57
+ if (!t(e) && !n.value.has(r(e)))
58
58
  return !1;
59
59
  return !0;
60
- }), S = r(() => t.value.size > 0), K = r(() => {
61
- if (typeof u != "function")
62
- return S.value;
63
- for (const e of t.value.keys())
64
- if (!u(l.value[e]))
60
+ }), p = f(() => n.value.size > 0), T = f(() => {
61
+ if (typeof t != "function")
62
+ return p.value;
63
+ for (const e of n.value.keys())
64
+ if (!t(c.value[e]))
65
65
  return !0;
66
66
  return !1;
67
67
  });
68
68
  return i(), {
69
- select: g,
70
- unselect: A,
71
- selectToggle: m,
72
- selectAll: v,
69
+ select: m,
70
+ unselect: E,
71
+ selectToggle: k,
72
+ selectAll: l,
73
73
  unselectAll: a,
74
- selectToggleAll: E,
74
+ selectToggleAll: z,
75
75
  resetSelection: i,
76
- isSelected: k,
77
- isSelectDisabled: z,
78
- selectedItems: I,
79
- allSelected: s,
80
- allNonDisabledSelected: d,
81
- someSelected: S,
82
- someNonDisabledSelected: K
76
+ isSelected: I,
77
+ isSelectDisabled: K,
78
+ selectedItems: N,
79
+ allSelected: S,
80
+ allNonDisabledSelected: y,
81
+ someSelected: p,
82
+ someNonDisabledSelected: T
83
83
  };
84
84
  }
85
85
  export {
86
- x as default
86
+ R as default
87
87
  };
88
88
  //# sourceMappingURL=useSelection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSelection.js","sources":["../src/composables/useSelection/useSelection.ts"],"sourcesContent":["import { computed, ref, toValue } from 'vue';\n\nimport { UseSelection, UseSelectionArgs } from './useSelection.types';\n\nexport default function useSelection<Item extends object>({\n items,\n trackBy = 'id',\n shouldDisable,\n shouldPreselect,\n}: UseSelectionArgs<Item>): UseSelection<Item> {\n const itemsRef = computed(() => toValue(items));\n\n function getItemKey(item: Item) {\n return String(item[trackBy]);\n }\n\n const itemsByKey = computed(() =>\n itemsRef.value.reduce(\n (map, item) => {\n map[getItemKey(item)] = item;\n\n return map;\n },\n {} as { [key: string]: Item },\n ),\n );\n\n /**\n * A set of item keys that are currently selected, regardless if they are disabled\n */\n const selectedSet = ref(new Set<string>());\n\n function select(item: Item) {\n if (shouldDisable?.(itemsByKey.value[getItemKey(item)])) {\n return;\n }\n\n selectedSet.value.add(getItemKey(item));\n }\n\n function unselect(item: Item) {\n if (shouldDisable?.(itemsByKey.value[getItemKey(item)])) {\n return;\n }\n\n selectedSet.value.delete(getItemKey(item));\n }\n\n function selectToggle(item: Item) {\n if (shouldDisable?.(itemsByKey.value[getItemKey(item)])) {\n return;\n }\n\n const isSelected = selectedSet.value.has(getItemKey(item));\n\n if (isSelected) {\n selectedSet.value.delete(getItemKey(item));\n } else {\n selectedSet.value.add(getItemKey(item));\n }\n }\n\n function selectAll() {\n itemsRef.value.forEach((item) => {\n if (!shouldDisable?.(item)) {\n selectedSet.value.add(getItemKey(item));\n }\n });\n }\n\n function unselectAll() {\n if (typeof shouldDisable === 'function') {\n selectedSet.value.forEach((_isSelected, itemKey) => {\n if (!shouldDisable(itemsByKey.value[itemKey])) {\n selectedSet.value.delete(itemKey);\n }\n });\n } else {\n selectedSet.value.clear();\n }\n }\n\n function selectToggleAll() {\n if (allNonDisabledSelected.value) {\n unselectAll();\n } else {\n selectAll();\n }\n }\n\n function resetSelection() {\n unselectAll();\n\n if (typeof shouldPreselect === 'function') {\n itemsRef.value.forEach((item) => {\n if (shouldPreselect(item)) {\n selectedSet.value.add(getItemKey(item));\n }\n });\n }\n }\n\n function isSelected(item: Item) {\n return selectedSet.value.has(getItemKey(item));\n }\n\n function isSelectDisabled(item: Item) {\n if (typeof shouldDisable !== 'function') {\n return false;\n }\n\n return shouldDisable(itemsByKey.value[getItemKey(item)]);\n }\n\n const selectedItems = computed(() => {\n return Array.from(selectedSet.value.keys()).map((itemKey) => itemsByKey.value[itemKey]);\n });\n\n const allSelected = computed(() => {\n return selectedSet.value.size === itemsRef.value.length;\n });\n\n const allNonDisabledSelected = computed(() => {\n if (typeof shouldDisable !== 'function') {\n return allSelected.value;\n }\n\n for (const item of itemsRef.value) {\n if (!shouldDisable(item) && !selectedSet.value.has(getItemKey(item))) {\n return false;\n }\n }\n\n return true;\n });\n\n const someSelected = computed(() => {\n return selectedSet.value.size > 0;\n });\n\n const someNonDisabledSelected = computed(() => {\n if (typeof shouldDisable !== 'function') {\n return someSelected.value;\n }\n\n for (const itemKey of selectedSet.value.keys()) {\n if (!shouldDisable(itemsByKey.value[itemKey])) {\n return true;\n }\n }\n\n return false;\n });\n\n resetSelection();\n\n return {\n select,\n unselect,\n selectToggle,\n selectAll,\n unselectAll,\n selectToggleAll,\n resetSelection,\n isSelected,\n isSelectDisabled,\n selectedItems,\n allSelected,\n allNonDisabledSelected,\n someSelected,\n someNonDisabledSelected,\n };\n}\n\nexport * from './useSelection.types';\n"],"names":["useSelection","items","trackBy","shouldDisable","shouldPreselect","itemsRef","computed","toValue","getItemKey","item","itemsByKey","map","selectedSet","ref","select","unselect","selectToggle","selectAll","unselectAll","_isSelected","itemKey","selectToggleAll","allNonDisabledSelected","resetSelection","isSelected","isSelectDisabled","selectedItems","allSelected","someSelected","someNonDisabledSelected"],"mappings":"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"}
1
+ {"version":3,"file":"useSelection.js","sources":["../src/composables/useSelection/useSelection.ts"],"sourcesContent":["import { computed, ref, toValue } from 'vue';\n\nimport { UseSelection, UseSelectionArgs } from './useSelection.types';\n\nexport default function useSelection<Item extends object>({\n items,\n trackBy = 'id',\n shouldDisable,\n shouldPreselect,\n}: UseSelectionArgs<Item>): UseSelection<Item> {\n const itemsRef = computed(() => toValue(items));\n\n function getItemKey(item: Item) {\n return String(item[trackBy]);\n }\n\n const itemsByKey = computed(() =>\n itemsRef.value.reduce(\n (map, item) => {\n map[getItemKey(item)] = item;\n\n return map;\n },\n {} as { [key: string]: Item },\n ),\n );\n\n /**\n * A set of item keys that are currently selected, regardless if they are disabled\n */\n const selectedSet = ref(new Set<string>());\n\n function select(item: Item) {\n if (shouldDisable?.(itemsByKey.value[getItemKey(item)])) {\n return;\n }\n\n selectedSet.value.add(getItemKey(item));\n }\n\n function unselect(item: Item) {\n if (shouldDisable?.(itemsByKey.value[getItemKey(item)])) {\n return;\n }\n\n selectedSet.value.delete(getItemKey(item));\n }\n\n function selectToggle(item: Item) {\n if (shouldDisable?.(itemsByKey.value[getItemKey(item)])) {\n return;\n }\n\n const isSelected = selectedSet.value.has(getItemKey(item));\n\n if (isSelected) {\n selectedSet.value.delete(getItemKey(item));\n } else {\n selectedSet.value.add(getItemKey(item));\n }\n }\n\n function selectAll() {\n itemsRef.value.forEach((item) => {\n if (!shouldDisable?.(item)) {\n selectedSet.value.add(getItemKey(item));\n }\n });\n }\n\n function unselectAll() {\n if (typeof shouldDisable === 'function') {\n selectedSet.value.forEach((_isSelected, itemKey) => {\n if (!shouldDisable(itemsByKey.value[itemKey])) {\n selectedSet.value.delete(itemKey);\n }\n });\n } else {\n selectedSet.value.clear();\n }\n }\n\n function selectToggleAll() {\n if (allNonDisabledSelected.value) {\n unselectAll();\n } else {\n selectAll();\n }\n }\n\n function resetSelection() {\n unselectAll();\n\n if (typeof shouldPreselect === 'function') {\n itemsRef.value.forEach((item) => {\n if (shouldPreselect(item)) {\n selectedSet.value.add(getItemKey(item));\n }\n });\n }\n }\n\n function isSelected(item: Item) {\n return selectedSet.value.has(getItemKey(item));\n }\n\n function isSelectDisabled(item: Item) {\n if (typeof shouldDisable !== 'function') {\n return false;\n }\n\n return shouldDisable(itemsByKey.value[getItemKey(item)]);\n }\n\n const selectedItems = computed(() => {\n return Array.from(selectedSet.value.keys()).map((itemKey) => itemsByKey.value[itemKey]);\n });\n\n const allSelected = computed(() => {\n return selectedSet.value.size === itemsRef.value.length;\n });\n\n const allNonDisabledSelected = computed(() => {\n if (typeof shouldDisable !== 'function') {\n return allSelected.value;\n }\n\n for (const item of itemsRef.value) {\n if (!shouldDisable(item) && !selectedSet.value.has(getItemKey(item))) {\n return false;\n }\n }\n\n return true;\n });\n\n const someSelected = computed(() => {\n return selectedSet.value.size > 0;\n });\n\n const someNonDisabledSelected = computed(() => {\n if (typeof shouldDisable !== 'function') {\n return someSelected.value;\n }\n\n for (const itemKey of selectedSet.value.keys()) {\n if (!shouldDisable(itemsByKey.value[itemKey])) {\n return true;\n }\n }\n\n return false;\n });\n\n resetSelection();\n\n return {\n select,\n unselect,\n selectToggle,\n selectAll,\n unselectAll,\n selectToggleAll,\n resetSelection,\n isSelected,\n isSelectDisabled,\n selectedItems,\n allSelected,\n allNonDisabledSelected,\n someSelected,\n someNonDisabledSelected,\n };\n}\n\nexport * from './useSelection.types';\n"],"names":["useSelection","items","trackBy","shouldDisable","shouldPreselect","itemsRef","computed","toValue","getItemKey","item","itemsByKey","map","selectedSet","ref","select","unselect","selectToggle","selectAll","unselectAll","_isSelected","itemKey","selectToggleAll","allNonDisabledSelected","resetSelection","isSelected","isSelectDisabled","selectedItems","allSelected","someSelected","someNonDisabledSelected"],"mappings":"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"}
@@ -1,19 +1,20 @@
1
- import d from "@leaflink/snitch";
2
- import { u as C } from "./index-GUu9zvbg.js";
3
- import { isRef as I, toValue as D, nextTick as w, computed as i, ref as y, watch as A, onMounted as S, onBeforeUnmount as $ } from "vue";
4
- function G({ list: o, from: l, to: e }) {
5
- if (l === e) return;
6
- const r = I(o), a = r ? [...D(o)] : D(o);
1
+ import v from "@leaflink/snitch";
2
+ import { u as I } from "./index-C14LhAwV.js";
3
+ import { isRef as w, toValue as D, nextTick as A, computed as i, ref as y, watch as S, onMounted as $, onBeforeUnmount as G } from "vue";
4
+ function O({ list: n, from: s, to: e }) {
5
+ if (s === e) return;
6
+ const r = w(n), a = r ? [...D(n)] : D(n);
7
7
  if (e >= 0 && e < a.length) {
8
- const s = a.splice(l, 1)[0];
9
- w(() => {
10
- a.splice(e, 0, s), r && (o.value = a);
8
+ const u = a.splice(s, 1)[0];
9
+ A(() => {
10
+ a.splice(e, 0, u), r && (n.value = a);
11
11
  });
12
12
  }
13
13
  }
14
- function O(o, l) {
15
- const e = v(o.target).cloneNode(!0);
16
- e.classList.add(...l), e.style.position = "absolute", e.style.top = "-9999px", e.style.listStyle = "none", e.setAttribute("data-test", `${e.dataset.test}|ghost`), e.removeAttribute("draggable"), document.body.appendChild(e), o.dataTransfer?.setDragImage(e, e.offsetWidth / 2, e.offsetHeight / 2);
14
+ function B(n, s) {
15
+ var a;
16
+ const e = c(n.target).cloneNode(!0);
17
+ e.classList.add(...s), e.style.position = "absolute", e.style.top = "-9999px", e.style.listStyle = "none", e.setAttribute("data-test", `${e.dataset.test}|ghost`), e.removeAttribute("draggable"), document.body.appendChild(e), (a = n.dataTransfer) == null || a.setDragImage(e, e.offsetWidth / 2, e.offsetHeight / 2);
17
18
  function r() {
18
19
  requestAnimationFrame(() => {
19
20
  document.body.removeChild(e);
@@ -24,38 +25,45 @@ function O(o, l) {
24
25
  cleanupGhostElement: r
25
26
  };
26
27
  }
27
- function v(o) {
28
- const l = o?.closest("[draggable=true]");
29
- if (!l) throw new Error("Draggable element not found");
30
- return l;
28
+ function c(n) {
29
+ const s = n == null ? void 0 : n.closest("[draggable=true]");
30
+ if (!s) throw new Error("Draggable element not found");
31
+ return s;
31
32
  }
32
- function k({
33
- isEnabled: o = !0,
34
- sortInPlace: l = !0,
33
+ function q({
34
+ isEnabled: n = !0,
35
+ sortInPlace: s = !0,
35
36
  ...e
36
37
  }) {
37
- const r = i(() => C(e.ref)), a = y(-1), s = y(-1), b = i(() => a.value !== -1), T = i(() => e.ghostClass?.split(" ") || []), f = i(() => e.chosenClass?.split(" ") || []), g = (t) => {
38
+ const r = i(() => I(e.ref)), a = y(-1), u = y(-1), b = i(() => a.value !== -1), T = i(() => {
39
+ var t;
40
+ return ((t = e.ghostClass) == null ? void 0 : t.split(" ")) || [];
41
+ }), f = i(() => {
42
+ var t;
43
+ return ((t = e.chosenClass) == null ? void 0 : t.split(" ")) || [];
44
+ }), g = (t) => {
45
+ var l;
38
46
  if (!(!t.dataTransfer || !r.value)) {
39
47
  t.dataTransfer.setData("text/plain", ""), t.dataTransfer.effectAllowed = "move";
40
48
  try {
41
- const n = v(t.target), u = Array.from(r.value.children).indexOf(n);
42
- if (u === -1) return;
43
- const { cleanupGhostElement: c } = O(t, T.value);
44
- s.value = a.value = u, n.classList.add(...f.value), c(), e.onDragStart?.({ ...t, oldIndex: u });
45
- } catch (n) {
46
- d.error(`Error in drag start: ${n}`);
49
+ const o = c(t.target), d = Array.from(r.value.children).indexOf(o);
50
+ if (d === -1) return;
51
+ const { cleanupGhostElement: C } = B(t, T.value);
52
+ u.value = a.value = d, o.classList.add(...f.value), C(), (l = e.onDragStart) == null || l.call(e, { ...t, oldIndex: d });
53
+ } catch (o) {
54
+ v.error(`Error in drag start: ${o}`);
47
55
  }
48
56
  }
49
57
  }, m = (t) => {
50
58
  if (!(!t.dataTransfer || !r.value)) {
51
59
  t.dataTransfer.dropEffect = "move";
52
60
  try {
53
- const n = v(t.target), u = Array.from(r.value.children).indexOf(n);
54
- if (u === -1 || u === a.value) return;
55
- const c = r.value.children[a.value];
56
- r.value.insertBefore(c, u < a.value ? n : n.nextSibling), a.value = u;
57
- } catch (n) {
58
- d.error(`Error in drag enter: ${n}`);
61
+ const l = c(t.target), o = Array.from(r.value.children).indexOf(l);
62
+ if (o === -1 || o === a.value) return;
63
+ const d = r.value.children[a.value];
64
+ r.value.insertBefore(d, o < a.value ? l : l.nextSibling), a.value = o;
65
+ } catch (l) {
66
+ v.error(`Error in drag enter: ${l}`);
59
67
  }
60
68
  }
61
69
  };
@@ -65,43 +73,44 @@ function k({
65
73
  function E(t) {
66
74
  if (t.preventDefault(), !!r.value)
67
75
  try {
68
- if (s.value === a.value || !l) return;
69
- G({ list: e.list, from: s.value, to: a.value });
70
- } catch (n) {
71
- d.error(`Error in drag drop: ${n}`);
76
+ if (u.value === a.value || !s) return;
77
+ O({ list: e.list, from: u.value, to: a.value });
78
+ } catch (l) {
79
+ v.error(`Error in drag drop: ${l}`);
72
80
  }
73
81
  }
74
- function p(t) {
82
+ function L(t) {
83
+ var l;
75
84
  try {
76
- v(t.target).classList.remove(...f.value), e.onDragEnd?.({
85
+ c(t.target).classList.remove(...f.value), (l = e.onDragEnd) == null || l.call(e, {
77
86
  ...t,
78
- oldIndex: s.value,
87
+ oldIndex: u.value,
79
88
  newIndex: a.value
80
- }), s.value = a.value = -1;
81
- } catch (n) {
82
- d.error(`Error in drag end: ${n}`);
89
+ }), u.value = a.value = -1;
90
+ } catch (o) {
91
+ v.error(`Error in drag end: ${o}`);
83
92
  }
84
93
  }
85
- A(
86
- () => o,
87
- () => o ? L() : x()
94
+ S(
95
+ () => n,
96
+ () => n ? p() : x()
88
97
  );
89
- function L() {
90
- r.value && (r.value.addEventListener("dragstart", g), r.value.addEventListener("dragend", p), r.value.addEventListener("dragenter", m), r.value.addEventListener("dragover", h), r.value.addEventListener("drop", E));
98
+ function p() {
99
+ r.value && (r.value.addEventListener("dragstart", g), r.value.addEventListener("dragend", L), r.value.addEventListener("dragenter", m), r.value.addEventListener("dragover", h), r.value.addEventListener("drop", E));
91
100
  }
92
101
  function x() {
93
- r.value && (r.value.removeEventListener("dragstart", g), r.value.removeEventListener("dragend", p), r.value.removeEventListener("dragenter", m), r.value.removeEventListener("dragover", h), r.value.removeEventListener("drop", E));
102
+ r.value && (r.value.removeEventListener("dragstart", g), r.value.removeEventListener("dragend", L), r.value.removeEventListener("dragenter", m), r.value.removeEventListener("dragover", h), r.value.removeEventListener("drop", E));
94
103
  }
95
- return S(() => {
96
- o && L();
97
- }), $(x), {
104
+ return $(() => {
105
+ n && p();
106
+ }), G(x), {
98
107
  isDragging: b,
99
- oldIndex: s,
108
+ oldIndex: u,
100
109
  newIndex: a
101
110
  };
102
111
  }
103
112
  export {
104
- k as default,
105
- G as moveSortableElements
113
+ q as default,
114
+ O as moveSortableElements
106
115
  };
107
116
  //# sourceMappingURL=useSortable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSortable.js","sources":["../src/composables/useSortable/useSortable.utils.ts","../src/composables/useSortable/useSortable.ts"],"sourcesContent":["import { isRef, nextTick, Ref, toValue } from 'vue';\n\nimport { MoveSortableElementsOptions } from './useSortable.types';\n\n/**\n * Move sortable elements in the list\n * @param list List of sortable elements\n * @param from Original element position\n * @param to New element position\n */\nexport function moveSortableElements<ListItem>({ list, from, to }: MoveSortableElementsOptions<ListItem>): void {\n if (from === to) return;\n\n const _listIsRef = isRef(list);\n // When the list is a ref, make a shallow copy of it to avoid repeatedly triggering side effects when moving elements\n const listCopy = _listIsRef ? [...toValue(list)] : toValue(list);\n\n if (to >= 0 && to < listCopy.length) {\n const element = listCopy.splice(from, 1)[0];\n nextTick(() => {\n listCopy.splice(to, 0, element);\n // When list is ref, assign listCopy to list.value\n if (_listIsRef) (list as Ref).value = listCopy;\n });\n }\n}\n\n/**\n * Create a ghost element for dragging, which is the element that follows the cursor while dragging\n * @param e Drag event\n * @param ghostClass Custom classes to be added to the ghost element\n * @returns Ghost element and cleanup function\n */\nexport function createGhostElement(e: DragEvent, ghostClass: string[]) {\n const ghost = getValidDragTarget(e.target as HTMLElement).cloneNode(true) as HTMLElement;\n\n ghost.classList.add(...ghostClass);\n\n ghost.style.position = 'absolute';\n ghost.style.top = '-9999px';\n ghost.style.listStyle = 'none';\n ghost.setAttribute('data-test', `${ghost.dataset.test}|ghost`);\n ghost.removeAttribute('draggable');\n\n document.body.appendChild(ghost);\n\n e.dataTransfer?.setDragImage(ghost, ghost.offsetWidth / 2, ghost.offsetHeight / 2);\n\n function cleanupGhostElement() {\n requestAnimationFrame(() => {\n document.body.removeChild(ghost);\n });\n }\n\n return {\n ghost,\n cleanupGhostElement,\n };\n}\n\n/**\n * Get the valid draggable target element\n * @param element\n * @returns Draggable element\n */\nexport function getValidDragTarget(element: HTMLElement | null) {\n const dragElement = element?.closest<HTMLElement>('[draggable=true]');\n if (!dragElement) throw new Error('Draggable element not found');\n return dragElement;\n}\n","import logger from '@leaflink/snitch';\nimport { unrefElement } from '@vueuse/core';\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue';\n\nimport type { UseSortableOptions, UseSortableReturn } from './useSortable.types';\nimport { createGhostElement, getValidDragTarget, moveSortableElements } from './useSortable.utils';\n\nexport * from './useSortable.types';\nexport { moveSortableElements } from './useSortable.utils';\n\nexport default function useSortable<SortableItem>({\n isEnabled = true,\n sortInPlace = true,\n ...options\n}: UseSortableOptions<SortableItem>): UseSortableReturn {\n const parentEl = computed(() => unrefElement(options.ref));\n\n const newIndex = ref(-1);\n const oldIndex = ref(-1);\n\n const isDragging = computed(() => newIndex.value !== -1);\n\n const ghostClasses = computed(() => options.ghostClass?.split(' ') || []);\n const chosenClasses = computed(() => options.chosenClass?.split(' ') || []);\n\n const handleDragStart = (e: DragEvent) => {\n if (!e.dataTransfer || !parentEl.value) return;\n e.dataTransfer.setData('text/plain', ''); // Required for Firefox\n e.dataTransfer.effectAllowed = 'move';\n\n try {\n const target = getValidDragTarget(e.target as HTMLElement);\n\n const index = Array.from(parentEl.value.children).indexOf(target);\n if (index === -1) return;\n\n const { cleanupGhostElement } = createGhostElement(e, ghostClasses.value);\n\n oldIndex.value = newIndex.value = index;\n\n target.classList.add(...chosenClasses.value);\n\n cleanupGhostElement();\n\n options.onDragStart?.({ ...e, oldIndex: index });\n } catch (error) {\n logger.error(`Error in drag start: ${error}`);\n }\n };\n\n const handleDragEnter = (e: DragEvent) => {\n if (!e.dataTransfer || !parentEl.value) return;\n e.dataTransfer.dropEffect = 'move';\n\n try {\n const target = getValidDragTarget(e.target as HTMLElement);\n\n const index = Array.from(parentEl.value.children).indexOf(target);\n if (index === -1 || index === newIndex.value) return;\n\n const draggedEl = parentEl.value.children[newIndex.value];\n parentEl.value.insertBefore(draggedEl, index < newIndex.value ? target : target.nextSibling);\n\n newIndex.value = index;\n } catch (error) {\n logger.error(`Error in drag enter: ${error}`);\n }\n };\n\n function handleDragOver(e: DragEvent) {\n e.preventDefault(); // Required to allow dropping\n }\n\n function handleDrop(e: DragEvent) {\n e.preventDefault();\n\n if (!parentEl.value) return;\n\n try {\n if (oldIndex.value === newIndex.value || !sortInPlace) return;\n moveSortableElements({ list: options.list, from: oldIndex.value, to: newIndex.value });\n } catch (error) {\n logger.error(`Error in drag drop: ${error}`);\n }\n }\n\n function handleDragEnd(e: DragEvent) {\n try {\n const target = getValidDragTarget(e.target as HTMLElement);\n\n target.classList.remove(...chosenClasses.value);\n\n options.onDragEnd?.({\n ...e,\n oldIndex: oldIndex.value,\n newIndex: newIndex.value,\n });\n\n oldIndex.value = newIndex.value = -1;\n } catch (error) {\n logger.error(`Error in drag end: ${error}`);\n }\n }\n\n watch(\n () => isEnabled,\n () => (isEnabled ? setupListeners() : removeListeners()),\n );\n\n function setupListeners() {\n if (!parentEl.value) return;\n\n parentEl.value.addEventListener('dragstart', handleDragStart);\n parentEl.value.addEventListener('dragend', handleDragEnd);\n parentEl.value.addEventListener('dragenter', handleDragEnter);\n parentEl.value.addEventListener('dragover', handleDragOver);\n parentEl.value.addEventListener('drop', handleDrop);\n }\n\n function removeListeners() {\n if (!parentEl.value) return;\n\n parentEl.value.removeEventListener('dragstart', handleDragStart);\n parentEl.value.removeEventListener('dragend', handleDragEnd);\n parentEl.value.removeEventListener('dragenter', handleDragEnter);\n parentEl.value.removeEventListener('dragover', handleDragOver);\n parentEl.value.removeEventListener('drop', handleDrop);\n }\n\n onMounted(() => {\n if (!isEnabled) return;\n setupListeners();\n });\n\n onBeforeUnmount(removeListeners);\n\n return {\n isDragging,\n oldIndex,\n newIndex,\n };\n}\n"],"names":["moveSortableElements","list","from","to","_listIsRef","isRef","listCopy","toValue","element","nextTick","createGhostElement","e","ghostClass","ghost","getValidDragTarget","cleanupGhostElement","dragElement","useSortable","isEnabled","sortInPlace","options","parentEl","computed","unrefElement","newIndex","ref","oldIndex","isDragging","ghostClasses","chosenClasses","handleDragStart","target","index","error","logger","handleDragEnter","draggedEl","handleDragOver","handleDrop","handleDragEnd","watch","setupListeners","removeListeners","onMounted","onBeforeUnmount"],"mappings":"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"}
1
+ {"version":3,"file":"useSortable.js","sources":["../src/composables/useSortable/useSortable.utils.ts","../src/composables/useSortable/useSortable.ts"],"sourcesContent":["import { isRef, nextTick, Ref, toValue } from 'vue';\n\nimport { MoveSortableElementsOptions } from './useSortable.types';\n\n/**\n * Move sortable elements in the list\n * @param list List of sortable elements\n * @param from Original element position\n * @param to New element position\n */\nexport function moveSortableElements<ListItem>({ list, from, to }: MoveSortableElementsOptions<ListItem>): void {\n if (from === to) return;\n\n const _listIsRef = isRef(list);\n // When the list is a ref, make a shallow copy of it to avoid repeatedly triggering side effects when moving elements\n const listCopy = _listIsRef ? [...toValue(list)] : toValue(list);\n\n if (to >= 0 && to < listCopy.length) {\n const element = listCopy.splice(from, 1)[0];\n nextTick(() => {\n listCopy.splice(to, 0, element);\n // When list is ref, assign listCopy to list.value\n if (_listIsRef) (list as Ref).value = listCopy;\n });\n }\n}\n\n/**\n * Create a ghost element for dragging, which is the element that follows the cursor while dragging\n * @param e Drag event\n * @param ghostClass Custom classes to be added to the ghost element\n * @returns Ghost element and cleanup function\n */\nexport function createGhostElement(e: DragEvent, ghostClass: string[]) {\n const ghost = getValidDragTarget(e.target as HTMLElement).cloneNode(true) as HTMLElement;\n\n ghost.classList.add(...ghostClass);\n\n ghost.style.position = 'absolute';\n ghost.style.top = '-9999px';\n ghost.style.listStyle = 'none';\n ghost.setAttribute('data-test', `${ghost.dataset.test}|ghost`);\n ghost.removeAttribute('draggable');\n\n document.body.appendChild(ghost);\n\n e.dataTransfer?.setDragImage(ghost, ghost.offsetWidth / 2, ghost.offsetHeight / 2);\n\n function cleanupGhostElement() {\n requestAnimationFrame(() => {\n document.body.removeChild(ghost);\n });\n }\n\n return {\n ghost,\n cleanupGhostElement,\n };\n}\n\n/**\n * Get the valid draggable target element\n * @param element\n * @returns Draggable element\n */\nexport function getValidDragTarget(element: HTMLElement | null) {\n const dragElement = element?.closest<HTMLElement>('[draggable=true]');\n if (!dragElement) throw new Error('Draggable element not found');\n return dragElement;\n}\n","import logger from '@leaflink/snitch';\nimport { unrefElement } from '@vueuse/core';\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue';\n\nimport type { UseSortableOptions, UseSortableReturn } from './useSortable.types';\nimport { createGhostElement, getValidDragTarget, moveSortableElements } from './useSortable.utils';\n\nexport * from './useSortable.types';\nexport { moveSortableElements } from './useSortable.utils';\n\nexport default function useSortable<SortableItem>({\n isEnabled = true,\n sortInPlace = true,\n ...options\n}: UseSortableOptions<SortableItem>): UseSortableReturn {\n const parentEl = computed(() => unrefElement(options.ref));\n\n const newIndex = ref(-1);\n const oldIndex = ref(-1);\n\n const isDragging = computed(() => newIndex.value !== -1);\n\n const ghostClasses = computed(() => options.ghostClass?.split(' ') || []);\n const chosenClasses = computed(() => options.chosenClass?.split(' ') || []);\n\n const handleDragStart = (e: DragEvent) => {\n if (!e.dataTransfer || !parentEl.value) return;\n e.dataTransfer.setData('text/plain', ''); // Required for Firefox\n e.dataTransfer.effectAllowed = 'move';\n\n try {\n const target = getValidDragTarget(e.target as HTMLElement);\n\n const index = Array.from(parentEl.value.children).indexOf(target);\n if (index === -1) return;\n\n const { cleanupGhostElement } = createGhostElement(e, ghostClasses.value);\n\n oldIndex.value = newIndex.value = index;\n\n target.classList.add(...chosenClasses.value);\n\n cleanupGhostElement();\n\n options.onDragStart?.({ ...e, oldIndex: index });\n } catch (error) {\n logger.error(`Error in drag start: ${error}`);\n }\n };\n\n const handleDragEnter = (e: DragEvent) => {\n if (!e.dataTransfer || !parentEl.value) return;\n e.dataTransfer.dropEffect = 'move';\n\n try {\n const target = getValidDragTarget(e.target as HTMLElement);\n\n const index = Array.from(parentEl.value.children).indexOf(target);\n if (index === -1 || index === newIndex.value) return;\n\n const draggedEl = parentEl.value.children[newIndex.value];\n parentEl.value.insertBefore(draggedEl, index < newIndex.value ? target : target.nextSibling);\n\n newIndex.value = index;\n } catch (error) {\n logger.error(`Error in drag enter: ${error}`);\n }\n };\n\n function handleDragOver(e: DragEvent) {\n e.preventDefault(); // Required to allow dropping\n }\n\n function handleDrop(e: DragEvent) {\n e.preventDefault();\n\n if (!parentEl.value) return;\n\n try {\n if (oldIndex.value === newIndex.value || !sortInPlace) return;\n moveSortableElements({ list: options.list, from: oldIndex.value, to: newIndex.value });\n } catch (error) {\n logger.error(`Error in drag drop: ${error}`);\n }\n }\n\n function handleDragEnd(e: DragEvent) {\n try {\n const target = getValidDragTarget(e.target as HTMLElement);\n\n target.classList.remove(...chosenClasses.value);\n\n options.onDragEnd?.({\n ...e,\n oldIndex: oldIndex.value,\n newIndex: newIndex.value,\n });\n\n oldIndex.value = newIndex.value = -1;\n } catch (error) {\n logger.error(`Error in drag end: ${error}`);\n }\n }\n\n watch(\n () => isEnabled,\n () => (isEnabled ? setupListeners() : removeListeners()),\n );\n\n function setupListeners() {\n if (!parentEl.value) return;\n\n parentEl.value.addEventListener('dragstart', handleDragStart);\n parentEl.value.addEventListener('dragend', handleDragEnd);\n parentEl.value.addEventListener('dragenter', handleDragEnter);\n parentEl.value.addEventListener('dragover', handleDragOver);\n parentEl.value.addEventListener('drop', handleDrop);\n }\n\n function removeListeners() {\n if (!parentEl.value) return;\n\n parentEl.value.removeEventListener('dragstart', handleDragStart);\n parentEl.value.removeEventListener('dragend', handleDragEnd);\n parentEl.value.removeEventListener('dragenter', handleDragEnter);\n parentEl.value.removeEventListener('dragover', handleDragOver);\n parentEl.value.removeEventListener('drop', handleDrop);\n }\n\n onMounted(() => {\n if (!isEnabled) return;\n setupListeners();\n });\n\n onBeforeUnmount(removeListeners);\n\n return {\n isDragging,\n oldIndex,\n newIndex,\n };\n}\n"],"names":["moveSortableElements","list","from","to","_listIsRef","isRef","listCopy","toValue","element","nextTick","createGhostElement","e","ghostClass","ghost","getValidDragTarget","_a","cleanupGhostElement","dragElement","useSortable","isEnabled","sortInPlace","options","parentEl","computed","unrefElement","newIndex","ref","oldIndex","isDragging","ghostClasses","chosenClasses","handleDragStart","target","index","error","logger","handleDragEnter","draggedEl","handleDragOver","handleDrop","handleDragEnd","watch","setupListeners","removeListeners","onMounted","onBeforeUnmount"],"mappings":";;;AAUO,SAASA,EAA+B,EAAE,MAAAC,GAAM,MAAAC,GAAM,IAAAC,KAAmD;AAC9G,MAAID,MAASC,EAAI;AAEX,QAAAC,IAAaC,EAAMJ,CAAI,GAEvBK,IAAWF,IAAa,CAAC,GAAGG,EAAQN,CAAI,CAAC,IAAIM,EAAQN,CAAI;AAE/D,MAAIE,KAAM,KAAKA,IAAKG,EAAS,QAAQ;AACnC,UAAME,IAAUF,EAAS,OAAOJ,GAAM,CAAC,EAAE,CAAC;AAC1C,IAAAO,EAAS,MAAM;AACJ,MAAAH,EAAA,OAAOH,GAAI,GAAGK,CAAO,GAE1BJ,MAAaH,EAAa,QAAQK;AAAA,IAAA,CACvC;AAAA,EAAA;AAEL;AAQgB,SAAAI,EAAmBC,GAAcC,GAAsB;;AACrE,QAAMC,IAAQC,EAAmBH,EAAE,MAAqB,EAAE,UAAU,EAAI;AAElE,EAAAE,EAAA,UAAU,IAAI,GAAGD,CAAU,GAEjCC,EAAM,MAAM,WAAW,YACvBA,EAAM,MAAM,MAAM,WAClBA,EAAM,MAAM,YAAY,QACxBA,EAAM,aAAa,aAAa,GAAGA,EAAM,QAAQ,IAAI,QAAQ,GAC7DA,EAAM,gBAAgB,WAAW,GAExB,SAAA,KAAK,YAAYA,CAAK,IAE7BE,IAAAJ,EAAA,iBAAA,QAAAI,EAAc,aAAaF,GAAOA,EAAM,cAAc,GAAGA,EAAM,eAAe;AAEhF,WAASG,IAAsB;AAC7B,0BAAsB,MAAM;AACjB,eAAA,KAAK,YAAYH,CAAK;AAAA,IAAA,CAChC;AAAA,EAAA;AAGI,SAAA;AAAA,IACL,OAAAA;AAAA,IACA,qBAAAG;AAAA,EACF;AACF;AAOO,SAASF,EAAmBN,GAA6B;AACxD,QAAAS,IAAcT,KAAA,gBAAAA,EAAS,QAAqB;AAClD,MAAI,CAACS,EAAmB,OAAA,IAAI,MAAM,6BAA6B;AACxD,SAAAA;AACT;AC3DA,SAAwBC,EAA0B;AAAA,EAChD,WAAAC,IAAY;AAAA,EACZ,aAAAC,IAAc;AAAA,EACd,GAAGC;AACL,GAAwD;AACtD,QAAMC,IAAWC,EAAS,MAAMC,EAAaH,EAAQ,GAAG,CAAC,GAEnDI,IAAWC,EAAI,EAAE,GACjBC,IAAWD,EAAI,EAAE,GAEjBE,IAAaL,EAAS,MAAME,EAAS,UAAU,EAAE,GAEjDI,IAAeN,EAAS;;AAAM,aAAAR,IAAAM,EAAQ,eAAR,gBAAAN,EAAoB,MAAM,SAAQ;GAAE,GAClEe,IAAgBP,EAAS;;AAAM,aAAAR,IAAAM,EAAQ,gBAAR,gBAAAN,EAAqB,MAAM,SAAQ;GAAE,GAEpEgB,IAAkB,CAACpB,MAAiB;;AACxC,QAAI,GAACA,EAAE,gBAAgB,CAACW,EAAS,QAC/B;AAAA,MAAAX,EAAA,aAAa,QAAQ,cAAc,EAAE,GACvCA,EAAE,aAAa,gBAAgB;AAE3B,UAAA;AACI,cAAAqB,IAASlB,EAAmBH,EAAE,MAAqB,GAEnDsB,IAAQ,MAAM,KAAKX,EAAS,MAAM,QAAQ,EAAE,QAAQU,CAAM;AAChE,YAAIC,MAAU,GAAI;AAElB,cAAM,EAAE,qBAAAjB,EAAoB,IAAIN,EAAmBC,GAAGkB,EAAa,KAAK;AAE/D,QAAAF,EAAA,QAAQF,EAAS,QAAQQ,GAElCD,EAAO,UAAU,IAAI,GAAGF,EAAc,KAAK,GAEvBd,EAAA,IAEpBD,IAAAM,EAAQ,gBAAR,QAAAN,EAAA,KAAAM,GAAsB,EAAE,GAAGV,GAAG,UAAUsB;eACjCC,GAAO;AACP,QAAAC,EAAA,MAAM,wBAAwBD,CAAK,EAAE;AAAA,MAAA;AAAA;AAAA,EAEhD,GAEME,IAAkB,CAACzB,MAAiB;AACxC,QAAI,GAACA,EAAE,gBAAgB,CAACW,EAAS,QACjC;AAAA,MAAAX,EAAE,aAAa,aAAa;AAExB,UAAA;AACI,cAAAqB,IAASlB,EAAmBH,EAAE,MAAqB,GAEnDsB,IAAQ,MAAM,KAAKX,EAAS,MAAM,QAAQ,EAAE,QAAQU,CAAM;AAChE,YAAIC,MAAU,MAAMA,MAAUR,EAAS,MAAO;AAE9C,cAAMY,IAAYf,EAAS,MAAM,SAASG,EAAS,KAAK;AAC/C,QAAAH,EAAA,MAAM,aAAae,GAAWJ,IAAQR,EAAS,QAAQO,IAASA,EAAO,WAAW,GAE3FP,EAAS,QAAQQ;AAAA,eACVC,GAAO;AACP,QAAAC,EAAA,MAAM,wBAAwBD,CAAK,EAAE;AAAA,MAAA;AAAA;AAAA,EAEhD;AAEA,WAASI,EAAe3B,GAAc;AACpC,IAAAA,EAAE,eAAe;AAAA,EAAA;AAGnB,WAAS4B,EAAW5B,GAAc;AAG5B,QAFJA,EAAE,eAAe,GAEb,EAACW,EAAS;AAEV,UAAA;AACF,YAAIK,EAAS,UAAUF,EAAS,SAAS,CAACL,EAAa;AAClC,QAAApB,EAAA,EAAE,MAAMqB,EAAQ,MAAM,MAAMM,EAAS,OAAO,IAAIF,EAAS,MAAA,CAAO;AAAA,eAC9ES,GAAO;AACP,QAAAC,EAAA,MAAM,uBAAuBD,CAAK,EAAE;AAAA,MAAA;AAAA,EAC7C;AAGF,WAASM,EAAc7B,GAAc;;AAC/B,QAAA;AAGF,MAFeG,EAAmBH,EAAE,MAAqB,EAElD,UAAU,OAAO,GAAGmB,EAAc,KAAK,IAE9Cf,IAAAM,EAAQ,cAAR,QAAAN,EAAA,KAAAM,GAAoB;AAAA,QAClB,GAAGV;AAAA,QACH,UAAUgB,EAAS;AAAA,QACnB,UAAUF,EAAS;AAAA,MAAA,IAGZE,EAAA,QAAQF,EAAS,QAAQ;AAAA,aAC3BS,GAAO;AACP,MAAAC,EAAA,MAAM,sBAAsBD,CAAK,EAAE;AAAA,IAAA;AAAA,EAC5C;AAGF,EAAAO;AAAA,IACE,MAAMtB;AAAA,IACN,MAAOA,IAAYuB,EAAe,IAAIC,EAAgB;AAAA,EACxD;AAEA,WAASD,IAAiB;AACpB,IAACpB,EAAS,UAELA,EAAA,MAAM,iBAAiB,aAAaS,CAAe,GACnDT,EAAA,MAAM,iBAAiB,WAAWkB,CAAa,GAC/ClB,EAAA,MAAM,iBAAiB,aAAac,CAAe,GACnDd,EAAA,MAAM,iBAAiB,YAAYgB,CAAc,GACjDhB,EAAA,MAAM,iBAAiB,QAAQiB,CAAU;AAAA,EAAA;AAGpD,WAASI,IAAkB;AACrB,IAACrB,EAAS,UAELA,EAAA,MAAM,oBAAoB,aAAaS,CAAe,GACtDT,EAAA,MAAM,oBAAoB,WAAWkB,CAAa,GAClDlB,EAAA,MAAM,oBAAoB,aAAac,CAAe,GACtDd,EAAA,MAAM,oBAAoB,YAAYgB,CAAc,GACpDhB,EAAA,MAAM,oBAAoB,QAAQiB,CAAU;AAAA,EAAA;AAGvD,SAAAK,EAAU,MAAM;AACd,IAAKzB,KACUuB,EAAA;AAAA,EAAA,CAChB,GAEDG,EAAgBF,CAAe,GAExB;AAAA,IACL,YAAAf;AAAA,IACA,UAAAD;AAAA,IACA,UAAAF;AAAA,EACF;AACF;"}
@@ -1,12 +1,12 @@
1
1
  import { ComputedRef } from 'vue';
2
2
  import { Ref } from 'vue';
3
3
 
4
- declare interface StepDefinition {
4
+ export declare interface StepDefinition {
5
5
  completed: boolean;
6
6
  substeps: Array<Omit<StepDefinition, 'substeps'>>;
7
7
  }
8
8
 
9
- declare interface StepperOptions {
9
+ export declare interface StepperOptions {
10
10
  /**
11
11
  * If true, the stepper will prevent skipping steps
12
12
  */