@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
@@ -1,42 +1,35 @@
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)) {
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)) {
9
9
  if (!window.Plaid)
10
10
  throw new Error("Error loading Plaid SDK");
11
- n(), a.value = window.Plaid.create({
12
- ...e,
11
+ n(), e.value = window.Plaid.create({
12
+ ...a,
13
13
  onLoad: () => {
14
- var o;
15
- t.value = !0, (o = e.onLoad) == null || o.call(e);
14
+ o.value = !0, a.onLoad?.();
16
15
  }
17
16
  });
18
17
  }
19
18
  });
20
- const d = s(
21
- () => !r.value && a.value !== null && (i.value || t.value)
19
+ const u = s(
20
+ () => !i.value && e.value !== null && (t.value || o.value)
22
21
  );
23
22
  function n() {
24
- a.value && (a.value.exit({ force: !0 }), a.value.destroy(), t.value = !1);
23
+ e.value && (e.value.exit({ force: !0 }), e.value.destroy(), o.value = !1);
25
24
  }
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
- }
25
+ return f(n), {
26
+ ready: u,
27
+ error: i,
28
+ open: () => e.value?.open(),
29
+ exit: (a) => e.value?.exit(a)
37
30
  };
38
31
  }
39
32
  export {
40
- P as default
33
+ L as default
41
34
  };
42
35
  //# 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","_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
+ {"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 +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;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;"}
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;"}
package/dist/useSearch.js CHANGED
@@ -1,23 +1,23 @@
1
1
  import f from "lodash-es/get";
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(() => {
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(() => {
7
7
  const r = {};
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(" ");
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(" ");
11
11
  }), r;
12
12
  });
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());
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());
17
17
  });
18
18
  }
19
19
  return {
20
- searchFor: i
20
+ searchFor: c
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;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
+ {"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,88 +1,88 @@
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,
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,
6
6
  shouldPreselect: o
7
7
  }) {
8
- const v = f(() => w(g));
9
- function r(e) {
10
- return String(e[A]);
8
+ const f = r(() => N(y));
9
+ function n(e) {
10
+ return String(e[p]);
11
11
  }
12
- const c = f(
13
- () => v.value.reduce(
14
- (e, u) => (e[r(u)] = u, e),
12
+ const l = r(
13
+ () => f.value.reduce(
14
+ (e, c) => (e[n(c)] = c, e),
15
15
  {}
16
16
  )
17
- ), n = x(/* @__PURE__ */ new Set());
18
- function m(e) {
19
- t != null && t(c.value[r(e)]) || n.value.add(r(e));
17
+ ), t = T(/* @__PURE__ */ new Set());
18
+ function g(e) {
19
+ u?.(l.value[n(e)]) || t.value.add(n(e));
20
20
  }
21
- function E(e) {
22
- t != null && t(c.value[r(e)]) || n.value.delete(r(e));
21
+ function A(e) {
22
+ u?.(l.value[n(e)]) || t.value.delete(n(e));
23
23
  }
24
- function k(e) {
25
- if (t != null && t(c.value[r(e)]))
24
+ function m(e) {
25
+ if (u?.(l.value[n(e)]))
26
26
  return;
27
- n.value.has(r(e)) ? n.value.delete(r(e)) : n.value.add(r(e));
27
+ t.value.has(n(e)) ? t.value.delete(n(e)) : t.value.add(n(e));
28
28
  }
29
- function l() {
30
- v.value.forEach((e) => {
31
- t != null && t(e) || n.value.add(r(e));
29
+ function v() {
30
+ f.value.forEach((e) => {
31
+ u?.(e) || t.value.add(n(e));
32
32
  });
33
33
  }
34
34
  function a() {
35
- typeof t == "function" ? n.value.forEach((e, u) => {
36
- t(c.value[u]) || n.value.delete(u);
37
- }) : n.value.clear();
35
+ typeof u == "function" ? t.value.forEach((e, c) => {
36
+ u(l.value[c]) || t.value.delete(c);
37
+ }) : t.value.clear();
38
38
  }
39
- function z() {
40
- y.value ? a() : l();
39
+ function E() {
40
+ d.value ? a() : v();
41
41
  }
42
42
  function i() {
43
- a(), typeof o == "function" && v.value.forEach((e) => {
44
- o(e) && n.value.add(r(e));
43
+ a(), typeof o == "function" && f.value.forEach((e) => {
44
+ o(e) && t.value.add(n(e));
45
45
  });
46
46
  }
47
- function I(e) {
48
- return n.value.has(r(e));
47
+ function k(e) {
48
+ return t.value.has(n(e));
49
49
  }
50
- function K(e) {
51
- return typeof t != "function" ? !1 : t(c.value[r(e)]);
50
+ function z(e) {
51
+ return typeof u != "function" ? !1 : u(l.value[n(e)]);
52
52
  }
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)))
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)))
58
58
  return !1;
59
59
  return !0;
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]))
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]))
65
65
  return !0;
66
66
  return !1;
67
67
  });
