@leaflink/stash 51.11.0 → 51.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/README.md +41 -12
  2. package/dist/Accordion.js.map +1 -1
  3. package/dist/Accordion.vue.d.ts +37 -6
  4. package/dist/ActionsDropdown.js +2 -2
  5. package/dist/ActionsDropdown.js.map +1 -1
  6. package/dist/ActionsDropdown.vue.d.ts +74 -0
  7. package/dist/AddressSelect.js +60 -56
  8. package/dist/AddressSelect.js.map +1 -1
  9. package/dist/AddressSelect.vue.d.ts +65 -8
  10. package/dist/Alert.js.map +1 -1
  11. package/dist/Alert.vue.d.ts +41 -4
  12. package/dist/AppNavigationItem.js.map +1 -1
  13. package/dist/AppNavigationItem.vue.d.ts +31 -4
  14. package/dist/AppSidebar.js.map +1 -1
  15. package/dist/AppSidebar.vue.d.ts +35 -8
  16. package/dist/AppTopbar.js +1 -1
  17. package/dist/AppTopbar.js.map +1 -1
  18. package/dist/AppTopbar.vue.d.ts +33 -4
  19. package/dist/Avatar.js.map +1 -1
  20. package/dist/Avatar.vue.d.ts +44 -5
  21. package/dist/Backdrop.js.map +1 -1
  22. package/dist/Backdrop.vue.d.ts +1 -1
  23. package/dist/Badge.js.map +1 -1
  24. package/dist/Badge.vue.d.ts +55 -6
  25. package/dist/Box.vue.d.ts +36 -3
  26. package/dist/Box.vue_vue_type_script_setup_true_lang-rFnvwLVY.js.map +1 -1
  27. package/dist/Button.js.map +1 -1
  28. package/dist/Button.vue.d.ts +50 -5
  29. package/dist/ButtonGroup.js +37 -33
  30. package/dist/ButtonGroup.js.map +1 -1
  31. package/dist/ButtonGroup.vue.d.ts +39 -6
  32. package/dist/Card.js.map +1 -1
  33. package/dist/Card.vue.d.ts +32 -5
  34. package/dist/CardContent.js.map +1 -1
  35. package/dist/CardContent.vue.d.ts +1 -1
  36. package/dist/CardFooter.js.map +1 -1
  37. package/dist/CardFooter.vue.d.ts +1 -1
  38. package/dist/CardHeader.js.map +1 -1
  39. package/dist/CardHeader.vue.d.ts +15 -2
  40. package/dist/CardMedia.js.map +1 -1
  41. package/dist/CardMedia.vue.d.ts +15 -2
  42. package/dist/Carousel.js +72 -66
  43. package/dist/Carousel.js.map +1 -1
  44. package/dist/Carousel.vue.d.ts +10 -10
  45. package/dist/Checkbox.js.map +1 -1
  46. package/dist/Checkbox.vue.d.ts +53 -8
  47. package/dist/ChevronToggle.vue.d.ts +34 -7
  48. package/dist/ChevronToggle.vue_vue_type_script_setup_true_lang-Ce_qOXfR.js.map +1 -1
  49. package/dist/Chip.js.map +1 -1
  50. package/dist/Chip.vue.d.ts +52 -10
  51. package/dist/ConfirmationCodeInput.js +44 -40
  52. package/dist/ConfirmationCodeInput.js.map +1 -1
  53. package/dist/ConfirmationCodeInput.vue.d.ts +43 -8
  54. package/dist/ContextSwitcher.js.map +1 -1
  55. package/dist/ContextSwitcher.vue.d.ts +41 -6
  56. package/dist/Copy.js.map +1 -1
  57. package/dist/Copy.vue.d.ts +34 -3
  58. package/dist/CurrencyInput.js +21 -20
  59. package/dist/CurrencyInput.js.map +1 -1
  60. package/dist/CurrencyInput.vue.d.ts +46 -125
  61. package/dist/DataView.js +96 -94
  62. package/dist/DataView.js.map +1 -1
  63. package/dist/DataView.vue.d.ts +57 -12
  64. package/dist/DataViewFilters.js +139 -127
  65. package/dist/DataViewFilters.js.map +1 -1
  66. package/dist/DataViewFilters.vue.d.ts +54 -9
  67. package/dist/DataViewSortButton.js +2 -2
  68. package/dist/DataViewSortButton.js.map +1 -1
  69. package/dist/DataViewSortButton.vue.d.ts +30 -3
  70. package/dist/DataViewToolbar.js +81 -148
  71. package/dist/DataViewToolbar.js.map +1 -1
  72. package/dist/DataViewToolbar.vue.d.ts +40 -106
  73. package/dist/DatePicker.js +4640 -4528
  74. package/dist/DatePicker.js.map +1 -1
  75. package/dist/DatePicker.vue.d.ts +79 -30
  76. package/dist/DescriptionList.js.map +1 -1
  77. package/dist/DescriptionList.vue.d.ts +32 -3
  78. package/dist/DescriptionListDetail.js.map +1 -1
  79. package/dist/DescriptionListDetail.vue.d.ts +1 -1
  80. package/dist/DescriptionListGroup.js.map +1 -1
  81. package/dist/DescriptionListGroup.vue.d.ts +1 -1
  82. package/dist/DescriptionListTerm.js.map +1 -1
  83. package/dist/DescriptionListTerm.vue.d.ts +1 -1
  84. package/dist/Dialog.js.map +1 -1
  85. package/dist/Dialog.vue.d.ts +53 -10
  86. package/dist/Divider.js.map +1 -1
  87. package/dist/Dropdown.js +95 -89
  88. package/dist/Dropdown.js.map +1 -1
  89. package/dist/Dropdown.vue.d.ts +48 -12
  90. package/dist/EmptyState.js +1 -1
  91. package/dist/EmptyState.js.map +1 -1
  92. package/dist/EmptyState.vue.d.ts +62 -5
  93. package/dist/Expand.vue.d.ts +40 -10
  94. package/dist/Expand.vue_vue_type_script_setup_true_lang-CiONJfAp.js.map +1 -1
  95. package/dist/Field.vue.d.ts +53 -4
  96. package/dist/Field.vue_vue_type_script_setup_true_lang-DI6z3AE9.js.map +1 -1
  97. package/dist/FileUpload.js +74 -72
  98. package/dist/FileUpload.js.map +1 -1
  99. package/dist/FileUpload.vue.d.ts +44 -10
  100. package/dist/FilterChip.js.map +1 -1
  101. package/dist/FilterChip.vue.d.ts +41 -6
  102. package/dist/FilterDrawerItem.js +21 -21
  103. package/dist/FilterDrawerItem.js.map +1 -1
  104. package/dist/FilterDrawerItem.vue.d.ts +23 -6
  105. package/dist/FilterDropdown.js +69 -63
  106. package/dist/FilterDropdown.js.map +1 -1
  107. package/dist/FilterDropdown.vue.d.ts +35 -122
  108. package/dist/FilterSelect.js.map +1 -1
  109. package/dist/FilterSelect.vue.d.ts +31 -4
  110. package/dist/Filters.js +164 -157
  111. package/dist/Filters.js.map +1 -1
  112. package/dist/Filters.vue.d.ts +2190 -0
  113. package/dist/HttpError.js +7 -7
  114. package/dist/HttpError.js.map +1 -1
  115. package/dist/HttpError.vue.d.ts +41 -4
  116. package/dist/Icon.js +17 -17
  117. package/dist/Icon.js.map +1 -1
  118. package/dist/Icon.vue.d.ts +36 -3
  119. package/dist/IconLabel.js.map +1 -1
  120. package/dist/IconLabel.vue.d.ts +40 -5
  121. package/dist/Illustration.js +2 -2
  122. package/dist/Illustration.vue.d.ts +42 -3
  123. package/dist/{Illustration.vue_vue_type_script_setup_true_lang-BVzzNsRt.js → Illustration.vue_vue_type_script_setup_true_lang-BrqEF8xe.js} +11 -11
  124. package/dist/{Illustration.vue_vue_type_script_setup_true_lang-BVzzNsRt.js.map → Illustration.vue_vue_type_script_setup_true_lang-BrqEF8xe.js.map} +1 -1
  125. package/dist/Image.js +2 -2
  126. package/dist/Image.vue.d.ts +40 -5
  127. package/dist/{Image.vue_vue_type_script_setup_true_lang-Dg2Zk2r2.js → Image.vue_vue_type_script_setup_true_lang-D5u4av0_.js} +41 -37
  128. package/dist/{Image.vue_vue_type_script_setup_true_lang-Dg2Zk2r2.js.map → Image.vue_vue_type_script_setup_true_lang-D5u4av0_.js.map} +1 -1
  129. package/dist/InlineEdit.js.map +1 -1
  130. package/dist/InlineEdit.vue.d.ts +47 -126
  131. package/dist/Input.js.map +1 -1
  132. package/dist/Input.vue.d.ts +45 -12
  133. package/dist/InputOptions.js +69 -66
  134. package/dist/InputOptions.js.map +1 -1
  135. package/dist/InputOptions.vue.d.ts +55 -10
  136. package/dist/IntegrationIcon.js +7 -7
  137. package/dist/IntegrationIcon.js.map +1 -1
  138. package/dist/IntegrationIcon.vue.d.ts +36 -3
  139. package/dist/Label.vue.d.ts +42 -3
  140. package/dist/Label.vue_vue_type_script_setup_true_lang-CNquF3AP.js.map +1 -1
  141. package/dist/LicenseChip.js.map +1 -1
  142. package/dist/LicenseChip.vue.d.ts +30 -3
  143. package/dist/ListItem.js.map +1 -1
  144. package/dist/ListItem.vue.d.ts +294 -0
  145. package/dist/ListItemCell.js.map +1 -1
  146. package/dist/ListItemCell.vue.d.ts +21 -0
  147. package/dist/ListView.js +7 -4
  148. package/dist/ListView.js.map +1 -1
  149. package/dist/ListView.types.d.ts +29 -0
  150. package/dist/ListView.vue.d.ts +5496 -0
  151. package/dist/Loading.js +2 -2
  152. package/dist/Loading.js.map +1 -1
  153. package/dist/Loading.vue.d.ts +1 -1
  154. package/dist/Logo.js +1 -1
  155. package/dist/Logo.vue.d.ts +41 -6
  156. package/dist/{Logo.vue_vue_type_script_setup_true_lang-Y3iE9utm.js → Logo.vue_vue_type_script_setup_true_lang-Dz8c98sc.js} +17 -17
  157. package/dist/Logo.vue_vue_type_script_setup_true_lang-Dz8c98sc.js.map +1 -0
  158. package/dist/Menu.js.map +1 -1
  159. package/dist/Menu.vue.d.ts +1 -1
  160. package/dist/MenuItem.js.map +1 -1
  161. package/dist/MenuItem.vue.d.ts +1 -1
  162. package/dist/MenusPlugin-Bk6UW6o9.js +12 -0
  163. package/dist/{MenusPlugin-B4jpNe7x.js.map → MenusPlugin-Bk6UW6o9.js.map} +1 -1
  164. package/dist/Metric.js.map +1 -1
  165. package/dist/Metric.vue.d.ts +34 -3
  166. package/dist/Modal.js +64 -62
  167. package/dist/Modal.js.map +1 -1
  168. package/dist/Modal.vue.d.ts +60 -13
  169. package/dist/Modals.js +18 -17
  170. package/dist/Modals.js.map +1 -1
  171. package/dist/ModalsPlugin.js +11 -11
  172. package/dist/ModalsPlugin.js.map +1 -1
  173. package/dist/Module.js.map +1 -1
  174. package/dist/Module.vue.d.ts +29 -2
  175. package/dist/ModuleContent.js.map +1 -1
  176. package/dist/ModuleContent.vue.d.ts +3 -3
  177. package/dist/ModuleFooter.js.map +1 -1
  178. package/dist/ModuleFooter.vue.d.ts +1 -1
  179. package/dist/ModuleHeader.js.map +1 -1
  180. package/dist/ModuleHeader.vue.d.ts +39 -5
  181. package/dist/MoreActions.js +125 -123
  182. package/dist/MoreActions.js.map +1 -1
  183. package/dist/MoreActions.vue.d.ts +46 -123
  184. package/dist/ObfuscateText.js.map +1 -1
  185. package/dist/ObfuscateText.vue.d.ts +40 -3
  186. package/dist/PageContent.js.map +1 -1
  187. package/dist/PageContent.vue.d.ts +30 -3
  188. package/dist/PageHeader.js.map +1 -1
  189. package/dist/PageHeader.vue.d.ts +35 -6
  190. package/dist/PageNavigation.js +50 -50
  191. package/dist/PageNavigation.js.map +1 -1
  192. package/dist/PageNavigation.vue.d.ts +36 -7
  193. package/dist/Paginate.js.map +1 -1
  194. package/dist/Paginate.vue.d.ts +40 -5
  195. package/dist/PlaidLink.js.map +1 -1
  196. package/dist/PlaidLink.vue.d.ts +49 -12
  197. package/dist/QuickAction.js.map +1 -1
  198. package/dist/QuickAction.vue.d.ts +15 -2
  199. package/dist/Radio.js.map +1 -1
  200. package/dist/Radio.vue.d.ts +93 -0
  201. package/dist/RadioGroup.js +101 -94
  202. package/dist/RadioGroup.js.map +1 -1
  203. package/dist/RadioGroup.vue.d.ts +42 -116
  204. package/dist/RadioNew.js +99 -96
  205. package/dist/RadioNew.js.map +1 -1
  206. package/dist/RadioNew.vue.d.ts +48 -7
  207. package/dist/RangeInput.js.map +1 -1
  208. package/dist/RangeInput.vue.d.ts +1 -1
  209. package/dist/SearchBar.js +39 -38
  210. package/dist/SearchBar.js.map +1 -1
  211. package/dist/SearchBar.vue.d.ts +44 -127
  212. package/dist/SectionHeader.js.map +1 -1
  213. package/dist/SectionHeader.vue.d.ts +36 -5
  214. package/dist/Select.js +183 -171
  215. package/dist/Select.js.map +1 -1
  216. package/dist/Select.vue.d.ts +102 -23
  217. package/dist/SelectStatus.js +38 -38
  218. package/dist/SelectStatus.js.map +1 -1
  219. package/dist/SelectStatus.vue.d.ts +46 -226
  220. package/dist/Skeleton.js.map +1 -1
  221. package/dist/Skeleton.vue.d.ts +34 -3
  222. package/dist/Step.js +44 -44
  223. package/dist/Step.js.map +1 -1
  224. package/dist/Step.vue.d.ts +43 -4
  225. package/dist/Stepper.js.map +1 -1
  226. package/dist/Stepper.vue.d.ts +44 -9
  227. package/dist/Switch.js.map +1 -1
  228. package/dist/Switch.vue.d.ts +47 -8
  229. package/dist/Tab.js +9 -9
  230. package/dist/Tab.js.map +1 -1
  231. package/dist/Tab.vue.d.ts +15 -2
  232. package/dist/TabPanel.js.map +1 -1
  233. package/dist/TabPanel.vue.d.ts +30 -3
  234. package/dist/Table.js +59 -53
  235. package/dist/Table.js.map +1 -1
  236. package/dist/Table.vue.d.ts +50 -3
  237. package/dist/TableCell.js +1 -1
  238. package/dist/TableCell.js.map +1 -1
  239. package/dist/TableCell.vue.d.ts +32 -3
  240. package/dist/TableHeaderCell.js +1 -1
  241. package/dist/TableHeaderCell.js.map +1 -1
  242. package/dist/TableHeaderCell.vue.d.ts +30 -3
  243. package/dist/TableHeaderRow.js +1 -1
  244. package/dist/TableHeaderRow.js.map +1 -1
  245. package/dist/TableHeaderRow.vue.d.ts +34 -5
  246. package/dist/TableRow.js +44 -43
  247. package/dist/TableRow.js.map +1 -1
  248. package/dist/TableRow.vue.d.ts +48 -7
  249. package/dist/Tabs.js +2 -2
  250. package/dist/Tabs.vue.d.ts +31 -4
  251. package/dist/Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js +159 -0
  252. package/dist/Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js.map +1 -0
  253. package/dist/TextEditor.js +2422 -2416
  254. package/dist/TextEditor.js.map +1 -1
  255. package/dist/TextEditor.vue.d.ts +39 -8
  256. package/dist/Textarea.js +32 -29
  257. package/dist/Textarea.js.map +1 -1
  258. package/dist/Textarea.vue.d.ts +44 -9
  259. package/dist/Thumbnail.js +1 -1
  260. package/dist/Thumbnail.js.map +1 -1
  261. package/dist/Thumbnail.vue.d.ts +4 -4
  262. package/dist/ThumbnailEmpty.js.map +1 -1
  263. package/dist/ThumbnailEmpty.vue.d.ts +1 -1
  264. package/dist/ThumbnailGroup.js.map +1 -1
  265. package/dist/ThumbnailGroup.vue.d.ts +22 -26
  266. package/dist/Timeline.js.map +1 -1
  267. package/dist/Timeline.vue.d.ts +32 -3
  268. package/dist/TimelineItem.js.map +1 -1
  269. package/dist/TimelineItem.vue.d.ts +1 -1
  270. package/dist/Toast.js.map +1 -1
  271. package/dist/Toast.vue.d.ts +30 -3
  272. package/dist/Toasts.js.map +1 -1
  273. package/dist/ToastsPlugin.js +11 -11
  274. package/dist/ToastsPlugin.js.map +1 -1
  275. package/dist/Tooltip.js +30 -29
  276. package/dist/Tooltip.js.map +1 -1
  277. package/dist/Tooltip.vue.d.ts +43 -11
  278. package/dist/components.css +1 -1
  279. package/dist/directives/observe.js +8 -8
  280. package/dist/directives/observe.js.map +1 -1
  281. package/dist/directives/tooltip.js +3 -3
  282. package/dist/directives/tooltip.js.map +1 -1
  283. package/dist/directives/viewable.js +44 -39
  284. package/dist/directives/viewable.js.map +1 -1
  285. package/dist/floating-ui.vue-DLFiymOf.js +1093 -0
  286. package/dist/floating-ui.vue-DLFiymOf.js.map +1 -0
  287. package/dist/formatDateTime-Dz8bXV0R.js +1418 -0
  288. package/dist/formatDateTime-Dz8bXV0R.js.map +1 -0
  289. package/dist/index-D6bxWkZ1.js.map +1 -1
  290. package/dist/{index-XZqpB2_R.js → index-DA_ft08e.js} +9 -9
  291. package/dist/index-DA_ft08e.js.map +1 -0
  292. package/dist/index.js +106 -101
  293. package/dist/index.js.map +1 -1
  294. package/dist/isValid-DN-HkCoi.js.map +1 -1
  295. package/dist/obfuscateText.d.ts +1 -1
  296. package/dist/parseISO-wlfIB_QJ.js.map +1 -1
  297. package/dist/searchFuzzy-B3TsUO-V.js +409 -0
  298. package/dist/searchFuzzy-B3TsUO-V.js.map +1 -0
  299. package/dist/toTimeZone-Coq1oPTt.js.map +1 -1
  300. package/dist/useDialog.d.ts +2 -2
  301. package/dist/useDialog.js +25 -21
  302. package/dist/useDialog.js.map +1 -1
  303. package/dist/useGoogleMaps.js +110 -108
  304. package/dist/useGoogleMaps.js.map +1 -1
  305. package/dist/useMediaQuery.d.ts +6 -0
  306. package/dist/useMediaQuery.js +15 -11
  307. package/dist/useMediaQuery.js.map +1 -1
  308. package/dist/useModals.d.ts +1 -1
  309. package/dist/usePlaidLink.js +27 -20
  310. package/dist/usePlaidLink.js.map +1 -1
  311. package/dist/useSearch.js +13 -13
  312. package/dist/useSearch.js.map +1 -1
  313. package/dist/useSelection.js +56 -56
  314. package/dist/useSelection.js.map +1 -1
  315. package/dist/useSortable.js +63 -54
  316. package/dist/useSortable.js.map +1 -1
  317. package/dist/useStepper.d.ts +2 -2
  318. package/dist/useStepper.js +40 -36
  319. package/dist/useStepper.js.map +1 -1
  320. package/dist/useToasts.js +23 -23
  321. package/dist/useToasts.js.map +1 -1
  322. package/dist/useValidation.js +100 -96
  323. package/dist/useValidation.js.map +1 -1
  324. package/dist/utils/calculateElementOverflow.js +4 -4
  325. package/dist/utils/calculateElementOverflow.js.map +1 -1
  326. package/dist/utils/formatDateTime.js +1 -1
  327. package/dist/utils/obfuscateText.js +6 -6
  328. package/dist/utils/obfuscateText.js.map +1 -1
  329. package/dist/utils/searchFuzzy.js +1 -1
  330. package/dist/utils/storage.js +23 -23
  331. package/dist/utils/storage.js.map +1 -1
  332. package/package.json +32 -19
  333. package/dist/Logo.vue_vue_type_script_setup_true_lang-Y3iE9utm.js.map +0 -1
  334. package/dist/MenusPlugin-B4jpNe7x.js +0 -12
  335. package/dist/Tabs.vue_vue_type_script_setup_true_lang-BlJVDr7o.js +0 -78
  336. package/dist/Tabs.vue_vue_type_script_setup_true_lang-BlJVDr7o.js.map +0 -1
  337. package/dist/floating-ui.vue-CL01Y9ER.js +0 -1075
  338. package/dist/floating-ui.vue-CL01Y9ER.js.map +0 -1
  339. package/dist/formatDateTime-DG7kBc2T.js +0 -1414
  340. package/dist/formatDateTime-DG7kBc2T.js.map +0 -1
  341. package/dist/index-XZqpB2_R.js.map +0 -1
  342. package/dist/searchFuzzy-DBDE6jkd.js +0 -408
  343. package/dist/searchFuzzy-DBDE6jkd.js.map +0 -1
