@leaflink/stash 51.9.2 → 51.10.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 (369) hide show
  1. package/assets/icons/cloud-share.svg +1 -0
  2. package/assets/spritesheet.svg +1 -1
  3. package/dist/Accordion.js.map +1 -1
  4. package/dist/Accordion.vue.d.ts +7 -38
  5. package/dist/ActionsDropdown.js +2 -2
  6. package/dist/ActionsDropdown.js.map +1 -1
  7. package/dist/ActionsDropdown.vue.d.ts +0 -74
  8. package/dist/AddressSelect.js +56 -60
  9. package/dist/AddressSelect.js.map +1 -1
  10. package/dist/AddressSelect.vue.d.ts +8 -65
  11. package/dist/Alert.js.map +1 -1
  12. package/dist/Alert.vue.d.ts +4 -41
  13. package/dist/AppNavigationItem.js.map +1 -1
  14. package/dist/AppNavigationItem.vue.d.ts +5 -32
  15. package/dist/AppSidebar.js.map +1 -1
  16. package/dist/AppSidebar.vue.d.ts +8 -35
  17. package/dist/AppTopbar.js +1 -1
  18. package/dist/AppTopbar.js.map +1 -1
  19. package/dist/AppTopbar.vue.d.ts +4 -33
  20. package/dist/Avatar.js.map +1 -1
  21. package/dist/Avatar.vue.d.ts +5 -44
  22. package/dist/Backdrop.js.map +1 -1
  23. package/dist/Backdrop.vue.d.ts +1 -1
  24. package/dist/Badge.js.map +1 -1
  25. package/dist/Badge.vue.d.ts +6 -55
  26. package/dist/Box.vue.d.ts +3 -36
  27. package/dist/Box.vue_vue_type_script_setup_true_lang-rFnvwLVY.js.map +1 -1
  28. package/dist/Button.js.map +1 -1
  29. package/dist/Button.vue.d.ts +5 -50
  30. package/dist/ButtonGroup.js +33 -37
  31. package/dist/ButtonGroup.js.map +1 -1
  32. package/dist/ButtonGroup.vue.d.ts +6 -39
  33. package/dist/Card.js.map +1 -1
  34. package/dist/Card.vue.d.ts +5 -32
  35. package/dist/CardContent.js.map +1 -1
  36. package/dist/CardContent.vue.d.ts +1 -1
  37. package/dist/CardFooter.js.map +1 -1
  38. package/dist/CardFooter.vue.d.ts +1 -1
  39. package/dist/CardHeader.js.map +1 -1
  40. package/dist/CardHeader.vue.d.ts +2 -15
  41. package/dist/CardMedia.js.map +1 -1
  42. package/dist/CardMedia.vue.d.ts +2 -15
  43. package/dist/Carousel.js +66 -72
  44. package/dist/Carousel.js.map +1 -1
  45. package/dist/Carousel.vue.d.ts +10 -10
  46. package/dist/Checkbox.js.map +1 -1
  47. package/dist/Checkbox.vue.d.ts +8 -53
  48. package/dist/ChevronToggle.vue.d.ts +7 -34
  49. package/dist/ChevronToggle.vue_vue_type_script_setup_true_lang-Ce_qOXfR.js.map +1 -1
  50. package/dist/Chip.js.map +1 -1
  51. package/dist/Chip.vue.d.ts +10 -52
  52. package/dist/ConfirmationCodeInput.js +40 -44
  53. package/dist/ConfirmationCodeInput.js.map +1 -1
  54. package/dist/ConfirmationCodeInput.vue.d.ts +8 -43
  55. package/dist/ContextSwitcher.js.map +1 -1
  56. package/dist/ContextSwitcher.vue.d.ts +6 -41
  57. package/dist/Copy.js.map +1 -1
  58. package/dist/Copy.vue.d.ts +3 -34
  59. package/dist/CurrencyInput.js +20 -21
  60. package/dist/CurrencyInput.js.map +1 -1
  61. package/dist/CurrencyInput.vue.d.ts +125 -46
  62. package/dist/CustomRender.js.map +1 -1
  63. package/dist/DataView.js +94 -96
  64. package/dist/DataView.js.map +1 -1
  65. package/dist/DataView.keys-aSOnA4AD.js.map +1 -1
  66. package/dist/DataView.vue.d.ts +15 -57
  67. package/dist/DataViewFilters.js +127 -139
  68. package/dist/DataViewFilters.js.map +1 -1
  69. package/dist/DataViewFilters.keys-BLu07FiP.js.map +1 -1
  70. package/dist/DataViewFilters.vue.d.ts +9 -54
  71. package/dist/DataViewSortButton.js +2 -2
  72. package/dist/DataViewSortButton.js.map +1 -1
  73. package/dist/DataViewSortButton.vue.d.ts +3 -30
  74. package/dist/DataViewToolbar.js +70 -62
  75. package/dist/DataViewToolbar.js.map +1 -1
  76. package/dist/DataViewToolbar.vue.d.ts +5 -40
  77. package/dist/DatePicker.js +4524 -4636
  78. package/dist/DatePicker.js.map +1 -1
  79. package/dist/DatePicker.vue.d.ts +32 -81
  80. package/dist/DescriptionList.js.map +1 -1
  81. package/dist/DescriptionList.vue.d.ts +3 -32
  82. package/dist/DescriptionListDetail.js.map +1 -1
  83. package/dist/DescriptionListDetail.vue.d.ts +1 -1
  84. package/dist/DescriptionListGroup.js.map +1 -1
  85. package/dist/DescriptionListGroup.vue.d.ts +1 -1
  86. package/dist/DescriptionListTerm.js.map +1 -1
  87. package/dist/DescriptionListTerm.vue.d.ts +1 -1
  88. package/dist/Dialog.js.map +1 -1
  89. package/dist/Dialog.vue.d.ts +10 -53
  90. package/dist/Divider.js.map +1 -1
  91. package/dist/Dropdown.js +89 -95
  92. package/dist/Dropdown.js.map +1 -1
  93. package/dist/Dropdown.vue.d.ts +12 -48
  94. package/dist/EmptyState.js +1 -1
  95. package/dist/EmptyState.js.map +1 -1
  96. package/dist/EmptyState.vue.d.ts +5 -62
  97. package/dist/Expand.vue.d.ts +10 -40
  98. package/dist/Expand.vue_vue_type_script_setup_true_lang-CiONJfAp.js.map +1 -1
  99. package/dist/Field.vue.d.ts +4 -53
  100. package/dist/Field.vue_vue_type_script_setup_true_lang-DI6z3AE9.js.map +1 -1
  101. package/dist/FileUpload.js +72 -74
  102. package/dist/FileUpload.js.map +1 -1
  103. package/dist/FileUpload.vue.d.ts +10 -44
  104. package/dist/FilterChip.js.map +1 -1
  105. package/dist/FilterChip.vue.d.ts +6 -41
  106. package/dist/FilterDrawerItem.js +21 -21
  107. package/dist/FilterDrawerItem.js.map +1 -1
  108. package/dist/FilterDrawerItem.vue.d.ts +6 -23
  109. package/dist/FilterDropdown.js +63 -69
  110. package/dist/FilterDropdown.js.map +1 -1
  111. package/dist/FilterDropdown.vue.d.ts +122 -35
  112. package/dist/FilterSelect.js.map +1 -1
  113. package/dist/FilterSelect.vue.d.ts +4 -31
  114. package/dist/Filters.js +157 -164
  115. package/dist/Filters.js.map +1 -1
  116. package/dist/Filters.vue.d.ts +0 -2190
  117. package/dist/HttpError.js +7 -7
  118. package/dist/HttpError.js.map +1 -1
  119. package/dist/HttpError.vue.d.ts +4 -41
  120. package/dist/Icon.js +16 -15
  121. package/dist/Icon.js.map +1 -1
  122. package/dist/Icon.vue.d.ts +4 -37
  123. package/dist/IconLabel.js.map +1 -1
  124. package/dist/IconLabel.vue.d.ts +6 -41
  125. package/dist/Illustration.js +2 -2
  126. package/dist/Illustration.vue.d.ts +3 -42
  127. package/dist/{Illustration.vue_vue_type_script_setup_true_lang-BrqEF8xe.js → Illustration.vue_vue_type_script_setup_true_lang-BVzzNsRt.js} +11 -11
  128. package/dist/{Illustration.vue_vue_type_script_setup_true_lang-BrqEF8xe.js.map → Illustration.vue_vue_type_script_setup_true_lang-BVzzNsRt.js.map} +1 -1
  129. package/dist/Image.js +2 -2
  130. package/dist/Image.vue.d.ts +5 -40
  131. package/dist/{Image.vue_vue_type_script_setup_true_lang-D5u4av0_.js → Image.vue_vue_type_script_setup_true_lang-Dg2Zk2r2.js} +37 -41
  132. package/dist/{Image.vue_vue_type_script_setup_true_lang-D5u4av0_.js.map → Image.vue_vue_type_script_setup_true_lang-Dg2Zk2r2.js.map} +1 -1
  133. package/dist/InlineEdit.js.map +1 -1
  134. package/dist/InlineEdit.vue.d.ts +126 -47
  135. package/dist/Input.js.map +1 -1
  136. package/dist/Input.vue.d.ts +12 -45
  137. package/dist/InputOptions.js +66 -69
  138. package/dist/InputOptions.js.map +1 -1
  139. package/dist/InputOptions.vue.d.ts +10 -55
  140. package/dist/IntegrationIcon.js +7 -7
  141. package/dist/IntegrationIcon.js.map +1 -1
  142. package/dist/IntegrationIcon.vue.d.ts +3 -36
  143. package/dist/Label.vue.d.ts +3 -42
  144. package/dist/Label.vue_vue_type_script_setup_true_lang-CNquF3AP.js.map +1 -1
  145. package/dist/LicenseChip.js.map +1 -1
  146. package/dist/LicenseChip.vue.d.ts +3 -30
  147. package/dist/ListItem.js.map +1 -1
  148. package/dist/ListItem.vue.d.ts +0 -294
  149. package/dist/ListItemCell.js.map +1 -1
  150. package/dist/ListItemCell.vue.d.ts +0 -21
  151. package/dist/ListView.js +122 -132
  152. package/dist/ListView.js.map +1 -1
  153. package/dist/ListView.types.d.ts +0 -29
  154. package/dist/ListView.vue.d.ts +0 -5496
  155. package/dist/Loading.js +2 -2
  156. package/dist/Loading.js.map +1 -1
  157. package/dist/Loading.vue.d.ts +1 -1
  158. package/dist/Logo.js +1 -1
  159. package/dist/Logo.vue.d.ts +6 -41
  160. package/dist/{Logo.vue_vue_type_script_setup_true_lang-Dz8c98sc.js → Logo.vue_vue_type_script_setup_true_lang-Y3iE9utm.js} +17 -17
  161. package/dist/Logo.vue_vue_type_script_setup_true_lang-Y3iE9utm.js.map +1 -0
  162. package/dist/Menu.js.map +1 -1
  163. package/dist/Menu.vue.d.ts +1 -1
  164. package/dist/MenuItem.js.map +1 -1
  165. package/dist/MenuItem.vue.d.ts +1 -1
  166. package/dist/MenusPlugin-B4jpNe7x.js +12 -0
  167. package/dist/{MenusPlugin-Bk6UW6o9.js.map → MenusPlugin-B4jpNe7x.js.map} +1 -1
  168. package/dist/Metric.js.map +1 -1
  169. package/dist/Metric.vue.d.ts +3 -34
  170. package/dist/Modal.js +62 -64
  171. package/dist/Modal.js.map +1 -1
  172. package/dist/Modal.vue.d.ts +13 -60
  173. package/dist/Modals.js +17 -18
  174. package/dist/Modals.js.map +1 -1
  175. package/dist/ModalsPlugin.js +11 -11
  176. package/dist/ModalsPlugin.js.map +1 -1
  177. package/dist/Module.js.map +1 -1
  178. package/dist/Module.keys-CEsrW2f0.js.map +1 -1
  179. package/dist/Module.types-B1FfGGac.js.map +1 -1
  180. package/dist/Module.vue.d.ts +2 -29
  181. package/dist/ModuleContent.js.map +1 -1
  182. package/dist/ModuleContent.vue.d.ts +3 -3
  183. package/dist/ModuleFooter.js.map +1 -1
  184. package/dist/ModuleFooter.vue.d.ts +1 -1
  185. package/dist/ModuleHeader.js.map +1 -1
  186. package/dist/ModuleHeader.vue.d.ts +5 -39
  187. package/dist/ObfuscateText.js.map +1 -1
  188. package/dist/ObfuscateText.vue.d.ts +3 -40
  189. package/dist/PageContent.js.map +1 -1
  190. package/dist/PageContent.vue.d.ts +3 -30
  191. package/dist/PageHeader.js.map +1 -1
  192. package/dist/PageHeader.vue.d.ts +6 -35
  193. package/dist/PageNavigation.js +50 -50
  194. package/dist/PageNavigation.js.map +1 -1
  195. package/dist/PageNavigation.vue.d.ts +7 -36
  196. package/dist/Paginate.js.map +1 -1
  197. package/dist/Paginate.vue.d.ts +5 -40
  198. package/dist/PlaidLink.js.map +1 -1
  199. package/dist/PlaidLink.vue.d.ts +12 -49
  200. package/dist/QuickAction.js.map +1 -1
  201. package/dist/QuickAction.vue.d.ts +3 -16
  202. package/dist/Radio.js.map +1 -1
  203. package/dist/Radio.vue.d.ts +0 -93
  204. package/dist/RadioGroup.js +94 -101
  205. package/dist/RadioGroup.js.map +1 -1
  206. package/dist/RadioGroup.vue.d.ts +116 -42
  207. package/dist/RadioNew.js +96 -99
  208. package/dist/RadioNew.js.map +1 -1
  209. package/dist/RadioNew.vue.d.ts +7 -48
  210. package/dist/RangeInput.js.map +1 -1
  211. package/dist/RangeInput.vue.d.ts +1 -1
  212. package/dist/SearchBar.js +38 -39
  213. package/dist/SearchBar.js.map +1 -1
  214. package/dist/SearchBar.vue.d.ts +127 -44
  215. package/dist/SectionHeader.js.map +1 -1
  216. package/dist/SectionHeader.vue.d.ts +6 -37
  217. package/dist/Select.js +171 -183
  218. package/dist/Select.js.map +1 -1
  219. package/dist/Select.vue.d.ts +23 -102
  220. package/dist/SelectStatus.js +38 -38
  221. package/dist/SelectStatus.js.map +1 -1
  222. package/dist/SelectStatus.vue.d.ts +227 -47
  223. package/dist/Skeleton.js.map +1 -1
  224. package/dist/Skeleton.vue.d.ts +3 -34
  225. package/dist/Step.js +44 -44
  226. package/dist/Step.js.map +1 -1
  227. package/dist/Step.vue.d.ts +4 -43
  228. package/dist/Stepper.js.map +1 -1
  229. package/dist/Stepper.vue.d.ts +9 -44
  230. package/dist/Switch.js.map +1 -1
  231. package/dist/Switch.vue.d.ts +8 -47
  232. package/dist/Tab.js +1 -1
  233. package/dist/Tab.js.map +1 -1
  234. package/dist/Tab.vue.d.ts +2 -15
  235. package/dist/TabPanel.js.map +1 -1
  236. package/dist/TabPanel.vue.d.ts +3 -30
  237. package/dist/Table.js +53 -59
  238. package/dist/Table.js.map +1 -1
  239. package/dist/Table.keys-LHQf6FEH.js.map +1 -1
  240. package/dist/Table.vue.d.ts +3 -50
  241. package/dist/TableCell.js +1 -1
  242. package/dist/TableCell.js.map +1 -1
  243. package/dist/TableCell.vue.d.ts +3 -32
  244. package/dist/TableHeaderCell.js +1 -1
  245. package/dist/TableHeaderCell.js.map +1 -1
  246. package/dist/TableHeaderCell.vue.d.ts +3 -30
  247. package/dist/TableHeaderRow.js +47 -45
  248. package/dist/TableHeaderRow.js.map +1 -1
  249. package/dist/TableHeaderRow.vue.d.ts +5 -34
  250. package/dist/TableRow.js +60 -61
  251. package/dist/TableRow.js.map +1 -1
  252. package/dist/TableRow.vue.d.ts +7 -48
  253. package/dist/Tabs.js +2 -2
  254. package/dist/Tabs.vue.d.ts +122 -31
  255. package/dist/Tabs.vue_vue_type_script_setup_true_lang-Dprx064Y.js +156 -0
  256. package/dist/{Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js.map → Tabs.vue_vue_type_script_setup_true_lang-Dprx064Y.js.map} +1 -1
  257. package/dist/TextEditor.js +2414 -2420
  258. package/dist/TextEditor.js.map +1 -1
  259. package/dist/TextEditor.vue.d.ts +9 -40
  260. package/dist/Textarea.js +69 -69
  261. package/dist/Textarea.js.map +1 -1
  262. package/dist/Textarea.vue.d.ts +9 -44
  263. package/dist/Thumbnail.js +1 -1
  264. package/dist/Thumbnail.js.map +1 -1
  265. package/dist/Thumbnail.vue.d.ts +4 -4
  266. package/dist/ThumbnailEmpty.js.map +1 -1
  267. package/dist/ThumbnailEmpty.vue.d.ts +1 -1
  268. package/dist/ThumbnailGroup.js.map +1 -1
  269. package/dist/ThumbnailGroup.keys-EJ4qFNhx.js.map +1 -1
  270. package/dist/ThumbnailGroup.vue.d.ts +26 -22
  271. package/dist/Timeline.js.map +1 -1
  272. package/dist/Timeline.vue.d.ts +3 -32
  273. package/dist/TimelineItem.js.map +1 -1
  274. package/dist/TimelineItem.vue.d.ts +1 -1
  275. package/dist/Toast.js.map +1 -1
  276. package/dist/Toast.vue.d.ts +3 -30
  277. package/dist/Toasts.js.map +1 -1
  278. package/dist/ToastsPlugin.js +11 -11
  279. package/dist/ToastsPlugin.js.map +1 -1
  280. package/dist/Tooltip.js +29 -30
  281. package/dist/Tooltip.js.map +1 -1
  282. package/dist/Tooltip.vue.d.ts +11 -43
  283. package/dist/colors-DDDVvqfQ.js.map +1 -1
  284. package/dist/components.css +1 -1
  285. package/dist/constants.js.map +1 -1
  286. package/dist/directives/autofocus.js.map +1 -1
  287. package/dist/directives/clickoutside.js.map +1 -1
  288. package/dist/directives/observe.js.map +1 -1
  289. package/dist/directives/sticky.js.map +1 -1
  290. package/dist/directives/tooltip.js +3 -3
  291. package/dist/directives/tooltip.js.map +1 -1
  292. package/dist/directives/viewable.js +39 -44
  293. package/dist/directives/viewable.js.map +1 -1
  294. package/dist/{floating-ui.vue-pzUuloyX.js → floating-ui.vue-CL01Y9ER.js} +2 -2
  295. package/dist/{floating-ui.vue-pzUuloyX.js.map → floating-ui.vue-CL01Y9ER.js.map} +1 -1
  296. package/dist/formatDateTime-DG7kBc2T.js +1414 -0
  297. package/dist/{formatDateTime-Dz8bXV0R.js.map → formatDateTime-DG7kBc2T.js.map} +1 -1
  298. package/dist/index-D6bxWkZ1.js.map +1 -1
  299. package/dist/{index-ConQ3o31.js → index-GUu9zvbg.js} +3 -3
  300. package/dist/{index-ConQ3o31.js.map → index-GUu9zvbg.js.map} +1 -1
  301. package/dist/index.js +99 -104
  302. package/dist/index.js.map +1 -1
  303. package/dist/isDefined-DzVx0B6k.js.map +1 -1
  304. package/dist/keys-BEdEsanp.js.map +1 -1
  305. package/dist/keys-C8Zfr_By.js.map +1 -1
  306. package/dist/locale.js.map +1 -1
  307. package/dist/misc-CHQs-G03.js.map +1 -1
  308. package/dist/obfuscateText.d.ts +1 -1
  309. package/dist/parseISO-wlfIB_QJ.js.map +1 -1
  310. package/dist/searchFuzzy-DBDE6jkd.js +408 -0
  311. package/dist/{searchFuzzy-DRasJ33G.js.map → searchFuzzy-DBDE6jkd.js.map} +1 -1
  312. package/dist/statusLevels-D8EgtE_L.js.map +1 -1
  313. package/dist/storage.js.map +1 -1
  314. package/dist/tailwind-base.js +4 -4
  315. package/dist/tailwind-base.js.map +1 -1
  316. package/dist/toTimeZone-Coq1oPTt.js.map +1 -1
  317. package/dist/useConfirmBeforeClosing.js.map +1 -1
  318. package/dist/useDialog.d.ts +2 -2
  319. package/dist/useDialog.js +21 -25
  320. package/dist/useDialog.js.map +1 -1
  321. package/dist/useGoogleMaps.js +108 -110
  322. package/dist/useGoogleMaps.js.map +1 -1
  323. package/dist/useMediaQuery.d.ts +0 -6
  324. package/dist/useMediaQuery.js +11 -15
  325. package/dist/useMediaQuery.js.map +1 -1
  326. package/dist/useModals.d.ts +1 -1
  327. package/dist/useModals.js.map +1 -1
  328. package/dist/usePaginationStats-d_q39naC.js.map +1 -1
  329. package/dist/usePlaidLink.js +20 -27
  330. package/dist/usePlaidLink.js.map +1 -1
  331. package/dist/useScriptTag.js.map +1 -1
  332. package/dist/useSearch.js +13 -13
  333. package/dist/useSearch.js.map +1 -1
  334. package/dist/useSelection.js +56 -56
  335. package/dist/useSelection.js.map +1 -1
  336. package/dist/useSortable.js +54 -63
  337. package/dist/useSortable.js.map +1 -1
  338. package/dist/useStepper.d.ts +2 -2
  339. package/dist/useStepper.js +36 -40
  340. package/dist/useStepper.js.map +1 -1
  341. package/dist/useToasts.js +23 -23
  342. package/dist/useToasts.js.map +1 -1
  343. package/dist/useValidation.js +96 -100
  344. package/dist/useValidation.js.map +1 -1
  345. package/dist/utils/calculateElementOverflow.js +4 -4
  346. package/dist/utils/calculateElementOverflow.js.map +1 -1
  347. package/dist/utils/colorScheme.js +2 -2
  348. package/dist/utils/colorScheme.js.map +1 -1
  349. package/dist/utils/createQueryString.js.map +1 -1
  350. package/dist/utils/createValidDate.js.map +1 -1
  351. package/dist/utils/formatDateTime.js +1 -1
  352. package/dist/utils/getContrastingTextColor.js.map +1 -1
  353. package/dist/utils/helpers.js.map +1 -1
  354. package/dist/utils/i18n.js.map +1 -1
  355. package/dist/utils/normalizeDate.js.map +1 -1
  356. package/dist/utils/obfuscateText.js +6 -6
  357. package/dist/utils/obfuscateText.js.map +1 -1
  358. package/dist/utils/searchFuzzy.js +1 -1
  359. package/dist/utils/storage.js +23 -23
  360. package/dist/utils/storage.js.map +1 -1
  361. package/package.json +13 -14
  362. package/tailwind-base.ts +4 -4
  363. package/types/vite.d.ts +7 -0
  364. package/types/vitest.d.ts +7 -0
  365. package/dist/Logo.vue_vue_type_script_setup_true_lang-Dz8c98sc.js.map +0 -1
  366. package/dist/MenusPlugin-Bk6UW6o9.js +0 -12
  367. package/dist/Tabs.vue_vue_type_script_setup_true_lang-CmnBP4i1.js +0 -159
  368. package/dist/formatDateTime-Dz8bXV0R.js +0 -1418
  369. package/dist/searchFuzzy-DRasJ33G.js +0 -409