68
68
  return i(), {
69
- select: m,
70
- unselect: E,
71
- selectToggle: k,
72
- selectAll: l,
69
+ select: g,
70
+ unselect: A,
71
+ selectToggle: m,
72
+ selectAll: v,
73
73
  unselectAll: a,
74
- selectToggleAll: z,
74
+ selectToggleAll: E,
75
75
  resetSelection: i,
76
- isSelected: I,
77
- isSelectDisabled: K,
78
- selectedItems: N,
79
- allSelected: S,
80
- allNonDisabledSelected: y,
81
- someSelected: p,
82
- someNonDisabledSelected: T
76
+ isSelected: k,
77
+ isSelectDisabled: z,
78
+ selectedItems: I,
79
+ allSelected: s,
80
+ allNonDisabledSelected: d,
81
+ someSelected: S,
82
+ someNonDisabledSelected: K
83
83
  };
84
84
  }
85
85
  export {
86
- R as default
86
+ x 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,20 +1,19 @@
1
- import v from "@leaflink/snitch";
2
- import { u as I } from "./index-ConQ3o31.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);
1
+ import d from "@leaflink/snitch";
2
+ import { u as C } from "./index-XZqpB2_R.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);
7
7
  if (e >= 0 && e < a.length) {
8
- const u = a.splice(s, 1)[0];
9
- A(() => {
10
- a.splice(e, 0, u), r && (n.value = a);
8
+ const s = a.splice(l, 1)[0];
9
+ w(() => {
10
+ a.splice(e, 0, s), r && (o.value = a);
11
11
  });
12
12
  }
13
13
  }
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);
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);
18
17
  function r() {
19
18
  requestAnimationFrame(() => {
20
19
  document.body.removeChild(e);
@@ -25,45 +24,38 @@ function B(n, s) {
25
24
  cleanupGhostElement: r
26
25
  };
27
26
  }
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;
27
+ function v(o) {
28
+ const l = o?.closest("[draggable=true]");
29
+ if (!l) throw new Error("Draggable element not found");
30
+ return l;
32
31
  }
33
- function q({
34
- isEnabled: n = !0,
35
- sortInPlace: s = !0,
32
+ function k({
33
+ isEnabled: o = !0,
34
+ sortInPlace: l = !0,
36
35
  ...e
37
36
  }) {
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;
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) => {
46
38
  if (!(!t.dataTransfer || !r.value)) {
47
39
  t.dataTransfer.setData("text/plain", ""), t.dataTransfer.effectAllowed = "move";
48
40
  try {
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}`);
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}`);
55
47
  }
56
48
  }
57
49
  }, m = (t) => {
58
50
  if (!(!t.dataTransfer || !r.value)) {
59
51
  t.dataTransfer.dropEffect = "move";
60
52
  try {
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}`);
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}`);
67
59
  }
68
60
  }
69
61
  };
@@ -73,44 +65,43 @@ function q({
73
65
  function E(t) {
74
66
  if (t.preventDefault(), !!r.value)
75
67
  try {
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}`);
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}`);
80
72
  }
81
73
  }
82
- function L(t) {
83
- var l;
74
+ function p(t) {
84
75
  try {
85
- c(t.target).classList.remove(...f.value), (l = e.onDragEnd) == null || l.call(e, {
76
+ v(t.target).classList.remove(...f.value), e.onDragEnd?.({
86
77
  ...t,
87
- oldIndex: u.value,
78
+ oldIndex: s.value,
88
79
  newIndex: a.value
89
- }), u.value = a.value = -1;
90
- } catch (o) {
91
- v.error(`Error in drag end: ${o}`);
80
+ }), s.value = a.value = -1;
81
+ } catch (n) {
82
+ d.error(`Error in drag end: ${n}`);
92
83
  }
93
84
  }
94
- S(
95
- () => n,
96
- () => n ? p() : x()
85
+ A(
86
+ () => o,
87
+ () => o ? L() : x()
97
88
  );
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));
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));
100
91
  }
101
92
  function x() {
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));
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));
103
94
  }
104
- return $(() => {
105
- n && p();
106
- }), G(x), {
95
+ return S(() => {
96
+ o && L();
97
+ }), $(x), {
107
98
  isDragging: b,
108
- oldIndex: u,
99
+ oldIndex: s,
109
100
  newIndex: a
110
101
  };
111
102
  }
112
103
  export {
113
- q as default,
114
- O as moveSortableElements
104
+ k as default,
105
+ G as moveSortableElements
115
106
  };
116
107
  //# 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","_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":"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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","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,12 +1,12 @@
1
1
  import { ComputedRef } from 'vue';
2
2
  import { Ref } from 'vue';
3
3
 
4
- export declare interface StepDefinition {
4
+ declare interface StepDefinition {
5
5
  completed: boolean;
6
6
  substeps: Array<Omit<StepDefinition, 'substeps'>>;
7
7
  }
8
8
 
9
- export declare interface StepperOptions {
9
+ declare interface StepperOptions {
10
10
  /**
11
11
  * If true, the stepper will prevent skipping steps
12
12
  */