@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
package/dist/Filters.js CHANGED
@@ -1,30 +1,30 @@
1
- import E from "lodash-es/cloneDeep";
2
- import P from "lodash-es/merge";
3
- import { resolveComponent as y, createElementBlock as V, openBlock as d, createElementVNode as v, Fragment as k, renderList as L, createCommentVNode as g, normalizeClass as F, createBlock as m, mergeProps as f, resolveDynamicComponent as _, createSlots as O, withCtx as b, createVNode as T, createTextVNode as C, toDisplayString as w, nextTick as U, toRefs as D, ref as x } from "vue";
4
- import R from "./useValidation.js";
5
- import { LLLV_CHANGE_TRIGGERS as S } from "./constants.js";
6
- import { t as B } from "./locale.js";
7
- import { persistentStorage as j } from "./storage.js";
8
- import A from "./Button.js";
9
- import M from "./Checkbox.js";
10
- import N from "./DatePicker.js";
11
- import H from "./Input.js";
12
- import G from "./InputOptions.js";
13
- import W from "./Radio.js";
14
- import z from "./Select.js";
15
- import { _ as Y } from "./_plugin-vue_export-helper-CHgC5LLL.js";
16
- const q = {
1
+ import N from "lodash-es/cloneDeep";
2
+ import H from "lodash-es/merge";
3
+ import { resolveComponent as V, createElementBlock as _, openBlock as u, createElementVNode as k, Fragment as E, renderList as G, createCommentVNode as P, normalizeClass as S, createBlock as f, mergeProps as b, resolveDynamicComponent as v, createSlots as W, withCtx as y, createVNode as L, createTextVNode as O, toDisplayString as U, nextTick as z, toRefs as Y, ref as D } from "vue";
4
+ import q from "./useValidation.js";
5
+ import { LLLV_CHANGE_TRIGGERS as R } from "./constants.js";
6
+ import { t as A } from "./locale.js";
7
+ import { persistentStorage as M } from "./storage.js";
8
+ import J from "./Button.js";
9
+ import K from "./Checkbox.js";
10
+ import Q from "./DatePicker.js";
11
+ import X from "./Input.js";
12
+ import Z from "./InputOptions.js";
13
+ import I from "./Radio.js";
14
+ import $ from "./Select.js";
15
+ import { _ as ee } from "./_plugin-vue_export-helper-CHgC5LLL.js";
16
+ const te = {
17
17
  "filter-button-group": "_filter-button-group_1o1yr_2"
18
- }, J = {
18
+ }, le = {
19
19
  name: "ll-filters",
20
20
  components: {
21
- "ll-button": A,
22
- "ll-checkbox": M,
23
- "ll-input": H,
24
- "ll-input-options": G,
25
- "ll-radio": W,
26
- "ll-select": z,
27
- DatePicker: N
21
+ "ll-button": J,
22
+ "ll-checkbox": K,
23
+ "ll-input": X,
24
+ "ll-input-options": Z,
25
+ "ll-radio": I,
26
+ "ll-select": $,
27
+ DatePicker: Q
28
28
  },
29
29
  props: {
30
30
  /**
@@ -59,24 +59,24 @@ const q = {
59
59
  },
60
60
  emits: ["change", "submit", "reset"],
61
61
  setup(l) {
62
- const { validationSchema: r } = D(l), s = r.value(), i = x({}), t = x();
62
+ const { validationSchema: r } = Y(l), i = r.value(), s = D({}), t = D();
63
63
  function o() {
64
- if (s?.toString() !== "[object Object]")
64
+ if ((i == null ? void 0 : i.toString()) !== "[object Object]")
65
65
  return;
66
- i.value = Object.keys(s).reduce((c, p) => (c[p] = void 0, c), {});
67
- const u = Object.entries(s).reduce((c, [p, h]) => (c[p] = h.map((e) => e(i)), c), {});
68
- t.value = R({ rules: u, values: i }), t.value.validate();
66
+ s.value = Object.keys(i).reduce((d, h) => (d[h] = void 0, d), {});
67
+ const p = Object.entries(i).reduce((d, [h, m]) => (d[h] = m.map((c) => c(s)), d), {});
68
+ t.value = q({ rules: p, values: s }), t.value.validate();
69
69
  }
70
70
  return {
71
71
  validation: t,
72
- validationValues: i,
72
+ validationValues: s,
73
73
  initValidation: o
74
74
  };
75
75
  },
76
76
  data() {
77
77
  return {
78
- applyText: B("ll.apply"),
79
- clearText: B("ll.clear"),
78
+ applyText: A("ll.apply"),
79
+ clearText: A("ll.clear"),
80
80
  filters: {},
81
81
  filterValues: {},
82
82
  forceRenderCount: 0
@@ -90,31 +90,31 @@ const q = {
90
90
  * @returns {IFilter}
91
91
  */
92
92
  handler: function(l) {
93
- const r = Object.keys(l).reduce((s, i) => {
94
- const t = this.schema[i];
93
+ const r = Object.keys(l).reduce((i, s) => {
94
+ const t = this.schema[s];
95
95
  if (!t || !t.fieldToFilter)
96
- return s;
97
- const o = l[i];
96
+ return i;
97
+ const o = l[s];
98
98
  if (o === "" || o == null)
99
- return s;
100
- const u = t.attributes.trackBy || "id", c = typeof o == "object", p = typeof t.type == "object", h = p && t.attributes.multiple || !p && t.type.includes("ll-select") && (t.attributes.multiple || !t.attributes.single), e = h ? (
99
+ return i;
100
+ const p = t.attributes.trackBy || "id", d = typeof o == "object", h = typeof t.type == "object", m = h && t.attributes.multiple || !h && t.type.includes("ll-select") && (t.attributes.multiple || !t.attributes.single), c = m ? (
101
101
  // local storage might have item stored as an object from the old Select
102
- (Array.isArray(o) ? o : [o]).map((n) => n[u])
103
- ) : c ? [o[u]] : [o], a = t.groupedWith;
104
- return a && (e[0] = {
105
- index: a,
106
- value: l[a]
107
- }, e.push({
108
- index: Number(i),
109
- value: l[i]
110
- })), e.length && (s[t.fieldToFilter] = {
102
+ (Array.isArray(o) ? o : [o]).map((a) => a[p])
103
+ ) : d ? [o[p]] : [o], e = t.groupedWith;
104
+ return e && (c[0] = {
105
+ index: e,
106
+ value: l[e]
107
+ }, c.push({
108
+ index: Number(s),
109
+ value: l[s]
110
+ })), c.length && (i[t.fieldToFilter] = {
111
111
  // don't add to `filters` if no filterBy
112
- filterBy: e,
112
+ filterBy: c,
113
113
  filterType: t.type,
114
114
  // Informs the applied filter count
115
- isMultiple: h,
115
+ isMultiple: m,
116
116
  ..."fn" in t && { customFilter: t.fn }
117
- }), s;
117
+ }), i;
118
118
  }, {});
119
119
  this.filters = r, this.$emit("change", r);
120
120
  },
@@ -126,7 +126,7 @@ const q = {
126
126
  }
127
127
  },
128
128
  async created() {
129
- this.initFilterValues(), await U(), this.initValidation(), this.applyFilters({ trigger: S.LOAD });
129
+ this.initFilterValues(), await z(), this.initValidation(), this.applyFilters({ trigger: R.LOAD });
130
130
  },
131
131
  methods: {
132
132
  initFilterValues() {
@@ -143,7 +143,7 @@ const q = {
143
143
  * @param {object} [options] - optional parameters
144
144
  * @param {string} [options.trigger] - the action that triggered this function call
145
145
  */
146
- async applyFilters({ trigger: l = S.APPLY } = {}) {
146
+ async applyFilters({ trigger: l = R.APPLY } = {}) {
147
147
  this.validation && (await this.validation.validate(), this.validation.hasErrors) || (this.disablePersistency || this.persistFilterValues(this.filterValues), this.$emit("submit", { trigger: l }));
148
148
  },
149
149
  resetFilters() {
@@ -155,161 +155,168 @@ const q = {
155
155
  * Returns pre-defined filter values to become the default values
156
156
  */
157
157
  getDefaultFilterValues() {
158
- return this.schema.reduce((l, r, s) => (r.type === "ll-checkbox" ? l[s] = r.attributes.checked || !1 : Object.prototype.hasOwnProperty.call(r.attributes, "modelValue") && (l[s] = r.attributes.modelValue), l), {});
158
+ return this.schema.reduce((l, r, i) => (r.type === "ll-checkbox" ? l[i] = r.attributes.checked || !1 : Object.prototype.hasOwnProperty.call(r.attributes, "modelValue") && (l[i] = r.attributes.modelValue), l), {});
159
159
  },
160
160
  /**
161
161
  * Intended for external use, when filter values need to be set for the user
162
162
  */
163
163
  setFilterValues(l) {
164
- this.filterValues = P({}, this.filterValues, l), this.forceRenderCount++;
164
+ this.filterValues = H({}, this.filterValues, l), this.forceRenderCount++;
165
165
  },
166
166
  updateValidationValues() {
167
167
  const l = Object.keys(this.validationSchema());
168
- this.schema.forEach((r, s) => {
169
- const i = r.fieldToFilter;
170
- if (l.includes(i)) {
171
- const o = this.filters[i], u = o ? o.isMultiple ? o.filterBy : o.filterBy[0] : this.filterValues[s];
172
- this.validationValues[i] = u;
168
+ this.schema.forEach((r, i) => {
169
+ const s = r.fieldToFilter;
170
+ if (l.includes(s)) {
171
+ const o = this.filters[s], p = o ? o.isMultiple ? o.filterBy : o.filterBy[0] : this.filterValues[i];
172
+ this.validationValues[s] = p;
173
173
  }
174
174
  });
175
175
  },
176
176
  /**
177
177
  * Change handler for filter fields
178
178
  */
179
- onChange(l, r, s) {
180
- l.on?.change && l.on.change(r, s);
179
+ onChange(l, r, i) {
180
+ var s;
181
+ (s = l.on) != null && s.change && l.on.change(r, i);
181
182
  },
182
183
  /**
183
184
  * Select input event handler for filter fields
184
185
  */
185
- onSelectInput(l, r, s) {
186
- l === void 0 ? delete this.filterValues[s] : this.filterValues[s] = l, this.onChange(r, this.filterValues, s);
186
+ onSelectInput(l, r, i) {
187
+ l === void 0 ? delete this.filterValues[i] : this.filterValues[i] = l, this.onChange(r, this.filterValues, i);
187
188
  },
188
189
  /**
189
190
  * Get filter values from local storage.
190
191
  * @returns {any}
191
192
  */
192
193
  getPersistentFilterValues() {
193
- return j.get("filter-values");
194
+ return M.get("filter-values");
194
195
  },
195
196
  /**
196
197
  * Clone new filterValues to remove reactivity, and save them to localStorage.
197
198
  * @param {object} newValues - the filterValues to be persisted in localStorage
198
199
  */
199
200
  persistFilterValues(l) {
200
- j.set("filter-values", E(l));
201
+ M.set("filter-values", N(l));
201
202
  }
202
203
  }
203
- }, K = { class: "tw-ll-grid tw-grid-cols-4 md:tw-grid-cols-12" }, Q = ["data-test"], X = ["innerHTML"], Z = ["innerHTML"];
204
- function I(l, r, s, i, t, o) {
205
- const u = y("ll-select"), c = y("ll-checkbox"), p = y("ll-radio"), h = y("ll-button");
206
- return d(), V("div", K, [
207
- (d(!0), V(k, null, L(s.schema, (e, a) => (d(), V(k, null, [
208
- e.hidden ? g("", !0) : (d(), V("div", {
209
- key: `${a} ${t.forceRenderCount}`,
210
- class: F(["field-wrapper tw-col-span-4 md:tw-col-span-3", { "max-md:tw-hidden": !e.type, "tw-flex tw-items-end": e.type === "ll-checkbox" }]),
211
- "data-test": `filter|${e.fieldToFilter}`
212
- }, [
213
- e.type === "ll-select" ? (d(), m(u, f({
214
- key: 0,
215
- ref_for: !0
216
- }, e.attributes, {
217
- error: i.validation?.fields[e.fieldToFilter] && i.validation?.getError(e.fieldToFilter),
218
- label: e.label,
219
- "model-value": t.filterValues[a],
220
- "onUpdate:modelValue": (n) => o.onSelectInput(n, e, a)
221
- }), null, 16, ["error", "label", "model-value", "onUpdate:modelValue"])) : e.type === "ll-checkbox" ? (d(), m(c, f({
222
- key: 1,
223
- checked: t.filterValues[a],
224
- "onUpdate:checked": (n) => t.filterValues[a] = n
225
- }, { ref_for: !0 }, e.attributes, {
226
- "error-text": i.validation?.fields[e.fieldToFilter] && i.validation?.getError(e.fieldToFilter),
227
- label: e.label,
228
- "onUpdate:checked": (n) => o.onChange(e, t.filterValues, a)
229
- }), null, 16, ["checked", "onUpdate:checked", "error-text", "label"])) : e.type === "ll-radio" ? (d(), m(p, f({
230
- key: 2,
231
- checked: t.filterValues[a],
232
- "onUpdate:checked": (n) => t.filterValues[a] = n
233
- }, { ref_for: !0 }, e.attributes, {
234
- "error-text": i.validation?.fields[e.fieldToFilter] && i.validation?.getError(e.fieldToFilter),
235
- label: e.label,
236
- "onUpdate:checked": (n) => o.onChange(e, t.filterValues, a)
237
- }), null, 16, ["checked", "onUpdate:checked", "error-text", "label"])) : e.type ? (d(), m(_(e.type), f({
238
- key: 3,
239
- ref_for: !0
240
- }, e.attributes, {
241
- modelValue: t.filterValues[a],
242
- "onUpdate:modelValue": [(n) => t.filterValues[a] = n, (n) => o.onChange(e, t.filterValues, a)],
243
- "error-text": i.validation?.fields[e.fieldToFilter] && i.validation?.getError(e.fieldToFilter),
244
- label: e.label
245
- }), O({ _: 2 }, [
246
- e.slots && e.slots.selected ? {
247
- name: "selected",
248
- fn: b(({ option: n }) => [
249
- (d(), m(_(e.slots.selected), f({ ref_for: !0 }, n.props), null, 16))
250
- ]),
251
- key: "0"
252
- } : void 0,
253
- e.slots && e.slots.option ? {
254
- name: "option",
255
- fn: b(({ option: n }) => [
256
- (d(), m(_(e.slots.option), f({ ref_for: !0 }, n.props), null, 16))
257
- ]),
258
- key: "1"
259
- } : void 0,
260
- e.slots && e.slots.prepend ? {
261
- name: "prepend",
262
- fn: b(() => [
263
- v("span", {
264
- innerHTML: e.slots.prepend
265
- }, null, 8, X)
266
- ]),
267
- key: "2"
268
- } : void 0,
269
- e.slots && e.slots.append ? {
270
- name: "append",
271
- fn: b(() => [
272
- v("span", {
273
- innerHTML: e.slots.append
274
- }, null, 8, Z)
275
- ]),
276
- key: "3"
277
- } : void 0
278
- ]), 1040, ["modelValue", "onUpdate:modelValue", "error-text", "label"])) : g("", !0)
279
- ], 10, Q))
280
- ], 64))), 256)),
281
- v("div", {
282
- class: F(["button-grid tw-col-span-4 tw-flex tw-items-end tw-justify-end md:tw-col-span-12", l.$style["filter-button-group"]])
204
+ }, se = { class: "tw-ll-grid tw-grid-cols-4 md:tw-grid-cols-12" }, ie = ["data-test"], oe = ["innerHTML"], re = ["innerHTML"];
205
+ function ae(l, r, i, s, t, o) {
206
+ var c;
207
+ const p = V("ll-select"), d = V("ll-checkbox"), h = V("ll-radio"), m = V("ll-button");
208
+ return u(), _("div", se, [
209
+ (u(!0), _(E, null, G(i.schema, (e, a) => {
210
+ var g, F, T, C, w, x, B, j;
211
+ return u(), _(E, null, [
212
+ e.hidden ? P("", !0) : (u(), _("div", {
213
+ key: `${a} ${t.forceRenderCount}`,
214
+ class: S(["field-wrapper tw-col-span-4 md:tw-col-span-3", { "max-md:tw-hidden": !e.type, "tw-flex tw-items-end": e.type === "ll-checkbox" }]),
215
+ "data-test": `filter|${e.fieldToFilter}`
216
+ }, [
217
+ e.type === "ll-select" ? (u(), f(p, b({
218
+ key: 0,
219
+ ref_for: !0
220
+ }, e.attributes, {
221
+ error: ((g = s.validation) == null ? void 0 : g.fields[e.fieldToFilter]) && ((F = s.validation) == null ? void 0 : F.getError(e.fieldToFilter)),
222
+ label: e.label,
223
+ "model-value": t.filterValues[a],
224
+ "onUpdate:modelValue": (n) => o.onSelectInput(n, e, a)
225
+ }), null, 16, ["error", "label", "model-value", "onUpdate:modelValue"])) : e.type === "ll-checkbox" ? (u(), f(d, b({
226
+ key: 1,
227
+ checked: t.filterValues[a],
228
+ "onUpdate:checked": (n) => t.filterValues[a] = n,
229
+ ref_for: !0
230
+ }, e.attributes, {
231
+ "error-text": ((T = s.validation) == null ? void 0 : T.fields[e.fieldToFilter]) && ((C = s.validation) == null ? void 0 : C.getError(e.fieldToFilter)),
232
+ label: e.label,
233
+ "onUpdate:checked": (n) => o.onChange(e, t.filterValues, a)
234
+ }), null, 16, ["checked", "onUpdate:checked", "error-text", "label"])) : e.type === "ll-radio" ? (u(), f(h, b({
235
+ key: 2,
236
+ checked: t.filterValues[a],
237
+ "onUpdate:checked": (n) => t.filterValues[a] = n,
238
+ ref_for: !0
239
+ }, e.attributes, {
240
+ "error-text": ((w = s.validation) == null ? void 0 : w.fields[e.fieldToFilter]) && ((x = s.validation) == null ? void 0 : x.getError(e.fieldToFilter)),
241
+ label: e.label,
242
+ "onUpdate:checked": (n) => o.onChange(e, t.filterValues, a)
243
+ }), null, 16, ["checked", "onUpdate:checked", "error-text", "label"])) : e.type ? (u(), f(v(e.type), b({
244
+ key: 3,
245
+ ref_for: !0
246
+ }, e.attributes, {
247
+ modelValue: t.filterValues[a],
248
+ "onUpdate:modelValue": [(n) => t.filterValues[a] = n, (n) => o.onChange(e, t.filterValues, a)],
249
+ "error-text": ((B = s.validation) == null ? void 0 : B.fields[e.fieldToFilter]) && ((j = s.validation) == null ? void 0 : j.getError(e.fieldToFilter)),
250
+ label: e.label
251
+ }), W({ _: 2 }, [
252
+ e.slots && e.slots.selected ? {
253
+ name: "selected",
254
+ fn: y(({ option: n }) => [
255
+ (u(), f(v(e.slots.selected), b({ ref_for: !0 }, n.props), null, 16))
256
+ ]),
257
+ key: "0"
258
+ } : void 0,
259
+ e.slots && e.slots.option ? {
260
+ name: "option",
261
+ fn: y(({ option: n }) => [
262
+ (u(), f(v(e.slots.option), b({ ref_for: !0 }, n.props), null, 16))
263
+ ]),
264
+ key: "1"
265
+ } : void 0,
266
+ e.slots && e.slots.prepend ? {
267
+ name: "prepend",
268
+ fn: y(() => [
269
+ k("span", {
270
+ innerHTML: e.slots.prepend
271
+ }, null, 8, oe)
272
+ ]),
273
+ key: "2"
274
+ } : void 0,
275
+ e.slots && e.slots.append ? {
276
+ name: "append",
277
+ fn: y(() => [
278
+ k("span", {
279
+ innerHTML: e.slots.append
280
+ }, null, 8, re)
281
+ ]),
282
+ key: "3"
283
+ } : void 0
284
+ ]), 1040, ["modelValue", "onUpdate:modelValue", "error-text", "label"])) : P("", !0)
285
+ ], 10, ie))
286
+ ], 64);
287
+ }), 256)),
288
+ k("div", {
289
+ class: S(["button-grid tw-col-span-4 tw-flex tw-items-end tw-justify-end md:tw-col-span-12", l.$style["filter-button-group"]])
283
290
  }, [
284
- T(h, {
291
+ L(m, {
285
292
  secondary: "",
286
293
  "data-test": "button|reset-filters",
287
- disabled: s.disableClear,
294
+ disabled: i.disableClear,
288
295
  onClick: o.resetFilters
289
296
  }, {
290
- default: b(() => [
291
- C(w(t.clearText), 1)
297
+ default: y(() => [
298
+ O(U(t.clearText), 1)
292
299
  ]),
293
300
  _: 1
294
301
  }, 8, ["disabled", "onClick"]),
295
- T(h, {
302
+ L(m, {
296
303
  primary: "",
297
304
  "data-test": "button|apply-filters",
298
- disabled: s.disableApply || i.validation?.hasErrors,
305
+ disabled: i.disableApply || ((c = s.validation) == null ? void 0 : c.hasErrors),
299
306
  onClick: o.applyFilters
300
307
  }, {
301
- default: b(() => [
302
- C(w(t.applyText), 1)
308
+ default: y(() => [
309
+ O(U(t.applyText), 1)
303
310
  ]),
304
311
  _: 1
305
312
  }, 8, ["disabled", "onClick"])
306
313
  ], 2)
307
314
  ]);
308
315
  }
309
- const $ = {
310
- $style: q
311
- }, fe = /* @__PURE__ */ Y(J, [["render", I], ["__cssModules", $]]);
316
+ const ne = {
317
+ $style: te
318
+ }, Te = /* @__PURE__ */ ee(le, [["render", ae], ["__cssModules", ne]]);
312
319
  export {
313
- fe as default
320
+ Te as default
314
321
  };
315
322
  //# sourceMappingURL=Filters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Filters.js","sources":["../src/components/Filters/Filters.vue"],"sourcesContent":["<script>\n import cloneDeep from 'lodash-es/cloneDeep';\n import merge from 'lodash-es/merge';\n import { nextTick, ref, toRefs } from 'vue';\n\n import useValidation from '../../composables/useValidation/useValidation';\n import { LLLV_CHANGE_TRIGGERS } from '../../constants';\n import { t } from '../../locale';\n import { persistentStorage } from '../../storage';\n import Button from '../Button/Button.vue';\n import Checkbox from '../Checkbox/Checkbox.vue';\n import DatePicker from '../DatePicker/DatePicker.vue';\n import Input from '../Input/Input.vue';\n import InputOptions from '../InputOptions/InputOptions.vue';\n import Radio from '../Radio/Radio.vue';\n import Select from '../Select/Select.vue';\n\n export default {\n name: 'll-filters',\n\n components: {\n 'll-button': Button,\n 'll-checkbox': Checkbox,\n 'll-input': Input,\n 'll-input-options': InputOptions,\n 'll-radio': Radio,\n 'll-select': Select,\n DatePicker,\n },\n\n props: {\n /**\n * Whether to disable the Apply button\n */\n disableApply: Boolean,\n /**\n * Whether to disable the Clear button\n */\n disableClear: Boolean,\n /**\n * Whether to disable the sticky filters\n * If disabled, a default pre-selected value(s) can be added to\n * the filter component's attributes\n */\n disablePersistency: Boolean,\n /**\n * Filters schema\n */\n schema: {\n type: Array,\n default: () => [],\n },\n /**\n * Validation schema function that returns an object\n */\n validationSchema: {\n type: Function,\n default: () => () => undefined,\n },\n },\n\n emits: ['change', 'submit', 'reset'],\n\n setup(props) {\n const { validationSchema: getValidationSchema } = toRefs(props);\n const validationSchema = getValidationSchema.value();\n const validationValues = ref({});\n\n // Without ref, `this.validation` will always evaluate to its initial value of `undefined` due to lack of reactivity.\n const validation = ref();\n\n function initValidation() {\n if (validationSchema?.toString() !== '[object Object]') {\n return;\n }\n\n validationValues.value = Object.keys(validationSchema).reduce((values, fieldName) => {\n values[fieldName] = undefined;\n\n return values;\n }, {});\n\n const validationRules = Object.entries(validationSchema).reduce((rules, [fieldName, fieldRules]) => {\n rules[fieldName] = fieldRules.map((fieldRule) => {\n return fieldRule(validationValues);\n });\n\n return rules;\n }, {});\n\n validation.value = useValidation({ rules: validationRules, values: validationValues });\n validation.value.validate();\n }\n\n return {\n validation,\n validationValues,\n initValidation,\n };\n },\n\n data() {\n return {\n applyText: t('ll.apply'),\n clearText: t('ll.clear'),\n filters: {},\n filterValues: {},\n forceRenderCount: 0,\n };\n },\n\n watch: {\n filterValues: {\n /**\n * Maps filters to a partcular object structure:\n * @param {IFilterSchemaItem} newFilterValues all selected filters\n * @returns {IFilter}\n */\n handler: function (newFilterValues) {\n const filters = Object.keys(newFilterValues).reduce((acc, i) => {\n const schema = this.schema[i];\n\n if (!schema || !schema.fieldToFilter) {\n return acc;\n }\n\n const item = newFilterValues[i];\n\n // Ignore empty string or undefined/null filter values\n if (item === '' || item == null) {\n return acc;\n }\n\n const trackBy = schema.attributes.trackBy || 'id';\n const isObject = typeof item === 'object';\n const isCustomFilterComponent = typeof schema.type === 'object';\n // TODO: remove handling of schema.attributes.multiple when we remove the vue-multiselect version of Select\n const isMultiple =\n (isCustomFilterComponent && schema.attributes.multiple) ||\n (!isCustomFilterComponent &&\n schema.type.includes('ll-select') &&\n (schema.attributes.multiple || !schema.attributes.single));\n const filterBy = isMultiple\n ? // local storage might have item stored as an object from the old Select\n (Array.isArray(item) ? item : [item]).map((v) => v[trackBy])\n : isObject\n ? [item[trackBy]]\n : [item];\n\n const groupedWith = schema.groupedWith;\n\n if (groupedWith) {\n filterBy[0] = {\n index: groupedWith,\n value: newFilterValues[groupedWith],\n };\n filterBy.push({\n index: Number(i),\n value: newFilterValues[i],\n });\n }\n\n if (filterBy.length) {\n acc[schema.fieldToFilter] = {\n // don't add to `filters` if no filterBy\n filterBy,\n filterType: schema.type, // Informs the applied filter count\n isMultiple,\n ...('fn' in schema && { customFilter: schema.fn }),\n };\n }\n\n return acc;\n }, {});\n\n this.filters = filters;\n this.$emit('change', filters);\n },\n\n deep: true,\n immediate: true,\n },\n\n filters() {\n if (this.validation) {\n this.updateValidationValues();\n }\n },\n },\n\n async created() {\n // initFilterValues updates the filterValues so using await nextTick() forces the code\n // after it to wait until nextTick is done, at which point the filterValues will\n // be done initializing. Otherwise, applyFilters sometimes applies the wrong\n // filters because filterValues is not done updating.\n this.initFilterValues();\n await nextTick();\n this.initValidation();\n this.applyFilters({ trigger: LLLV_CHANGE_TRIGGERS.LOAD });\n },\n\n methods: {\n initFilterValues() {\n if (this.disablePersistency) {\n this.filterValues = this.getDefaultFilterValues();\n\n return;\n }\n\n this.filterValues = this.getPersistentFilterValues() || this.getDefaultFilterValues();\n },\n\n /**\n * Apply the selected filters and save them to localStorage.\n * ListView calls this method using a ref to Filters.\n * The trigger option is used in ListView.\n * @param {object} [options] - optional parameters\n * @param {string} [options.trigger] - the action that triggered this function call\n */\n async applyFilters({ trigger = LLLV_CHANGE_TRIGGERS.APPLY } = {}) {\n if (this.validation) {\n await this.validation.validate();\n\n if (this.validation.hasErrors) {\n return;\n }\n }\n\n if (!this.disablePersistency) {\n this.persistFilterValues(this.filterValues);\n }\n\n this.$emit('submit', { trigger });\n },\n\n resetFilters() {\n this.filterValues = this.getDefaultFilterValues();\n\n this.forceRenderCount++;\n\n if (!this.disablePersistency) {\n this.persistFilterValues(this.filterValues);\n }\n\n // Emit after filters are updated\n this.$nextTick(() => {\n this.$emit('reset');\n });\n },\n\n /**\n * Returns pre-defined filter values to become the default values\n */\n getDefaultFilterValues() {\n return this.schema.reduce((acc, item, filterIndex) => {\n if (item.type === 'll-checkbox') {\n acc[filterIndex] = item.attributes.checked || false;\n } else if (Object.prototype.hasOwnProperty.call(item.attributes, 'modelValue')) {\n acc[filterIndex] = item.attributes.modelValue;\n }\n\n return acc;\n }, {});\n },\n\n /**\n * Intended for external use, when filter values need to be set for the user\n */\n setFilterValues(newValues) {\n this.filterValues = merge({}, this.filterValues, newValues);\n this.forceRenderCount++;\n },\n\n updateValidationValues() {\n const validatable = Object.keys(this.validationSchema());\n\n this.schema.forEach((fieldSchema, filterIndex) => {\n const fieldToFilter = fieldSchema.fieldToFilter;\n const validate = validatable.includes(fieldToFilter);\n\n if (validate) {\n const filter = this.filters[fieldToFilter];\n\n /**\n * Get all validatable fields.\n * Use parsed value of filters that are set,\n * otherwise fall back to `filterValue` value if not set.\n */\n const filterValue = filter\n ? filter.isMultiple\n ? filter.filterBy\n : filter.filterBy[0]\n : this.filterValues[filterIndex];\n\n this.validationValues[fieldToFilter] = filterValue;\n }\n });\n },\n\n /**\n * Change handler for filter fields\n */\n onChange(filter, filterValues, filterIndex) {\n if (filter.on?.change) {\n // Maps to `on.change` handlers in the filter schema.\n filter.on.change(filterValues, filterIndex);\n }\n },\n\n /**\n * Select input event handler for filter fields\n */\n onSelectInput(newValue, filter, filterIndex) {\n if (newValue === undefined) {\n delete this.filterValues[filterIndex]; // prevent undefined filterValues which cause an empty result list\n } else {\n this.filterValues[filterIndex] = newValue;\n }\n\n this.onChange(filter, this.filterValues, filterIndex);\n },\n\n /**\n * Get filter values from local storage.\n * @returns {any}\n */\n getPersistentFilterValues() {\n return persistentStorage.get('filter-values');\n },\n\n /**\n * Clone new filterValues to remove reactivity, and save them to localStorage.\n * @param {object} newValues - the filterValues to be persisted in localStorage\n */\n persistFilterValues(newValues) {\n persistentStorage.set('filter-values', cloneDeep(newValues));\n },\n },\n };\n</script>\n\n<template>\n <div class=\"tw-ll-grid tw-grid-cols-4 md:tw-grid-cols-12\">\n <template v-for=\"(filter, filterIndex) in schema\">\n <div\n v-if=\"!filter.hidden\"\n :key=\"`${filterIndex} ${forceRenderCount}`\"\n class=\"field-wrapper tw-col-span-4 md:tw-col-span-3\"\n :class=\"{ 'max-md:tw-hidden': !filter.type, 'tw-flex tw-items-end': filter.type === 'll-checkbox' }\"\n :data-test=\"`filter|${filter.fieldToFilter}`\"\n >\n <!-- Filter component -->\n <ll-select\n v-if=\"filter.type === 'll-select'\"\n v-bind=\"filter.attributes\"\n :error=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n :model-value=\"filterValues[filterIndex]\"\n @update:model-value=\"(newValue) => onSelectInput(newValue, filter, filterIndex)\"\n />\n <ll-checkbox\n v-else-if=\"filter.type === 'll-checkbox'\"\n v-model:checked=\"filterValues[filterIndex]\"\n v-bind=\"filter.attributes\"\n :error-text=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n @update:checked=\"onChange(filter, filterValues, filterIndex)\"\n />\n <ll-radio\n v-else-if=\"filter.type === 'll-radio'\"\n v-model:checked=\"filterValues[filterIndex]\"\n v-bind=\"filter.attributes\"\n :error-text=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n @update:checked=\"onChange(filter, filterValues, filterIndex)\"\n />\n <component\n v-bind=\"filter.attributes\"\n :is=\"filter.type\"\n v-else-if=\"filter.type\"\n v-model=\"filterValues[filterIndex]\"\n :error-text=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n @update:model-value=\"onChange(filter, filterValues, filterIndex)\"\n >\n <template v-if=\"filter.slots && filter.slots.selected\" #selected=\"{ option }\">\n <component :is=\"filter.slots.selected\" v-bind=\"option.props\" />\n </template>\n <template v-if=\"filter.slots && filter.slots.option\" #option=\"{ option }\">\n <component :is=\"filter.slots.option\" v-bind=\"option.props\" />\n </template>\n <template v-if=\"filter.slots && filter.slots.prepend\" #prepend>\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-html=\"filter.slots.prepend\"></span>\n </template>\n <template v-if=\"filter.slots && filter.slots.append\" #append>\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-html=\"filter.slots.append\"></span>\n </template>\n </component>\n </div>\n </template>\n <div\n class=\"button-grid tw-col-span-4 tw-flex tw-items-end tw-justify-end md:tw-col-span-12\"\n :class=\"$style['filter-button-group']\"\n >\n <ll-button secondary data-test=\"button|reset-filters\" :disabled=\"disableClear\" @click=\"resetFilters\">\n {{ clearText }}\n </ll-button>\n <ll-button\n primary\n data-test=\"button|apply-filters\"\n :disabled=\"disableApply || validation?.hasErrors\"\n @click=\"applyFilters\"\n >\n {{ applyText }}\n </ll-button>\n </div>\n </div>\n</template>\n\n<style module>\n .filter-button-group {\n @media screen('max-md') {\n display: flex;\n flex-direction: column-reverse;\n }\n\n button {\n @media screen('max-md') {\n width: 100% !important;\n }\n\n &:nth-child(2) {\n @media screen('max-md') {\n margin-bottom: theme('spacing.3');\n }\n }\n }\n }\n</style>\n"],"names":["_sfc_main","Button","Checkbox","Input","InputOptions","Radio","Select","DatePicker","props","getValidationSchema","toRefs","validationSchema","validationValues","ref","validation","initValidation","values","fieldName","validationRules","rules","fieldRules","fieldRule","useValidation","t","newFilterValues","filters","acc","schema","item","trackBy","isObject","isCustomFilterComponent","isMultiple","filterBy","v","groupedWith","nextTick","LLLV_CHANGE_TRIGGERS","trigger","filterIndex","newValues","merge","validatable","fieldSchema","fieldToFilter","filter","filterValue","filterValues","newValue","persistentStorage","cloneDeep","_hoisted_1","_openBlock","_createElementBlock","_Fragment","_renderList","$props","$data","_normalizeClass","_createBlock","_component_ll_select","_mergeProps","$setup","$options","_component_ll_checkbox","$event","_component_ll_radio","_resolveDynamicComponent","_withCtx","option","_createElementVNode","_ctx","_createVNode","_component_ll_button"],"mappings":";;;;;;;;;;;;;;;;;GAiBOA,IAAU;AAAA,EACb,MAAM;AAAA,EAEN,YAAY;AAAA,IACV,aAAaC;AAAA,IACb,eAAeC;AAAA,IACf,YAAYC;AAAA,IACZ,oBAAoBC;AAAA,IACpB,YAAYC;AAAA,IACZ,aAAaC;AAAA,IACb,YAAAC;AAAA;EAGF,OAAO;AAAA;AAAA;AAAA;AAAA,IAIL,cAAc;AAAA;AAAA;AAAA;AAAA,IAId,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMd,oBAAoB;AAAA;AAAA;AAAA;AAAA,IAIpB,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS,MAAM,CAAA;AAAA;;;;IAKjB,kBAAkB;AAAA,MAChB,MAAM;AAAA,MACN,SAAS,MAAM,MAAA;AAAA;AAAA;;EAInB,OAAO,CAAC,UAAU,UAAU,OAAO;AAAA,EAEnC,MAAMC,GAAO;AACX,UAAM,EAAE,kBAAkBC,MAAwBC,EAAOF,CAAK,GACxDG,IAAmBF,EAAoB,MAAK,GAC5CG,IAAmBC,EAAI,EAAE,GAGzBC,IAAaD,EAAG;AAEtB,aAASE,IAAiB;AACxB,UAAIJ,GAAkB,SAAQ,MAAO;AACnC;AAGF,MAAAC,EAAiB,QAAQ,OAAO,KAAKD,CAAgB,EAAE,OAAO,CAACK,GAAQC,OACrED,EAAOC,CAAS,IAAI,QAEbD,IACN,CAAA,CAAE;AAEL,YAAME,IAAkB,OAAO,QAAQP,CAAgB,EAAE,OAAO,CAACQ,GAAO,CAACF,GAAWG,CAAU,OAC5FD,EAAMF,CAAS,IAAIG,EAAW,IAAI,CAACC,MAC1BA,EAAUT,CAAgB,CAClC,GAEMO,IACN,CAAA,CAAE;AAEL,MAAAL,EAAW,QAAQQ,EAAc,EAAE,OAAOJ,GAAiB,QAAQN,GAAkB,GACrFE,EAAW,MAAM,SAAQ;AAAA,IAC3B;AAEA,WAAO;AAAA,MACL,YAAAA;AAAA,MACA,kBAAAF;AAAA,MACA,gBAAAG;AAAA;EAEJ;AAAA,EAEA,OAAO;AACL,WAAO;AAAA,MACL,WAAWQ,EAAE,UAAU;AAAA,MACvB,WAAWA,EAAE,UAAU;AAAA,MACvB,SAAS,CAAA;AAAA,MACT,cAAc,CAAA;AAAA,MACd,kBAAkB;AAAA;EAEtB;AAAA,EAEA,OAAO;AAAA,IACL,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,SAAS,SAAUC,GAAiB;AAClC,cAAMC,IAAU,OAAO,KAAKD,CAAe,EAAE,OAAO,CAACE,GAAK,MAAM;AAC9D,gBAAMC,IAAS,KAAK,OAAO,CAAC;AAE5B,cAAI,CAACA,KAAU,CAACA,EAAO;AACrB,mBAAOD;AAGT,gBAAME,IAAOJ,EAAgB,CAAC;AAG9B,cAAII,MAAS,MAAMA,KAAQ;AACzB,mBAAOF;AAGT,gBAAMG,IAAUF,EAAO,WAAW,WAAW,MACvCG,IAAW,OAAOF,KAAS,UAC3BG,IAA0B,OAAOJ,EAAO,QAAS,UAEjDK,IACHD,KAA2BJ,EAAO,WAAW,YAC7C,CAACI,KACAJ,EAAO,KAAK,SAAS,WAAW,MAC/BA,EAAO,WAAW,YAAY,CAACA,EAAO,WAAW,SAChDM,IAAWD;AAAA;AAAA,aAEZ,MAAM,QAAQJ,CAAI,IAAIA,IAAO,CAACA,CAAI,GAAG,IAAI,CAACM,MAAMA,EAAEL,CAAO,CAAC;AAAA,cAC3DC,IACE,CAACF,EAAKC,CAAO,CAAC,IACd,CAACD,CAAI,GAELO,IAAcR,EAAO;AAE3B,iBAAIQ,MACFF,EAAS,CAAC,IAAI;AAAA,YACZ,OAAOE;AAAA,YACP,OAAOX,EAAgBW,CAAW;AAAA,aAEpCF,EAAS,KAAK;AAAA,YACZ,OAAO,OAAO,CAAC;AAAA,YACf,OAAOT,EAAgB,CAAC;AAAA,UAC1B,CAAC,IAGCS,EAAS,WACXP,EAAIC,EAAO,aAAa,IAAI;AAAA;AAAA,YAE1B,UAAAM;AAAA,YACA,YAAYN,EAAO;AAAA;AAAA,YACnB,YAAAK;AAAA,YACA,GAAI,QAAQL,KAAU,EAAE,cAAcA,EAAO,GAAC;AAAA,cAI3CD;AAAA,QACT,GAAG,CAAA,CAAE;AAEL,aAAK,UAAUD,GACf,KAAK,MAAM,UAAUA,CAAO;AAAA,MAC9B;AAAA,MAEA,MAAM;AAAA,MACN,WAAW;AAAA;IAGb,UAAU;AACR,MAAI,KAAK,cACP,KAAK,uBAAsB;AAAA,IAE/B;AAAA;EAGF,MAAM,UAAU;AAKd,SAAK,iBAAgB,GACrB,MAAMW,EAAQ,GACd,KAAK,eAAc,GACnB,KAAK,aAAa,EAAE,SAASC,EAAqB,KAAG,CAAG;AAAA,EAC1D;AAAA,EAEA,SAAS;AAAA,IACP,mBAAmB;AACjB,UAAI,KAAK,oBAAoB;AAC3B,aAAK,eAAe,KAAK,uBAAsB;AAE/C;AAAA,MACF;AAEA,WAAK,eAAe,KAAK,0BAAyB,KAAM,KAAK,uBAAsB;AAAA,IACrF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,MAAM,aAAa,EAAE,SAAAC,IAAUD,EAAqB,MAAI,IAAM,CAAA,GAAI;AAChE,MAAI,KAAK,eACP,MAAM,KAAK,WAAW,SAAQ,GAE1B,KAAK,WAAW,eAKjB,KAAK,sBACR,KAAK,oBAAoB,KAAK,YAAY,GAG5C,KAAK,MAAM,UAAU,EAAE,SAAAC,EAAM,CAAG;AAAA,IAClC;AAAA,IAEA,eAAe;AACb,WAAK,eAAe,KAAK,uBAAsB,GAE/C,KAAK,oBAEA,KAAK,sBACR,KAAK,oBAAoB,KAAK,YAAY,GAI5C,KAAK,UAAU,MAAM;AACnB,aAAK,MAAM,OAAO;AAAA,MACpB,CAAC;AAAA,IACH;AAAA;AAAA;AAAA;AAAA,IAKA,yBAAyB;AACvB,aAAO,KAAK,OAAO,OAAO,CAACZ,GAAKE,GAAMW,OAChCX,EAAK,SAAS,gBAChBF,EAAIa,CAAW,IAAIX,EAAK,WAAW,WAAW,KACrC,OAAO,UAAU,eAAe,KAAKA,EAAK,YAAY,YAAY,MAC3EF,EAAIa,CAAW,IAAIX,EAAK,WAAW,aAG9BF,IACN,CAAA,CAAE;AAAA,IACP;AAAA;AAAA;AAAA;AAAA,IAKA,gBAAgBc,GAAW;AACzB,WAAK,eAAeC,EAAM,CAAA,GAAI,KAAK,cAAcD,CAAS,GAC1D,KAAK;AAAA,IACP;AAAA,IAEA,yBAAyB;AACvB,YAAME,IAAc,OAAO,KAAK,KAAK,iBAAgB,CAAE;AAEvD,WAAK,OAAO,QAAQ,CAACC,GAAaJ,MAAgB;AAChD,cAAMK,IAAgBD,EAAY;AAGlC,YAFiBD,EAAY,SAASE,CAAa,GAErC;AACZ,gBAAMC,IAAS,KAAK,QAAQD,CAAa,GAOnCE,IAAcD,IAChBA,EAAO,aACLA,EAAO,WACPA,EAAO,SAAS,CAAC,IACnB,KAAK,aAAaN,CAAW;AAEjC,eAAK,iBAAiBK,CAAa,IAAIE;AAAA,QACzC;AAAA,MACF,CAAC;AAAA,IACH;AAAA;AAAA;AAAA;AAAA,IAKA,SAASD,GAAQE,GAAcR,GAAa;AAC1C,MAAIM,EAAO,IAAI,UAEbA,EAAO,GAAG,OAAOE,GAAcR,CAAW;AAAA,IAE9C;AAAA;AAAA;AAAA;AAAA,IAKA,cAAcS,GAAUH,GAAQN,GAAa;AAC3C,MAAIS,MAAa,SACf,OAAO,KAAK,aAAaT,CAAW,IAEpC,KAAK,aAAaA,CAAW,IAAIS,GAGnC,KAAK,SAASH,GAAQ,KAAK,cAAcN,CAAW;AAAA,IACtD;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,4BAA4B;AAC1B,aAAOU,EAAkB,IAAI,eAAe;AAAA,IAC9C;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,oBAAoBT,GAAW;AAC7B,MAAAS,EAAkB,IAAI,iBAAiBC,EAAUV,CAAS,CAAC;AAAA,IAC7D;AAAA;GAMCW,IAAA,EAAA,OAAM,+CAA8C;;;AAAzD,SAAAC,EAAA,GAAAC,EA4EM,OA5ENF,GA4EM;AAAA,KA3EJC,EAAA,EAAA,GAAAC,EA0DWC,GAAA,MAAAC,EA1D+BC,EAAA,QAAM,CAA9BX,GAAQN;MAEfM,EAAO,2BADhBQ,EAwDM,OAAA;AAAA,QAtDH,KAAG,GAAKd,CAAW,IAAIkB,EAAA,gBAAgB;AAAA,QACxC,OAAKC,EAAA,CAAC,gDAA8C,EAAA,oBAAA,CACrBb,EAAO,MAAI,wBAA0BA,EAAO,SAAI,cAAA,CAAA,CAAA;AAAA,QAC9E,aAAS,UAAYA,EAAO,aAAa;AAAA;QAIlCA,EAAO,SAAI,eADnBO,KAAAO,EAOEC,GAPFC,EAOE;AAAA;;QALQ,GAAAhB,EAAO,YAAU;AAAA,UACxB,OAAOiB,EAAA,YAAY,OAAOjB,EAAO,aAAa,KAAKiB,cAAY,SAASjB,EAAO,aAAa;AAAA,UAC5F,OAAOA,EAAO;AAAA,UACd,eAAaY,EAAA,aAAalB,CAAW;AAAA,UACrC,uBAAkB,CAAGS,MAAae,EAAA,cAAcf,GAAUH,GAAQN,CAAW;AAAA,mFAGnEM,EAAO,SAAI,iBADxBO,KAAAO,EAOEK,GAPFH,EAOE;AAAA;UALQ,SAASJ,EAAA,aAAalB,CAAW;AAAA,UAAxB,oBAAA,CAAA0B,MAAAR,EAAA,aAAalB,CAAW,IAAA0B;AAAA,QACjC,GAAA,EAAA,SAAA,MAAApB,EAAO,YAAU;AAAA,UACxB,cAAYiB,EAAA,YAAY,OAAOjB,EAAO,aAAa,KAAKiB,cAAY,SAASjB,EAAO,aAAa;AAAA,UACjG,OAAOA,EAAO;AAAA,UACd,2BAAgBkB,EAAA,SAASlB,GAAQY,EAAA,cAAclB,CAAW;AAAA,iFAGhDM,EAAO,SAAI,cADxBO,KAAAO,EAOEO,GAPFL,EAOE;AAAA;UALQ,SAASJ,EAAA,aAAalB,CAAW;AAAA,UAAxB,oBAAA,CAAA0B,MAAAR,EAAA,aAAalB,CAAW,IAAA0B;AAAA,QACjC,GAAA,EAAA,SAAA,MAAApB,EAAO,YAAU;AAAA,UACxB,cAAYiB,EAAA,YAAY,OAAOjB,EAAO,aAAa,KAAKiB,cAAY,SAASjB,EAAO,aAAa;AAAA,UACjG,OAAOA,EAAO;AAAA,UACd,2BAAgBkB,EAAA,SAASlB,GAAQY,EAAA,cAAclB,CAAW;AAAA,iFAKhDM,EAAO,QAHpBO,EAAA,GAAAO,EAuBYQ,EArBLtB,EAAO,IAAI,GAFlBgB,EAuBY;AAAA;;QAtBF,GAAAhB,EAAO,YAAU;AAAA,UAGhB,YAAAY,EAAA,aAAalB,CAAW;AAAA,yCAAxBkB,EAAA,aAAalB,CAAW,IAAA0B,GAAA,CAAAA,MAGZF,EAAA,SAASlB,GAAQY,EAAA,cAAclB,CAAW,CAAA;AAAA,UAF9D,cAAYuB,EAAA,YAAY,OAAOjB,EAAO,aAAa,KAAKiB,cAAY,SAASjB,EAAO,aAAa;AAAA,UACjG,OAAOA,EAAO;AAAA;UAGCA,EAAO,SAASA,EAAO,MAAM;kBAAW;AAAA,YACtD,IAAAuB,EAAA,CAA+D,EADG,QAAAC,QAAM;AAAA,oBACxEV,EAA+DQ,EAA/CtB,EAAO,MAAM,QAAQ,GAArCgB,EAA+D,EAAA,SAAA,GAAA,GAAhBQ,EAAO,KAAK,GAAA,MAAA,EAAA;AAAA;;;UAE7CxB,EAAO,SAASA,EAAO,MAAM;kBAAS;AAAA,YACpD,IAAAuB,EAAA,CAA6D,EADC,QAAAC,QAAM;AAAA,oBACpEV,EAA6DQ,EAA7CtB,EAAO,MAAM,MAAM,GAAnCgB,EAA6D,EAAA,SAAA,GAAA,GAAhBQ,EAAO,KAAK,GAAA,MAAA,EAAA;AAAA;;;UAE3CxB,EAAO,SAASA,EAAO,MAAM;kBAAU;AAAA,kBAErD,MAA2C;AAAA,cAA3CyB,EAA2C,QAAA;AAAA,gBAArC,WAAQzB,EAAO,MAAM;AAAA;;;;UAEbA,EAAO,SAASA,EAAO,MAAM;kBAAS;AAAA,kBAEpD,MAA0C;AAAA,cAA1CyB,EAA0C,QAAA;AAAA,gBAApC,WAAQzB,EAAO,MAAM;AAAA;;;;;;;IAKnCyB,EAeM,OAAA;AAAA,MAdJ,OAAKZ,EAAA,CAAC,mFACEa,EAAA,OAAM,qBAAA,CAAA,CAAA;AAAA;MAEdC,EAEYC,GAAA;AAAA,QAFD,WAAA;AAAA,QAAU,aAAU;AAAA,QAAwB,UAAUjB,EAAA;AAAA,QAAe,SAAOO,EAAA;AAAA;mBACrF,MAAe;AAAA,cAAZN,EAAA,SAAS,GAAA,CAAA;AAAA;;;MAEde,EAOYC,GAAA;AAAA,QANV,SAAA;AAAA,QACA,aAAU;AAAA,QACT,UAAUjB,EAAA,gBAAgBM,EAAA,YAAY;AAAA,QACtC,SAAOC,EAAA;AAAA;mBAER,MAAe;AAAA,cAAZN,EAAA,SAAS,GAAA,CAAA;AAAA;;;;;;;;;"}
1
+ {"version":3,"file":"Filters.js","sources":["../src/components/Filters/Filters.vue"],"sourcesContent":["<script>\n import cloneDeep from 'lodash-es/cloneDeep';\n import merge from 'lodash-es/merge';\n import { nextTick, ref, toRefs } from 'vue';\n\n import useValidation from '../../composables/useValidation/useValidation';\n import { LLLV_CHANGE_TRIGGERS } from '../../constants';\n import { t } from '../../locale';\n import { persistentStorage } from '../../storage';\n import Button from '../Button/Button.vue';\n import Checkbox from '../Checkbox/Checkbox.vue';\n import DatePicker from '../DatePicker/DatePicker.vue';\n import Input from '../Input/Input.vue';\n import InputOptions from '../InputOptions/InputOptions.vue';\n import Radio from '../Radio/Radio.vue';\n import Select from '../Select/Select.vue';\n\n export default {\n name: 'll-filters',\n\n components: {\n 'll-button': Button,\n 'll-checkbox': Checkbox,\n 'll-input': Input,\n 'll-input-options': InputOptions,\n 'll-radio': Radio,\n 'll-select': Select,\n DatePicker,\n },\n\n props: {\n /**\n * Whether to disable the Apply button\n */\n disableApply: Boolean,\n /**\n * Whether to disable the Clear button\n */\n disableClear: Boolean,\n /**\n * Whether to disable the sticky filters\n * If disabled, a default pre-selected value(s) can be added to\n * the filter component's attributes\n */\n disablePersistency: Boolean,\n /**\n * Filters schema\n */\n schema: {\n type: Array,\n default: () => [],\n },\n /**\n * Validation schema function that returns an object\n */\n validationSchema: {\n type: Function,\n default: () => () => undefined,\n },\n },\n\n emits: ['change', 'submit', 'reset'],\n\n setup(props) {\n const { validationSchema: getValidationSchema } = toRefs(props);\n const validationSchema = getValidationSchema.value();\n const validationValues = ref({});\n\n // Without ref, `this.validation` will always evaluate to its initial value of `undefined` due to lack of reactivity.\n const validation = ref();\n\n function initValidation() {\n if (validationSchema?.toString() !== '[object Object]') {\n return;\n }\n\n validationValues.value = Object.keys(validationSchema).reduce((values, fieldName) => {\n values[fieldName] = undefined;\n\n return values;\n }, {});\n\n const validationRules = Object.entries(validationSchema).reduce((rules, [fieldName, fieldRules]) => {\n rules[fieldName] = fieldRules.map((fieldRule) => {\n return fieldRule(validationValues);\n });\n\n return rules;\n }, {});\n\n validation.value = useValidation({ rules: validationRules, values: validationValues });\n validation.value.validate();\n }\n\n return {\n validation,\n validationValues,\n initValidation,\n };\n },\n\n data() {\n return {\n applyText: t('ll.apply'),\n clearText: t('ll.clear'),\n filters: {},\n filterValues: {},\n forceRenderCount: 0,\n };\n },\n\n watch: {\n filterValues: {\n /**\n * Maps filters to a partcular object structure:\n * @param {IFilterSchemaItem} newFilterValues all selected filters\n * @returns {IFilter}\n */\n handler: function (newFilterValues) {\n const filters = Object.keys(newFilterValues).reduce((acc, i) => {\n const schema = this.schema[i];\n\n if (!schema || !schema.fieldToFilter) {\n return acc;\n }\n\n const item = newFilterValues[i];\n\n // Ignore empty string or undefined/null filter values\n if (item === '' || item == null) {\n return acc;\n }\n\n const trackBy = schema.attributes.trackBy || 'id';\n const isObject = typeof item === 'object';\n const isCustomFilterComponent = typeof schema.type === 'object';\n // TODO: remove handling of schema.attributes.multiple when we remove the vue-multiselect version of Select\n const isMultiple =\n (isCustomFilterComponent && schema.attributes.multiple) ||\n (!isCustomFilterComponent &&\n schema.type.includes('ll-select') &&\n (schema.attributes.multiple || !schema.attributes.single));\n const filterBy = isMultiple\n ? // local storage might have item stored as an object from the old Select\n (Array.isArray(item) ? item : [item]).map((v) => v[trackBy])\n : isObject\n ? [item[trackBy]]\n : [item];\n\n const groupedWith = schema.groupedWith;\n\n if (groupedWith) {\n filterBy[0] = {\n index: groupedWith,\n value: newFilterValues[groupedWith],\n };\n filterBy.push({\n index: Number(i),\n value: newFilterValues[i],\n });\n }\n\n if (filterBy.length) {\n acc[schema.fieldToFilter] = {\n // don't add to `filters` if no filterBy\n filterBy,\n filterType: schema.type, // Informs the applied filter count\n isMultiple,\n ...('fn' in schema && { customFilter: schema.fn }),\n };\n }\n\n return acc;\n }, {});\n\n this.filters = filters;\n this.$emit('change', filters);\n },\n\n deep: true,\n immediate: true,\n },\n\n filters() {\n if (this.validation) {\n this.updateValidationValues();\n }\n },\n },\n\n async created() {\n // initFilterValues updates the filterValues so using await nextTick() forces the code\n // after it to wait until nextTick is done, at which point the filterValues will\n // be done initializing. Otherwise, applyFilters sometimes applies the wrong\n // filters because filterValues is not done updating.\n this.initFilterValues();\n await nextTick();\n this.initValidation();\n this.applyFilters({ trigger: LLLV_CHANGE_TRIGGERS.LOAD });\n },\n\n methods: {\n initFilterValues() {\n if (this.disablePersistency) {\n this.filterValues = this.getDefaultFilterValues();\n\n return;\n }\n\n this.filterValues = this.getPersistentFilterValues() || this.getDefaultFilterValues();\n },\n\n /**\n * Apply the selected filters and save them to localStorage.\n * ListView calls this method using a ref to Filters.\n * The trigger option is used in ListView.\n * @param {object} [options] - optional parameters\n * @param {string} [options.trigger] - the action that triggered this function call\n */\n async applyFilters({ trigger = LLLV_CHANGE_TRIGGERS.APPLY } = {}) {\n if (this.validation) {\n await this.validation.validate();\n\n if (this.validation.hasErrors) {\n return;\n }\n }\n\n if (!this.disablePersistency) {\n this.persistFilterValues(this.filterValues);\n }\n\n this.$emit('submit', { trigger });\n },\n\n resetFilters() {\n this.filterValues = this.getDefaultFilterValues();\n\n this.forceRenderCount++;\n\n if (!this.disablePersistency) {\n this.persistFilterValues(this.filterValues);\n }\n\n // Emit after filters are updated\n this.$nextTick(() => {\n this.$emit('reset');\n });\n },\n\n /**\n * Returns pre-defined filter values to become the default values\n */\n getDefaultFilterValues() {\n return this.schema.reduce((acc, item, filterIndex) => {\n if (item.type === 'll-checkbox') {\n acc[filterIndex] = item.attributes.checked || false;\n } else if (Object.prototype.hasOwnProperty.call(item.attributes, 'modelValue')) {\n acc[filterIndex] = item.attributes.modelValue;\n }\n\n return acc;\n }, {});\n },\n\n /**\n * Intended for external use, when filter values need to be set for the user\n */\n setFilterValues(newValues) {\n this.filterValues = merge({}, this.filterValues, newValues);\n this.forceRenderCount++;\n },\n\n updateValidationValues() {\n const validatable = Object.keys(this.validationSchema());\n\n this.schema.forEach((fieldSchema, filterIndex) => {\n const fieldToFilter = fieldSchema.fieldToFilter;\n const validate = validatable.includes(fieldToFilter);\n\n if (validate) {\n const filter = this.filters[fieldToFilter];\n\n /**\n * Get all validatable fields.\n * Use parsed value of filters that are set,\n * otherwise fall back to `filterValue` value if not set.\n */\n const filterValue = filter\n ? filter.isMultiple\n ? filter.filterBy\n : filter.filterBy[0]\n : this.filterValues[filterIndex];\n\n this.validationValues[fieldToFilter] = filterValue;\n }\n });\n },\n\n /**\n * Change handler for filter fields\n */\n onChange(filter, filterValues, filterIndex) {\n if (filter.on?.change) {\n // Maps to `on.change` handlers in the filter schema.\n filter.on.change(filterValues, filterIndex);\n }\n },\n\n /**\n * Select input event handler for filter fields\n */\n onSelectInput(newValue, filter, filterIndex) {\n if (newValue === undefined) {\n delete this.filterValues[filterIndex]; // prevent undefined filterValues which cause an empty result list\n } else {\n this.filterValues[filterIndex] = newValue;\n }\n\n this.onChange(filter, this.filterValues, filterIndex);\n },\n\n /**\n * Get filter values from local storage.\n * @returns {any}\n */\n getPersistentFilterValues() {\n return persistentStorage.get('filter-values');\n },\n\n /**\n * Clone new filterValues to remove reactivity, and save them to localStorage.\n * @param {object} newValues - the filterValues to be persisted in localStorage\n */\n persistFilterValues(newValues) {\n persistentStorage.set('filter-values', cloneDeep(newValues));\n },\n },\n };\n</script>\n\n<template>\n <div class=\"tw-ll-grid tw-grid-cols-4 md:tw-grid-cols-12\">\n <template v-for=\"(filter, filterIndex) in schema\">\n <div\n v-if=\"!filter.hidden\"\n :key=\"`${filterIndex} ${forceRenderCount}`\"\n class=\"field-wrapper tw-col-span-4 md:tw-col-span-3\"\n :class=\"{ 'max-md:tw-hidden': !filter.type, 'tw-flex tw-items-end': filter.type === 'll-checkbox' }\"\n :data-test=\"`filter|${filter.fieldToFilter}`\"\n >\n <!-- Filter component -->\n <ll-select\n v-if=\"filter.type === 'll-select'\"\n v-bind=\"filter.attributes\"\n :error=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n :model-value=\"filterValues[filterIndex]\"\n @update:model-value=\"(newValue) => onSelectInput(newValue, filter, filterIndex)\"\n />\n <ll-checkbox\n v-else-if=\"filter.type === 'll-checkbox'\"\n v-model:checked=\"filterValues[filterIndex]\"\n v-bind=\"filter.attributes\"\n :error-text=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n @update:checked=\"onChange(filter, filterValues, filterIndex)\"\n />\n <ll-radio\n v-else-if=\"filter.type === 'll-radio'\"\n v-model:checked=\"filterValues[filterIndex]\"\n v-bind=\"filter.attributes\"\n :error-text=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n @update:checked=\"onChange(filter, filterValues, filterIndex)\"\n />\n <component\n v-bind=\"filter.attributes\"\n :is=\"filter.type\"\n v-else-if=\"filter.type\"\n v-model=\"filterValues[filterIndex]\"\n :error-text=\"validation?.fields[filter.fieldToFilter] && validation?.getError(filter.fieldToFilter)\"\n :label=\"filter.label\"\n @update:model-value=\"onChange(filter, filterValues, filterIndex)\"\n >\n <template v-if=\"filter.slots && filter.slots.selected\" #selected=\"{ option }\">\n <component :is=\"filter.slots.selected\" v-bind=\"option.props\" />\n </template>\n <template v-if=\"filter.slots && filter.slots.option\" #option=\"{ option }\">\n <component :is=\"filter.slots.option\" v-bind=\"option.props\" />\n </template>\n <template v-if=\"filter.slots && filter.slots.prepend\" #prepend>\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-html=\"filter.slots.prepend\"></span>\n </template>\n <template v-if=\"filter.slots && filter.slots.append\" #append>\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-html=\"filter.slots.append\"></span>\n </template>\n </component>\n </div>\n </template>\n <div\n class=\"button-grid tw-col-span-4 tw-flex tw-items-end tw-justify-end md:tw-col-span-12\"\n :class=\"$style['filter-button-group']\"\n >\n <ll-button secondary data-test=\"button|reset-filters\" :disabled=\"disableClear\" @click=\"resetFilters\">\n {{ clearText }}\n </ll-button>\n <ll-button\n primary\n data-test=\"button|apply-filters\"\n :disabled=\"disableApply || validation?.hasErrors\"\n @click=\"applyFilters\"\n >\n {{ applyText }}\n </ll-button>\n </div>\n </div>\n</template>\n\n<style module>\n .filter-button-group {\n @media screen('max-md') {\n display: flex;\n flex-direction: column-reverse;\n }\n\n button {\n @media screen('max-md') {\n width: 100% !important;\n }\n\n &:nth-child(2) {\n @media screen('max-md') {\n margin-bottom: theme('spacing.3');\n }\n }\n }\n }\n</style>\n"],"names":["_sfc_main","Button","Checkbox","Input","InputOptions","Radio","Select","DatePicker","props","getValidationSchema","toRefs","validationSchema","validationValues","ref","validation","initValidation","values","fieldName","validationRules","rules","fieldRules","fieldRule","useValidation","t","newFilterValues","filters","acc","i","schema","item","trackBy","isObject","isCustomFilterComponent","isMultiple","filterBy","v","groupedWith","nextTick","LLLV_CHANGE_TRIGGERS","trigger","filterIndex","newValues","merge","validatable","fieldSchema","fieldToFilter","filter","filterValue","filterValues","_a","newValue","persistentStorage","cloneDeep","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_openBlock","_createElementBlock","_Fragment","_renderList","$props","_createCommentVNode","$data","_normalizeClass","_createBlock","_component_ll_select","_mergeProps","$setup","_b","$options","_component_ll_checkbox","$event","_c","_d","_component_ll_radio","_e","_f","_resolveDynamicComponent","_g","_h","_createSlots","_withCtx","option","_createElementVNode","_ctx","_createVNode","_component_ll_button","_createTextVNode","_toDisplayString"],"mappings":"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"}