@@ -1,30 +1,30 @@
1
1
  import O from "lodash-es/debounce";
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";
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";
5
5
  import { t as f } from "./locale.js";
6
6
  import { i as l } from "./isDefined-DzVx0B6k.js";
7
- import D from "lodash-es/round";
8
- function j(e) {
7
+ import q from "lodash-es/round";
8
+ function D(e) {
9
9
  return e && e.constructor && typeof e.constructor.isBuffer == "function" && e.constructor.isBuffer(e);
10
10
  }
11
- function C(e) {
11
+ function j(e) {
12
12
  return e;
13
13
  }
14
- function F(e, t) {
14
+ function C(e, t) {
15
15
  t = t || {};
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;
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;
23
23
  });
24
24
  }
25
- return v(e), m;
25
+ return h(e), m;
26
26
  }
27
- function Y(e = {}) {
27
+ function P(e = {}) {
28
28
  return {
29
29
  name: "email",
30
30
  validator(t) {
@@ -33,20 +33,20 @@ function Y(e = {}) {
33
33
  message: e.message || f("ll.validation.email")
34
34
  };
35
35
  }
36
- function _(e) {
36
+ function Y(e) {
37
37
  return {
38
38
  name: "maxLength",
39
39
  validator(t) {
40
- const i = u(e.max), o = u(t);
41
- if (!l(o))
40
+ const i = u(e.max), s = u(t);
41
+ if (!l(s))
42
42
  return !0;
43
- let s = String(o);
44
- return e.trim && (s = s.trim()), s.length <= i;
43
+ let a = String(s);
44
+ return e.trim && (a = a.trim()), a.length <= i;
45
45
  },
46
46
  message: e.message || (() => f("ll.validation.maxLength", { max: String(u(e.max)) }))
47
47
  };
48
48
  }
49
- function z(e) {
49
+ function _(e) {
50
50
  return {
51
51
  name: "maxValue",
52
52
  validator(t) {
@@ -56,20 +56,20 @@ function z(e) {
56
56
  message: e.message || (() => f("ll.validation.maxValue", { max: String(u(e.max)) }))
57
57
  };
58
58
  }
59
- function G(e) {
59
+ function z(e) {
60
60
  return {
61
61
  name: "minLength",
62
62
  validator(t) {
63
- const i = u(e.min), o = u(t);
64
- if (!l(o))
63
+ const i = u(e.min), s = u(t);
64
+ if (!l(s))
65
65
  return !0;
66
- let s = String(o);
67
- return e.trim && (s = s.trim()), s.length >= i;
66
+ let a = String(s);
67
+ return e.trim && (a = a.trim()), a.length >= i;
68
68
  },
69
69
  message: e.message || (() => f("ll.validation.minLength", { min: String(u(e.min)) }))
70
70
  };
71
71
  }
72
- function H(e) {
72
+ function G(e) {
73
73
  return {
74
74
  name: "minValue",
75
75
  validator(t) {
@@ -79,7 +79,7 @@ function H(e) {
79
79
  message: e.message || (() => f("ll.validation.minValue", { min: String(u(e.min)) }))
80
80
  };
81
81
  }
82
- function J(e) {
82
+ function H(e) {
83
83
  return {
84
84
  name: "pattern",
85
85
  validator(t) {
@@ -95,7 +95,7 @@ function J(e) {
95
95
  }
96
96
  };
97
97
  }
98
- function Q(e = {}) {
98
+ function J(e = {}) {
99
99
  return {
100
100
  name: "positiveNumber",
101
101
  validator(t) {
@@ -104,17 +104,17 @@ function Q(e = {}) {
104
104
  message: e.message || f("ll.validation.positiveNumber")
105
105
  };
106
106
  }
107
- function X(e = {}) {
107
+ function Q(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 === D(i, A.CURRENCY);
112
+ return !l(t) || i !== 1 / 0 && i >= 0 && i === q(i, L.CURRENCY);
113
113
  },
114
114
  message: e.message || f("ll.validation.price")
115
115
  };
116
116
  }
117
- function Z(e = {}) {
117
+ function X(e = {}) {
118
118
  return {
119
119
  name: "required",
120
120
  validator(t) {
@@ -123,7 +123,7 @@ function Z(e = {}) {
123
123
  message: e.message || f("ll.validation.required")
124
124
  };
125
125
  }
126
- function W(e = {}) {
126
+ function Z(e = {}) {
127
127
  return {
128
128
  name: "wholeNumber",
129
129
  validator(t) {
@@ -136,97 +136,93 @@ function ee({
136
136
  rules: e,
137
137
  values: t
138
138
  }) {
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),
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),
148
148
  () => {
149
- S();
149
+ x();
150
150
  }
151
- ), n[a] = B({
152
- fieldName: a,
151
+ ), r[o] = B({
152
+ fieldName: o,
153
153
  fieldValue: b,
154
154
  flush: () => {
155
- S.cancel(), d(a);
155
+ x.cancel(), d(o);
156
156
  },
157
- rules: V(e, a)
158
- }), n;
157
+ rules: E(e, o)
158
+ }), r;
159
159
  },
160
160
  {}
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));
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));
162
162
  return I({
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}]`);
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}]`);
168
168
  d && d.scrollIntoView({ behavior: "smooth" });
169
169
  }
170
170
  return !m.value;
171
171
  },
172
- getError: function(n) {
173
- var a;
174
- return ((a = o[n]) == null ? void 0 : a.errorMessage) || "";
172
+ getError: function(r) {
173
+ return s[r]?.errorMessage || "";
175
174
  },
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();
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();
180
179
  },
181
180
  setAllUntouched: async function() {
182
- await w(), s.value.forEach((n) => {
183
- n.setTouched(!1);
181
+ await w(), a.value.forEach((r) => {
182
+ r.setTouched(!1);
184
183
  });
185
184
  },
186
- setInitialValues: function(n) {
187
- s.value.forEach((a) => {
188
- a.setInitialValue(n[a.name]);
185
+ setInitialValues: function(r) {
186
+ a.value.forEach((o) => {
187
+ o.setInitialValue(r[o.name]);
189
188
  });
190
189
  },
191
- fields: o,
192
- dirtyFields: h,
190
+ fields: s,
191
+ dirtyFields: v,
193
192
  hasErrors: m,
194
- someTouched: v
193
+ someTouched: h
195
194
  });
196
195
  }
197
196
  function B({
198
197
  fieldName: e,
199
198
  fieldValue: t,
200
199
  rules: i,
201
- flush: o
200
+ flush: s
202
201
  }) {
203
- const s = N(t.value), m = N(!1), v = c(() => (t.value ?? "") !== (s.value ?? "")), h = c(() => m.value ? i.map((r) => ({
202
+ const a = V(t.value), m = V(!1), h = c(() => (t.value ?? "") !== (a.value ?? "")), v = c(() => m.value ? i.map((n) => ({
204
203
  fieldName: e,
205
- ruleName: r.name,
206
- isValid: r.validator(t.value),
207
- message: typeof r.message == "function" ? r.message(t.value) : r.message
204
+ ruleName: n.name,
205
+ isValid: n.validator(t.value),
206
+ message: typeof n.message == "function" ? n.message(t.value) : n.message
208
207
  })) : []), y = c(
209
- () => h.value.filter((r) => !r.isValid).map((r) => ({
210
- ruleName: r.ruleName,
211
- message: r.message
208
+ () => v.value.filter((n) => !n.isValid).map((n) => ({
209
+ ruleName: n.ruleName,
210
+ message: n.message
212
211
  }))
213
212
  );
214
- function g(r = !0) {
215
- o(), m.value = r;
213
+ function g(n = !0) {
214
+ s(), m.value = n;
216
215
  }
217
- function p(r) {
218
- s.value = r;
216
+ function p(n) {
217
+ a.value = n;
219
218
  }
220
219
  return I({
221
220
  name: e,
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
- }),
221
+ currentValue: S(t),
222
+ initialValue: S(a),
223
+ isTouched: S(m),
224
+ isDirty: S(h),
225
+ errorMessage: c(() => y.value?.[0]?.message || ""),
230
226
  errors: y,
231
227
  setInitialValue: p,
232
228
  setTouched: g
@@ -234,16 +230,16 @@ function B({
234
230
  }
235
231
  export {
236
232
  ee as default,
237
- Y as email,
233
+ P as email,
238
234
  l as isDefined,
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
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
248
244
  };
249
245
  //# 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","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
+ {"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,7 +1,7 @@
1
1
  import { CSS_VARS as n } from "../constants.js";
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();
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();
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 a(r) {
15
15
  };
16
16
  }
17
17
  export {
18
- a as default
18
+ l 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,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,IACR,IAIE,KAAK,MAAMA,EAAW,KAAK,IAAI,SAAS,gBAAgB,cAAcH,IACjE;AAAA,MACL,OAAO,KAAK,MAAMG,EAAW,KAAK,KAAK,SAAS,gBAAgB,cAAcH;AAAA,MAC9E,MAAM;AAAA,IACR,IAGK;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AACF;"}
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,6 +1,6 @@
1
1
  const n = {
2
2
  blue: "white",
3
- green: "white",
3
+ green: "ice-900",
4
4
  ice: "ice-900",
5
5
  orange: "ice-900",
6
6
  purple: "white",
@@ -14,7 +14,7 @@ function r(t, e) {
14
14
  return t === "main" ? `${e}-500` : `${e}-${e === "ice" ? "200" : "100"}`;
15
15
  }
16
16
  function c(t, e) {
17
- return t === "main" ? n[e] : `${e}-700`;
17
+ return t === "main" ? n[e] : `${e}-900`;
18
18
  }
19
19
  function u({ shade: t, color: e }) {
20
20
  const o = r(t, e), i = c(t, e);
@@ -1 +1 @@
1
- {"version":3,"file":"colorScheme.js","sources":["../../src/utils/colorScheme.ts"],"sourcesContent":["import { StashPrimaryColorGroup } from '../../types/colors';\n\nconst CONTRAST_TEXT_MAP: { [key in StashPrimaryColorGroup]: string } = {\n blue: 'white',\n green: 'white',\n ice: 'ice-900',\n orange: 'ice-900',\n purple: 'white',\n red: 'white',\n royal: 'white',\n seafoam: 'ice-900',\n teal: 'ice-900',\n yellow: 'ice-900',\n};\n\ntype Shade = 'light' | 'main';\n\ninterface ColorSchemeArgs {\n shade: Shade;\n color: StashPrimaryColorGroup;\n}\n\nfunction bgColor(shade: Shade, color: StashPrimaryColorGroup) {\n if (shade === 'main') {\n return `${color}-500`;\n }\n\n const lightColorNo = color === 'ice' ? '200' : '100';\n\n return `${color}-${lightColorNo}`;\n}\n\nfunction textColor(shade: Shade, color: StashPrimaryColorGroup) {\n if (shade === 'main') {\n return CONTRAST_TEXT_MAP[color];\n }\n\n return `${color}-700`;\n}\n\n// TODO: Look into dynamically inferring contrast text color based on bg.\n// Might be easier when tailwind is around.\n// @see https://wunnle.com/dynamic-text-color-based-on-background\nexport default function colorScheme({ shade, color }: ColorSchemeArgs) {\n const computedBgColor = bgColor(shade, color);\n const computedTextColor = textColor(shade, color);\n\n return { computedBgColor, computedTextColor };\n}\n"],"names":["CONTRAST_TEXT_MAP","bgColor","shade","color","textColor","colorScheme","computedBgColor","computedTextColor"],"mappings":"AAEA,MAAMA,IAAiE;AAAA,EACrE,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AACV;AASA,SAASC,EAAQC,GAAcC,GAA+B;AAC5D,SAAID,MAAU,SACL,GAAGC,CAAK,SAKV,GAAGA,CAAK,IAFMA,MAAU,QAAQ,QAAQ,KAEhB;AACjC;AAEA,SAASC,EAAUF,GAAcC,GAA+B;AAC9D,SAAID,MAAU,SACLF,EAAkBG,CAAK,IAGzB,GAAGA,CAAK;AACjB;AAKA,SAAwBE,EAAY,EAAE,OAAAH,GAAO,OAAAC,KAA0B;AAC/D,QAAAG,IAAkBL,EAAQC,GAAOC,CAAK,GACtCI,IAAoBH,EAAUF,GAAOC,CAAK;AAEzC,SAAA,EAAE,iBAAAG,GAAiB,mBAAAC,EAAkB;AAC9C;"}
1
+ {"version":3,"file":"colorScheme.js","sources":["../../src/utils/colorScheme.ts"],"sourcesContent":["import { StashPrimaryColorGroup } from '../../types/colors';\n\nconst CONTRAST_TEXT_MAP: { [key in StashPrimaryColorGroup]: string } = {\n blue: 'white',\n green: 'ice-900',\n ice: 'ice-900',\n orange: 'ice-900',\n purple: 'white',\n red: 'white',\n royal: 'white',\n seafoam: 'ice-900',\n teal: 'ice-900',\n yellow: 'ice-900',\n};\n\ntype Shade = 'light' | 'main';\n\ninterface ColorSchemeArgs {\n shade: Shade;\n color: StashPrimaryColorGroup;\n}\n\nfunction bgColor(shade: Shade, color: StashPrimaryColorGroup) {\n if (shade === 'main') {\n return `${color}-500`;\n }\n\n const lightColorNo = color === 'ice' ? '200' : '100';\n\n return `${color}-${lightColorNo}`;\n}\n\nfunction textColor(shade: Shade, color: StashPrimaryColorGroup) {\n if (shade === 'main') {\n return CONTRAST_TEXT_MAP[color];\n }\n\n return `${color}-900`;\n}\n\n// TODO: Look into dynamically inferring contrast text color based on bg.\n// Might be easier when tailwind is around.\n// @see https://wunnle.com/dynamic-text-color-based-on-background\nexport default function colorScheme({ shade, color }: ColorSchemeArgs) {\n const computedBgColor = bgColor(shade, color);\n const computedTextColor = textColor(shade, color);\n\n return { computedBgColor, computedTextColor };\n}\n"],"names":["CONTRAST_TEXT_MAP","bgColor","shade","color","textColor","colorScheme","computedBgColor","computedTextColor"],"mappings":"AAEA,MAAMA,IAAiE;AAAA,EACrE,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AACV;AASA,SAASC,EAAQC,GAAcC,GAA+B;AAC5D,SAAID,MAAU,SACL,GAAGC,CAAK,SAKV,GAAGA,CAAK,IAFMA,MAAU,QAAQ,QAAQ,KAEhB;AACjC;AAEA,SAASC,EAAUF,GAAcC,GAA+B;AAC9D,SAAID,MAAU,SACLF,EAAkBG,CAAK,IAGzB,GAAGA,CAAK;AACjB;AAKA,SAAwBE,EAAY,EAAE,OAAAH,GAAO,OAAAC,KAA0B;AACrE,QAAMG,IAAkBL,EAAQC,GAAOC,CAAK,GACtCI,IAAoBH,EAAUF,GAAOC,CAAK;AAEhD,SAAO,EAAE,iBAAAG,GAAiB,mBAAAC,EAAA;AAC5B;"}
@@ -1 +1 @@
1
- {"version":3,"file":"createQueryString.js","sources":["../../src/utils/createQueryString.ts"],"sourcesContent":["import snakeCase from 'lodash-es/snakeCase';\n\nimport isDefined from '../composables/useValidation/utils/isDefined';\n\ninterface Options {\n /**\n * A function that determines whether a param should be included in the query string based on its value.\n */\n shouldInclude?: (value: unknown, name: string) => boolean;\n}\n\n/**\n * Creates a URL query string from an object of key/value pairs.\n *\n * Values that are `undefined` will be excluded from the query string.\n *\n * For a param that has multiple values, use an array:\n * - input: `{ brands: [1, 2, 3] }`\n * - output: `brands=1&brands=2&brands=3`\n */\nexport function createQueryString(\n params: Record<string, unknown>,\n { shouldInclude = isDefined }: Options = {},\n): string {\n const searchParams = new URLSearchParams({});\n\n Object.entries(params).forEach(([name, value]) => {\n if (!shouldInclude(value, name)) {\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item: string | number) => {\n searchParams.append(name, String(item));\n });\n } else {\n if (typeof value === 'object' && value !== null) {\n throw new TypeError(\n `Invalid query string parameter value.\\n\\nReceived value: \"${value}\".\\n\\nValues must be Primitive Values or arrays of Primitive Values. See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#primitive_values`,\n );\n }\n\n searchParams.append(snakeCase(name), String(value));\n }\n });\n\n return searchParams.toString();\n}\n\nexport default createQueryString;\n"],"names":["createQueryString","params","shouldInclude","isDefined","searchParams","name","value","item","snakeCase"],"mappings":";;AAoBO,SAASA,EACdC,GACA,EAAE,eAAAC,IAAgBC,EAAU,IAAa,CAAA,GACjC;AACR,QAAMC,IAAe,IAAI,gBAAgB,EAAE;AAEpC,gBAAA,QAAQH,CAAM,EAAE,QAAQ,CAAC,CAACI,GAAMC,CAAK,MAAM;AAChD,QAAKJ,EAAcI,GAAOD,CAAI;AAI1B,UAAA,MAAM,QAAQC,CAAK;AACf,QAAAA,EAAA,QAAQ,CAACC,MAA0B;AACvC,UAAAH,EAAa,OAAOC,GAAM,OAAOE,CAAI,CAAC;AAAA,QAAA,CACvC;AAAA,WACI;AACL,YAAI,OAAOD,KAAU,YAAYA,MAAU;AACzC,gBAAM,IAAI;AAAA,YACR;AAAA;AAAA,mBAA6DA,CAAK;AAAA;AAAA;AAAA,UACpE;AAGF,QAAAF,EAAa,OAAOI,EAAUH,CAAI,GAAG,OAAOC,CAAK,CAAC;AAAA,MAAA;AAAA,EACpD,CACD,GAEMF,EAAa,SAAS;AAC/B;"}
1
+ {"version":3,"file":"createQueryString.js","sources":["../../src/utils/createQueryString.ts"],"sourcesContent":["import snakeCase from 'lodash-es/snakeCase';\n\nimport isDefined from '../composables/useValidation/utils/isDefined';\n\ninterface Options {\n /**\n * A function that determines whether a param should be included in the query string based on its value.\n */\n shouldInclude?: (value: unknown, name: string) => boolean;\n}\n\n/**\n * Creates a URL query string from an object of key/value pairs.\n *\n * Values that are `undefined` will be excluded from the query string.\n *\n * For a param that has multiple values, use an array:\n * - input: `{ brands: [1, 2, 3] }`\n * - output: `brands=1&brands=2&brands=3`\n */\nexport function createQueryString(\n params: Record<string, unknown>,\n { shouldInclude = isDefined }: Options = {},\n): string {\n const searchParams = new URLSearchParams({});\n\n Object.entries(params).forEach(([name, value]) => {\n if (!shouldInclude(value, name)) {\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item: string | number) => {\n searchParams.append(name, String(item));\n });\n } else {\n if (typeof value === 'object' && value !== null) {\n throw new TypeError(\n `Invalid query string parameter value.\\n\\nReceived value: \"${value}\".\\n\\nValues must be Primitive Values or arrays of Primitive Values. See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#primitive_values`,\n );\n }\n\n searchParams.append(snakeCase(name), String(value));\n }\n });\n\n return searchParams.toString();\n}\n\nexport default createQueryString;\n"],"names":["createQueryString","params","shouldInclude","isDefined","searchParams","name","value","item","snakeCase"],"mappings":";;AAoBO,SAASA,EACdC,GACA,EAAE,eAAAC,IAAgBC,EAAA,IAAuB,CAAA,GACjC;AACR,QAAMC,IAAe,IAAI,gBAAgB,EAAE;AAE3C,gBAAO,QAAQH,CAAM,EAAE,QAAQ,CAAC,CAACI,GAAMC,CAAK,MAAM;AAChD,QAAKJ,EAAcI,GAAOD,CAAI;AAI9B,UAAI,MAAM,QAAQC,CAAK;AACrB,QAAAA,EAAM,QAAQ,CAACC,MAA0B;AACvC,UAAAH,EAAa,OAAOC,GAAM,OAAOE,CAAI,CAAC;AAAA,QACxC,CAAC;AAAA,WACI;AACL,YAAI,OAAOD,KAAU,YAAYA,MAAU;AACzC,gBAAM,IAAI;AAAA,YACR;AAAA;AAAA,mBAA6DA,CAAK;AAAA;AAAA;AAAA,UAAA;AAItE,QAAAF,EAAa,OAAOI,EAAUH,CAAI,GAAG,OAAOC,CAAK,CAAC;AAAA,MACpD;AAAA,EACF,CAAC,GAEMF,EAAa,SAAA;AACtB;"}
@@ -1 +1 @@
1
- {"version":3,"file":"createValidDate.js","sources":["../../src/utils/createValidDate.ts"],"sourcesContent":["import { isValid, parseISO } from 'date-fns';\n\nexport default function createValidDate(date: string) {\n if (isNaN(Date.parse(date))) {\n return;\n }\n\n const parsedISO = parseISO(date);\n\n if (isValid(parsedISO)) {\n return parsedISO;\n }\n\n return new Date(date);\n}\n"],"names":["createValidDate","date","parsedISO","parseISO","isValid"],"mappings":";;AAEA,SAAwBA,EAAgBC,GAAc;AACpD,MAAI,MAAM,KAAK,MAAMA,CAAI,CAAC;AACxB;AAGI,QAAAC,IAAYC,EAASF,CAAI;AAE3B,SAAAG,EAAQF,CAAS,IACZA,IAGF,IAAI,KAAKD,CAAI;AACtB;"}
1
+ {"version":3,"file":"createValidDate.js","sources":["../../src/utils/createValidDate.ts"],"sourcesContent":["import { isValid, parseISO } from 'date-fns';\n\nexport default function createValidDate(date: string) {\n if (isNaN(Date.parse(date))) {\n return;\n }\n\n const parsedISO = parseISO(date);\n\n if (isValid(parsedISO)) {\n return parsedISO;\n }\n\n return new Date(date);\n}\n"],"names":["createValidDate","date","parsedISO","parseISO","isValid"],"mappings":";;AAEA,SAAwBA,EAAgBC,GAAc;AACpD,MAAI,MAAM,KAAK,MAAMA,CAAI,CAAC;AACxB;AAGF,QAAMC,IAAYC,EAASF,CAAI;AAE/B,SAAIG,EAAQF,CAAS,IACZA,IAGF,IAAI,KAAKD,CAAI;AACtB;"}
@@ -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-Dz8bXV0R.js";
4
+ import { k as a } from "../formatDateTime-DG7kBc2T.js";
5
5
  import "../isValid-DN-HkCoi.js";
6
6
  export {
7
7
  a as default
@@ -1 +1 @@
1
- {"version":3,"file":"getContrastingTextColor.js","sources":["../../src/utils/getContrastingTextColor.ts"],"sourcesContent":["import { StashColors } from '../../types/colors';\n\n/**\n * @see: https://wunnle.com/dynamic-text-color-based-on-background\n */\n\nfunction getRGB(c) {\n return parseInt(c, 16) || c;\n}\n\nfunction getsRGB(c) {\n return getRGB(c) / 255 <= 0.03928 ? getRGB(c) / 255 / 12.92 : Math.pow((getRGB(c) / 255 + 0.055) / 1.055, 2.4);\n}\n\nfunction getLuminance(hexColor) {\n return (\n 0.2126 * getsRGB(hexColor.substr(1, 2)) +\n 0.7152 * getsRGB(hexColor.substr(3, 2)) +\n 0.0722 * getsRGB(hexColor.substr(-2))\n );\n}\n\nfunction getContrast(f, b) {\n const L1 = getLuminance(f);\n const L2 = getLuminance(b);\n return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05);\n}\n\nfunction getStashColorValueFromCssVar(color: string) {\n return getComputedStyle(document.documentElement).getPropertyValue(`--color-${color}`);\n}\n\nfunction getStashColor(color: string) {\n const stashColors = Object.values(StashColors) as string[];\n const exactMatch = stashColors.includes(color);\n\n if (exactMatch) {\n return getStashColorValueFromCssVar(color);\n }\n\n // check if a primary color group is provided, eg. 'blue' in 'blue-100'\n const partialMatch = stashColors.find((stashColor) => {\n return stashColor.split('-')[0] === color;\n });\n\n if (partialMatch) {\n return getStashColorValueFromCssVar(`${color}-500`);\n }\n\n return '';\n}\n\nfunction normalizeHexValue(hexValue: string) {\n if (hexValue.startsWith('#')) {\n return hexValue;\n }\n\n return `#${hexValue}`;\n}\n\nfunction getContrastingHexValue(colorHexValue: string) {\n const darkTextColor = '#27282A'; // ice-900\n const lightTextColor = '#FFFFFF'; // white\n\n const lightTextContrast = getContrast(colorHexValue, lightTextColor);\n const darkTextContrast = getContrast(colorHexValue, darkTextColor);\n\n return lightTextContrast > darkTextContrast ? lightTextColor : darkTextColor;\n}\n\nexport default function getContrastingTextColor(color: string) {\n const hexRegex = new RegExp('^#?(([A-Fa-f0-9]{3})|([A-Fa-f0-9]{6}))$');\n if (hexRegex.test(color)) {\n const normalizedHexValue = normalizeHexValue(color);\n return getContrastingHexValue(normalizedHexValue);\n }\n\n const stashColor = getStashColor(color);\n if (stashColor) {\n return getContrastingHexValue(stashColor);\n }\n\n // eslint-disable-next-line no-console\n console.warn(`getContrastingTextColor received an invalid color value: ${color}`);\n return '#27282A';\n}\n"],"names":["getRGB","c","getsRGB","getLuminance","hexColor","getContrast","f","b","L1","L2","getStashColorValueFromCssVar","color","getStashColor","stashColors","StashColors","stashColor","normalizeHexValue","hexValue","getContrastingHexValue","colorHexValue","darkTextColor","lightTextColor","lightTextContrast","darkTextContrast","getContrastingTextColor","normalizedHexValue"],"mappings":";AAMA,SAASA,EAAOC,GAAG;AACV,SAAA,SAASA,GAAG,EAAE,KAAKA;AAC5B;AAEA,SAASC,EAAQD,GAAG;AAClB,SAAOD,EAAOC,CAAC,IAAI,OAAO,UAAUD,EAAOC,CAAC,IAAI,MAAM,QAAQ,KAAK,KAAKD,EAAOC,CAAC,IAAI,MAAM,SAAS,OAAO,GAAG;AAC/G;AAEA,SAASE,EAAaC,GAAU;AAE5B,SAAA,SAASF,EAAQE,EAAS,OAAO,GAAG,CAAC,CAAC,IACtC,SAASF,EAAQE,EAAS,OAAO,GAAG,CAAC,CAAC,IACtC,SAASF,EAAQE,EAAS,OAAO,EAAE,CAAC;AAExC;AAEA,SAASC,EAAYC,GAAGC,GAAG;AACnB,QAAAC,IAAKL,EAAaG,CAAC,GACnBG,IAAKN,EAAaI,CAAC;AACjB,UAAA,KAAK,IAAIC,GAAIC,CAAE,IAAI,SAAS,KAAK,IAAID,GAAIC,CAAE,IAAI;AACzD;AAEA,SAASC,EAA6BC,GAAe;AACnD,SAAO,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,WAAWA,CAAK,EAAE;AACvF;AAEA,SAASC,EAAcD,GAAe;AAC9B,QAAAE,IAAc,OAAO,OAAOC,CAAW;AAG7C,SAFmBD,EAAY,SAASF,CAAK,IAGpCD,EAA6BC,CAAK,IAItBE,EAAY,KAAK,CAACE,MAC9BA,EAAW,MAAM,GAAG,EAAE,CAAC,MAAMJ,CACrC,IAGQD,EAA6B,GAAGC,CAAK,MAAM,IAG7C;AACT;AAEA,SAASK,EAAkBC,GAAkB;AACvC,SAAAA,EAAS,WAAW,GAAG,IAClBA,IAGF,IAAIA,CAAQ;AACrB;AAEA,SAASC,EAAuBC,GAAuB;AACrD,QAAMC,IAAgB,WAChBC,IAAiB,WAEjBC,IAAoBjB,EAAYc,GAAeE,CAAc,GAC7DE,IAAmBlB,EAAYc,GAAeC,CAAa;AAE1D,SAAAE,IAAoBC,IAAmBF,IAAiBD;AACjE;AAEA,SAAwBI,EAAwBb,GAAe;AAEzD,MADa,IAAI,OAAO,yCAAyC,EACxD,KAAKA,CAAK,GAAG;AAClB,UAAAc,IAAqBT,EAAkBL,CAAK;AAClD,WAAOO,EAAuBO,CAAkB;AAAA,EAAA;AAG5C,QAAAV,IAAaH,EAAcD,CAAK;AACtC,SAAII,IACKG,EAAuBH,CAAU,KAIlC,QAAA,KAAK,4DAA4DJ,CAAK,EAAE,GACzE;AACT;"}
1
+ {"version":3,"file":"getContrastingTextColor.js","sources":["../../src/utils/getContrastingTextColor.ts"],"sourcesContent":["import { StashColors } from '../../types/colors';\n\n/**\n * @see: https://wunnle.com/dynamic-text-color-based-on-background\n */\n\nfunction getRGB(c) {\n return parseInt(c, 16) || c;\n}\n\nfunction getsRGB(c) {\n return getRGB(c) / 255 <= 0.03928 ? getRGB(c) / 255 / 12.92 : Math.pow((getRGB(c) / 255 + 0.055) / 1.055, 2.4);\n}\n\nfunction getLuminance(hexColor) {\n return (\n 0.2126 * getsRGB(hexColor.substr(1, 2)) +\n 0.7152 * getsRGB(hexColor.substr(3, 2)) +\n 0.0722 * getsRGB(hexColor.substr(-2))\n );\n}\n\nfunction getContrast(f, b) {\n const L1 = getLuminance(f);\n const L2 = getLuminance(b);\n return (Math.max(L1, L2) + 0.05) / (Math.min(L1, L2) + 0.05);\n}\n\nfunction getStashColorValueFromCssVar(color: string) {\n return getComputedStyle(document.documentElement).getPropertyValue(`--color-${color}`);\n}\n\nfunction getStashColor(color: string) {\n const stashColors = Object.values(StashColors) as string[];\n const exactMatch = stashColors.includes(color);\n\n if (exactMatch) {\n return getStashColorValueFromCssVar(color);\n }\n\n // check if a primary color group is provided, eg. 'blue' in 'blue-100'\n const partialMatch = stashColors.find((stashColor) => {\n return stashColor.split('-')[0] === color;\n });\n\n if (partialMatch) {\n return getStashColorValueFromCssVar(`${color}-500`);\n }\n\n return '';\n}\n\nfunction normalizeHexValue(hexValue: string) {\n if (hexValue.startsWith('#')) {\n return hexValue;\n }\n\n return `#${hexValue}`;\n}\n\nfunction getContrastingHexValue(colorHexValue: string) {\n const darkTextColor = '#27282A'; // ice-900\n const lightTextColor = '#FFFFFF'; // white\n\n const lightTextContrast = getContrast(colorHexValue, lightTextColor);\n const darkTextContrast = getContrast(colorHexValue, darkTextColor);\n\n return lightTextContrast > darkTextContrast ? lightTextColor : darkTextColor;\n}\n\nexport default function getContrastingTextColor(color: string) {\n const hexRegex = new RegExp('^#?(([A-Fa-f0-9]{3})|([A-Fa-f0-9]{6}))$');\n if (hexRegex.test(color)) {\n const normalizedHexValue = normalizeHexValue(color);\n return getContrastingHexValue(normalizedHexValue);\n }\n\n const stashColor = getStashColor(color);\n if (stashColor) {\n return getContrastingHexValue(stashColor);\n }\n\n // eslint-disable-next-line no-console\n console.warn(`getContrastingTextColor received an invalid color value: ${color}`);\n return '#27282A';\n}\n"],"names":["getRGB","c","getsRGB","getLuminance","hexColor","getContrast","f","b","L1","L2","getStashColorValueFromCssVar","color","getStashColor","stashColors","StashColors","stashColor","normalizeHexValue","hexValue","getContrastingHexValue","colorHexValue","darkTextColor","lightTextColor","lightTextContrast","darkTextContrast","getContrastingTextColor","normalizedHexValue"],"mappings":";AAMA,SAASA,EAAOC,GAAG;AACjB,SAAO,SAASA,GAAG,EAAE,KAAKA;AAC5B;AAEA,SAASC,EAAQD,GAAG;AAClB,SAAOD,EAAOC,CAAC,IAAI,OAAO,UAAUD,EAAOC,CAAC,IAAI,MAAM,QAAQ,KAAK,KAAKD,EAAOC,CAAC,IAAI,MAAM,SAAS,OAAO,GAAG;AAC/G;AAEA,SAASE,EAAaC,GAAU;AAC9B,SACE,SAASF,EAAQE,EAAS,OAAO,GAAG,CAAC,CAAC,IACtC,SAASF,EAAQE,EAAS,OAAO,GAAG,CAAC,CAAC,IACtC,SAASF,EAAQE,EAAS,OAAO,EAAE,CAAC;AAExC;AAEA,SAASC,EAAYC,GAAGC,GAAG;AACzB,QAAMC,IAAKL,EAAaG,CAAC,GACnBG,IAAKN,EAAaI,CAAC;AACzB,UAAQ,KAAK,IAAIC,GAAIC,CAAE,IAAI,SAAS,KAAK,IAAID,GAAIC,CAAE,IAAI;AACzD;AAEA,SAASC,EAA6BC,GAAe;AACnD,SAAO,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,WAAWA,CAAK,EAAE;AACvF;AAEA,SAASC,EAAcD,GAAe;AACpC,QAAME,IAAc,OAAO,OAAOC,CAAW;AAG7C,SAFmBD,EAAY,SAASF,CAAK,IAGpCD,EAA6BC,CAAK,IAItBE,EAAY,KAAK,CAACE,MAC9BA,EAAW,MAAM,GAAG,EAAE,CAAC,MAAMJ,CACrC,IAGQD,EAA6B,GAAGC,CAAK,MAAM,IAG7C;AACT;AAEA,SAASK,EAAkBC,GAAkB;AAC3C,SAAIA,EAAS,WAAW,GAAG,IAClBA,IAGF,IAAIA,CAAQ;AACrB;AAEA,SAASC,EAAuBC,GAAuB;AACrD,QAAMC,IAAgB,WAChBC,IAAiB,WAEjBC,IAAoBjB,EAAYc,GAAeE,CAAc,GAC7DE,IAAmBlB,EAAYc,GAAeC,CAAa;AAEjE,SAAOE,IAAoBC,IAAmBF,IAAiBD;AACjE;AAEA,SAAwBI,EAAwBb,GAAe;AAE7D,MADiB,IAAI,OAAO,yCAAyC,EACxD,KAAKA,CAAK,GAAG;AACxB,UAAMc,IAAqBT,EAAkBL,CAAK;AAClD,WAAOO,EAAuBO,CAAkB;AAAA,EAClD;AAEA,QAAMV,IAAaH,EAAcD,CAAK;AACtC,SAAII,IACKG,EAAuBH,CAAU,KAI1C,QAAQ,KAAK,4DAA4DJ,CAAK,EAAE,GACzE;AACT;"}