@@ -1,30 +1,30 @@
1
1
  import O from "lodash-es/debounce";
2
- import E from "lodash-es/get";
3
- import { toValue as u, computed as c, ref as V, watch as F, reactive as I, nextTick as w, readonly as S } from "vue";
4
- import { DECIMAL_PRECISION as L, DEBOUNCE as A } from "./constants.js";
2
+ import V from "lodash-es/get";
3
+ import { toValue as u, computed as c, ref as N, watch as L, reactive as I, nextTick as w, readonly as E } from "vue";
4
+ import { DECIMAL_PRECISION as A, DEBOUNCE as q } from "./constants.js";
5
5
  import { t as f } from "./locale.js";
6
6
  import { i as l } from "./isDefined-DzVx0B6k.js";
7
- import q from "lodash-es/round";
8
- function D(e) {
7
+ import D from "lodash-es/round";
8
+ function j(e) {
9
9
  return e && e.constructor && typeof e.constructor.isBuffer == "function" && e.constructor.isBuffer(e);
10
10
  }
11
- function j(e) {
11
+ function C(e) {
12
12
  return e;
13
13
  }
14
- function C(e, t) {
14
+ function F(e, t) {
15
15
  t = t || {};
16
- const i = t.delimiter || ".", s = t.maxDepth, a = t.transformKey || j, m = {};
17
- function h(v, y, g) {
18
- g = g || 1, Object.keys(v).forEach(function(p) {
19
- const n = v[p], N = t.safe && Array.isArray(n), r = Object.prototype.toString.call(n), o = D(n), b = r === "[object Object]" || r === "[object Array]", d = y ? y + i + a(p) : a(p);
20
- if (!N && !o && b && Object.keys(n).length && (!t.maxDepth || g < s))
21
- return h(n, d, g + 1);
22
- m[d] = n;
16
+ const i = t.delimiter || ".", o = t.maxDepth, s = t.transformKey || C, m = {};
17
+ function v(h, y, g) {
18
+ g = g || 1, Object.keys(h).forEach(function(p) {
19
+ const r = h[p], x = t.safe && Array.isArray(r), n = Object.prototype.toString.call(r), a = j(r), b = n === "[object Object]" || n === "[object Array]", d = y ? y + i + s(p) : s(p);
20
+ if (!x && !a && b && Object.keys(r).length && (!t.maxDepth || g < o))
21
+ return v(r, d, g + 1);
22
+ m[d] = r;
23
23
  });
24
24
  }
25
- return h(e), m;
25
+ return v(e), m;
26
26
  }
27
- function P(e = {}) {
27
+ function Y(e = {}) {
28
28
  return {
29
29
  name: "email",
30
30
  validator(t) {
@@ -33,20 +33,20 @@ function P(e = {}) {
33
33
  message: e.message || f("ll.validation.email")
34
34
  };
35
35
  }
36
- function Y(e) {
36
+ function _(e) {
37
37
  return {
38
38
  name: "maxLength",
39
39
  validator(t) {
40
- const i = u(e.max), s = u(t);
41
- if (!l(s))
40
+ const i = u(e.max), o = u(t);
41
+ if (!l(o))
42
42
  return !0;
43
- let a = String(s);
44
- return e.trim && (a = a.trim()), a.length <= i;
43
+ let s = String(o);
44
+ return e.trim && (s = s.trim()), s.length <= i;
45
45
  },
46
46
  message: e.message || (() => f("ll.validation.maxLength", { max: String(u(e.max)) }))
47
47
  };
48
48
  }
49
- function _(e) {
49
+ function z(e) {
50
50
  return {
51
51
  name: "maxValue",
52
52
  validator(t) {
@@ -56,20 +56,20 @@ function _(e) {
56
56
  message: e.message || (() => f("ll.validation.maxValue", { max: String(u(e.max)) }))
57
57
  };
58
58
  }
59
- function z(e) {
59
+ function G(e) {
60
60
  return {
61
61
  name: "minLength",
62
62
  validator(t) {
63
- const i = u(e.min), s = u(t);
64
- if (!l(s))
63
+ const i = u(e.min), o = u(t);
64
+ if (!l(o))
65
65
  return !0;
66
- let a = String(s);
67
- return e.trim && (a = a.trim()), a.length >= i;
66
+ let s = String(o);
67
+ return e.trim && (s = s.trim()), s.length >= i;
68
68
  },
69
69
  message: e.message || (() => f("ll.validation.minLength", { min: String(u(e.min)) }))
70
70
  };
71
71
  }
72
- function G(e) {
72
+ function H(e) {
73
73
  return {
74
74
  name: "minValue",
75
75
  validator(t) {
@@ -79,7 +79,7 @@ function G(e) {
79
79
  message: e.message || (() => f("ll.validation.minValue", { min: String(u(e.min)) }))
80
80
  };
81
81
  }
82
- function H(e) {
82
+ function J(e) {
83
83
  return {
84
84
  name: "pattern",
85
85
  validator(t) {
@@ -95,7 +95,7 @@ function H(e) {
95
95
  }
96
96
  };
97
97
  }
98
- function J(e = {}) {
98
+ function Q(e = {}) {
99
99
  return {
100
100
  name: "positiveNumber",
101
101
  validator(t) {
@@ -104,17 +104,17 @@ function J(e = {}) {
104
104
  message: e.message || f("ll.validation.positiveNumber")
105
105
  };
106
106
  }
107
- function Q(e = {}) {
107
+ function X(e = {}) {
108
108
  return {
109
109
  name: "price",
110
110
  validator(t) {
111
111
  const i = Number(t);
112
- return !l(t) || i !== 1 / 0 && i >= 0 && i === q(i, L.CURRENCY);
112
+ return !l(t) || i !== 1 / 0 && i >= 0 && i === D(i, A.CURRENCY);
113
113
  },
114
114
  message: e.message || f("ll.validation.price")
115
115
  };
116
116
  }
117
- function X(e = {}) {
117
+ function Z(e = {}) {
118
118
  return {
119
119
  name: "required",
120
120
  validator(t) {
@@ -123,7 +123,7 @@ function X(e = {}) {
123
123
  message: e.message || f("ll.validation.required")
124
124
  };
125
125
  }
126
- function Z(e = {}) {
126
+ function W(e = {}) {
127
127
  return {
128
128
  name: "wholeNumber",
129
129
  validator(t) {
@@ -136,93 +136,97 @@ function ee({
136
136
  rules: e,
137
137
  values: t
138
138
  }) {
139
- const s = c(() => Object.keys(C(e, { safe: !0 }))).value.reduce(
140
- (r, o) => {
141
- const b = V(E(u(t), o)), d = (T) => {
142
- b.value = E(u(t), T);
143
- }, x = O(() => {
144
- d(o);
145
- }, A.FAST);
146
- return F(
147
- () => E(u(t), o),
139
+ const o = c(() => Object.keys(F(e, { safe: !0 }))).value.reduce(
140
+ (n, a) => {
141
+ const b = N(V(u(t), a)), d = (T) => {
142
+ b.value = V(u(t), T);
143
+ }, S = O(() => {
144
+ d(a);
145
+ }, q.FAST);
146
+ return L(
147
+ () => V(u(t), a),
148
148
  () => {
149
- x();
149
+ S();
150
150
  }
151
- ), r[o] = B({
152
- fieldName: o,
151
+ ), n[a] = B({
152
+ fieldName: a,
153
153
  fieldValue: b,
154
154
  flush: () => {
155
- x.cancel(), d(o);
155
+ S.cancel(), d(a);
156
156
  },
157
- rules: E(e, o)
158
- }), r;
157
+ rules: V(e, a)
158
+ }), n;
159
159
  },
160
160
  {}
161
- ), a = c(() => Object.values(s)), m = c(() => a.value.some((r) => r.errors.length > 0)), h = c(() => a.value.some((r) => r.isTouched)), v = c(() => a.value.filter((r) => r.isDirty));
161
+ ), s = c(() => Object.values(o)), m = c(() => s.value.some((n) => n.errors.length > 0)), v = c(() => s.value.some((n) => n.isTouched)), h = c(() => s.value.filter((n) => n.isDirty));
162
162
  return I({
163
- validate: async function({ preventScroll: r } = {}) {
164
- if (a.value.forEach((o) => {
165
- o.setTouched(!1), o.setTouched(!0);
166
- }), await w(), m.value && !r) {
167
- const b = Object.entries(s).find(([, x]) => x.errorMessage)?.[0] || "", d = document?.querySelector(`[name=${b}]`);
163
+ validate: async function({ preventScroll: n } = {}) {
164
+ if (s.value.forEach((a) => {
165
+ a.setTouched(!1), a.setTouched(!0);
166
+ }), await w(), m.value && !n) {
167
+ const a = Object.entries(o).find(([, S]) => S.errorMessage), b = (a == null ? void 0 : a[0]) || "", d = document == null ? void 0 : document.querySelector(`[name=${b}]`);
168
168
  d && d.scrollIntoView({ behavior: "smooth" });
169
169
  }
170
170
  return !m.value;
171
171
  },
172
- getError: function(r) {
173
- return s[r]?.errorMessage || "";
172
+ getError: function(n) {
173
+ var a;
174
+ return ((a = o[n]) == null ? void 0 : a.errorMessage) || "";
174
175
  },
175
- touch: function(r) {
176
- if (!s[r])
177
- throw new Error(`In touch: fieldName "${r}" does not exist in the validation fields.`);
178
- s[r].setTouched();
176
+ touch: function(n) {
177
+ if (!o[n])
178
+ throw new Error(`In touch: fieldName "${n}" does not exist in the validation fields.`);
179
+ o[n].setTouched();
179
180
  },
180
181
  setAllUntouched: async function() {
181
- await w(), a.value.forEach((r) => {
182
- r.setTouched(!1);
182
+ await w(), s.value.forEach((n) => {
183
+ n.setTouched(!1);
183
184
  });
184
185
  },
185
- setInitialValues: function(r) {
186
- a.value.forEach((o) => {
187
- o.setInitialValue(r[o.name]);
186
+ setInitialValues: function(n) {
187
+ s.value.forEach((a) => {
188
+ a.setInitialValue(n[a.name]);
188
189
  });
189
190
  },
190
- fields: s,
191
- dirtyFields: v,
191
+ fields: o,
192
+ dirtyFields: h,
192
193
  hasErrors: m,
193
- someTouched: h
194
+ someTouched: v
194
195
  });
195
196
  }
196
197
  function B({
197
198
  fieldName: e,
198
199
  fieldValue: t,
199
200
  rules: i,
200
- flush: s
201
+ flush: o
201
202
  }) {
202
- const a = V(t.value), m = V(!1), h = c(() => (t.value ?? "") !== (a.value ?? "")), v = c(() => m.value ? i.map((n) => ({
203
+ const s = N(t.value), m = N(!1), v = c(() => (t.value ?? "") !== (s.value ?? "")), h = c(() => m.value ? i.map((r) => ({
203
204
  fieldName: e,
204
- ruleName: n.name,
205
- isValid: n.validator(t.value),
206
- message: typeof n.message == "function" ? n.message(t.value) : n.message
205
+ ruleName: r.name,
206
+ isValid: r.validator(t.value),
207
+ message: typeof r.message == "function" ? r.message(t.value) : r.message
207
208
  })) : []), y = c(
208
- () => v.value.filter((n) => !n.isValid).map((n) => ({
209
- ruleName: n.ruleName,
210
- message: n.message
209
+ () => h.value.filter((r) => !r.isValid).map((r) => ({
210
+ ruleName: r.ruleName,
211
+ message: r.message
211
212
  }))
212
213
  );
213
- function g(n = !0) {
214
- s(), m.value = n;
214
+ function g(r = !0) {
215
+ o(), m.value = r;
215
216
  }
216
- function p(n) {
217
- a.value = n;
217
+ function p(r) {
218
+ s.value = r;
218
219
  }
219
220
  return I({
220
221
  name: e,
221
- currentValue: S(t),
222
- initialValue: S(a),
223
- isTouched: S(m),
224
- isDirty: S(h),
225
- errorMessage: c(() => y.value?.[0]?.message || ""),
222
+ currentValue: E(t),
223
+ initialValue: E(s),
224
+ isTouched: E(m),
225
+ isDirty: E(v),
226
+ errorMessage: c(() => {
227
+ var r, x;
228
+ return ((x = (r = y.value) == null ? void 0 : r[0]) == null ? void 0 : x.message) || "";
229
+ }),
226
230
  errors: y,
227
231
  setInitialValue: p,
228
232
  setTouched: g
@@ -230,16 +234,16 @@ function B({
230
234
  }
231
235
  export {
232
236
  ee as default,
233
- P as email,
237
+ Y as email,
234
238
  l as isDefined,
235
- Y as maxLength,
236
- _ as maxValue,
237
- z as minLength,
238
- G as minValue,
239
- H as pattern,
240
- J as positiveNumber,
241
- Q as price,
242
- X as required,
243
- Z as wholeNumber
239
+ _ as maxLength,
240
+ z as maxValue,
241
+ G as minLength,
242
+ H as minValue,
243
+ J as pattern,
244
+ Q as positiveNumber,
245
+ X as price,
246
+ Z as required,
247
+ W as wholeNumber
244
248
  };
245
249
  //# sourceMappingURL=useValidation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useValidation.js","sources":["../node_modules/flat/index.js","../src/composables/useValidation/ruleFactories/email.ts","../src/composables/useValidation/ruleFactories/maxLength.ts","../src/composables/useValidation/ruleFactories/maxValue.ts","../src/composables/useValidation/ruleFactories/minLength.ts","../src/composables/useValidation/ruleFactories/minValue.ts","../src/composables/useValidation/ruleFactories/pattern.ts","../src/composables/useValidation/ruleFactories/positiveNumber.ts","../src/composables/useValidation/ruleFactories/price.ts","../src/composables/useValidation/ruleFactories/required.ts","../src/composables/useValidation/ruleFactories/wholeNumber.ts","../src/composables/useValidation/useValidation.ts"],"sourcesContent":["function isBuffer (obj) {\n return obj &&\n obj.constructor &&\n (typeof obj.constructor.isBuffer === 'function') &&\n obj.constructor.isBuffer(obj)\n}\n\nfunction keyIdentity (key) {\n return key\n}\n\nexport function flatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const maxDepth = opts.maxDepth\n const transformKey = opts.transformKey || keyIdentity\n const output = {}\n\n function step (object, prev, currentDepth) {\n currentDepth = currentDepth || 1\n Object.keys(object).forEach(function (key) {\n const value = object[key]\n const isarray = opts.safe && Array.isArray(value)\n const type = Object.prototype.toString.call(value)\n const isbuffer = isBuffer(value)\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n const newKey = prev\n ? prev + delimiter + transformKey(key)\n : transformKey(key)\n\n if (!isarray && !isbuffer && isobject && Object.keys(value).length &&\n (!opts.maxDepth || currentDepth < maxDepth)) {\n return step(value, newKey, currentDepth + 1)\n }\n\n output[newKey] = value\n })\n }\n\n step(target)\n\n return output\n}\n\nexport function unflatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const overwrite = opts.overwrite || false\n const transformKey = opts.transformKey || keyIdentity\n const result = {}\n\n const isbuffer = isBuffer(target)\n if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n return target\n }\n\n // safely ensure that the key is\n // an integer.\n function getkey (key) {\n const parsedKey = Number(key)\n\n return (\n isNaN(parsedKey) ||\n key.indexOf('.') !== -1 ||\n opts.object\n )\n ? key\n : parsedKey\n }\n\n function addKeys (keyPrefix, recipient, target) {\n return Object.keys(target).reduce(function (result, key) {\n result[keyPrefix + delimiter + key] = target[key]\n\n return result\n }, recipient)\n }\n\n function isEmpty (val) {\n const type = Object.prototype.toString.call(val)\n const isArray = type === '[object Array]'\n const isObject = type === '[object Object]'\n\n if (!val) {\n return true\n } else if (isArray) {\n return !val.length\n } else if (isObject) {\n return !Object.keys(val).length\n }\n }\n\n target = Object.keys(target).reduce(function (result, key) {\n const type = Object.prototype.toString.call(target[key])\n const isObject = (type === '[object Object]' || type === '[object Array]')\n if (!isObject || isEmpty(target[key])) {\n result[key] = target[key]\n return result\n } else {\n return addKeys(\n key,\n result,\n flatten(target[key], opts)\n )\n }\n }, {})\n\n Object.keys(target).forEach(function (key) {\n const split = key.split(delimiter).map(transformKey)\n let key1 = getkey(split.shift())\n let key2 = getkey(split[0])\n let recipient = result\n\n while (key2 !== undefined) {\n if (key1 === '__proto__') {\n return\n }\n\n const type = Object.prototype.toString.call(recipient[key1])\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n // do not write over falsey, non-undefined values if overwrite is false\n if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n return\n }\n\n if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {\n recipient[key1] = (\n typeof key2 === 'number' &&\n !opts.object\n ? []\n : {}\n )\n }\n\n recipient = recipient[key1]\n if (split.length > 0) {\n key1 = getkey(split.shift())\n key2 = getkey(split[0])\n }\n }\n\n // unflatten again for 'messy objects'\n recipient[key1] = unflatten(target[key], opts)\n })\n\n return result\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function email(config: Config = {}): ValidationRule {\n return {\n name: 'email',\n validator(value) {\n return !isDefined(value) || (typeof value === 'string' && /^\\S+@\\S+\\.\\S+$/.test(value));\n },\n message: config.message || t('ll.validation.email'),\n };\n}\n","import { MaybeRefOrGetter, toValue } from 'vue';\n\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n max: MaybeRefOrGetter<number>;\n message?: ValidationMessage;\n trim?: boolean;\n}\n\nexport default function maxLength(config: Config): ValidationRule {\n return {\n name: 'maxLength',\n validator(_value) {\n const max = toValue(config.max);\n const value = toValue(_value);\n\n if (!isDefined(value)) {\n return true;\n }\n\n let valueString = String(value);\n\n if (config.trim) {\n valueString = valueString.trim();\n }\n\n return valueString.length <= max;\n },\n message: config.message || (() => t('ll.validation.maxLength', { max: String(toValue(config.max)) })),\n };\n}\n","import { MaybeRefOrGetter, toValue } from 'vue';\n\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n max: MaybeRefOrGetter<number>;\n message?: ValidationMessage;\n}\n\nexport default function maxValue(config: Config): ValidationRule {\n return {\n name: 'maxValue',\n validator(value) {\n const max = toValue(config.max);\n\n return !isDefined(value) || Number(value) <= max;\n },\n message: config.message || (() => t('ll.validation.maxValue', { max: String(toValue(config.max)) })),\n };\n}\n","import { MaybeRefOrGetter, toValue } from 'vue';\n\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n min: MaybeRefOrGetter<number>;\n message?: ValidationMessage;\n trim?: boolean;\n}\n\nexport default function minLength(config: Config): ValidationRule {\n return {\n name: 'minLength',\n validator(_value) {\n const min = toValue(config.min);\n const value = toValue(_value);\n\n if (!isDefined(value)) {\n return true;\n }\n\n let valueString = String(value);\n\n if (config.trim) {\n valueString = valueString.trim();\n }\n\n return valueString.length >= min;\n },\n message: config.message || (() => t('ll.validation.minLength', { min: String(toValue(config.min)) })),\n };\n}\n","import { MaybeRefOrGetter, toValue } from 'vue';\n\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n min: MaybeRefOrGetter<number>;\n message?: ValidationMessage;\n}\n\nexport default function minValue(config: Config): ValidationRule {\n return {\n name: 'minValue',\n validator(value) {\n const min = toValue(config.min);\n\n return !isDefined(value) || Number(value) >= min;\n },\n message: config.message || (() => t('ll.validation.minValue', { min: String(toValue(config.min)) })),\n };\n}\n","import { toValue } from 'vue';\n\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n regex: RegExp;\n /** A custom message is required in order to inform the user of the required pattern. */\n message: ValidationMessage;\n}\n\nexport default function pattern(config: Config): ValidationRule {\n return {\n name: 'pattern',\n validator(_value) {\n const value = toValue(_value);\n\n return !isDefined(value) || config.regex.test(String(value));\n },\n message: () => {\n if (typeof config.message !== 'string' || !config.message.trim()) {\n throw new Error(\n 'The \"pattern\" ruleFactory requires a custom message informing the user of the required pattern.',\n );\n }\n\n return config.message;\n },\n };\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function positiveNumber(config: Config = {}): ValidationRule {\n return {\n name: 'positiveNumber',\n validator(value) {\n return !isDefined(value) || Number(value) > 0;\n },\n message: config.message || t('ll.validation.positiveNumber'),\n };\n}\n","import round from 'lodash-es/round';\n\nimport { DECIMAL_PRECISION } from '../../../constants';\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function price(config: Config = {}): ValidationRule {\n return {\n name: 'price',\n validator(value) {\n const price = Number(value);\n\n return (\n !isDefined(value) || (price !== Infinity && price >= 0 && price === round(price, DECIMAL_PRECISION.CURRENCY))\n );\n },\n message: config.message || t('ll.validation.price'),\n };\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function required(config: Config = {}): ValidationRule {\n return {\n name: 'required',\n validator(value) {\n return isDefined(typeof value === 'string' ? value.trim() : value);\n },\n message: config.message || t('ll.validation.required'),\n };\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function wholeNumber(config: Config = {}): ValidationRule {\n return {\n name: 'wholeNumber',\n validator(value) {\n return !isDefined(value) || (Number.isInteger(Number(value)) && Number(value) >= 0);\n },\n message: config.message || t('ll.validation.wholeNumber'),\n };\n}\n","import { flatten } from 'flat';\nimport debounce from 'lodash-es/debounce';\nimport get from 'lodash-es/get';\nimport { computed, nextTick, reactive, readonly, Ref, ref, toValue, UnwrapRef, watch } from 'vue';\n\nimport { DEBOUNCE } from '../../constants';\nimport {\n UseValidationArgs,\n ValidationError,\n ValidationField,\n ValidationGroup,\n ValidationRule,\n} from './useValidation.types';\n\nexport default function useValidation<Values extends object>({\n rules,\n values,\n}: UseValidationArgs<Values>): ValidationGroup<Values> {\n const fieldNames = computed(() => Object.keys(flatten(rules, { safe: true })));\n\n const fields = fieldNames.value.reduce(\n (map, fieldName) => {\n const fieldValue = ref(get(toValue(values), fieldName));\n\n // Having this function here allows us to update the fieldValue when the value of the field changes.\n // Also, passing `fieldValue` outside the `.reduce()` loop will cause a racing condition on `fieldValue` updates\n const updateFieldValue = (fieldName: string) => {\n fieldValue.value = get(toValue(values), fieldName);\n };\n\n const debouncedSetFieldValue = debounce(() => {\n updateFieldValue(fieldName);\n }, DEBOUNCE.FAST);\n\n watch(\n () => get(toValue(values), fieldName),\n () => {\n debouncedSetFieldValue();\n },\n );\n\n map[fieldName] = buildField<UnwrapRef<typeof fieldValue>>({\n fieldName,\n fieldValue,\n flush: () => {\n debouncedSetFieldValue.cancel();\n updateFieldValue(fieldName);\n },\n rules: get(rules, fieldName),\n });\n\n return map;\n },\n {} as Record<string, ValidationField>,\n );\n\n const fieldList = computed(() => Object.values(fields));\n\n const hasErrors = computed(() => fieldList.value.some((field) => field.errors.length > 0));\n\n const someTouched = computed(() => fieldList.value.some((field) => field.isTouched));\n\n const dirtyFields = computed(() => fieldList.value.filter((field) => field.isDirty));\n\n const validate: ValidationGroup<Values>['validate'] = async function ({ preventScroll } = {}) {\n fieldList.value.forEach((field) => {\n // Doing setTouched(true) on a field that already has isTouched as `true` will not trigger reactivity for that field. Therefore, setting isTouched to `false` for all fields ensures that setTouched(true) will trigger reactivity for every field, which will cause all validations to run and display any error messages.\n field.setTouched(false);\n field.setTouched(true);\n });\n await nextTick();\n\n if (hasErrors.value && !preventScroll) {\n const firstFieldWithError = Object.entries(fields).find(([, field]) => field.errorMessage);\n const fieldName = firstFieldWithError?.[0] || '';\n const firstErrorElement = document?.querySelector(`[name=${fieldName}]`);\n\n if (firstErrorElement) {\n firstErrorElement.scrollIntoView({ behavior: 'smooth' });\n }\n }\n\n return !hasErrors.value;\n };\n\n const getError: ValidationGroup<Values>['getError'] = function (fieldName: string) {\n return fields[fieldName]?.errorMessage || '';\n };\n\n const touch: ValidationGroup<Values>['touch'] = function (fieldName: string) {\n if (!fields[fieldName]) {\n throw new Error(`In touch: fieldName \"${fieldName}\" does not exist in the validation fields.`);\n }\n\n fields[fieldName].setTouched();\n };\n\n const setAllUntouched: ValidationGroup<Values>['setAllUntouched'] = async function () {\n await nextTick(); // wait for field values to be reset\n fieldList.value.forEach((field) => {\n field.setTouched(false);\n });\n };\n\n const setInitialValues: ValidationGroup<Values>['setInitialValues'] = function (intialValues: Values) {\n fieldList.value.forEach((field) => {\n field.setInitialValue(intialValues[field.name]);\n });\n };\n\n return reactive({\n validate,\n getError,\n touch,\n setAllUntouched,\n setInitialValues,\n fields,\n dirtyFields,\n hasErrors,\n someTouched,\n });\n}\n\ninterface BuildFieldArgs<Value = unknown> {\n fieldName: string;\n fieldValue: Ref<Value> | Ref<Value>;\n rules: ValidationRule[];\n flush: () => void;\n}\n\nfunction buildField<Value = unknown>({\n fieldName,\n fieldValue,\n rules,\n flush,\n}: BuildFieldArgs<Value>): ValidationField<Value> {\n /**\n * In order for `initialValue` to work properly, the `buildField` function must not be reactive; `buildField` should be called only once for each field when `useValidation` is called.\n */\n const initialValue = ref(fieldValue.value) as Ref<Value>;\n const isTouched = ref(false);\n const isDirty = computed(() => (fieldValue.value ?? '') !== (initialValue.value ?? ''));\n\n const results = computed(() => {\n // Adding a check for `isTouched` to avoid running the validation rules on the initial load, when the field is not touched.\n // if receives a fieldValue with some value as default or not, rule validation should also be triggered only via `touch()` or `validate()` methods.\n if (!isTouched.value) {\n return [];\n }\n\n return rules.map((rule) => ({\n fieldName,\n ruleName: rule.name,\n isValid: rule.validator(fieldValue.value),\n message: typeof rule.message === 'function' ? rule.message(fieldValue.value) : rule.message,\n }));\n });\n\n const errors = computed<ValidationError[]>(() =>\n results.value\n .filter((result) => !result.isValid)\n .map((result) => {\n return {\n ruleName: result.ruleName,\n message: result.message,\n };\n }),\n );\n\n function setTouched(value = true) {\n // Flushing the debounced value to be updated right away.\n // So that, we can have reactivity for `rules` validation, `isTouched`, `isDirty`, among other values\n flush();\n\n isTouched.value = value;\n }\n\n function setInitialValue(value: Value) {\n initialValue.value = value;\n }\n\n return reactive({\n name: fieldName,\n currentValue: readonly(fieldValue),\n initialValue: readonly(initialValue),\n isTouched: readonly(isTouched),\n isDirty: readonly(isDirty),\n errorMessage: computed(() => errors.value?.[0]?.message || ''),\n errors,\n setInitialValue,\n setTouched,\n });\n}\n\n// The ruleFactories are excluded from the main entrypoint in vite.config.ts, so they are exported here instead. This allows one import statement to be used for useValidation, its types, and all of the ruleFactories.\nexport { default as email } from './ruleFactories/email';\nexport { default as maxLength } from './ruleFactories/maxLength';\nexport { default as maxValue } from './ruleFactories/maxValue';\nexport { default as minLength } from './ruleFactories/minLength';\nexport { default as minValue } from './ruleFactories/minValue';\nexport { default as pattern } from './ruleFactories/pattern';\nexport { default as positiveNumber } from './ruleFactories/positiveNumber';\nexport { default as price } from './ruleFactories/price';\nexport { default as required } from './ruleFactories/required';\nexport { default as wholeNumber } from './ruleFactories/wholeNumber';\nexport * from './useValidation.types';\nexport { default as isDefined } from './utils/isDefined';\n"],"names":["isBuffer","obj","keyIdentity","key","flatten","target","opts","delimiter","maxDepth","transformKey","output","step","object","prev","currentDepth","value","isarray","type","isbuffer","isobject","newKey","email","config","isDefined","t","maxLength","_value","max","toValue","valueString","maxValue","minLength","min","minValue","pattern","positiveNumber","price","round","DECIMAL_PRECISION","required","wholeNumber","useValidation","rules","values","fields","computed","map","fieldName","fieldValue","ref","get","updateFieldValue","debouncedSetFieldValue","debounce","DEBOUNCE","watch","buildField","fieldList","hasErrors","field","someTouched","dirtyFields","reactive","preventScroll","nextTick","firstErrorElement","intialValues","flush","initialValue","isTouched","isDirty","results","rule","errors","result","setTouched","setInitialValue","readonly"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"useValidation.js","sources":["../node_modules/.pnpm/flat@6.0.1/node_modules/flat/index.js","../src/composables/useValidation/ruleFactories/email.ts","../src/composables/useValidation/ruleFactories/maxLength.ts","../src/composables/useValidation/ruleFactories/maxValue.ts","../src/composables/useValidation/ruleFactories/minLength.ts","../src/composables/useValidation/ruleFactories/minValue.ts","../src/composables/useValidation/ruleFactories/pattern.ts","../src/composables/useValidation/ruleFactories/positiveNumber.ts","../src/composables/useValidation/ruleFactories/price.ts","../src/composables/useValidation/ruleFactories/required.ts","../src/composables/useValidation/ruleFactories/wholeNumber.ts","../src/composables/useValidation/useValidation.ts"],"sourcesContent":["function isBuffer (obj) {\n return obj &&\n obj.constructor &&\n (typeof obj.constructor.isBuffer === 'function') &&\n obj.constructor.isBuffer(obj)\n}\n\nfunction keyIdentity (key) {\n return key\n}\n\nexport function flatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const maxDepth = opts.maxDepth\n const transformKey = opts.transformKey || keyIdentity\n const output = {}\n\n function step (object, prev, currentDepth) {\n currentDepth = currentDepth || 1\n Object.keys(object).forEach(function (key) {\n const value = object[key]\n const isarray = opts.safe && Array.isArray(value)\n const type = Object.prototype.toString.call(value)\n const isbuffer = isBuffer(value)\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n const newKey = prev\n ? prev + delimiter + transformKey(key)\n : transformKey(key)\n\n if (!isarray && !isbuffer && isobject && Object.keys(value).length &&\n (!opts.maxDepth || currentDepth < maxDepth)) {\n return step(value, newKey, currentDepth + 1)\n }\n\n output[newKey] = value\n })\n }\n\n step(target)\n\n return output\n}\n\nexport function unflatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const overwrite = opts.overwrite || false\n const transformKey = opts.transformKey || keyIdentity\n const result = {}\n\n const isbuffer = isBuffer(target)\n if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n return target\n }\n\n // safely ensure that the key is\n // an integer.\n function getkey (key) {\n const parsedKey = Number(key)\n\n return (\n isNaN(parsedKey) ||\n key.indexOf('.') !== -1 ||\n opts.object\n )\n ? key\n : parsedKey\n }\n\n function addKeys (keyPrefix, recipient, target) {\n return Object.keys(target).reduce(function (result, key) {\n result[keyPrefix + delimiter + key] = target[key]\n\n return result\n }, recipient)\n }\n\n function isEmpty (val) {\n const type = Object.prototype.toString.call(val)\n const isArray = type === '[object Array]'\n const isObject = type === '[object Object]'\n\n if (!val) {\n return true\n } else if (isArray) {\n return !val.length\n } else if (isObject) {\n return !Object.keys(val).length\n }\n }\n\n target = Object.keys(target).reduce(function (result, key) {\n const type = Object.prototype.toString.call(target[key])\n const isObject = (type === '[object Object]' || type === '[object Array]')\n if (!isObject || isEmpty(target[key])) {\n result[key] = target[key]\n return result\n } else {\n return addKeys(\n key,\n result,\n flatten(target[key], opts)\n )\n }\n }, {})\n\n Object.keys(target).forEach(function (key) {\n const split = key.split(delimiter).map(transformKey)\n let key1 = getkey(split.shift())\n let key2 = getkey(split[0])\n let recipient = result\n\n while (key2 !== undefined) {\n if (key1 === '__proto__') {\n return\n }\n\n const type = Object.prototype.toString.call(recipient[key1])\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n // do not write over falsey, non-undefined values if overwrite is false\n if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n return\n }\n\n if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {\n recipient[key1] = (\n typeof key2 === 'number' &&\n !opts.object\n ? []\n : {}\n )\n }\n\n recipient = recipient[key1]\n if (split.length > 0) {\n key1 = getkey(split.shift())\n key2 = getkey(split[0])\n }\n }\n\n // unflatten again for 'messy objects'\n recipient[key1] = unflatten(target[key], opts)\n })\n\n return result\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function email(config: Config = {}): ValidationRule {\n return {\n name: 'email',\n validator(value) {\n return !isDefined(value) || (typeof value === 'string' && /^\\S+@\\S+\\.\\S+$/.test(value));\n },\n message: config.message || t('ll.validation.email'),\n };\n}\n","import { MaybeRefOrGetter, toValue } from 'vue';\n\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n max: MaybeRefOrGetter<number>;\n message?: ValidationMessage;\n trim?: boolean;\n}\n\nexport default function maxLength(config: Config): ValidationRule {\n return {\n name: 'maxLength',\n validator(_value) {\n const max = toValue(config.max);\n const value = toValue(_value);\n\n if (!isDefined(value)) {\n return true;\n }\n\n let valueString = String(value);\n\n if (config.trim) {\n valueString = valueString.trim();\n }\n\n return valueString.length <= max;\n },\n message: config.message || (() => t('ll.validation.maxLength', { max: String(toValue(config.max)) })),\n };\n}\n","import { MaybeRefOrGetter, toValue } from 'vue';\n\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n max: MaybeRefOrGetter<number>;\n message?: ValidationMessage;\n}\n\nexport default function maxValue(config: Config): ValidationRule {\n return {\n name: 'maxValue',\n validator(value) {\n const max = toValue(config.max);\n\n return !isDefined(value) || Number(value) <= max;\n },\n message: config.message || (() => t('ll.validation.maxValue', { max: String(toValue(config.max)) })),\n };\n}\n","import { MaybeRefOrGetter, toValue } from 'vue';\n\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n min: MaybeRefOrGetter<number>;\n message?: ValidationMessage;\n trim?: boolean;\n}\n\nexport default function minLength(config: Config): ValidationRule {\n return {\n name: 'minLength',\n validator(_value) {\n const min = toValue(config.min);\n const value = toValue(_value);\n\n if (!isDefined(value)) {\n return true;\n }\n\n let valueString = String(value);\n\n if (config.trim) {\n valueString = valueString.trim();\n }\n\n return valueString.length >= min;\n },\n message: config.message || (() => t('ll.validation.minLength', { min: String(toValue(config.min)) })),\n };\n}\n","import { MaybeRefOrGetter, toValue } from 'vue';\n\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n min: MaybeRefOrGetter<number>;\n message?: ValidationMessage;\n}\n\nexport default function minValue(config: Config): ValidationRule {\n return {\n name: 'minValue',\n validator(value) {\n const min = toValue(config.min);\n\n return !isDefined(value) || Number(value) >= min;\n },\n message: config.message || (() => t('ll.validation.minValue', { min: String(toValue(config.min)) })),\n };\n}\n","import { toValue } from 'vue';\n\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n regex: RegExp;\n /** A custom message is required in order to inform the user of the required pattern. */\n message: ValidationMessage;\n}\n\nexport default function pattern(config: Config): ValidationRule {\n return {\n name: 'pattern',\n validator(_value) {\n const value = toValue(_value);\n\n return !isDefined(value) || config.regex.test(String(value));\n },\n message: () => {\n if (typeof config.message !== 'string' || !config.message.trim()) {\n throw new Error(\n 'The \"pattern\" ruleFactory requires a custom message informing the user of the required pattern.',\n );\n }\n\n return config.message;\n },\n };\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function positiveNumber(config: Config = {}): ValidationRule {\n return {\n name: 'positiveNumber',\n validator(value) {\n return !isDefined(value) || Number(value) > 0;\n },\n message: config.message || t('ll.validation.positiveNumber'),\n };\n}\n","import round from 'lodash-es/round';\n\nimport { DECIMAL_PRECISION } from '../../../constants';\nimport { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function price(config: Config = {}): ValidationRule {\n return {\n name: 'price',\n validator(value) {\n const price = Number(value);\n\n return (\n !isDefined(value) || (price !== Infinity && price >= 0 && price === round(price, DECIMAL_PRECISION.CURRENCY))\n );\n },\n message: config.message || t('ll.validation.price'),\n };\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function required(config: Config = {}): ValidationRule {\n return {\n name: 'required',\n validator(value) {\n return isDefined(typeof value === 'string' ? value.trim() : value);\n },\n message: config.message || t('ll.validation.required'),\n };\n}\n","import { t } from '../../../locale';\nimport { ValidationMessage, ValidationRule } from '../useValidation.types';\nimport isDefined from '../utils/isDefined';\n\ninterface Config {\n message?: ValidationMessage;\n}\n\nexport default function wholeNumber(config: Config = {}): ValidationRule {\n return {\n name: 'wholeNumber',\n validator(value) {\n return !isDefined(value) || (Number.isInteger(Number(value)) && Number(value) >= 0);\n },\n message: config.message || t('ll.validation.wholeNumber'),\n };\n}\n","import { flatten } from 'flat';\nimport debounce from 'lodash-es/debounce';\nimport get from 'lodash-es/get';\nimport { computed, nextTick, reactive, readonly, Ref, ref, toValue, UnwrapRef, watch } from 'vue';\n\nimport { DEBOUNCE } from '../../constants';\nimport {\n UseValidationArgs,\n ValidationError,\n ValidationField,\n ValidationGroup,\n ValidationRule,\n} from './useValidation.types';\n\nexport default function useValidation<Values extends object>({\n rules,\n values,\n}: UseValidationArgs<Values>): ValidationGroup<Values> {\n const fieldNames = computed(() => Object.keys(flatten(rules, { safe: true })));\n\n const fields = fieldNames.value.reduce(\n (map, fieldName) => {\n const fieldValue = ref(get(toValue(values), fieldName));\n\n // Having this function here allows us to update the fieldValue when the value of the field changes.\n // Also, passing `fieldValue` outside the `.reduce()` loop will cause a racing condition on `fieldValue` updates\n const updateFieldValue = (fieldName: string) => {\n fieldValue.value = get(toValue(values), fieldName);\n };\n\n const debouncedSetFieldValue = debounce(() => {\n updateFieldValue(fieldName);\n }, DEBOUNCE.FAST);\n\n watch(\n () => get(toValue(values), fieldName),\n () => {\n debouncedSetFieldValue();\n },\n );\n\n map[fieldName] = buildField<UnwrapRef<typeof fieldValue>>({\n fieldName,\n fieldValue,\n flush: () => {\n debouncedSetFieldValue.cancel();\n updateFieldValue(fieldName);\n },\n rules: get(rules, fieldName),\n });\n\n return map;\n },\n {} as Record<string, ValidationField>,\n );\n\n const fieldList = computed(() => Object.values(fields));\n\n const hasErrors = computed(() => fieldList.value.some((field) => field.errors.length > 0));\n\n const someTouched = computed(() => fieldList.value.some((field) => field.isTouched));\n\n const dirtyFields = computed(() => fieldList.value.filter((field) => field.isDirty));\n\n const validate: ValidationGroup<Values>['validate'] = async function ({ preventScroll } = {}) {\n fieldList.value.forEach((field) => {\n // Doing setTouched(true) on a field that already has isTouched as `true` will not trigger reactivity for that field. Therefore, setting isTouched to `false` for all fields ensures that setTouched(true) will trigger reactivity for every field, which will cause all validations to run and display any error messages.\n field.setTouched(false);\n field.setTouched(true);\n });\n await nextTick();\n\n if (hasErrors.value && !preventScroll) {\n const firstFieldWithError = Object.entries(fields).find(([, field]) => field.errorMessage);\n const fieldName = firstFieldWithError?.[0] || '';\n const firstErrorElement = document?.querySelector(`[name=${fieldName}]`);\n\n if (firstErrorElement) {\n firstErrorElement.scrollIntoView({ behavior: 'smooth' });\n }\n }\n\n return !hasErrors.value;\n };\n\n const getError: ValidationGroup<Values>['getError'] = function (fieldName: string) {\n return fields[fieldName]?.errorMessage || '';\n };\n\n const touch: ValidationGroup<Values>['touch'] = function (fieldName: string) {\n if (!fields[fieldName]) {\n throw new Error(`In touch: fieldName \"${fieldName}\" does not exist in the validation fields.`);\n }\n\n fields[fieldName].setTouched();\n };\n\n const setAllUntouched: ValidationGroup<Values>['setAllUntouched'] = async function () {\n await nextTick(); // wait for field values to be reset\n fieldList.value.forEach((field) => {\n field.setTouched(false);\n });\n };\n\n const setInitialValues: ValidationGroup<Values>['setInitialValues'] = function (intialValues: Values) {\n fieldList.value.forEach((field) => {\n field.setInitialValue(intialValues[field.name]);\n });\n };\n\n return reactive({\n validate,\n getError,\n touch,\n setAllUntouched,\n setInitialValues,\n fields,\n dirtyFields,\n hasErrors,\n someTouched,\n });\n}\n\ninterface BuildFieldArgs<Value = unknown> {\n fieldName: string;\n fieldValue: Ref<Value> | Ref<Value>;\n rules: ValidationRule[];\n flush: () => void;\n}\n\nfunction buildField<Value = unknown>({\n fieldName,\n fieldValue,\n rules,\n flush,\n}: BuildFieldArgs<Value>): ValidationField<Value> {\n /**\n * In order for `initialValue` to work properly, the `buildField` function must not be reactive; `buildField` should be called only once for each field when `useValidation` is called.\n */\n const initialValue = ref(fieldValue.value) as Ref<Value>;\n const isTouched = ref(false);\n const isDirty = computed(() => (fieldValue.value ?? '') !== (initialValue.value ?? ''));\n\n const results = computed(() => {\n // Adding a check for `isTouched` to avoid running the validation rules on the initial load, when the field is not touched.\n // if receives a fieldValue with some value as default or not, rule validation should also be triggered only via `touch()` or `validate()` methods.\n if (!isTouched.value) {\n return [];\n }\n\n return rules.map((rule) => ({\n fieldName,\n ruleName: rule.name,\n isValid: rule.validator(fieldValue.value),\n message: typeof rule.message === 'function' ? rule.message(fieldValue.value) : rule.message,\n }));\n });\n\n const errors = computed<ValidationError[]>(() =>\n results.value\n .filter((result) => !result.isValid)\n .map((result) => {\n return {\n ruleName: result.ruleName,\n message: result.message,\n };\n }),\n );\n\n function setTouched(value = true) {\n // Flushing the debounced value to be updated right away.\n // So that, we can have reactivity for `rules` validation, `isTouched`, `isDirty`, among other values\n flush();\n\n isTouched.value = value;\n }\n\n function setInitialValue(value: Value) {\n initialValue.value = value;\n }\n\n return reactive({\n name: fieldName,\n currentValue: readonly(fieldValue),\n initialValue: readonly(initialValue),\n isTouched: readonly(isTouched),\n isDirty: readonly(isDirty),\n errorMessage: computed(() => errors.value?.[0]?.message || ''),\n errors,\n setInitialValue,\n setTouched,\n });\n}\n\n// The ruleFactories are excluded from the main entrypoint in vite.config.ts, so they are exported here instead. This allows one import statement to be used for useValidation, its types, and all of the ruleFactories.\nexport { default as email } from './ruleFactories/email';\nexport { default as maxLength } from './ruleFactories/maxLength';\nexport { default as maxValue } from './ruleFactories/maxValue';\nexport { default as minLength } from './ruleFactories/minLength';\nexport { default as minValue } from './ruleFactories/minValue';\nexport { default as pattern } from './ruleFactories/pattern';\nexport { default as positiveNumber } from './ruleFactories/positiveNumber';\nexport { default as price } from './ruleFactories/price';\nexport { default as required } from './ruleFactories/required';\nexport { default as wholeNumber } from './ruleFactories/wholeNumber';\nexport * from './useValidation.types';\nexport { default as isDefined } from './utils/isDefined';\n"],"names":["isBuffer","obj","keyIdentity","key","flatten","target","opts","delimiter","maxDepth","transformKey","output","step","object","prev","currentDepth","value","isarray","type","isbuffer","isobject","newKey","email","config","isDefined","t","maxLength","_value","max","toValue","valueString","maxValue","minLength","min","minValue","pattern","positiveNumber","price","round","DECIMAL_PRECISION","required","wholeNumber","useValidation","rules","values","fields","computed","map","fieldName","fieldValue","ref","get","updateFieldValue","debouncedSetFieldValue","debounce","DEBOUNCE","watch","buildField","fieldList","hasErrors","field","someTouched","dirtyFields","reactive","preventScroll","nextTick","firstFieldWithError","firstErrorElement","_a","intialValues","flush","initialValue","isTouched","isDirty","results","rule","errors","result","setTouched","setInitialValue","readonly","_b"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
1
  import { CSS_VARS as n } from "../constants.js";
2
- import { getCssVar as r } from "./helpers.js";
3
- function l(o) {
4
- const e = isNaN(parseFloat(r(n.GRID_GUTTER))) ? 0 : parseFloat(r(n.GRID_GUTTER)), t = o?.getBoundingClientRect();
2
+ import { getCssVar as o } from "./helpers.js";
3
+ function a(r) {
4
+ const e = isNaN(parseFloat(o(n.GRID_GUTTER))) ? 0 : parseFloat(o(n.GRID_GUTTER)), t = r == null ? void 0 : r.getBoundingClientRect();
5
5
  if (t)
6
6
  return Math.round(t.left) < e ? {
7
7
  value: e - Math.round(t.left),
@@ -15,6 +15,6 @@ function l(o) {
15
15
  };
16
16
  }
17
17
  export {
18
- l as default
18
+ a as default
19
19
  };
20
20
  //# sourceMappingURL=calculateElementOverflow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"calculateElementOverflow.js","sources":["../../src/utils/calculateElementOverflow.ts"],"sourcesContent":["import { CSS_VARS } from '../constants';\nimport { getCssVar } from '../utils/helpers';\n\n/**\n * Calculates the distance (in px) an element overflows the page (and gutter).\n * If left aligned, returns the overflow on the right side, and vice versa\n *\n * @param element element to test page overflow\n * @return object with the offset distance `value` in pixels, and the `side` of the page it's overflowing\n */\nexport default function calculateElementOverflow(element: HTMLElement | null) {\n const gutter = isNaN(parseFloat(getCssVar(CSS_VARS.GRID_GUTTER))) ? 0 : parseFloat(getCssVar(CSS_VARS.GRID_GUTTER));\n const elementBCR = element?.getBoundingClientRect();\n\n if (!elementBCR) {\n return;\n }\n\n // overflowing left side of the page\n if (Math.round(elementBCR.left) < gutter) {\n return {\n value: gutter - Math.round(elementBCR.left),\n side: 'left',\n };\n }\n\n // overflowing right side of the page\n if (Math.round(elementBCR.right) > document.documentElement.clientWidth - gutter) {\n return {\n value: Math.round(elementBCR.right) - (document.documentElement.clientWidth - gutter),\n side: 'right',\n };\n }\n\n return {\n side: '',\n value: 0,\n };\n}\n"],"names":["calculateElementOverflow","element","gutter","getCssVar","CSS_VARS","elementBCR"],"mappings":";;AAUA,SAAwBA,EAAyBC,GAA6B;AAC5E,QAAMC,IAAS,MAAM,WAAWC,EAAUC,EAAS,WAAW,CAAC,CAAC,IAAI,IAAI,WAAWD,EAAUC,EAAS,WAAW,CAAC,GAC5GC,IAAaJ,GAAS,sBAAA;AAE5B,MAAKI;AAKL,WAAI,KAAK,MAAMA,EAAW,IAAI,IAAIH,IACzB;AAAA,MACL,OAAOA,IAAS,KAAK,MAAMG,EAAW,IAAI;AAAA,MAC1C,MAAM;AAAA,IAAA,IAKN,KAAK,MAAMA,EAAW,KAAK,IAAI,SAAS,gBAAgB,cAAcH,IACjE;AAAA,MACL,OAAO,KAAK,MAAMG,EAAW,KAAK,KAAK,SAAS,gBAAgB,cAAcH;AAAA,MAC9E,MAAM;AAAA,IAAA,IAIH;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAEX;"}
1
+ {"version":3,"file":"calculateElementOverflow.js","sources":["../../src/utils/calculateElementOverflow.ts"],"sourcesContent":["import { CSS_VARS } from '../constants';\nimport { getCssVar } from '../utils/helpers';\n\n/**\n * Calculates the distance (in px) an element overflows the page (and gutter).\n * If left aligned, returns the overflow on the right side, and vice versa\n *\n * @param element element to test page overflow\n * @return object with the offset distance `value` in pixels, and the `side` of the page it's overflowing\n */\nexport default function calculateElementOverflow(element: HTMLElement | null) {\n const gutter = isNaN(parseFloat(getCssVar(CSS_VARS.GRID_GUTTER))) ? 0 : parseFloat(getCssVar(CSS_VARS.GRID_GUTTER));\n const elementBCR = element?.getBoundingClientRect();\n\n if (!elementBCR) {\n return;\n }\n\n // overflowing left side of the page\n if (Math.round(elementBCR.left) < gutter) {\n return {\n value: gutter - Math.round(elementBCR.left),\n side: 'left',\n };\n }\n\n // overflowing right side of the page\n if (Math.round(elementBCR.right) > document.documentElement.clientWidth - gutter) {\n return {\n value: Math.round(elementBCR.right) - (document.documentElement.clientWidth - gutter),\n side: 'right',\n };\n }\n\n return {\n side: '',\n value: 0,\n };\n}\n"],"names":["calculateElementOverflow","element","gutter","getCssVar","CSS_VARS","elementBCR"],"mappings":";;AAUA,SAAwBA,EAAyBC,GAA6B;AAC5E,QAAMC,IAAS,MAAM,WAAWC,EAAUC,EAAS,WAAW,CAAC,CAAC,IAAI,IAAI,WAAWD,EAAUC,EAAS,WAAW,CAAC,GAC5GC,IAAaJ,KAAA,gBAAAA,EAAS;AAE5B,MAAKI;AAKL,WAAI,KAAK,MAAMA,EAAW,IAAI,IAAIH,IACzB;AAAA,MACL,OAAOA,IAAS,KAAK,MAAMG,EAAW,IAAI;AAAA,MAC1C,MAAM;AAAA,IAAA,IAKN,KAAK,MAAMA,EAAW,KAAK,IAAI,SAAS,gBAAgB,cAAcH,IACjE;AAAA,MACL,OAAO,KAAK,MAAMG,EAAW,KAAK,KAAK,SAAS,gBAAgB,cAAcH;AAAA,MAC9E,MAAM;AAAA,IAAA,IAIH;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAEX;"}
@@ -1,7 +1,7 @@
1
1
  import "../constants.js";
2
2
  import "./normalizeDate.js";
3
3
  import "../toTimeZone-Coq1oPTt.js";
4
- import { k as a } from "../formatDateTime-DG7kBc2T.js";
4
+ import { k as a } from "../formatDateTime-Dz8bXV0R.js";
5
5
  import "../isValid-DN-HkCoi.js";
6
6
  export {
7
7
  a as default
@@ -1,10 +1,10 @@
1
- function n(r, { maskChar: t = "•", maskCharCount: u = 10, lengthToKeep: f = 0, position: i = "start" } = {}) {
2
- if (!f)
3
- return t?.repeat(u);
4
- let e;
5
- return i === "end" ? (e = r.substring(0, f), e + t?.repeat(u)) : (e = r.substring(r.length - f), t?.repeat(u) + e);
1
+ function b(u, { maskChar: e = "•", maskCharCount: f = 10, lengthToKeep: i = 0, position: n = "start" } = {}) {
2
+ if (!i)
3
+ return e == null ? void 0 : e.repeat(f);
4
+ let t;
5
+ return n === "end" ? (t = u.substring(0, i), t + (e == null ? void 0 : e.repeat(f))) : (t = u.substring(u.length - i), (e == null ? void 0 : e.repeat(f)) + t);
6
6
  }
7
7
  export {
8
- n as default
8
+ b as default
9
9
  };
10
10
  //# sourceMappingURL=obfuscateText.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"obfuscateText.js","sources":["../../src/utils/obfuscateText.ts"],"sourcesContent":["export interface ObfuscateTextOptions {\n /**\n * Num of characters to keep revealed.\n * Default will obfuscate entire string\n * with length of maskCharCount.\n */\n lengthToKeep?: number;\n /**\n * Character to obfuscate text with\n */\n maskChar?: string;\n /**\n * The number of masked characters to display\n */\n maskCharCount?: number;\n /**\n * Position to start obfuscating text\n */\n position?: 'start' | 'end';\n}\n\nexport default function obfuscateText(\n text,\n { maskChar = '•', maskCharCount = 10, lengthToKeep = 0, position = 'start' }: ObfuscateTextOptions = {},\n): string {\n if (!lengthToKeep) {\n return maskChar?.repeat(maskCharCount);\n }\n\n let charsToKeep;\n\n if (position === 'end') {\n charsToKeep = text.substring(0, lengthToKeep);\n\n return charsToKeep + maskChar?.repeat(maskCharCount);\n } else {\n charsToKeep = text.substring(text.length - lengthToKeep);\n\n return maskChar?.repeat(maskCharCount) + charsToKeep;\n }\n}\n"],"names":["obfuscateText","text","maskChar","maskCharCount","lengthToKeep","position","charsToKeep"],"mappings":"AAqBA,SAAwBA,EACtBC,GACA,EAAE,UAAAC,IAAW,KAAK,eAAAC,IAAgB,IAAI,cAAAC,IAAe,GAAG,UAAAC,IAAW,QAAA,IAAkC,CAAA,GAC7F;AACR,MAAI,CAACD;AACH,WAAOF,GAAU,OAAOC,CAAa;AAGvC,MAAIG;AAEJ,SAAID,MAAa,SACfC,IAAcL,EAAK,UAAU,GAAGG,CAAY,GAErCE,IAAcJ,GAAU,OAAOC,CAAa,MAEnDG,IAAcL,EAAK,UAAUA,EAAK,SAASG,CAAY,GAEhDF,GAAU,OAAOC,CAAa,IAAIG;AAE7C;"}
1
+ {"version":3,"file":"obfuscateText.js","sources":["../../src/utils/obfuscateText.ts"],"sourcesContent":["export interface ObfuscateTextOptions {\n /**\n * Num of characters to keep revealed.\n * Default will obfuscate entire string\n * with length of maskCharCount.\n */\n lengthToKeep?: number;\n /**\n * Character to obfuscate text with\n */\n maskChar?: string;\n /**\n * The number of masked characters to display\n */\n maskCharCount?: number;\n /**\n * Position to start obfuscating text\n */\n position?: 'start' | 'end';\n}\n\nexport default function obfuscateText(\n text,\n { maskChar = '•', maskCharCount = 10, lengthToKeep = 0, position = 'start' }: ObfuscateTextOptions = {},\n): string {\n if (!lengthToKeep) {\n return maskChar?.repeat(maskCharCount);\n }\n\n let charsToKeep;\n\n if (position === 'end') {\n charsToKeep = text.substring(0, lengthToKeep);\n\n return charsToKeep + maskChar?.repeat(maskCharCount);\n } else {\n charsToKeep = text.substring(text.length - lengthToKeep);\n\n return maskChar?.repeat(maskCharCount) + charsToKeep;\n }\n}\n"],"names":["obfuscateText","text","maskChar","maskCharCount","lengthToKeep","position","charsToKeep"],"mappings":"AAqBA,SAAwBA,EACtBC,GACA,EAAE,UAAAC,IAAW,KAAK,eAAAC,IAAgB,IAAI,cAAAC,IAAe,GAAG,UAAAC,IAAW,QAAA,IAAkC,CAAA,GAC7F;AACR,MAAI,CAACD;AACH,WAAOF,KAAA,gBAAAA,EAAU,OAAOC;AAG1B,MAAIG;AAEJ,SAAID,MAAa,SACfC,IAAcL,EAAK,UAAU,GAAGG,CAAY,GAErCE,KAAcJ,KAAA,gBAAAA,EAAU,OAAOC,QAEtCG,IAAcL,EAAK,UAAUA,EAAK,SAASG,CAAY,IAEhDF,KAAA,gBAAAA,EAAU,OAAOC,MAAiBG;AAE7C;"}
@@ -1,4 +1,4 @@
1
- import { s as e, s as o } from "../searchFuzzy-DBDE6jkd.js";
1
+ import { s as e, s as o } from "../searchFuzzy-B3TsUO-V.js";
2
2
  import "./helpers.js";
3
3
  export {
4
4
  e as default,
@@ -1,26 +1,26 @@
1
1
  import l from "@leaflink/snitch";
2
- import { hashCode as c } from "./helpers.js";
3
- const n = "ll";
4
- function m(t, o, a = {}) {
5
- const e = a.global ? "" : `-${location.pathname}`, r = `${n}-${t}${e}`, s = JSON.stringify(o);
2
+ import { hashCode as i } from "./helpers.js";
3
+ const c = "ll";
4
+ function m(o, r, a = {}) {
5
+ const e = a.global ? "" : `-${location.pathname}`, t = `${c}-${o}${e}`, s = JSON.stringify(r);
6
6
  try {
7
- localStorage.setItem(r, s);
8
- } catch (i) {
9
- i?.name === "QuotaExceededError" ? l.log(`Your localStorage is full. Failed to save item for key: ${r}`) : l.log(`Failed to save value to localStorage for key: ${r}`);
7
+ localStorage.setItem(t, s);
8
+ } catch (n) {
9
+ (n == null ? void 0 : n.name) === "QuotaExceededError" ? l.log(`Your localStorage is full. Failed to save item for key: ${t}`) : l.log(`Failed to save value to localStorage for key: ${t}`);
10
10
  }
11
11
  }
12
- function g(t, o = {}) {
13
- const a = o.global ? "" : `-${location.pathname}`, e = localStorage.getItem(`${n}-${t}${a}`);
12
+ function g(o, r = {}) {
13
+ const a = r.global ? "" : `-${location.pathname}`, e = localStorage.getItem(`${c}-${o}${a}`);
14
14
  if (e === null || e === "undefined")
15
15
  return null;
16
16
  try {
17
17
  return JSON.parse(e);
18
- } catch (r) {
19
- return l.error(r?.message, { error: r }), null;
18
+ } catch (t) {
19
+ return l.error(t == null ? void 0 : t.message, { error: t }), null;
20
20
  }
21
21
  }
22
- function u(t, o = {}) {
23
- const a = o.global ? "" : `-${location.pathname}`, e = `${n}-${t}${a}`;
22
+ function u(o, r = {}) {
23
+ const a = r.global ? "" : `-${location.pathname}`, e = `${c}-${o}${a}`;
24
24
  if (localStorage.getItem(e) !== null)
25
25
  try {
26
26
  localStorage.removeItem(e);
@@ -28,22 +28,22 @@ function u(t, o = {}) {
28
28
  l.error(s.message, { error: s });
29
29
  }
30
30
  }
31
- function p(t, o) {
32
- const a = JSON.parse(localStorage.getItem(t) || "{}");
31
+ function p(o, r) {
32
+ const a = JSON.parse(localStorage.getItem(o) || "{}");
33
33
  try {
34
- return (a[o] || {})[c(location.pathname)];
34
+ return (a[r] || {})[i(location.pathname)];
35
35
  } catch (e) {
36
- l.error(e?.message, { error: e });
36
+ l.error(e == null ? void 0 : e.message, { error: e });
37
37
  return;
38
38
  }
39
39
  }
40
- function S(t, o) {
41
- const e = { ...JSON.parse(localStorage.getItem(t) || "{}") };
42
- e[o] && delete e[o][c(location.pathname)];
40
+ function S(o, r) {
41
+ const e = { ...JSON.parse(localStorage.getItem(o) || "{}") };
42
+ e[r] && delete e[r][i(location.pathname)];
43
43
  try {
44
- localStorage.setItem(t, JSON.stringify(e));
45
- } catch (r) {
46
- r?.name === "QuotaExceededError" ? l.log("Your localStorage is full. Failed to set item.") : l.log("Failed to set item to localStorage.");
44
+ localStorage.setItem(o, JSON.stringify(e));
45
+ } catch (t) {
46
+ (t == null ? void 0 : t.name) === "QuotaExceededError" ? l.log("Your localStorage is full. Failed to set item.") : l.log("Failed to set item to localStorage.");
47
47
  }
48
48
  }
49
49
  const I = {