@leaflink/stash 42.5.0 → 42.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -3
- package/dist/ActionsDropdown.js +15 -20
- package/dist/ActionsDropdown.js.map +1 -1
- package/dist/AddressSelect.js +34 -45
- package/dist/AddressSelect.js.map +1 -1
- package/dist/Alert.js +11 -13
- package/dist/Alert.js.map +1 -1
- package/dist/AppNavigationItem.js +4 -6
- package/dist/AppNavigationItem.js.map +1 -1
- package/dist/AppTopbar.js +13 -15
- package/dist/AppTopbar.js.map +1 -1
- package/dist/ButtonGroup.js +12 -14
- package/dist/ButtonGroup.js.map +1 -1
- package/dist/CardMedia.js +9 -11
- package/dist/CardMedia.js.map +1 -1
- package/dist/Carousel.js +41 -44
- package/dist/Carousel.js.map +1 -1
- package/dist/Checkbox.js +9 -11
- package/dist/Checkbox.js.map +1 -1
- package/dist/ChevronToggle.js +2 -4
- package/dist/ChevronToggle.js.map +1 -1
- package/dist/Chip.js +4 -6
- package/dist/Chip.js.map +1 -1
- package/dist/ContextSwitcher.js +12 -17
- package/dist/ContextSwitcher.js.map +1 -1
- package/dist/Copy.js +19 -24
- package/dist/Copy.js.map +1 -1
- package/dist/CurrencyInput.js +8 -13
- package/dist/CurrencyInput.js.map +1 -1
- package/dist/DataView.js +48 -59
- package/dist/DataView.js.map +1 -1
- package/dist/DataViewFilters.js +87 -97
- package/dist/DataViewFilters.js.map +1 -1
- package/dist/DataViewSortButton.js +14 -18
- package/dist/DataViewSortButton.js.map +1 -1
- package/dist/DataViewToolbar.js +12 -14
- package/dist/DataViewToolbar.js.map +1 -1
- package/dist/DatePicker.js +8 -18
- package/dist/DatePicker.js.map +1 -1
- package/dist/Dialog.js +6 -9
- package/dist/Dialog.js.map +1 -1
- package/dist/Dropdown.js +15 -20
- package/dist/Dropdown.js.map +1 -1
- package/dist/EmptyState.js +10 -13
- package/dist/EmptyState.js.map +1 -1
- package/dist/Field.js +3 -6
- package/dist/Field.js.map +1 -1
- package/dist/{Field.vue_vue_type_script_setup_true_lang-c864abd3.js → Field.vue_vue_type_script_setup_true_lang-475832fe.js} +2 -2
- package/dist/{Field.vue_vue_type_script_setup_true_lang-c864abd3.js.map → Field.vue_vue_type_script_setup_true_lang-475832fe.js.map} +1 -1
- package/dist/FileUpload.js +27 -30
- package/dist/FileUpload.js.map +1 -1
- package/dist/FilterChip.js +10 -13
- package/dist/FilterChip.js.map +1 -1
- package/dist/FilterDrawerItem.js +5 -8
- package/dist/FilterDrawerItem.js.map +1 -1
- package/dist/FilterDropdown.js +73 -88
- package/dist/FilterDropdown.js.map +1 -1
- package/dist/FilterSelect.js +15 -18
- package/dist/FilterSelect.js.map +1 -1
- package/dist/Filters.js +67 -78
- package/dist/Filters.js.map +1 -1
- package/dist/HttpError.js +4 -7
- package/dist/HttpError.js.map +1 -1
- package/dist/Icon.js +236 -14
- package/dist/Icon.js.map +1 -1
- package/dist/Icon.vue.d.ts +2 -2
- package/dist/Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js +11 -0
- package/dist/Icon.vue_used_vue_type_style_index_0_lang.module-eb359559.js.map +1 -0
- package/dist/IconLabel.js +4 -6
- package/dist/IconLabel.js.map +1 -1
- package/dist/Illustration.js +6 -8
- package/dist/Illustration.js.map +1 -1
- package/dist/Image.js +39 -49
- package/dist/Image.js.map +1 -1
- package/dist/InlineEdit.js +10 -12
- package/dist/InlineEdit.js.map +1 -1
- package/dist/Input.js +50 -55
- package/dist/Input.js.map +1 -1
- package/dist/InputOptions.js +20 -29
- package/dist/InputOptions.js.map +1 -1
- package/dist/Label.js +1 -4
- package/dist/Label.js.map +1 -1
- package/dist/LicenseChip.js +7 -9
- package/dist/LicenseChip.js.map +1 -1
- package/dist/ListItem.js +11 -13
- package/dist/ListItem.js.map +1 -1
- package/dist/ListView.js +47 -58
- package/dist/ListView.js.map +1 -1
- package/dist/Metric.js +6 -8
- package/dist/Metric.js.map +1 -1
- package/dist/Modal.js +16 -19
- package/dist/Modal.js.map +1 -1
- package/dist/Modals.js +16 -26
- package/dist/Modals.js.map +1 -1
- package/dist/ModalsPlugin.js +12 -22
- package/dist/ModalsPlugin.js.map +1 -1
- package/dist/ObfuscateText.js +7 -9
- package/dist/ObfuscateText.js.map +1 -1
- package/dist/PageNavigation.js +25 -29
- package/dist/PageNavigation.js.map +1 -1
- package/dist/Paginate.js +29 -31
- package/dist/Paginate.js.map +1 -1
- package/dist/QuickAction.js +13 -15
- package/dist/QuickAction.js.map +1 -1
- package/dist/RadioGroup.js +86 -89
- package/dist/RadioGroup.js.map +1 -1
- package/dist/SearchBar.js +18 -20
- package/dist/SearchBar.js.map +1 -1
- package/dist/Select.js +13 -23
- package/dist/Select.js.map +1 -1
- package/dist/SelectStatus.js +26 -36
- package/dist/SelectStatus.js.map +1 -1
- package/dist/Step.js +19 -21
- package/dist/Step.js.map +1 -1
- package/dist/Switch.js +8 -10
- package/dist/Switch.js.map +1 -1
- package/dist/Tab.js +25 -30
- package/dist/Tab.js.map +1 -1
- package/dist/Table.js +19 -21
- package/dist/Table.js.map +1 -1
- package/dist/TableCell.js +21 -22
- package/dist/TableCell.js.map +1 -1
- package/dist/TableHeaderCell.js +4 -4
- package/dist/TableHeaderRow.js +7 -9
- package/dist/TableHeaderRow.js.map +1 -1
- package/dist/TableRow.js +22 -24
- package/dist/TableRow.js.map +1 -1
- package/dist/Tabs.js +11 -16
- package/dist/Tabs.js.map +1 -1
- package/dist/{Tabs.vue_vue_type_script_setup_true_lang-ba383fda.js → Tabs.vue_vue_type_script_setup_true_lang-aca4f8b8.js} +3 -3
- package/dist/{Tabs.vue_vue_type_script_setup_true_lang-ba383fda.js.map → Tabs.vue_vue_type_script_setup_true_lang-aca4f8b8.js.map} +1 -1
- package/dist/Textarea.js +10 -13
- package/dist/Textarea.js.map +1 -1
- package/dist/Toast.js +8 -10
- package/dist/Toast.js.map +1 -1
- package/dist/Toasts.js +14 -25
- package/dist/Toasts.js.map +1 -1
- package/dist/ToastsPlugin.js +14 -25
- package/dist/ToastsPlugin.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/index.js +53 -62
- package/dist/index.js.map +1 -1
- package/dist/locale.js +12 -15
- package/dist/locale.js.map +1 -1
- package/dist/{searchFuzzy-13c124f8.js → searchFuzzy-74a7de1c.js} +2 -2
- package/dist/{searchFuzzy-13c124f8.js.map → searchFuzzy-74a7de1c.js.map} +1 -1
- package/dist/storage.js +6 -11
- package/dist/storage.js.map +1 -1
- package/dist/tooltip.js +21 -26
- package/dist/tooltip.js.map +1 -1
- package/dist/useGoogleMaps.js +91 -226
- package/dist/useGoogleMaps.js.map +1 -1
- package/dist/useModals.js +21 -31
- package/dist/useModals.js.map +1 -1
- package/dist/useSearch.js +17 -22
- package/dist/useSearch.js.map +1 -1
- package/dist/useToasts.js +25 -36
- package/dist/useToasts.js.map +1 -1
- package/dist/useValidation.js +79 -108
- package/dist/useValidation.js.map +1 -1
- package/dist/utils/calculateElementOverflow.js +9 -14
- package/dist/utils/calculateElementOverflow.js.map +1 -1
- package/dist/utils/createQueryString.js +9 -15
- package/dist/utils/createQueryString.js.map +1 -1
- package/dist/utils/helpers.js +46 -59
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/i18n.js +17 -20
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/searchFuzzy.js +7 -12
- package/dist/utils/searchFuzzy.js.map +1 -1
- package/dist/utils/storage.js +10 -15
- package/dist/utils/storage.js.map +1 -1
- package/dist/viewable.js +26 -34
- package/dist/viewable.js.map +1 -1
- package/package.json +2 -4
- package/dist/Icon.vue_used_vue_type_style_index_0_lang.module-d2507af3.js +0 -243
- package/dist/Icon.vue_used_vue_type_style_index_0_lang.module-d2507af3.js.map +0 -1
- package/dist/_MapCache-65811284.js +0 -188
- package/dist/_MapCache-65811284.js.map +0 -1
- package/dist/_Uint8Array-06e4d083.js +0 -66
- package/dist/_Uint8Array-06e4d083.js.map +0 -1
- package/dist/_baseAssignValue-dd1499b4.js +0 -22
- package/dist/_baseAssignValue-dd1499b4.js.map +0 -1
- package/dist/_baseIsEqual-d594c87f.js +0 -171
- package/dist/_baseIsEqual-d594c87f.js.map +0 -1
- package/dist/_createCompounder-ae01a723.js +0 -245
- package/dist/_createCompounder-ae01a723.js.map +0 -1
- package/dist/_getAllKeys-5e735d41.js +0 -44
- package/dist/_getAllKeys-5e735d41.js.map +0 -1
- package/dist/_getPrototype-3e6fccd6.js +0 -7
- package/dist/_getPrototype-3e6fccd6.js.map +0 -1
- package/dist/_getTag-4db47fa6.js +0 -47
- package/dist/_getTag-4db47fa6.js.map +0 -1
- package/dist/_initCloneObject-161353b9.js +0 -88
- package/dist/_initCloneObject-161353b9.js.map +0 -1
- package/dist/_overArg-6d920d99.js +0 -9
- package/dist/_overArg-6d920d99.js.map +0 -1
- package/dist/capitalize-667d9f60.js +0 -42
- package/dist/capitalize-667d9f60.js.map +0 -1
- package/dist/cloneDeep-5bc375b0.js +0 -146
- package/dist/cloneDeep-5bc375b0.js.map +0 -1
- package/dist/debounce-6aca1ca9.js +0 -86
- package/dist/debounce-6aca1ca9.js.map +0 -1
- package/dist/get-27d90892.js +0 -66
- package/dist/get-27d90892.js.map +0 -1
- package/dist/identity-452d03fd.js +0 -20
- package/dist/identity-452d03fd.js.map +0 -1
- package/dist/isArrayLike-09233e52.js +0 -61
- package/dist/isArrayLike-09233e52.js.map +0 -1
- package/dist/isEmpty-2fbad344.js +0 -23
- package/dist/isEmpty-2fbad344.js.map +0 -1
- package/dist/isEqual-fca467fb.js +0 -8
- package/dist/isEqual-fca467fb.js.map +0 -1
- package/dist/isObjectLike-54341556.js +0 -39
- package/dist/isObjectLike-54341556.js.map +0 -1
- package/dist/isPlainObject-55c7f916.js +0 -16
- package/dist/isPlainObject-55c7f916.js.map +0 -1
- package/dist/merge-b14fad9d.js +0 -124
- package/dist/merge-b14fad9d.js.map +0 -1
- package/dist/toString-7d5bf363.js +0 -29
- package/dist/toString-7d5bf363.js.map +0 -1
- package/dist/uniqueId-847efe53.js +0 -10
- package/dist/uniqueId-847efe53.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useValidation.js","sources":["../node_modules/flat/index.js","../src/composables/useValidation/ruleFactories/email.ts","../src/composables/useValidation/ruleFactories/maxValue.ts","../src/composables/useValidation/ruleFactories/minValue.ts","../src/composables/useValidation/ruleFactories/positiveNumber.ts","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/_createRound.js","../node_modules/lodash-es/round.js","../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}\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}\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 { 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 toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import root from './_root.js';\nimport toInteger from './toInteger.js';\nimport toNumber from './toNumber.js';\nimport toString from './toString.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite,\n nativeMin = Math.min;\n\n/**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\nfunction createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n}\n\nexport default createRound;\n","import createRound from './_createRound.js';\n\n/**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\nvar round = createRound('round');\n\nexport default round;\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, ComputedRef, 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((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 }, {} as Record<string, ValidationField>);\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: ComputedRef<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 maxValue } from './ruleFactories/maxValue';\nexport { default as minValue } from './ruleFactories/minValue';\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","maxValue","max","toValue","minValue","min","positiveNumber","INFINITY","MAX_INTEGER","toFinite","toNumber","sign","toInteger","result","remainder","nativeIsFinite","root","nativeMin","createRound","methodName","func","number","precision","pair","toString","round","round$1","price","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","setTouched","setInitialValue","readonly","_b"],"mappings":"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","x_google_ignoreList":[0,5,6,7,8]}
|
|
1
|
+
{"version":3,"file":"useValidation.js","sources":["../node_modules/flat/index.js","../src/composables/useValidation/ruleFactories/email.ts","../src/composables/useValidation/ruleFactories/maxValue.ts","../src/composables/useValidation/ruleFactories/minValue.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}\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}\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 { 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, ComputedRef, 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((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 }, {} as Record<string, ValidationField>);\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: ComputedRef<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 maxValue } from './ruleFactories/maxValue';\nexport { default as minValue } from './ruleFactories/minValue';\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","maxValue","max","toValue","minValue","min","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,16 +1,11 @@
|
|
|
1
|
-
import { CSS_VARS as
|
|
2
|
-
import { getCssVar as
|
|
3
|
-
import "
|
|
4
|
-
import "
|
|
5
|
-
import "
|
|
6
|
-
import "
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
import "../isPlainObject-55c7f916.js";
|
|
10
|
-
import "../_getPrototype-3e6fccd6.js";
|
|
11
|
-
import "../_overArg-6d920d99.js";
|
|
12
|
-
function g(o) {
|
|
13
|
-
const r = isNaN(parseFloat(e(i.GRID_GUTTER))) ? 0 : parseFloat(e(i.GRID_GUTTER)), t = o == null ? void 0 : o.getBoundingClientRect();
|
|
1
|
+
import { CSS_VARS as o } from "../constants.js";
|
|
2
|
+
import { getCssVar as i } from "./helpers.js";
|
|
3
|
+
import "lodash-es/camelCase";
|
|
4
|
+
import "lodash-es/get";
|
|
5
|
+
import "lodash-es/isFinite";
|
|
6
|
+
import "lodash-es/isPlainObject";
|
|
7
|
+
function m(e) {
|
|
8
|
+
const r = isNaN(parseFloat(i(o.GRID_GUTTER))) ? 0 : parseFloat(i(o.GRID_GUTTER)), t = e == null ? void 0 : e.getBoundingClientRect();
|
|
14
9
|
if (t)
|
|
15
10
|
return Math.round(t.left) < r ? {
|
|
16
11
|
value: r - Math.round(t.left),
|
|
@@ -24,6 +19,6 @@ function g(o) {
|
|
|
24
19
|
};
|
|
25
20
|
}
|
|
26
21
|
export {
|
|
27
|
-
|
|
22
|
+
m as default
|
|
28
23
|
};
|
|
29
24
|
//# 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":"
|
|
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,19 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import o from "lodash-es/snakeCase";
|
|
2
2
|
import { i as n } from "../isDefined-2ce6cde4.js";
|
|
3
|
-
import "../toString-7d5bf363.js";
|
|
4
|
-
import "../isObjectLike-54341556.js";
|
|
5
3
|
import "vue";
|
|
6
|
-
|
|
7
|
-
return t + (e ? "_" : "") + i.toLowerCase();
|
|
8
|
-
});
|
|
9
|
-
const c = p;
|
|
10
|
-
function S(t, { shouldInclude: i = n } = {}) {
|
|
4
|
+
function m(i, { shouldInclude: a = n } = {}) {
|
|
11
5
|
const e = new URLSearchParams({});
|
|
12
|
-
return Object.entries(
|
|
13
|
-
if (
|
|
6
|
+
return Object.entries(i).forEach(([t, r]) => {
|
|
7
|
+
if (a(r, t))
|
|
14
8
|
if (Array.isArray(r))
|
|
15
|
-
r.forEach((
|
|
16
|
-
e.append(
|
|
9
|
+
r.forEach((s) => {
|
|
10
|
+
e.append(t, String(s));
|
|
17
11
|
});
|
|
18
12
|
else {
|
|
19
13
|
if (typeof r == "object" && r !== null)
|
|
@@ -24,12 +18,12 @@ Received value: "${r}".
|
|
|
24
18
|
|
|
25
19
|
Values must be Primitive Values or arrays of Primitive Values. See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#primitive_values`
|
|
26
20
|
);
|
|
27
|
-
e.append(
|
|
21
|
+
e.append(o(t), String(r));
|
|
28
22
|
}
|
|
29
23
|
}), e.toString();
|
|
30
24
|
}
|
|
31
25
|
export {
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
m as createQueryString,
|
|
27
|
+
m as default
|
|
34
28
|
};
|
|
35
29
|
//# sourceMappingURL=createQueryString.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createQueryString.js","sources":["../../
|
|
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,CAAA,CAAE;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,UAAA;AAItE,QAAAF,EAAa,OAAOI,EAAUH,CAAI,GAAG,OAAOC,CAAK,CAAC;AAAA,MACpD;AAAA,EAAA,CACD,GAEMF,EAAa;AACtB;"}
|
package/dist/utils/helpers.js
CHANGED
|
@@ -1,40 +1,27 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
import "../_getPrototype-3e6fccd6.js";
|
|
10
|
-
import "../_overArg-6d920d99.js";
|
|
11
|
-
var O = d(function(t, e, r) {
|
|
12
|
-
return e = e.toLowerCase(), t + (r ? C(e) : e);
|
|
13
|
-
});
|
|
14
|
-
const h = O;
|
|
15
|
-
var E = g.isFinite;
|
|
16
|
-
function U(t) {
|
|
17
|
-
return typeof t == "number" && E(t);
|
|
18
|
-
}
|
|
19
|
-
const A = "BULK", a = ".mount-point-container";
|
|
20
|
-
function z(t, e) {
|
|
21
|
-
return Object.keys(e).length ? t.filter((r) => {
|
|
1
|
+
import d from "lodash-es/camelCase";
|
|
2
|
+
import a from "lodash-es/get";
|
|
3
|
+
import g from "lodash-es/isFinite";
|
|
4
|
+
import C from "lodash-es/isPlainObject";
|
|
5
|
+
import { INBOUND_LEADS as b, SELLER_STATUSES as y, ORDER as S, LICENSE_COLORS as N } from "../constants.js";
|
|
6
|
+
const L = "BULK", f = ".mount-point-container";
|
|
7
|
+
function k(r, e) {
|
|
8
|
+
return Object.keys(e).length ? r.filter((t) => {
|
|
22
9
|
for (const c in e) {
|
|
23
10
|
const s = e[c], l = s.filterBy;
|
|
24
|
-
let i =
|
|
25
|
-
if (
|
|
26
|
-
if (!s.customFilter(l, i,
|
|
11
|
+
let i = a(t, c.split("."));
|
|
12
|
+
if (C(i) && (i = t[c].id), "customFilter" in s) {
|
|
13
|
+
if (!s.customFilter(l, i, t))
|
|
27
14
|
return !1;
|
|
28
15
|
} else if (!Array.isArray(i) && !~l.indexOf(i))
|
|
29
16
|
return !1;
|
|
30
17
|
}
|
|
31
18
|
return !0;
|
|
32
|
-
}) :
|
|
19
|
+
}) : r;
|
|
33
20
|
}
|
|
34
|
-
function
|
|
35
|
-
const { sortBy:
|
|
36
|
-
return !
|
|
37
|
-
let o =
|
|
21
|
+
function B(r, e) {
|
|
22
|
+
const { sortBy: t, sortDesc: c, customSorter: s, locale: l = "en" } = e, i = r.length && typeof r[0] == "object";
|
|
23
|
+
return !t && i ? r : [...r].sort((m, p) => {
|
|
24
|
+
let o = a(m, t) || m, n = a(p, t) || p;
|
|
38
25
|
if (c && ([o, n] = [n, o]), s)
|
|
39
26
|
return s(o, n);
|
|
40
27
|
if ([o, n] = [o, n].map((u) => (u || "").toString().toLocaleLowerCase()), o !== n) {
|
|
@@ -45,58 +32,58 @@ function K(t, e) {
|
|
|
45
32
|
return 0;
|
|
46
33
|
});
|
|
47
34
|
}
|
|
48
|
-
function
|
|
49
|
-
return
|
|
35
|
+
function D(r) {
|
|
36
|
+
return g(r) && (r = r.toString()), !r || typeof r != "string" ? "" : r.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
|
|
50
37
|
}
|
|
51
|
-
function
|
|
52
|
-
return
|
|
38
|
+
function I(r) {
|
|
39
|
+
return r.split("").reduce((e, t) => (e = (e << 5) - e + t.charCodeAt(0), e & e), 0);
|
|
53
40
|
}
|
|
54
|
-
function
|
|
55
|
-
const
|
|
56
|
-
if (!
|
|
41
|
+
function R() {
|
|
42
|
+
const r = document.querySelector(f);
|
|
43
|
+
if (!r) {
|
|
57
44
|
const e = document.createElement("div");
|
|
58
|
-
return e.className =
|
|
45
|
+
return e.className = f.slice(1, f.length), document.body.appendChild(e);
|
|
59
46
|
}
|
|
60
|
-
return
|
|
47
|
+
return r;
|
|
61
48
|
}
|
|
62
|
-
function
|
|
63
|
-
let e =
|
|
49
|
+
function _(r) {
|
|
50
|
+
let e = r;
|
|
64
51
|
return e.substring(0, 2) !== "--" && (e = `--${e}`), getComputedStyle(document.documentElement).getPropertyValue(e);
|
|
65
52
|
}
|
|
66
|
-
function
|
|
67
|
-
const e =
|
|
68
|
-
return e ===
|
|
53
|
+
function O(r = "") {
|
|
54
|
+
const e = r.toUpperCase();
|
|
55
|
+
return e === L ? e : e.slice(0, 3);
|
|
69
56
|
}
|
|
70
|
-
function
|
|
71
|
-
let
|
|
57
|
+
function j(r, e) {
|
|
58
|
+
let t;
|
|
72
59
|
try {
|
|
73
|
-
switch (
|
|
60
|
+
switch (r) {
|
|
74
61
|
case "license":
|
|
75
|
-
e =
|
|
62
|
+
e = O(e), t = N[e];
|
|
76
63
|
break;
|
|
77
64
|
case "order":
|
|
78
|
-
|
|
65
|
+
t = "ll-bg-" + S[e.toUpperCase()].color;
|
|
79
66
|
break;
|
|
80
67
|
case "certified-seller":
|
|
81
|
-
|
|
68
|
+
t = y[d(e)].color;
|
|
82
69
|
break;
|
|
83
70
|
case "inbound-leads":
|
|
84
|
-
|
|
71
|
+
t = b[e.toUpperCase()].color;
|
|
85
72
|
break;
|
|
86
73
|
}
|
|
87
|
-
return
|
|
74
|
+
return t || "ll-bg-ice";
|
|
88
75
|
} catch {
|
|
89
76
|
return "ll-bg-ice";
|
|
90
77
|
}
|
|
91
78
|
}
|
|
92
79
|
export {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
80
|
+
k as filterItems,
|
|
81
|
+
O as formatLicenseTypeText,
|
|
82
|
+
j as generateColorClass,
|
|
83
|
+
_ as getCssVar,
|
|
84
|
+
R as getMountPoint,
|
|
85
|
+
I as hashCode,
|
|
86
|
+
D as normalizeText,
|
|
87
|
+
B as sortItems
|
|
101
88
|
};
|
|
102
89
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../node_modules/lodash-es/camelCase.js","../../node_modules/lodash-es/isFinite.js","../../src/utils/helpers.ts"],"sourcesContent":["import capitalize from './capitalize.js';\nimport createCompounder from './_createCompounder.js';\n\n/**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\nvar camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n});\n\nexport default camelCase;\n","import root from './_root.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite;\n\n/**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\nfunction isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n}\n\nexport default isFinite;\n","import camelCase from 'lodash-es/camelCase';\nimport get from 'lodash-es/get';\nimport isFinite from 'lodash-es/isFinite';\nimport isPlainObject from 'lodash-es/isPlainObject';\n\nimport { INBOUND_LEADS, LICENSE_COLORS, ORDER, SELLER_STATUSES } from '../constants';\n\nconst BULK = 'BULK';\nconst MOUNT_POINT_CLASS = '.mount-point-container';\n\n/**\n * Filters the list of `items` based on options selected in the `filters` object\n * @param {array} items A list of items to filter\n * @param {IFilter} options an options object for the filtering configuration\n */\nexport function filterItems(items, filters) {\n if (!Object.keys(filters).length) {\n return items;\n }\n\n return items.filter((item) => {\n for (const key in filters) {\n // eg. `brand`, `category`, `status`...\n const filter = filters[key]; // IFilter;\n const filterValues = filter.filterBy; // eg. ['1906', 'LuvBuds'], ['vape', 'pen', 'flower']\n let itemValue = get(item, key.split('.')); // eg `LuvBuds`, 'vape'\n\n // TODO take care of this upstream. ie write custom filter function if itemValue is an object\n // ie. if (typeof itemValue !== 'string' || typeof itemValue !== 'number' )\n if (isPlainObject(itemValue)) {\n itemValue = item[key].id;\n }\n\n if ('customFilter' in filter) {\n // custom function should return `false` when the filter logic does not match\n if (!filter.customFilter(filterValues, itemValue, item)) {\n return false;\n }\n } else {\n if (!Array.isArray(itemValue) && !~filterValues.indexOf(itemValue)) {\n return false;\n }\n }\n }\n\n return true;\n });\n}\n\n/**\n * Sorts an array of items\n * @param {Array} items the list of things to sort\n * @param {ISort} options an options object for the sorting configuration\n * sortBy: the object key to sort on\n * sortDesc: whether to sort descending or not\n * customSorter: a custom sorting function\n *\n * https://github.com/vuetifyjs/vuetify/blob/master/packages/vuetify/src/util/helpers.ts#L381\n */\nexport function sortItems(items, options) {\n const { sortBy, sortDesc, customSorter, locale = 'en' } = options;\n const isObject = items.length && typeof items[0] === 'object';\n\n if (!sortBy && isObject) {\n return items;\n }\n\n return [...items].sort((a, b) => {\n let sortA = get(a, sortBy) || a;\n let sortB = get(b, sortBy) || b;\n\n if (sortDesc) {\n [sortA, sortB] = [sortB, sortA];\n }\n\n if (customSorter) {\n return customSorter(sortA, sortB);\n }\n\n [sortA, sortB] = [sortA, sortB].map((s) => (s || '').toString().toLocaleLowerCase());\n\n if (sortA !== sortB) {\n const sortResult =\n !isNaN(sortA) && !isNaN(sortB) ? Number(sortA) - Number(sortB) : sortA.localeCompare(sortB, locale);\n\n if (sortResult) {\n return sortResult;\n }\n }\n\n return 0;\n });\n}\n\n/**\n * Removes all accents/diacritics and converts to lower case\n * @param {string} text to normalize\n */\nexport function normalizeText(text) {\n if (isFinite(text)) {\n text = text.toString();\n }\n\n if (!text || typeof text !== 'string') {\n return '';\n }\n\n /**\n * NFD splits the canonical form and the regex removed only accent characters\n * see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize for more detail.\n */\n return text\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '');\n}\n\n/**\n * Generates a hash code from a string\n * @param {string} s The string to generate a hash from\n * @see https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript/52171480\n */\nexport function hashCode(s) {\n return s.split('').reduce((a, b) => {\n a = (a << 5) - a + b.charCodeAt(0);\n return a & a;\n }, 0);\n}\n\n/**\n * Returns the mount point for elements that will reattach themselves, or creates one if not available\n */\nexport function getMountPoint() {\n const el = document.querySelector(MOUNT_POINT_CLASS);\n\n if (!el) {\n const div = document.createElement('div');\n\n div.className = MOUNT_POINT_CLASS.slice(1, MOUNT_POINT_CLASS.length);\n return document.body.appendChild(div);\n }\n\n return el;\n}\n\n/**\n * Retrieves the value of a css variable\n *\n * @param {string} name name of the css var, with or without `--`\n * @return {string} value of the css var\n */\nexport function getCssVar(name) {\n let variable = name;\n\n if (variable.substring(0, 2) !== '--') {\n variable = `--${variable}`;\n }\n\n return getComputedStyle(document.documentElement).getPropertyValue(variable);\n}\n\n/**\n * Format the license type text to display\n * @param {string} licenseType the first three characters of the licenseType\n */\nexport function formatLicenseTypeText(licenseType = '') {\n const type = licenseType.toUpperCase();\n\n return type === BULK ? type : type.slice(0, 3);\n}\n\nexport function generateColorClass(type, value) {\n let color;\n\n try {\n switch (type) {\n case 'license':\n value = formatLicenseTypeText(value);\n color = LICENSE_COLORS[value];\n break;\n case 'order':\n color = 'll-bg-' + ORDER[value.toUpperCase()].color;\n break;\n case 'certified-seller':\n color = SELLER_STATUSES[camelCase(value)].color;\n break;\n case 'inbound-leads':\n color = INBOUND_LEADS[value.toUpperCase()].color;\n break;\n }\n\n return color || 'll-bg-ice';\n } catch (e) {\n return 'll-bg-ice';\n }\n}\n"],"names":["camelCase","createCompounder","result","word","index","capitalize","camelCase$1","nativeIsFinite","root","isFinite","value","BULK","MOUNT_POINT_CLASS","filterItems","items","filters","item","key","filter","filterValues","itemValue","get","isPlainObject","sortItems","options","sortBy","sortDesc","customSorter","locale","isObject","a","b","sortA","sortB","s","sortResult","normalizeText","text","hashCode","getMountPoint","el","div","getCssVar","name","variable","formatLicenseTypeText","licenseType","type","generateColorClass","color","LICENSE_COLORS","ORDER","SELLER_STATUSES","INBOUND_LEADS"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../src/utils/helpers.ts"],"sourcesContent":["import camelCase from 'lodash-es/camelCase';\nimport get from 'lodash-es/get';\nimport isFinite from 'lodash-es/isFinite';\nimport isPlainObject from 'lodash-es/isPlainObject';\n\nimport { INBOUND_LEADS, LICENSE_COLORS, ORDER, SELLER_STATUSES } from '../constants';\n\nconst BULK = 'BULK';\nconst MOUNT_POINT_CLASS = '.mount-point-container';\n\n/**\n * Filters the list of `items` based on options selected in the `filters` object\n * @param {array} items A list of items to filter\n * @param {IFilter} options an options object for the filtering configuration\n */\nexport function filterItems(items, filters) {\n if (!Object.keys(filters).length) {\n return items;\n }\n\n return items.filter((item) => {\n for (const key in filters) {\n // eg. `brand`, `category`, `status`...\n const filter = filters[key]; // IFilter;\n const filterValues = filter.filterBy; // eg. ['1906', 'LuvBuds'], ['vape', 'pen', 'flower']\n let itemValue = get(item, key.split('.')); // eg `LuvBuds`, 'vape'\n\n // TODO take care of this upstream. ie write custom filter function if itemValue is an object\n // ie. if (typeof itemValue !== 'string' || typeof itemValue !== 'number' )\n if (isPlainObject(itemValue)) {\n itemValue = item[key].id;\n }\n\n if ('customFilter' in filter) {\n // custom function should return `false` when the filter logic does not match\n if (!filter.customFilter(filterValues, itemValue, item)) {\n return false;\n }\n } else {\n if (!Array.isArray(itemValue) && !~filterValues.indexOf(itemValue)) {\n return false;\n }\n }\n }\n\n return true;\n });\n}\n\n/**\n * Sorts an array of items\n * @param {Array} items the list of things to sort\n * @param {ISort} options an options object for the sorting configuration\n * sortBy: the object key to sort on\n * sortDesc: whether to sort descending or not\n * customSorter: a custom sorting function\n *\n * https://github.com/vuetifyjs/vuetify/blob/master/packages/vuetify/src/util/helpers.ts#L381\n */\nexport function sortItems(items, options) {\n const { sortBy, sortDesc, customSorter, locale = 'en' } = options;\n const isObject = items.length && typeof items[0] === 'object';\n\n if (!sortBy && isObject) {\n return items;\n }\n\n return [...items].sort((a, b) => {\n let sortA = get(a, sortBy) || a;\n let sortB = get(b, sortBy) || b;\n\n if (sortDesc) {\n [sortA, sortB] = [sortB, sortA];\n }\n\n if (customSorter) {\n return customSorter(sortA, sortB);\n }\n\n [sortA, sortB] = [sortA, sortB].map((s) => (s || '').toString().toLocaleLowerCase());\n\n if (sortA !== sortB) {\n const sortResult =\n !isNaN(sortA) && !isNaN(sortB) ? Number(sortA) - Number(sortB) : sortA.localeCompare(sortB, locale);\n\n if (sortResult) {\n return sortResult;\n }\n }\n\n return 0;\n });\n}\n\n/**\n * Removes all accents/diacritics and converts to lower case\n * @param {string} text to normalize\n */\nexport function normalizeText(text) {\n if (isFinite(text)) {\n text = text.toString();\n }\n\n if (!text || typeof text !== 'string') {\n return '';\n }\n\n /**\n * NFD splits the canonical form and the regex removed only accent characters\n * see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize for more detail.\n */\n return text\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '');\n}\n\n/**\n * Generates a hash code from a string\n * @param {string} s The string to generate a hash from\n * @see https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript/52171480\n */\nexport function hashCode(s) {\n return s.split('').reduce((a, b) => {\n a = (a << 5) - a + b.charCodeAt(0);\n return a & a;\n }, 0);\n}\n\n/**\n * Returns the mount point for elements that will reattach themselves, or creates one if not available\n */\nexport function getMountPoint() {\n const el = document.querySelector(MOUNT_POINT_CLASS);\n\n if (!el) {\n const div = document.createElement('div');\n\n div.className = MOUNT_POINT_CLASS.slice(1, MOUNT_POINT_CLASS.length);\n return document.body.appendChild(div);\n }\n\n return el;\n}\n\n/**\n * Retrieves the value of a css variable\n *\n * @param {string} name name of the css var, with or without `--`\n * @return {string} value of the css var\n */\nexport function getCssVar(name) {\n let variable = name;\n\n if (variable.substring(0, 2) !== '--') {\n variable = `--${variable}`;\n }\n\n return getComputedStyle(document.documentElement).getPropertyValue(variable);\n}\n\n/**\n * Format the license type text to display\n * @param {string} licenseType the first three characters of the licenseType\n */\nexport function formatLicenseTypeText(licenseType = '') {\n const type = licenseType.toUpperCase();\n\n return type === BULK ? type : type.slice(0, 3);\n}\n\nexport function generateColorClass(type, value) {\n let color;\n\n try {\n switch (type) {\n case 'license':\n value = formatLicenseTypeText(value);\n color = LICENSE_COLORS[value];\n break;\n case 'order':\n color = 'll-bg-' + ORDER[value.toUpperCase()].color;\n break;\n case 'certified-seller':\n color = SELLER_STATUSES[camelCase(value)].color;\n break;\n case 'inbound-leads':\n color = INBOUND_LEADS[value.toUpperCase()].color;\n break;\n }\n\n return color || 'll-bg-ice';\n } catch (e) {\n return 'll-bg-ice';\n }\n}\n"],"names":["BULK","MOUNT_POINT_CLASS","filterItems","items","filters","item","key","filter","filterValues","itemValue","get","isPlainObject","sortItems","options","sortBy","sortDesc","customSorter","locale","isObject","a","b","sortA","sortB","s","sortResult","normalizeText","text","isFinite","hashCode","getMountPoint","el","div","getCssVar","name","variable","formatLicenseTypeText","licenseType","type","generateColorClass","value","color","LICENSE_COLORS","ORDER","SELLER_STATUSES","camelCase","INBOUND_LEADS"],"mappings":"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"}
|
package/dist/utils/i18n.js
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
import { CURRENCY_SYMBOL_MAP as n } from "../constants.js";
|
|
2
2
|
import { locale as e } from "../locale.js";
|
|
3
|
-
import "
|
|
4
|
-
import "../isObjectLike-54341556.js";
|
|
5
|
-
import "../toString-7d5bf363.js";
|
|
6
|
-
import "../_MapCache-65811284.js";
|
|
3
|
+
import "lodash-es/get";
|
|
7
4
|
const m = (r) => {
|
|
8
5
|
if (typeof r != "string")
|
|
9
6
|
return;
|
|
10
7
|
const t = r.toUpperCase();
|
|
11
8
|
if (Object.prototype.hasOwnProperty.call(n, t))
|
|
12
9
|
return n[t];
|
|
13
|
-
},
|
|
10
|
+
}, g = a(e), o = m("USD"), D = {
|
|
14
11
|
default: "USD",
|
|
15
12
|
position: u(),
|
|
16
13
|
symbol: o
|
|
@@ -19,45 +16,45 @@ function a(r) {
|
|
|
19
16
|
return 1.1.toLocaleString(r).replace(/\d/g, "");
|
|
20
17
|
}
|
|
21
18
|
function u({ type: r = "currency" } = {}) {
|
|
22
|
-
return r === "percent" &&
|
|
19
|
+
return r === "percent" && p(1).indexOf("%") === 0 || r === "currency" && l({ amount: 1 }).indexOf(o) === 0 ? "prepend" : "append";
|
|
23
20
|
}
|
|
24
|
-
function
|
|
21
|
+
function S(r, t) {
|
|
25
22
|
return new Intl.NumberFormat(e, {
|
|
26
23
|
minimumFractionDigits: t,
|
|
27
24
|
maximumFractionDigits: t,
|
|
28
25
|
style: "decimal"
|
|
29
26
|
}).format(r);
|
|
30
27
|
}
|
|
31
|
-
function
|
|
28
|
+
function l({ amount: r, currency: t = "USD" }) {
|
|
32
29
|
return new Intl.NumberFormat(e, {
|
|
33
30
|
style: "currency",
|
|
34
31
|
currency: t
|
|
35
32
|
}).format(r);
|
|
36
33
|
}
|
|
37
|
-
function
|
|
34
|
+
function p(r, t) {
|
|
38
35
|
return new Intl.NumberFormat(e, {
|
|
39
36
|
style: "percent",
|
|
40
37
|
minimumFractionDigits: t,
|
|
41
38
|
maximumFractionDigits: t || 2
|
|
42
39
|
}).format(r);
|
|
43
40
|
}
|
|
44
|
-
function
|
|
45
|
-
const
|
|
46
|
-
return `${r}`.replace(
|
|
41
|
+
function d(r, t = ".") {
|
|
42
|
+
const c = `[^0-9${t}+-]*`, i = new RegExp(c, "g");
|
|
43
|
+
return `${r}`.replace(i, "");
|
|
47
44
|
}
|
|
48
|
-
function
|
|
45
|
+
function b(r, t = ".") {
|
|
49
46
|
return `${r}`.replace(t === "." ? "," : ".", t);
|
|
50
47
|
}
|
|
51
48
|
export {
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
b as convertDecimal,
|
|
50
|
+
D as currency,
|
|
54
51
|
o as currencySymbol,
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
S as decimal,
|
|
53
|
+
g as decimalSeparator,
|
|
57
54
|
u as getLocaleSymbolPosition,
|
|
58
55
|
m as getSymbolFromCurrency,
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
56
|
+
l as money,
|
|
57
|
+
p as percent,
|
|
58
|
+
d as sanitizeDecimal
|
|
62
59
|
};
|
|
63
60
|
//# sourceMappingURL=i18n.js.map
|
package/dist/utils/i18n.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sources":["../../src/utils/i18n.ts"],"sourcesContent":["import { CURRENCY_SYMBOL_MAP } from '../constants';\nimport { locale } from '../locale';\n\n/**\n * Return the correct symbol for a currency based on code.\n *\n * @param {string} currencyCode - The code used to determine the symbol (i.e. 'USD').\n * @returns {string} - Currency symbol, i.e. '$'.\n */\nexport const getSymbolFromCurrency = (currencyCode) => {\n if (typeof currencyCode !== 'string') {\n return undefined;\n }\n\n const code = currencyCode.toUpperCase();\n\n if (!Object.prototype.hasOwnProperty.call(CURRENCY_SYMBOL_MAP, code)) {\n return undefined;\n }\n\n return CURRENCY_SYMBOL_MAP[code];\n};\n\nexport const decimalSeparator = getLocaleDecimalSeparator(locale);\nexport const currencySymbol = getSymbolFromCurrency('USD');\nexport const currency = {\n default: 'USD',\n position: getLocaleSymbolPosition(),\n symbol: currencySymbol,\n};\n\n/**\n * A helper function for obtaining the current decimal separator\n * @param {string} locale The locale used to determine the separator.\n * @returns {string} Decimal separator ('.', ',')\n */\nfunction getLocaleDecimalSeparator(locale) {\n return (1.1).toLocaleString(locale).replace(/\\d/g, '');\n}\n\n/**\n * A helper function for obtaining symbol position relative to a value\n * This should be fine going forward unless we get into RTL, or Arabic.\n * @param {string} type the type of symbol\n */\nexport function getLocaleSymbolPosition({ type = 'currency' } = {}) {\n return (type === 'percent' && percent(1).indexOf('%') === 0) ||\n (type === 'currency' && money({ amount: 1 }).indexOf(currencySymbol) === 0)\n ? 'prepend'\n : 'append';\n}\n\n/**\n * Format a value as a decimal in a locale-aware format.\n * NOTE: Be careful as this returns a string and should not be used for\n * additional calculation unless converted.\n * @param {number|string} value number to format\n * @param {number} [decimalPlaces] number of decimal places\n * @return {string} locale-aware number as a string\n */\nexport function decimal(value, decimalPlaces) {\n return new Intl.NumberFormat(locale, {\n minimumFractionDigits: decimalPlaces,\n maximumFractionDigits: decimalPlaces,\n style: 'decimal',\n }).format(value);\n}\n\n/**\n * Format a value as a money string in a locale-aware format.\n * @param {Object} object\n * @param {number} object.amount The number to format\n * @param {string} [object.currency] ISO 4217 currency code (USD, CAD, EUR, etc)\n * @return {string} locale-aware money value as a string\n */\nexport function money({ amount, currency = 'USD' }) {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n }).format(amount);\n}\n\n/**\n * Format a value as a percent in a locale-aware format.\n * @param {number|string} value number to format\n * @param {number} [decimalPlaces] number of decimal places\n * @return {string} locale-aware percentage value as a string\n */\nexport function percent(value, decimalPlaces?) {\n return new Intl.NumberFormat(locale, {\n style: 'percent',\n minimumFractionDigits: decimalPlaces,\n maximumFractionDigits: decimalPlaces || 2,\n }).format(value);\n}\n\n/**\n * Cleans a value to reflect type=number restrictions.\n * Omits exponents, and restricts the decimal separator.\n * @param {number|string} value value to format\n * @param {string} value decimal separator\n */\nexport function sanitizeDecimal(value, separator = '.') {\n const replace = `[^0-9${separator}+-]*`;\n const re = new RegExp(replace, 'g');\n\n return `${value}`.replace(re, '');\n}\n\n/**\n * Replace decimal separator of `value` with `convertTo`\n * @param {string|number} value\n * @param {string} convertTo decimal character to update the value with\n */\nexport function convertDecimal(value, convertTo = '.') {\n return `${value}`.replace(convertTo === '.' ? ',' : '.', convertTo);\n}\n"],"names":["getSymbolFromCurrency","currencyCode","code","CURRENCY_SYMBOL_MAP","decimalSeparator","getLocaleDecimalSeparator","locale","currencySymbol","currency","getLocaleSymbolPosition","type","percent","money","decimal","value","decimalPlaces","amount","sanitizeDecimal","separator","replace","re","convertDecimal","convertTo"],"mappings":"
|
|
1
|
+
{"version":3,"file":"i18n.js","sources":["../../src/utils/i18n.ts"],"sourcesContent":["import { CURRENCY_SYMBOL_MAP } from '../constants';\nimport { locale } from '../locale';\n\n/**\n * Return the correct symbol for a currency based on code.\n *\n * @param {string} currencyCode - The code used to determine the symbol (i.e. 'USD').\n * @returns {string} - Currency symbol, i.e. '$'.\n */\nexport const getSymbolFromCurrency = (currencyCode) => {\n if (typeof currencyCode !== 'string') {\n return undefined;\n }\n\n const code = currencyCode.toUpperCase();\n\n if (!Object.prototype.hasOwnProperty.call(CURRENCY_SYMBOL_MAP, code)) {\n return undefined;\n }\n\n return CURRENCY_SYMBOL_MAP[code];\n};\n\nexport const decimalSeparator = getLocaleDecimalSeparator(locale);\nexport const currencySymbol = getSymbolFromCurrency('USD');\nexport const currency = {\n default: 'USD',\n position: getLocaleSymbolPosition(),\n symbol: currencySymbol,\n};\n\n/**\n * A helper function for obtaining the current decimal separator\n * @param {string} locale The locale used to determine the separator.\n * @returns {string} Decimal separator ('.', ',')\n */\nfunction getLocaleDecimalSeparator(locale) {\n return (1.1).toLocaleString(locale).replace(/\\d/g, '');\n}\n\n/**\n * A helper function for obtaining symbol position relative to a value\n * This should be fine going forward unless we get into RTL, or Arabic.\n * @param {string} type the type of symbol\n */\nexport function getLocaleSymbolPosition({ type = 'currency' } = {}) {\n return (type === 'percent' && percent(1).indexOf('%') === 0) ||\n (type === 'currency' && money({ amount: 1 }).indexOf(currencySymbol) === 0)\n ? 'prepend'\n : 'append';\n}\n\n/**\n * Format a value as a decimal in a locale-aware format.\n * NOTE: Be careful as this returns a string and should not be used for\n * additional calculation unless converted.\n * @param {number|string} value number to format\n * @param {number} [decimalPlaces] number of decimal places\n * @return {string} locale-aware number as a string\n */\nexport function decimal(value, decimalPlaces) {\n return new Intl.NumberFormat(locale, {\n minimumFractionDigits: decimalPlaces,\n maximumFractionDigits: decimalPlaces,\n style: 'decimal',\n }).format(value);\n}\n\n/**\n * Format a value as a money string in a locale-aware format.\n * @param {Object} object\n * @param {number} object.amount The number to format\n * @param {string} [object.currency] ISO 4217 currency code (USD, CAD, EUR, etc)\n * @return {string} locale-aware money value as a string\n */\nexport function money({ amount, currency = 'USD' }) {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n }).format(amount);\n}\n\n/**\n * Format a value as a percent in a locale-aware format.\n * @param {number|string} value number to format\n * @param {number} [decimalPlaces] number of decimal places\n * @return {string} locale-aware percentage value as a string\n */\nexport function percent(value, decimalPlaces?) {\n return new Intl.NumberFormat(locale, {\n style: 'percent',\n minimumFractionDigits: decimalPlaces,\n maximumFractionDigits: decimalPlaces || 2,\n }).format(value);\n}\n\n/**\n * Cleans a value to reflect type=number restrictions.\n * Omits exponents, and restricts the decimal separator.\n * @param {number|string} value value to format\n * @param {string} value decimal separator\n */\nexport function sanitizeDecimal(value, separator = '.') {\n const replace = `[^0-9${separator}+-]*`;\n const re = new RegExp(replace, 'g');\n\n return `${value}`.replace(re, '');\n}\n\n/**\n * Replace decimal separator of `value` with `convertTo`\n * @param {string|number} value\n * @param {string} convertTo decimal character to update the value with\n */\nexport function convertDecimal(value, convertTo = '.') {\n return `${value}`.replace(convertTo === '.' ? ',' : '.', convertTo);\n}\n"],"names":["getSymbolFromCurrency","currencyCode","code","CURRENCY_SYMBOL_MAP","decimalSeparator","getLocaleDecimalSeparator","locale","currencySymbol","currency","getLocaleSymbolPosition","type","percent","money","decimal","value","decimalPlaces","amount","sanitizeDecimal","separator","replace","re","convertDecimal","convertTo"],"mappings":";;;AASa,MAAAA,IAAwB,CAACC,MAAiB;AACjD,MAAA,OAAOA,KAAiB;AACnB;AAGH,QAAAC,IAAOD,EAAa;AAE1B,MAAK,OAAO,UAAU,eAAe,KAAKE,GAAqBD,CAAI;AAInE,WAAOC,EAAoBD,CAAI;AACjC,GAEaE,IAAmBC,EAA0BC,CAAM,GACnDC,IAAiBP,EAAsB,KAAK,GAC5CQ,IAAW;AAAA,EACtB,SAAS;AAAA,EACT,UAAUC,EAAwB;AAAA,EAClC,QAAQF;AACV;AAOA,SAASF,EAA0BC,GAAQ;AACzC,SAAQ,IAAK,eAAeA,CAAM,EAAE,QAAQ,OAAO,EAAE;AACvD;AAOO,SAASG,EAAwB,EAAE,MAAAC,IAAO,WAAW,IAAI,CAAA,GAAI;AAC1D,SAAAA,MAAS,aAAaC,EAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,KACvDD,MAAS,cAAcE,EAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQL,CAAc,MAAM,IACvE,YACA;AACN;AAUgB,SAAAM,EAAQC,GAAOC,GAAe;AACrC,SAAA,IAAI,KAAK,aAAaT,GAAQ;AAAA,IACnC,uBAAuBS;AAAA,IACvB,uBAAuBA;AAAA,IACvB,OAAO;AAAA,EAAA,CACR,EAAE,OAAOD,CAAK;AACjB;AASO,SAASF,EAAM,EAAE,QAAAI,GAAQ,UAAAR,IAAW,SAAS;AAC3C,SAAA,IAAI,KAAK,aAAaF,GAAQ;AAAA,IACnC,OAAO;AAAA,IACP,UAAAE;AAAAA,EAAA,CACD,EAAE,OAAOQ,CAAM;AAClB;AAQgB,SAAAL,EAAQG,GAAOC,GAAgB;AACtC,SAAA,IAAI,KAAK,aAAaT,GAAQ;AAAA,IACnC,OAAO;AAAA,IACP,uBAAuBS;AAAA,IACvB,uBAAuBA,KAAiB;AAAA,EAAA,CACzC,EAAE,OAAOD,CAAK;AACjB;AAQgB,SAAAG,EAAgBH,GAAOI,IAAY,KAAK;AAChD,QAAAC,IAAU,QAAQD,CAAS,QAC3BE,IAAK,IAAI,OAAOD,GAAS,GAAG;AAElC,SAAO,GAAGL,CAAK,GAAG,QAAQM,GAAI,EAAE;AAClC;AAOgB,SAAAC,EAAeP,GAAOQ,IAAY,KAAK;AAC9C,SAAA,GAAGR,CAAK,GAAG,QAAQQ,MAAc,MAAM,MAAM,KAAKA,CAAS;AACpE;"}
|
|
@@ -1,19 +1,14 @@
|
|
|
1
|
-
import { s as
|
|
1
|
+
import { s as u, s as z } from "../searchFuzzy-74a7de1c.js";
|
|
2
2
|
import "./helpers.js";
|
|
3
3
|
import "../_commonjsHelpers-10dfc225.js";
|
|
4
|
-
import "
|
|
5
|
-
import "../isObjectLike-54341556.js";
|
|
6
|
-
import "../_getPrototype-3e6fccd6.js";
|
|
7
|
-
import "../_overArg-6d920d99.js";
|
|
4
|
+
import "lodash-es/isPlainObject";
|
|
8
5
|
import "vue";
|
|
9
|
-
import "
|
|
10
|
-
import "
|
|
11
|
-
import "
|
|
12
|
-
import "../get-27d90892.js";
|
|
13
|
-
import "../_MapCache-65811284.js";
|
|
6
|
+
import "lodash-es/camelCase";
|
|
7
|
+
import "lodash-es/get";
|
|
8
|
+
import "lodash-es/isFinite";
|
|
14
9
|
import "../constants.js";
|
|
15
10
|
export {
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
u as default,
|
|
12
|
+
z as searchFuzzy
|
|
18
13
|
};
|
|
19
14
|
//# sourceMappingURL=searchFuzzy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchFuzzy.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"searchFuzzy.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|