@windwalker-io/unicorn-next 0.1.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.
- package/.editorconfig +18 -0
- package/.gulp.json +7 -0
- package/bin/release.mjs +47 -0
- package/dist/chunks/_arrayPush.js +168 -0
- package/dist/chunks/_arrayPush.js.map +1 -0
- package/dist/chunks/_baseRest.js +73 -0
- package/dist/chunks/_baseRest.js.map +1 -0
- package/dist/chunks/_commonjsHelpers.js +7 -0
- package/dist/chunks/_commonjsHelpers.js.map +1 -0
- package/dist/chunks/_getPrototype.js +130 -0
- package/dist/chunks/_getPrototype.js.map +1 -0
- package/dist/chunks/button-radio.js +147 -0
- package/dist/chunks/button-radio.js.map +1 -0
- package/dist/chunks/checkboxes-multi-select.js +44 -0
- package/dist/chunks/checkboxes-multi-select.js.map +1 -0
- package/dist/chunks/cloneDeep.js +287 -0
- package/dist/chunks/cloneDeep.js.map +1 -0
- package/dist/chunks/cropper.min.js +5 -0
- package/dist/chunks/cropper.min.js.map +1 -0
- package/dist/chunks/field-cascade-select.js +256 -0
- package/dist/chunks/field-cascade-select.js.map +1 -0
- package/dist/chunks/field-file-drag.js +218 -0
- package/dist/chunks/field-file-drag.js.map +1 -0
- package/dist/chunks/field-flatpickr.js +893 -0
- package/dist/chunks/field-flatpickr.js.map +1 -0
- package/dist/chunks/field-modal-select.js +403 -0
- package/dist/chunks/field-modal-select.js.map +1 -0
- package/dist/chunks/field-modal-tree.js +790 -0
- package/dist/chunks/field-modal-tree.js.map +1 -0
- package/dist/chunks/field-multi-uploader.js +256 -0
- package/dist/chunks/field-multi-uploader.js.map +1 -0
- package/dist/chunks/field-repeatable.js +132 -0
- package/dist/chunks/field-repeatable.js.map +1 -0
- package/dist/chunks/field-single-image-drag.js +338 -0
- package/dist/chunks/field-single-image-drag.js.map +1 -0
- package/dist/chunks/form.js +154 -0
- package/dist/chunks/form.js.map +1 -0
- package/dist/chunks/grid.js +345 -0
- package/dist/chunks/grid.js.map +1 -0
- package/dist/chunks/http-client.js +229 -0
- package/dist/chunks/http-client.js.map +1 -0
- package/dist/chunks/iframe-modal.js +124 -0
- package/dist/chunks/iframe-modal.js.map +1 -0
- package/dist/chunks/index.js +309 -0
- package/dist/chunks/index.js.map +1 -0
- package/dist/chunks/isArguments.js +146 -0
- package/dist/chunks/isArguments.js.map +1 -0
- package/dist/chunks/keep-tab.js +101 -0
- package/dist/chunks/keep-tab.js.map +1 -0
- package/dist/chunks/legacy.js +210 -0
- package/dist/chunks/legacy.js.map +1 -0
- package/dist/chunks/list-dependent.js +231 -0
- package/dist/chunks/list-dependent.js.map +1 -0
- package/dist/chunks/s3-multipart-uploader.js +172 -0
- package/dist/chunks/s3-multipart-uploader.js.map +1 -0
- package/dist/chunks/s3-uploader.js +136 -0
- package/dist/chunks/s3-uploader.js.map +1 -0
- package/dist/chunks/show-on.js +237 -0
- package/dist/chunks/show-on.js.map +1 -0
- package/dist/chunks/tinymce.js +196 -0
- package/dist/chunks/tinymce.js.map +1 -0
- package/dist/chunks/ui-bootstrap5.js +71 -0
- package/dist/chunks/ui-bootstrap5.js.map +1 -0
- package/dist/chunks/unicorn.js +2202 -0
- package/dist/chunks/unicorn.js.map +1 -0
- package/dist/chunks/validation.js +854 -0
- package/dist/chunks/validation.js.map +1 -0
- package/dist/editor.css +1 -0
- package/dist/index.d.ts +1427 -0
- package/dist/multi-level-menu.css +1 -0
- package/dist/switcher.css +1 -0
- package/dist/unicorn-next.css +12 -0
- package/dist/unicorn.js +125 -0
- package/dist/unicorn.js.map +1 -0
- package/fusionfile.mjs +155 -0
- package/images/ajax-loader.gif +0 -0
- package/images/placeholder/avatar.png +0 -0
- package/images/placeholder/image-16x10.png +0 -0
- package/images/placeholder/image-16x9.png +0 -0
- package/images/placeholder/image-1x1.png +0 -0
- package/images/placeholder/image-4x3.png +0 -0
- package/package.json +102 -0
- package/scss/bootstrap/multi-level-menu.scss +121 -0
- package/scss/editor.scss +116 -0
- package/scss/field/file-drag.scss +102 -0
- package/scss/field/single-image-drag.scss +88 -0
- package/scss/field/vue-drag-uploader.scss +160 -0
- package/scss/switcher.scss +156 -0
- package/src/app.ts +128 -0
- package/src/bootstrap/button-radio.ts +208 -0
- package/src/bootstrap/keep-tab.ts +155 -0
- package/src/composable/index.ts +21 -0
- package/src/composable/useCheckboxesMultiSelect.ts +22 -0
- package/src/composable/useFieldCascadeSelect.ts +9 -0
- package/src/composable/useFieldFileDrag.ts +9 -0
- package/src/composable/useFieldFlatpickr.ts +3 -0
- package/src/composable/useFieldModalSelect.ts +6 -0
- package/src/composable/useFieldModalTree.ts +3 -0
- package/src/composable/useFieldMultiUploader.ts +3 -0
- package/src/composable/useFieldRepeatable.ts +9 -0
- package/src/composable/useFieldSingleImageDrag.ts +5 -0
- package/src/composable/useForm.ts +43 -0
- package/src/composable/useGrid.ts +57 -0
- package/src/composable/useHttp.ts +8 -0
- package/src/composable/useIframeModal.ts +9 -0
- package/src/composable/useListDependent.ts +26 -0
- package/src/composable/useQueue.ts +13 -0
- package/src/composable/useS3Uploader.ts +32 -0
- package/src/composable/useShowOn.ts +9 -0
- package/src/composable/useStack.ts +13 -0
- package/src/composable/useTinymce.ts +29 -0
- package/src/composable/useTomSelect.ts +72 -0
- package/src/composable/useUIBootstrap5.ts +48 -0
- package/src/composable/useUniDirective.ts +32 -0
- package/src/composable/useValidation.ts +39 -0
- package/src/data.ts +36 -0
- package/src/events.ts +73 -0
- package/src/legacy/legacy.ts +186 -0
- package/src/legacy/loader.ts +125 -0
- package/src/module/checkboxes-multi-select.ts +54 -0
- package/src/module/field-cascade-select.ts +292 -0
- package/src/module/field-file-drag.ts +292 -0
- package/src/module/field-flatpickr.ts +127 -0
- package/src/module/field-modal-select.ts +174 -0
- package/src/module/field-modal-tree.ts +27 -0
- package/src/module/field-multi-uploader.ts +361 -0
- package/src/module/field-repeatable.ts +202 -0
- package/src/module/field-single-image-drag.ts +468 -0
- package/src/module/form.ts +223 -0
- package/src/module/grid.ts +465 -0
- package/src/module/http-client.ts +243 -0
- package/src/module/iframe-modal.ts +167 -0
- package/src/module/list-dependent.ts +321 -0
- package/src/module/s3-multipart-uploader.ts +300 -0
- package/src/module/s3-uploader.ts +234 -0
- package/src/module/show-on.ts +173 -0
- package/src/module/tinymce.ts +263 -0
- package/src/module/ui-bootstrap5.ts +107 -0
- package/src/module/validation.ts +1019 -0
- package/src/plugin/index.ts +1 -0
- package/src/plugin/php-adapter.ts +65 -0
- package/src/polyfill/form-request-submit.ts +31 -0
- package/src/polyfill/index.ts +9 -0
- package/src/service/animate.ts +58 -0
- package/src/service/crypto.ts +27 -0
- package/src/service/dom-watcher.ts +62 -0
- package/src/service/dom.ts +265 -0
- package/src/service/helper.ts +48 -0
- package/src/service/index.ts +10 -0
- package/src/service/lang.ts +122 -0
- package/src/service/loader.ts +152 -0
- package/src/service/router.ts +118 -0
- package/src/service/ui.ts +497 -0
- package/src/service/uri.ts +106 -0
- package/src/types/base.ts +9 -0
- package/src/types/index.ts +4 -0
- package/src/types/modal-tree.ts +12 -0
- package/src/types/plugin.ts +6 -0
- package/src/types/shims.d.ts +18 -0
- package/src/types/ui.ts +6 -0
- package/src/unicorn.ts +63 -0
- package/src/utilities/arr.ts +25 -0
- package/src/utilities/base.ts +9 -0
- package/src/utilities/data.ts +48 -0
- package/src/utilities/index.ts +5 -0
- package/src/utilities/tree.ts +20 -0
- package/src/vue/components/ModalTree/ModalTreeApp.vue +175 -0
- package/src/vue/components/ModalTree/TreeItem.vue +262 -0
- package/src/vue/components/ModalTree/TreeModal.vue +225 -0
- package/tests/test.js +4 -0
- package/tsconfig.js.json +25 -0
- package/tsconfig.json +17 -0
- package/vite.assets.config.ts +61 -0
- package/vite.config.test.ts +36 -0
- package/vite.config.ts +112 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isArguments.js","sources":["../../../../../../node_modules/lodash-es/_freeGlobal.js","../../../../../../node_modules/lodash-es/_root.js","../../../../../../node_modules/lodash-es/_Symbol.js","../../../../../../node_modules/lodash-es/_getRawTag.js","../../../../../../node_modules/lodash-es/_objectToString.js","../../../../../../node_modules/lodash-es/_baseGetTag.js","../../../../../../node_modules/lodash-es/isObjectLike.js","../../../../../../node_modules/lodash-es/isArray.js","../../../../../../node_modules/lodash-es/isObject.js","../../../../../../node_modules/lodash-es/isFunction.js","../../../../../../node_modules/lodash-es/_coreJsData.js","../../../../../../node_modules/lodash-es/_isMasked.js","../../../../../../node_modules/lodash-es/_toSource.js","../../../../../../node_modules/lodash-es/_baseIsNative.js","../../../../../../node_modules/lodash-es/_getValue.js","../../../../../../node_modules/lodash-es/_getNative.js","../../../../../../node_modules/lodash-es/_defineProperty.js","../../../../../../node_modules/lodash-es/eq.js","../../../../../../node_modules/lodash-es/isLength.js","../../../../../../node_modules/lodash-es/isArrayLike.js","../../../../../../node_modules/lodash-es/_baseIsArguments.js","../../../../../../node_modules/lodash-es/isArguments.js"],"sourcesContent":["/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","/**\n * Checks if `value` is classified as an `Array` object.\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 an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\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 an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\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 function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\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 an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n"],"names":["Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","funcProto","funcToString"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Tab } from "bootstrap";
|
|
2
|
+
import { a as useUniDirective, z as module, a5 as mergeDeep, v as selectOne, ai as sleep, w as selectAll } from "./unicorn.js";
|
|
3
|
+
const defaultOptions = {
|
|
4
|
+
tabItemSelector: "[data-toggle=tab],[data-bs-toggle=tab],[data-toggle=pill],[data-bs-toggle=pill]",
|
|
5
|
+
delay: 0
|
|
6
|
+
};
|
|
7
|
+
class KeepTab {
|
|
8
|
+
$element;
|
|
9
|
+
tabButtons;
|
|
10
|
+
storageKey = "";
|
|
11
|
+
options;
|
|
12
|
+
constructor(selector, options = {}) {
|
|
13
|
+
options = mergeDeep({}, defaultOptions, options);
|
|
14
|
+
let uid;
|
|
15
|
+
if (typeof selector === "object") {
|
|
16
|
+
uid = options.uid || selector.id;
|
|
17
|
+
} else {
|
|
18
|
+
uid = selector;
|
|
19
|
+
}
|
|
20
|
+
const $element = this.$element = selectOne(selector);
|
|
21
|
+
if (!$element) {
|
|
22
|
+
console.warn(`[KeepTab] Element ${selector} not found.`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
this.options = options;
|
|
26
|
+
this.$element = $element;
|
|
27
|
+
this.tabButtons = $element.querySelectorAll(this.options.tabItemSelector);
|
|
28
|
+
this.init(uid);
|
|
29
|
+
}
|
|
30
|
+
async init(uid) {
|
|
31
|
+
this.storageKey = "tab-href-" + await this.hashCode(location.href + ":" + uid);
|
|
32
|
+
this.bindEvents();
|
|
33
|
+
await sleep(this.options.delay || 0);
|
|
34
|
+
this.switchTab();
|
|
35
|
+
}
|
|
36
|
+
bindEvents() {
|
|
37
|
+
[].forEach.call(this.tabButtons, (button) => {
|
|
38
|
+
button.addEventListener("click", () => {
|
|
39
|
+
window.localStorage.setItem(this.storageKey, this.getButtonHref(button));
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
getButtonHref(button) {
|
|
44
|
+
return button.dataset.bsTarget || button.dataset.target || button.href;
|
|
45
|
+
}
|
|
46
|
+
findTabButtonByHref(href) {
|
|
47
|
+
return selectAll(this.options.tabItemSelector).filter((button) => {
|
|
48
|
+
if (button.href === href) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
if (button.dataset.bsTarget === href) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
return button.dataset.target === href;
|
|
55
|
+
}).shift();
|
|
56
|
+
}
|
|
57
|
+
activateTab(href) {
|
|
58
|
+
const tabTrigger = this.findTabButtonByHref(href);
|
|
59
|
+
if (tabTrigger) {
|
|
60
|
+
Tab.getOrCreateInstance(tabTrigger).show();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
hasTab(href) {
|
|
64
|
+
return this.findTabButtonByHref(href) != null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Switch tab.
|
|
68
|
+
*
|
|
69
|
+
* @returns {boolean}
|
|
70
|
+
*/
|
|
71
|
+
switchTab() {
|
|
72
|
+
if (localStorage.getItem(this.storageKey)) {
|
|
73
|
+
if (!this.hasTab(localStorage.getItem(this.storageKey) || "")) {
|
|
74
|
+
localStorage.removeItem(this.storageKey);
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
const tabhref = localStorage.getItem(this.storageKey) || "";
|
|
78
|
+
this.activateTab(tabhref);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Hash code.
|
|
83
|
+
*/
|
|
84
|
+
async hashCode(text) {
|
|
85
|
+
const msgBuffer = new TextEncoder().encode(text);
|
|
86
|
+
const hashBuffer = await globalThis.crypto.subtle.digest("SHA-256", msgBuffer);
|
|
87
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
88
|
+
return hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const ready = /* @__PURE__ */ useUniDirective("keeptab", {
|
|
92
|
+
mounted(el, { value }) {
|
|
93
|
+
const options = JSON.parse(value || "{}");
|
|
94
|
+
module(el, "uni.keeptab", () => new KeepTab(el, options));
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
export {
|
|
98
|
+
KeepTab,
|
|
99
|
+
ready
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=keep-tab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keep-tab.js","sources":["../../src/bootstrap/keep-tab.ts"],"sourcesContent":["import { useUniDirective } from '../composable';\r\nimport { module, selectAll, selectOne, sleep } from '../service';\r\nimport { Tab } from 'bootstrap';\r\nimport { mergeDeep } from '../utilities';\r\n\r\nexport interface KeepTabOptions {\r\n uid?: string;\r\n delay?: number;\r\n tabItemSelector?: string;\r\n}\r\n\r\nconst defaultOptions = {\r\n tabItemSelector: '[data-toggle=tab],[data-bs-toggle=tab],[data-toggle=pill],[data-bs-toggle=pill]',\r\n delay: 0,\r\n};\r\n\r\nexport class KeepTab {\r\n $element: HTMLElement;\r\n tabButtons!: NodeListOf<HTMLElement>;\r\n storageKey: string = '';\r\n options: any;\r\n\r\n constructor(selector: HTMLElement | string, options: KeepTabOptions = {}) {\r\n options = mergeDeep({}, defaultOptions, options);\r\n let uid: string;\r\n\r\n if (typeof selector === 'object') {\r\n uid = options.uid || selector.id;\r\n } else {\r\n uid = selector;\r\n }\r\n\r\n const $element = this.$element = selectOne<HTMLElement>(selector)!;\r\n\r\n if (!$element) {\r\n console.warn(`[KeepTab] Element ${selector} not found.`);\r\n return;\r\n }\r\n\r\n this.options = options;\r\n\r\n this.$element = $element;\r\n this.tabButtons = $element.querySelectorAll(this.options.tabItemSelector);\r\n\r\n this.init(uid);\r\n }\r\n\r\n protected async init(uid: string) {\r\n this.storageKey = 'tab-href-' + await this.hashCode(location.href + ':' + uid);\r\n\r\n this.bindEvents();\r\n\r\n await sleep(this.options.delay || 0);\r\n\r\n this.switchTab();\r\n }\r\n\r\n bindEvents() {\r\n [].forEach.call(this.tabButtons, (button: HTMLAnchorElement) => {\r\n button.addEventListener('click', () => {\r\n // Store the selected tab href in localstorage\r\n window.localStorage.setItem(this.storageKey, this.getButtonHref(button));\r\n });\r\n });\r\n }\r\n\r\n getButtonHref(button: HTMLAnchorElement) {\r\n return button.dataset.bsTarget || button.dataset.target || button.href;\r\n }\r\n\r\n findTabButtonByHref(href: string) {\r\n return selectAll<HTMLAnchorElement>(this.options.tabItemSelector)\r\n .filter((button: HTMLAnchorElement) => {\r\n if (button.href === href) {\r\n return true;\r\n }\r\n\r\n if (button.dataset.bsTarget === href) {\r\n return true;\r\n }\r\n\r\n return button.dataset.target === href;\r\n })\r\n .shift();\r\n }\r\n\r\n activateTab(href: string) {\r\n const tabTrigger = this.findTabButtonByHref(href);\r\n\r\n if (tabTrigger) {\r\n Tab.getOrCreateInstance(tabTrigger).show();\r\n }\r\n }\r\n\r\n hasTab(href: string) {\r\n return this.findTabButtonByHref(href) != null;\r\n }\r\n\r\n /**\r\n * Switch tab.\r\n *\r\n * @returns {boolean}\r\n */\r\n switchTab() {\r\n if (localStorage.getItem(this.storageKey)) {\r\n // When moving from tab area to a different view\r\n if (!this.hasTab(localStorage.getItem(this.storageKey) || '')) {\r\n localStorage.removeItem(this.storageKey);\r\n return true;\r\n }\r\n\r\n // Clean default tabs\r\n // selectOne(this.$element, '[data-toggle=\"tab\"], [data-bs-toggle=tab]')\r\n // this.$element.querySelector('a[data-toggle=\"tab\"]').parent().removeClass('active');\r\n\r\n const tabhref = localStorage.getItem(this.storageKey) || '';\r\n\r\n // Add active attribute for selected tab indicated by url\r\n this.activateTab(tabhref);\r\n\r\n // Check whether internal tab is selected (in format <tabname>-<id>)\r\n // const seperatorIndex = tabhref.indexOf('-');\r\n //\r\n // if (seperatorIndex !== -1) {\r\n // const singular = tabhref.substring(0, seperatorIndex);\r\n // const plural = singular + 's';\r\n //\r\n // this.activateTab(plural);\r\n // }\r\n }\r\n }\r\n\r\n /**\r\n * Hash code.\r\n */\r\n async hashCode(text: string): Promise<string> {\r\n const msgBuffer = new TextEncoder().encode(text);\r\n const hashBuffer = await globalThis.crypto.subtle.digest(\"SHA-256\", msgBuffer);\r\n const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n return hashArray.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\r\n }\r\n}\r\n\r\nexport const ready = useUniDirective('keeptab', {\r\n mounted(el, { value }) {\r\n const options: KeepTabOptions = JSON.parse(value || '{}');\r\n\r\n module(el, 'uni.keeptab', () => new KeepTab(el, options));\r\n }\r\n});\r\n\r\nexport interface KeepTabModule {\r\n KeepTab: typeof KeepTab;\r\n ready: typeof ready;\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { i as isDebug, u as useHttpClient, _ as __, r as route, a as useUniDirective, b as animateTo, c as renderMessage, d as clearMessages, n as notify, e as clearNotifies, l as loadAlpine, f as initAlpineComponent, p as prepareAlpine, g as useFormValidation, h as addGlobalValidator, j as useFieldValidationSync, k as useFormValidationSync, m as useStack, o as useQueue, q as useSystemUri, s as useAssetUri, t as domready, v as selectOne, w as selectAll, x as getBoundedInstance, y as getBoundedInstanceList, z as module, A as h, B as html, C as delegate, D as debounce, E as throttle, F as simpleConfirm, G as simpleAlert, H as sprintfExports, I as base64UrlEncode, J as base64UrlDecode, K as uid, L as tid, M as serial, N as mark, O as useTomSelect, P as slideUp, Q as slideDown, R as slideToggle, S as fadeOut, T as fadeIn, U as highlight, V as useColorPicker, W as useDisableOnSubmit, X as useDisableIfStackNotEmpty, Y as useCheckboxesMultiSelect, Z as useKeepAlive, $ as useBs5Tooltip, a0 as useFormAsync, a1 as useGridAsync, a2 as useForm, a3 as useGrid } from "./unicorn.js";
|
|
2
|
+
function numberFormat(number, decimals = 0, decPoint = ".", thousandsSep = ",") {
|
|
3
|
+
number = Number(number);
|
|
4
|
+
const str = number.toFixed(decimals ? decimals : 0).toString().split(".");
|
|
5
|
+
const parts = [];
|
|
6
|
+
for (var i = str[0].length; i > 0; i -= 3) {
|
|
7
|
+
parts.unshift(str[0].substring(Math.max(0, i - 3), i));
|
|
8
|
+
}
|
|
9
|
+
str[0] = parts.join(thousandsSep ? thousandsSep : ",");
|
|
10
|
+
return str.join(decPoint ? decPoint : ".");
|
|
11
|
+
}
|
|
12
|
+
const imports = {};
|
|
13
|
+
class LegacyLoader {
|
|
14
|
+
constructor(app) {
|
|
15
|
+
this.app = app;
|
|
16
|
+
}
|
|
17
|
+
static install(app) {
|
|
18
|
+
const loader = app.$loader = new this(app);
|
|
19
|
+
app.import = loader.import.bind(loader);
|
|
20
|
+
app.importSync = loader.importSync.bind(loader);
|
|
21
|
+
app.importCSS = loader.importCSS.bind(loader);
|
|
22
|
+
app.minFileName = loader.minFileName.bind(loader);
|
|
23
|
+
app.afterImported = loader.afterImported.bind(loader);
|
|
24
|
+
}
|
|
25
|
+
doImport(src) {
|
|
26
|
+
return S.import(src);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Import modules or scripts.
|
|
30
|
+
*/
|
|
31
|
+
import(...src) {
|
|
32
|
+
if (src.length === 1) {
|
|
33
|
+
return this.doImport(src[0]);
|
|
34
|
+
}
|
|
35
|
+
const promises = [];
|
|
36
|
+
src.forEach((link) => {
|
|
37
|
+
promises.push(
|
|
38
|
+
link instanceof Promise ? link : this.doImport(link)
|
|
39
|
+
);
|
|
40
|
+
});
|
|
41
|
+
return Promise.all(promises);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Import sync.
|
|
45
|
+
*/
|
|
46
|
+
importSync(...src) {
|
|
47
|
+
let promise = Promise.resolve();
|
|
48
|
+
let url;
|
|
49
|
+
const modules = [];
|
|
50
|
+
while (url = src.shift()) {
|
|
51
|
+
if (!Array.isArray(url)) {
|
|
52
|
+
url = [url];
|
|
53
|
+
}
|
|
54
|
+
const target = url;
|
|
55
|
+
promise = promise.then(
|
|
56
|
+
() => this.import(...target).then((m) => {
|
|
57
|
+
modules.push(m);
|
|
58
|
+
return modules;
|
|
59
|
+
})
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
return promise;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Import CSS files.
|
|
66
|
+
*/
|
|
67
|
+
async importCSS(...src) {
|
|
68
|
+
let modules = await this.import(...src);
|
|
69
|
+
if (!Array.isArray(modules)) {
|
|
70
|
+
modules = [modules];
|
|
71
|
+
}
|
|
72
|
+
const styles = modules.map((module2) => module2.default);
|
|
73
|
+
document.adoptedStyleSheets = [...document.adoptedStyleSheets, ...styles];
|
|
74
|
+
}
|
|
75
|
+
minFileName(fileName) {
|
|
76
|
+
const segments = fileName.split(".");
|
|
77
|
+
const ext = segments.pop();
|
|
78
|
+
if (isDebug()) {
|
|
79
|
+
return segments.join(".") + ".min." + ext;
|
|
80
|
+
}
|
|
81
|
+
return fileName;
|
|
82
|
+
}
|
|
83
|
+
asImported(name) {
|
|
84
|
+
if (!imports[name]) {
|
|
85
|
+
imports[name] = {
|
|
86
|
+
promise: Promise.resolve(),
|
|
87
|
+
resolve: void 0
|
|
88
|
+
};
|
|
89
|
+
} else {
|
|
90
|
+
imports[name]?.resolve?.();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Add after import hook for some url or id.
|
|
95
|
+
*/
|
|
96
|
+
afterImported(name, callback) {
|
|
97
|
+
if (!imports[name]) {
|
|
98
|
+
let r;
|
|
99
|
+
imports[name] = {
|
|
100
|
+
promise: new Promise((resolve) => {
|
|
101
|
+
r = resolve;
|
|
102
|
+
})
|
|
103
|
+
};
|
|
104
|
+
imports[name].resolve = r;
|
|
105
|
+
}
|
|
106
|
+
imports[name].promise.then(callback);
|
|
107
|
+
return imports[name].promise;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async function useLegacyMethods(app) {
|
|
111
|
+
const http = await useHttpClient();
|
|
112
|
+
app.use(LegacyLoader);
|
|
113
|
+
handleUri(app);
|
|
114
|
+
handlerHelper(app);
|
|
115
|
+
handleCrypto(app);
|
|
116
|
+
app.__ = __;
|
|
117
|
+
app.trans = __;
|
|
118
|
+
app.route = route;
|
|
119
|
+
app.$http = http;
|
|
120
|
+
app.directive = useUniDirective;
|
|
121
|
+
app.animate = animateTo;
|
|
122
|
+
app.$animation = { to: animateTo };
|
|
123
|
+
app.addMessage = renderMessage;
|
|
124
|
+
app.clearMessages = clearMessages;
|
|
125
|
+
app.notify = notify;
|
|
126
|
+
app.clearNotifies = clearNotifies;
|
|
127
|
+
app.loadAlpine = loadAlpine;
|
|
128
|
+
app.initAlpine = initAlpineComponent;
|
|
129
|
+
app.beforeAlpineInit = prepareAlpine;
|
|
130
|
+
app.prepareAlpine = prepareAlpine;
|
|
131
|
+
handleUI(app);
|
|
132
|
+
await handleFormGrid(app);
|
|
133
|
+
app.formValidation = useFormValidation;
|
|
134
|
+
app.$validation = {
|
|
135
|
+
get: useFormValidationSync,
|
|
136
|
+
getField: useFieldValidationSync,
|
|
137
|
+
addGlobalValidator,
|
|
138
|
+
import: () => useFormValidation()
|
|
139
|
+
};
|
|
140
|
+
app.stack = useStack;
|
|
141
|
+
app.queue = useQueue;
|
|
142
|
+
}
|
|
143
|
+
function handleCrypto(app) {
|
|
144
|
+
app.base64Encode = base64UrlEncode;
|
|
145
|
+
app.base64Decode = base64UrlDecode;
|
|
146
|
+
app.uid = uid;
|
|
147
|
+
app.tid = tid;
|
|
148
|
+
app.serial = serial;
|
|
149
|
+
}
|
|
150
|
+
function handleUri(app) {
|
|
151
|
+
app.uri = useSystemUri;
|
|
152
|
+
app.asset = useAssetUri;
|
|
153
|
+
}
|
|
154
|
+
function handlerHelper(app) {
|
|
155
|
+
app.domready = domready;
|
|
156
|
+
app.selectOne = selectOne;
|
|
157
|
+
app.selectAll = selectAll;
|
|
158
|
+
app.each = selectAll;
|
|
159
|
+
app.getBoundedInstance = getBoundedInstance;
|
|
160
|
+
app.getBoundedInstanceList = getBoundedInstanceList;
|
|
161
|
+
app.module = module;
|
|
162
|
+
app.h = h;
|
|
163
|
+
app.html = html;
|
|
164
|
+
app.delegate = delegate;
|
|
165
|
+
app.debounce = debounce;
|
|
166
|
+
app.throttle = throttle;
|
|
167
|
+
app.isDebug = isDebug;
|
|
168
|
+
app.confirm = simpleConfirm;
|
|
169
|
+
app.alert = simpleAlert;
|
|
170
|
+
app.numberFormat = numberFormat;
|
|
171
|
+
app.sprintf = sprintfExports.sprintf;
|
|
172
|
+
app.vsprintf = sprintfExports.vsprintf;
|
|
173
|
+
}
|
|
174
|
+
function handleUI(app) {
|
|
175
|
+
app.$ui ??= {};
|
|
176
|
+
app.$ui.addMessage = renderMessage;
|
|
177
|
+
app.$ui.clearMessages = clearMessages;
|
|
178
|
+
app.$ui.notify = notify;
|
|
179
|
+
app.$ui.clearNotifies = clearNotifies;
|
|
180
|
+
app.$ui.loadAlpine = loadAlpine;
|
|
181
|
+
app.$ui.initAlpine = initAlpineComponent;
|
|
182
|
+
app.$ui.beforeAlpineInit = prepareAlpine;
|
|
183
|
+
app.$ui.prepareAlpine = prepareAlpine;
|
|
184
|
+
app.$ui.mark = mark;
|
|
185
|
+
app.$ui.tomSelect = useTomSelect;
|
|
186
|
+
app.$ui.slideUp = slideUp;
|
|
187
|
+
app.$ui.slideDown = slideDown;
|
|
188
|
+
app.$ui.slideToggle = slideToggle;
|
|
189
|
+
app.$ui.fadeOut = fadeOut;
|
|
190
|
+
app.$ui.fadeIn = fadeIn;
|
|
191
|
+
app.$ui.highlight = highlight;
|
|
192
|
+
app.$ui.colorPicker = useColorPicker;
|
|
193
|
+
app.$ui.disableOnSubmit = useDisableOnSubmit;
|
|
194
|
+
app.$ui.disableIfStackNotEmpty = useDisableIfStackNotEmpty;
|
|
195
|
+
app.$ui.checkboxesMultiSelect = useCheckboxesMultiSelect;
|
|
196
|
+
app.$ui.keepAlive = useKeepAlive;
|
|
197
|
+
app.$ui.bootstrap = {
|
|
198
|
+
tooltip: useBs5Tooltip
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
async function handleFormGrid(app) {
|
|
202
|
+
await useFormAsync();
|
|
203
|
+
await useGridAsync();
|
|
204
|
+
app.form = useForm;
|
|
205
|
+
app.grid = useGrid;
|
|
206
|
+
}
|
|
207
|
+
export {
|
|
208
|
+
useLegacyMethods
|
|
209
|
+
};
|
|
210
|
+
//# sourceMappingURL=legacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.js","sources":["../../../../../../node_modules/@lyrasoft/ts-toolkit/src/generic/number.ts","../../src/legacy/loader.ts","../../src/legacy/legacy.ts"],"sourcesContent":["export function numberFormat(number: string | number, decimals = 0, decPoint = '.', thousandsSep = ',') {\n number = Number(number);\n\n const str = number.toFixed(decimals ? decimals : 0).toString().split('.');\n const parts = [];\n\n for (var i = str[0].length; i > 0; i -= 3) {\n parts.unshift(str[0].substring(Math.max(0, i - 3), i));\n }\n\n str[0] = parts.join(thousandsSep ? thousandsSep : ',');\n\n return str.join(decPoint ? decPoint : '.');\n}\n","import { isDebug } from '../service';\r\n\r\nconst imports: Record<string, { promise: Promise<any>; resolve?: Function; }> = {};\r\n\r\nexport class LegacyLoader {\r\n static install(app: any) {\r\n const loader = app.$loader = new this(app);\r\n\r\n app.import = loader.import.bind(loader);\r\n app.importSync = loader.importSync.bind(loader);\r\n app.importCSS = loader.importCSS.bind(loader);\r\n app.minFileName = loader.minFileName.bind(loader);\r\n app.afterImported = loader.afterImported.bind(loader);\r\n }\r\n\r\n constructor(protected app: any) {\r\n //\r\n }\r\n\r\n doImport(src: string): Promise<any> {\r\n return S.import(src);\r\n }\r\n\r\n /**\r\n * Import modules or scripts.\r\n */\r\n import(...src: any[]): Promise<any|any[]> {\r\n if (src.length === 1) {\r\n return this.doImport(src[0]);\r\n }\r\n\r\n const promises: Promise<any>[] = [];\r\n\r\n src.forEach((link) => {\r\n promises.push(\r\n link instanceof Promise ? link : this.doImport(link)\r\n );\r\n });\r\n\r\n return Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Import sync.\r\n */\r\n importSync(...src: any): Promise<any|any[]> {\r\n let promise: Promise<any> = Promise.resolve();\r\n let url: string[];\r\n const modules: any[] = [];\r\n\r\n while (url = src.shift()) {\r\n if (!Array.isArray(url)) {\r\n url = [ url ];\r\n }\r\n\r\n const target = url;\r\n promise = promise.then(\r\n () => this.import(...target).then((m) => {\r\n modules.push(m);\r\n return modules;\r\n })\r\n );\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n /**\r\n * Import CSS files.\r\n */\r\n async importCSS(...src: any): Promise<any|any[]> {\r\n let modules: any = await this.import(...src);\r\n\r\n if (!Array.isArray(modules)) {\r\n modules = [modules];\r\n }\r\n\r\n const styles: CSSStyleSheet[] = (modules as any[]).map(module => module.default);\r\n\r\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, ...styles];\r\n }\r\n\r\n minFileName(fileName: string): string {\r\n const segments = fileName.split('.');\r\n const ext = segments.pop();\r\n\r\n if (isDebug()) {\r\n return segments.join('.') + '.min.' + ext;\r\n }\r\n\r\n return fileName;\r\n }\r\n\r\n asImported(name: string) {\r\n if (!imports[name]) {\r\n imports[name] = {\r\n promise: Promise.resolve(),\r\n resolve: undefined\r\n };\r\n } else {\r\n imports[name]?.resolve?.();\r\n }\r\n }\r\n\r\n /**\r\n * Add after import hook for some url or id.\r\n */\r\n afterImported(name: string, callback: (resolve: Function, reject?: Function) => void): Promise<any> {\r\n if (!imports[name]) {\r\n let r;\r\n imports[name] = {\r\n promise: new Promise((resolve) => {\r\n r = resolve;\r\n }),\r\n };\r\n\r\n imports[name].resolve = r;\r\n }\r\n\r\n imports[name].promise.then(callback);\r\n\r\n return imports[name].promise;\r\n }\r\n}\r\n\r\n","import { numberFormat } from '@lyrasoft/ts-toolkit/generic';\r\nimport { sprintf, vsprintf } from 'sprintf-js';\r\nimport {\r\n addGlobalValidator,\r\n useBs5Tooltip,\r\n useCheckboxesMultiSelect,\r\n useFieldValidationSync,\r\n useForm,\r\n useFormAsync,\r\n useFormValidation,\r\n useFormValidationSync,\r\n useGrid,\r\n useGridAsync,\r\n useHttpClient,\r\n useQueue,\r\n useStack,\r\n useTomSelect,\r\n useUniDirective\r\n} from '../composable';\r\nimport {\r\n __,\r\n animateTo,\r\n base64UrlDecode,\r\n base64UrlEncode,\r\n clearMessages,\r\n clearNotifies,\r\n debounce,\r\n delegate,\r\n domready,\r\n fadeIn,\r\n fadeOut,\r\n getBoundedInstance,\r\n getBoundedInstanceList,\r\n h,\r\n highlight,\r\n html,\r\n initAlpineComponent,\r\n isDebug,\r\n loadAlpine,\r\n mark,\r\n module,\r\n notify,\r\n prepareAlpine,\r\n renderMessage,\r\n route,\r\n selectAll,\r\n selectOne,\r\n serial,\r\n simpleAlert,\r\n simpleConfirm,\r\n slideDown,\r\n slideToggle,\r\n slideUp,\r\n throttle,\r\n tid,\r\n uid,\r\n useAssetUri,\r\n useColorPicker,\r\n useDisableIfStackNotEmpty,\r\n useDisableOnSubmit,\r\n useKeepAlive,\r\n useSystemUri\r\n} from '../service';\r\nimport { LegacyLoader } from './loader';\r\n\r\nexport async function useLegacyMethods(app: any) {\r\n const http = await useHttpClient();\r\n\r\n app.use(LegacyLoader);\r\n\r\n handleUri(app);\r\n handlerHelper(app);\r\n handleCrypto(app);\r\n\r\n app.__ = __;\r\n app.trans = __;\r\n app.route = route;\r\n app.$http = http;\r\n app.directive = useUniDirective;\r\n\r\n app.animate = animateTo;\r\n app.$animation = { to: animateTo };\r\n\r\n app.addMessage = renderMessage;\r\n app.clearMessages = clearMessages;\r\n app.notify = notify;\r\n app.clearNotifies = clearNotifies;\r\n\r\n app.loadAlpine = loadAlpine;\r\n app.initAlpine = initAlpineComponent;\r\n app.beforeAlpineInit = prepareAlpine;\r\n app.prepareAlpine = prepareAlpine;\r\n\r\n handleUI(app);\r\n\r\n await handleFormGrid(app);\r\n\r\n app.formValidation = useFormValidation;\r\n app.$validation = {\r\n get: useFormValidationSync,\r\n getField: useFieldValidationSync,\r\n addGlobalValidator: addGlobalValidator,\r\n import: () => useFormValidation()\r\n };\r\n\r\n app.stack = useStack;\r\n app.queue = useQueue;\r\n}\r\n\r\nfunction handleCrypto(app: any) {\r\n app.base64Encode = base64UrlEncode;\r\n app.base64Decode = base64UrlDecode;\r\n // app.uuid4 = uuid4;\r\n app.uid = uid;\r\n app.tid = tid;\r\n // app.md5 = md5;\r\n app.serial = serial;\r\n}\r\n\r\nfunction handleUri(app: any) {\r\n app.uri = useSystemUri;\r\n app.asset = useAssetUri;\r\n}\r\n\r\nfunction handlerHelper(app: any) {\r\n app.domready = domready;\r\n app.selectOne = selectOne;\r\n app.selectAll = selectAll;\r\n app.each = selectAll;\r\n app.getBoundedInstance = getBoundedInstance;\r\n app.getBoundedInstanceList = getBoundedInstanceList;\r\n app.module = module;\r\n app.h = h;\r\n app.html = html;\r\n // app.$get = get;\r\n // app.$set = set;\r\n app.delegate = delegate;\r\n app.debounce = debounce;\r\n app.throttle = throttle;\r\n app.isDebug = isDebug;\r\n app.confirm = simpleConfirm;\r\n app.alert = simpleAlert;\r\n app.numberFormat = numberFormat;\r\n app.sprintf = sprintf;\r\n app.vsprintf = vsprintf;\r\n // app.genRandomString = genRandomString;\r\n // app.defaultsDeep = defaultsDeep;\r\n}\r\n\r\nfunction handleUI(app: any) {\r\n app.$ui ??= {};\r\n app.$ui.addMessage = renderMessage;\r\n app.$ui.clearMessages = clearMessages;\r\n app.$ui.notify = notify;\r\n app.$ui.clearNotifies = clearNotifies;\r\n\r\n app.$ui.loadAlpine = loadAlpine;\r\n app.$ui.initAlpine = initAlpineComponent;\r\n app.$ui.beforeAlpineInit = prepareAlpine;\r\n app.$ui.prepareAlpine = prepareAlpine;\r\n\r\n app.$ui.mark = mark;\r\n app.$ui.tomSelect = useTomSelect;\r\n app.$ui.slideUp = slideUp;\r\n app.$ui.slideDown = slideDown;\r\n app.$ui.slideToggle = slideToggle;\r\n app.$ui.fadeOut = fadeOut;\r\n app.$ui.fadeIn = fadeIn;\r\n app.$ui.highlight = highlight;\r\n app.$ui.colorPicker = useColorPicker;\r\n app.$ui.disableOnSubmit = useDisableOnSubmit;\r\n app.$ui.disableIfStackNotEmpty = useDisableIfStackNotEmpty;\r\n app.$ui.checkboxesMultiSelect = useCheckboxesMultiSelect;\r\n app.$ui.keepAlive = useKeepAlive;\r\n app.$ui.bootstrap = {\r\n tooltip: useBs5Tooltip\r\n };\r\n}\r\n\r\nasync function handleFormGrid(app: any) {\r\n await useFormAsync();\r\n await useGridAsync();\r\n\r\n app.form = useForm;\r\n app.grid = useGrid;\r\n}\r\n"],"names":["module","sprintf","vsprintf"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { a as useUniDirective, x as getBoundedInstance, v as selectOne, u as useHttpClient, B as html, a5 as mergeDeep } from "./unicorn.js";
|
|
2
|
+
const nope = () => {
|
|
3
|
+
};
|
|
4
|
+
const defaultOptions = {
|
|
5
|
+
ajax: {
|
|
6
|
+
url: null,
|
|
7
|
+
value_field: "value",
|
|
8
|
+
data: {}
|
|
9
|
+
},
|
|
10
|
+
source: void 0,
|
|
11
|
+
text_field: "title",
|
|
12
|
+
value_field: "id",
|
|
13
|
+
first_option: void 0,
|
|
14
|
+
default_value: null,
|
|
15
|
+
initial_load: true,
|
|
16
|
+
empty_mark: "__EMPTY__",
|
|
17
|
+
hooks: {
|
|
18
|
+
before_request: nope,
|
|
19
|
+
after_request: nope
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
class ListDependent {
|
|
23
|
+
element;
|
|
24
|
+
dependent;
|
|
25
|
+
options;
|
|
26
|
+
abortController = null;
|
|
27
|
+
static handle(el, dependent, options = {}) {
|
|
28
|
+
return getBoundedInstance(el, "list-dependent", () => {
|
|
29
|
+
return new this(el, dependent, options);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
constructor(element, dependent, options = {}) {
|
|
33
|
+
this.options = this.mergeOptions(options);
|
|
34
|
+
this.element = selectOne(element);
|
|
35
|
+
if (!dependent) {
|
|
36
|
+
dependent = this.element.dataset.dependent || "";
|
|
37
|
+
}
|
|
38
|
+
this.dependent = selectOne(dependent);
|
|
39
|
+
this.bindEvents();
|
|
40
|
+
if (this.options.initial_load) {
|
|
41
|
+
this.changeList(this.dependent.value, true);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Bind events.
|
|
46
|
+
*/
|
|
47
|
+
bindEvents() {
|
|
48
|
+
this.dependent.addEventListener("change", (event) => {
|
|
49
|
+
this.changeList(event.currentTarget?.value);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Update the list elements.
|
|
54
|
+
*
|
|
55
|
+
* @param {*} value
|
|
56
|
+
* @param {bool} initial
|
|
57
|
+
*/
|
|
58
|
+
changeList(value, initial = false) {
|
|
59
|
+
value = value || this.dependent.value;
|
|
60
|
+
if (value === "") {
|
|
61
|
+
value = this.options.empty_mark;
|
|
62
|
+
}
|
|
63
|
+
if (this.options.ajax.url) {
|
|
64
|
+
this.ajaxUpdate(value);
|
|
65
|
+
} else if (this.options.source) {
|
|
66
|
+
this.sourceUpdate(value, initial);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Update list by source.
|
|
71
|
+
*/
|
|
72
|
+
sourceUpdate(value, initial = false) {
|
|
73
|
+
const source = this.options.source;
|
|
74
|
+
if (!source) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.beforeHook(value, this.element, this.dependent);
|
|
78
|
+
if (source[value]) {
|
|
79
|
+
this.updateListElements(source[value]);
|
|
80
|
+
} else {
|
|
81
|
+
this.updateListElements([]);
|
|
82
|
+
if (!initial && value !== "" && parseInt(value) !== 0) {
|
|
83
|
+
console.log("List for value: " + value + " not found.");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
this.afterHook(value, this.element, this.dependent);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Do ajax.
|
|
90
|
+
*
|
|
91
|
+
* @param {string} value
|
|
92
|
+
*/
|
|
93
|
+
async ajaxUpdate(value) {
|
|
94
|
+
let data = {};
|
|
95
|
+
data[this.options.ajax.value_field] = value;
|
|
96
|
+
if (typeof this.options.ajax.data === "object") {
|
|
97
|
+
data = { ...data, ...this.options.ajax.data };
|
|
98
|
+
} else if (typeof this.options.ajax.data === "function") {
|
|
99
|
+
data = this.options.ajax.data(data, this) || data;
|
|
100
|
+
}
|
|
101
|
+
this.beforeHook(value, this.element, this.dependent);
|
|
102
|
+
this.abort();
|
|
103
|
+
let url = this.options.ajax.url;
|
|
104
|
+
if (typeof url === "function") {
|
|
105
|
+
url = url(this);
|
|
106
|
+
}
|
|
107
|
+
if (!url) {
|
|
108
|
+
throw new Error("Ajax URL is not set.");
|
|
109
|
+
}
|
|
110
|
+
const http = await useHttpClient();
|
|
111
|
+
this.abortController = new AbortController();
|
|
112
|
+
try {
|
|
113
|
+
const res = await http.get(url, {
|
|
114
|
+
params: data,
|
|
115
|
+
signal: this.abortController.signal
|
|
116
|
+
});
|
|
117
|
+
const { success, data: returnData } = res.data;
|
|
118
|
+
if (success) {
|
|
119
|
+
this.updateListElements(returnData);
|
|
120
|
+
} else {
|
|
121
|
+
console.error(returnData);
|
|
122
|
+
}
|
|
123
|
+
} catch (e) {
|
|
124
|
+
console.error(e);
|
|
125
|
+
} finally {
|
|
126
|
+
this.afterHook(value, this.element, this.dependent);
|
|
127
|
+
this.abortController = null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
abort() {
|
|
131
|
+
if (this.abortController) {
|
|
132
|
+
this.abortController.abort();
|
|
133
|
+
this.abortController = null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
updateListElements(items) {
|
|
137
|
+
const textField = this.options.text_field;
|
|
138
|
+
const valueField = this.options.value_field;
|
|
139
|
+
this.element.innerHTML = "";
|
|
140
|
+
if (this.options.first_option && Array.isArray(items)) {
|
|
141
|
+
items.unshift({});
|
|
142
|
+
items[0][textField] = this.options.first_option[textField];
|
|
143
|
+
items[0][valueField] = this.options.first_option[valueField];
|
|
144
|
+
}
|
|
145
|
+
for (const i in items) {
|
|
146
|
+
const item = items[i];
|
|
147
|
+
if (Array.isArray(item)) {
|
|
148
|
+
const group = html(`<optgroup label="${i}"></optgroup>`);
|
|
149
|
+
for (const k in item) {
|
|
150
|
+
const child = item[k];
|
|
151
|
+
this.appendOptionTo({
|
|
152
|
+
value: child[valueField],
|
|
153
|
+
text: child[textField],
|
|
154
|
+
attributes: child.attributes
|
|
155
|
+
}, group);
|
|
156
|
+
}
|
|
157
|
+
this.element.appendChild(group);
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
this.appendOptionTo({
|
|
161
|
+
value: item[valueField],
|
|
162
|
+
text: item[textField],
|
|
163
|
+
attributes: item.attributes
|
|
164
|
+
}, this.element);
|
|
165
|
+
}
|
|
166
|
+
this.element.dispatchEvent(new CustomEvent("change"));
|
|
167
|
+
this.element.dispatchEvent(new CustomEvent("list:updated"));
|
|
168
|
+
}
|
|
169
|
+
appendOptionTo(item, parent) {
|
|
170
|
+
const value = item.value;
|
|
171
|
+
const option = html("<option>" + item.text + "</option>");
|
|
172
|
+
option.setAttribute("value", value);
|
|
173
|
+
if (item.attributes) {
|
|
174
|
+
for (const index in item.attributes) {
|
|
175
|
+
const val = item.attributes[index];
|
|
176
|
+
option.setAttribute(index, val);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (this.isSelected(value)) {
|
|
180
|
+
option.setAttribute("selected", "selected");
|
|
181
|
+
}
|
|
182
|
+
parent.appendChild(option);
|
|
183
|
+
}
|
|
184
|
+
isSelected(value) {
|
|
185
|
+
let defaultValues = [];
|
|
186
|
+
let defValue = this.element.dataset.selected ?? this.options.default_value;
|
|
187
|
+
if (typeof defValue === "function") {
|
|
188
|
+
defValue = defValue(value, this);
|
|
189
|
+
}
|
|
190
|
+
if (Array.isArray(defValue)) {
|
|
191
|
+
defaultValues = defValue;
|
|
192
|
+
} else if (defValue && typeof defValue === "object") {
|
|
193
|
+
defaultValues = Object.keys(defValue);
|
|
194
|
+
} else {
|
|
195
|
+
defaultValues = [defValue];
|
|
196
|
+
}
|
|
197
|
+
return defaultValues.indexOf(value) !== -1;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Before hook.
|
|
201
|
+
*/
|
|
202
|
+
beforeHook(value, element, dependent) {
|
|
203
|
+
const before = this.options.hooks.before_request;
|
|
204
|
+
return before.call(this, value, element, dependent);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* After hook.
|
|
208
|
+
*/
|
|
209
|
+
afterHook(value, element, dependent) {
|
|
210
|
+
const after = this.options.hooks.after_request;
|
|
211
|
+
return after.call(this, value, element, dependent);
|
|
212
|
+
}
|
|
213
|
+
mergeOptions(options) {
|
|
214
|
+
return mergeDeep({}, defaultOptions, options);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const ready = /* @__PURE__ */ useUniDirective("list-dependent", {
|
|
218
|
+
mounted(el, binding) {
|
|
219
|
+
const options = JSON.parse(binding.value);
|
|
220
|
+
ListDependent.handle(el, options.dependent, options);
|
|
221
|
+
},
|
|
222
|
+
updated(el, binding) {
|
|
223
|
+
const options = JSON.parse(binding.value);
|
|
224
|
+
ListDependent.handle(el).mergeOptions(options);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
export {
|
|
228
|
+
ListDependent,
|
|
229
|
+
ready
|
|
230
|
+
};
|
|
231
|
+
//# sourceMappingURL=list-dependent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-dependent.js","sources":["../../src/module/list-dependent.ts"],"sourcesContent":["\r\nimport type { CancelTokenSource } from 'axios';\r\nimport { useHttpClient, useUniDirective } from '../composable';\r\nimport { getBoundedInstance, html, selectOne } from '../service';\r\nimport { mergeDeep } from '../utilities';\r\n\r\nconst nope = () => {};\r\n\r\nexport interface ListDependentOptions {\r\n ajax: {\r\n url: string | null | ((self: ListDependent) => string);\r\n value_field: string;\r\n data: Record<string, any> | ((data: Record<string, any>, self: ListDependent) => Record<string, any>);\r\n };\r\n source?: Record<string, any>;\r\n text_field: string;\r\n value_field: string;\r\n first_option?: Record<string, any>;\r\n default_value: any;\r\n initial_load: boolean;\r\n empty_mark: string;\r\n hooks: {\r\n before_request: (value: any, element: HTMLSelectElement, dependent: HTMLSelectElement) => any;\r\n after_request: (value: any, element: HTMLSelectElement, dependent: HTMLSelectElement) => any;\r\n };\r\n}\r\n\r\nconst defaultOptions: ListDependentOptions = {\r\n ajax: {\r\n url: null,\r\n value_field: 'value',\r\n data: {},\r\n },\r\n source: undefined,\r\n text_field: 'title',\r\n value_field: 'id',\r\n first_option: undefined,\r\n default_value: null,\r\n initial_load: true,\r\n empty_mark: '__EMPTY__',\r\n hooks: {\r\n before_request: nope,\r\n after_request: nope\r\n }\r\n};\r\n\r\ntype ListItems = Record<string, any>[];\r\ntype MaybeGroupedListItems = Record<string, ListItems> | ListItems;\r\n\r\nexport class ListDependent {\r\n element: HTMLSelectElement;\r\n dependent: HTMLSelectElement;\r\n options: ListDependentOptions;\r\n abortController: AbortController | null = null;\r\n\r\n static handle(el: string | HTMLSelectElement, dependent?: string | HTMLSelectElement, options: Partial<ListDependentOptions> = {}): ListDependent {\r\n return getBoundedInstance(el, 'list-dependent', () => {\r\n return new this(el, dependent, options);\r\n });\r\n }\r\n\r\n constructor(element: string | HTMLSelectElement, dependent?: string | HTMLSelectElement, options: Partial<ListDependentOptions> = {}) {\r\n this.options = this.mergeOptions(options);\r\n\r\n this.element = selectOne<HTMLSelectElement>(element)!;\r\n\r\n if (!dependent) {\r\n dependent = this.element.dataset.dependent || '';\r\n }\r\n\r\n this.dependent = selectOne<HTMLSelectElement>(dependent)!;\r\n\r\n this.bindEvents();\r\n\r\n if (this.options.initial_load) {\r\n this.changeList(this.dependent.value, true);\r\n }\r\n }\r\n\r\n /**\r\n * Bind events.\r\n */\r\n bindEvents() {\r\n this.dependent.addEventListener('change', (event) => {\r\n this.changeList((event.currentTarget as HTMLSelectElement)?.value);\r\n });\r\n }\r\n\r\n /**\r\n * Update the list elements.\r\n *\r\n * @param {*} value\r\n * @param {bool} initial\r\n */\r\n changeList(value: string, initial = false) {\r\n value = value || this.dependent.value;\r\n\r\n // Empty mark\r\n if (value === '') {\r\n value = this.options.empty_mark;\r\n }\r\n\r\n if (this.options.ajax.url) {\r\n this.ajaxUpdate(value);\r\n } else if (this.options.source) {\r\n this.sourceUpdate(value, initial);\r\n }\r\n }\r\n\r\n /**\r\n * Update list by source.\r\n */\r\n sourceUpdate(value: string, initial = false) {\r\n const source = this.options.source;\r\n\r\n if (!source) {\r\n return;\r\n }\r\n\r\n this.beforeHook(value, this.element, this.dependent);\r\n\r\n if (source[value]) {\r\n this.updateListElements(source[value]);\r\n } else {\r\n this.updateListElements([]);\r\n\r\n if (!initial && value !== '' && parseInt(value) !== 0) {\r\n console.log('List for value: ' + value + ' not found.');\r\n }\r\n }\r\n\r\n this.afterHook(value, this.element, this.dependent);\r\n }\r\n\r\n /**\r\n * Do ajax.\r\n *\r\n * @param {string} value\r\n */\r\n async ajaxUpdate(value: string) {\r\n let data: Record<string, any> = {};\r\n\r\n data[this.options.ajax.value_field] = value;\r\n\r\n if (typeof this.options.ajax.data === 'object') {\r\n data = { ...data, ...this.options.ajax.data };\r\n } else if (typeof this.options.ajax.data === 'function') {\r\n data = this.options.ajax.data(data, this) || data;\r\n }\r\n\r\n this.beforeHook(value, this.element, this.dependent);\r\n\r\n this.abort();\r\n\r\n let url = this.options.ajax.url;\r\n\r\n if (typeof url === 'function') {\r\n url = url(this);\r\n }\r\n\r\n if (!url) {\r\n throw new Error('Ajax URL is not set.');\r\n }\r\n\r\n const http = await useHttpClient();\r\n\r\n this.abortController = new AbortController();\r\n\r\n try {\r\n const res = await http.get<{\r\n success: boolean;\r\n data: any;\r\n }>(url, {\r\n params: data,\r\n signal: this.abortController.signal\r\n });\r\n\r\n const { success, data: returnData } = res.data;\r\n\r\n if (success) {\r\n this.updateListElements(returnData);\r\n } else {\r\n console.error(returnData);\r\n }\r\n\r\n } catch (e) {\r\n console.error(e);\r\n } finally {\r\n this.afterHook(value, this.element, this.dependent);\r\n this.abortController = null;\r\n }\r\n }\r\n\r\n abort() {\r\n if (this.abortController) {\r\n this.abortController.abort();\r\n this.abortController = null;\r\n }\r\n }\r\n\r\n updateListElements(items: MaybeGroupedListItems) {\r\n const textField = this.options.text_field;\r\n const valueField = this.options.value_field;\r\n this.element.innerHTML = '';\r\n\r\n if (this.options.first_option && Array.isArray(items)) {\r\n items.unshift({});\r\n items[0][textField] = this.options.first_option[textField];\r\n items[0][valueField] = this.options.first_option[valueField];\r\n }\r\n\r\n for (const i in items) {\r\n const item = items[i as keyof typeof items] as Record<string, any> | ListItems;\r\n\r\n if (Array.isArray(item)) {\r\n const group = html(`<optgroup label=\"${i}\"></optgroup>`);\r\n\r\n for (const k in item) {\r\n const child = item[k];\r\n this.appendOptionTo({\r\n value: child[valueField],\r\n text: child[textField],\r\n attributes: child.attributes,\r\n }, group);\r\n }\r\n\r\n this.element.appendChild(group);\r\n continue;\r\n }\r\n\r\n this.appendOptionTo({\r\n value: item[valueField],\r\n text: item[textField],\r\n attributes: item.attributes,\r\n }, this.element);\r\n }\r\n\r\n this.element.dispatchEvent(new CustomEvent('change'));\r\n this.element.dispatchEvent(new CustomEvent('list:updated'));\r\n }\r\n\r\n appendOptionTo(item: any, parent: any) {\r\n const value = item.value;\r\n const option = html('<option>' + item.text + '</option>');\r\n option.setAttribute('value', value);\r\n\r\n if (item.attributes) {\r\n for (const index in item.attributes) {\r\n const val = item.attributes[index];\r\n option.setAttribute(index, val);\r\n }\r\n }\r\n\r\n if (this.isSelected(value)) {\r\n option.setAttribute('selected', 'selected');\r\n }\r\n\r\n parent.appendChild(option);\r\n }\r\n\r\n isSelected(value: string) {\r\n let defaultValues: any[] = [];\r\n\r\n // Convert all types to array\r\n let defValue = this.element.dataset.selected ?? this.options.default_value;\r\n\r\n if (typeof defValue === 'function') {\r\n defValue = defValue(value, this);\r\n }\r\n\r\n if (Array.isArray(defValue)) {\r\n defaultValues = defValue;\r\n } else if (defValue && typeof defValue === 'object') {\r\n defaultValues = Object.keys(defValue);\r\n } else {\r\n defaultValues = [defValue];\r\n }\r\n\r\n return defaultValues.indexOf(value) !== -1;\r\n }\r\n\r\n /**\r\n * Before hook.\r\n */\r\n beforeHook(value: string, element: HTMLSelectElement, dependent: HTMLSelectElement) {\r\n const before = this.options.hooks.before_request;\r\n\r\n return before.call(this, value, element, dependent);\r\n }\r\n\r\n /**\r\n * After hook.\r\n */\r\n afterHook(value: string, element: HTMLSelectElement, dependent: HTMLSelectElement) {\r\n const after = this.options.hooks.after_request;\r\n\r\n return after.call(this, value, element, dependent);\r\n }\r\n\r\n mergeOptions(options: Partial<ListDependentOptions>): ListDependentOptions {\r\n return mergeDeep<ListDependentOptions>({}, defaultOptions, options);\r\n }\r\n}\r\n\r\nexport const ready = useUniDirective<HTMLSelectElement>('list-dependent', {\r\n mounted(el, binding) {\r\n const options = JSON.parse(binding.value);\r\n\r\n ListDependent.handle(el, options.dependent, options);\r\n },\r\n updated(el, binding) {\r\n const options = JSON.parse(binding.value);\r\n\r\n ListDependent.handle(el).mergeOptions(options);\r\n }\r\n});\r\n\r\nexport type ListDependentModule = {\r\n ListDependent: typeof ListDependent;\r\n ready: typeof ready;\r\n};\r\n"],"names":[],"mappings":"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"}
|