@windwalker-io/unicorn-next 0.1.7 → 0.1.9
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 -18
- package/.gulp.json +7 -7
- package/bin/release.mjs +47 -47
- package/dist/chunks/button-radio.js.map +1 -1
- package/dist/chunks/checkboxes-multi-select.js.map +1 -1
- package/dist/chunks/field-cascade-select.js +2 -2
- package/dist/chunks/field-cascade-select.js.map +1 -1
- package/dist/chunks/field-file-drag.js.map +1 -1
- package/dist/chunks/field-flatpickr.js.map +1 -1
- package/dist/chunks/field-modal-select.js.map +1 -1
- package/dist/chunks/field-modal-tree.js +2 -2
- package/dist/chunks/field-modal-tree.js.map +1 -1
- package/dist/chunks/field-multi-uploader.js.map +1 -1
- package/dist/chunks/field-repeatable.js.map +1 -1
- package/dist/chunks/field-single-image-drag.js.map +1 -1
- package/dist/chunks/form.js.map +1 -1
- package/dist/chunks/grid.js.map +1 -1
- package/dist/chunks/http-client.js.map +1 -1
- package/dist/chunks/iframe-modal.js.map +1 -1
- package/dist/chunks/index.js +1 -15
- package/dist/chunks/index.js.map +1 -1
- package/dist/chunks/keep-tab.js +2 -2
- package/dist/chunks/keep-tab.js.map +1 -1
- package/dist/chunks/legacy.js +3 -3
- package/dist/chunks/legacy.js.map +1 -1
- package/dist/chunks/list-dependent.js.map +1 -1
- package/dist/chunks/s3-multipart-uploader.js +23 -2
- package/dist/chunks/s3-multipart-uploader.js.map +1 -1
- package/dist/chunks/s3-uploader.js.map +1 -1
- package/dist/chunks/show-on.js +2 -2
- package/dist/chunks/show-on.js.map +1 -1
- package/dist/chunks/tinymce.js.map +1 -1
- package/dist/chunks/ui-bootstrap5.js.map +1 -1
- package/dist/chunks/unicorn.js +108 -89
- package/dist/chunks/unicorn.js.map +1 -1
- package/dist/chunks/validation.js.map +1 -1
- package/dist/index.d.ts +28 -6
- package/dist/unicorn.js +43 -41
- package/fusionfile.mjs +155 -155
- package/package.json +104 -104
- package/scss/bootstrap/multi-level-menu.scss +121 -121
- package/scss/editor.scss +116 -116
- package/scss/field/file-drag.scss +102 -102
- package/scss/field/single-image-drag.scss +88 -88
- package/scss/field/vue-drag-uploader.scss +160 -160
- package/scss/switcher.scss +156 -156
- package/src/app.ts +128 -128
- package/src/bootstrap/button-radio.ts +208 -208
- package/src/bootstrap/keep-tab.ts +155 -155
- package/src/composable/index.ts +22 -22
- package/src/composable/useCheckboxesMultiSelect.ts +22 -22
- package/src/composable/useFieldCascadeSelect.ts +9 -9
- package/src/composable/useFieldFileDrag.ts +9 -9
- package/src/composable/useFieldFlatpickr.ts +3 -3
- package/src/composable/useFieldModalSelect.ts +6 -6
- package/src/composable/useFieldModalTree.ts +3 -3
- package/src/composable/useFieldMultiUploader.ts +9 -9
- package/src/composable/useFieldRepeatable.ts +9 -9
- package/src/composable/useFieldSingleImageDrag.ts +9 -9
- package/src/composable/useForm.ts +43 -43
- package/src/composable/useGrid.ts +57 -57
- package/src/composable/useHttp.ts +9 -9
- package/src/composable/useIframeModal.ts +10 -10
- package/src/composable/useListDependent.ts +26 -26
- package/src/composable/useQueue.ts +13 -13
- package/src/composable/useS3Uploader.ts +32 -32
- package/src/composable/useShowOn.ts +9 -9
- package/src/composable/useStack.ts +13 -13
- package/src/composable/useTinymce.ts +29 -29
- package/src/composable/useTomSelect.ts +72 -72
- package/src/composable/useUIBootstrap5.ts +48 -48
- package/src/composable/useUniDirective.ts +43 -43
- package/src/composable/useValidation.ts +50 -50
- package/src/data.ts +34 -34
- package/src/events.ts +82 -82
- package/src/legacy/legacy.ts +190 -190
- package/src/legacy/loader.ts +125 -125
- package/src/module/checkboxes-multi-select.ts +54 -54
- package/src/module/field-cascade-select.ts +292 -292
- package/src/module/field-file-drag.ts +295 -295
- package/src/module/field-flatpickr.ts +130 -130
- package/src/module/field-modal-select.ts +179 -179
- package/src/module/field-modal-tree.ts +31 -31
- package/src/module/field-multi-uploader.ts +368 -368
- package/src/module/field-repeatable.ts +202 -202
- package/src/module/field-single-image-drag.ts +477 -477
- package/src/module/form.ts +223 -223
- package/src/module/grid.ts +479 -479
- package/src/module/http-client.ts +248 -248
- package/src/module/iframe-modal.ts +170 -170
- package/src/module/list-dependent.ts +321 -321
- package/src/module/s3-multipart-uploader.ts +330 -300
- package/src/module/s3-uploader.ts +234 -234
- package/src/module/show-on.ts +175 -175
- package/src/module/tinymce.ts +276 -276
- package/src/module/ui-bootstrap5.ts +116 -116
- package/src/module/validation.ts +1046 -1046
- package/src/plugin/index.ts +1 -1
- package/src/plugin/php-adapter.ts +72 -72
- package/src/polyfill/form-request-submit.ts +31 -31
- package/src/polyfill/index.ts +9 -9
- package/src/service/animate.ts +58 -58
- package/src/service/crypto.ts +27 -27
- package/src/service/dom-watcher.ts +62 -62
- package/src/service/dom.ts +291 -265
- package/src/service/helper.ts +52 -48
- package/src/service/index.ts +10 -10
- package/src/service/lang.ts +122 -122
- package/src/service/loader.ts +152 -152
- package/src/service/router.ts +118 -118
- package/src/service/ui.ts +525 -525
- package/src/service/uri.ts +106 -106
- package/src/types/base.ts +9 -9
- package/src/types/index.ts +4 -4
- package/src/types/modal-tree.ts +12 -12
- package/src/types/plugin.ts +6 -6
- package/src/types/shims.d.ts +18 -18
- package/src/types/ui.ts +6 -6
- package/src/unicorn.ts +79 -79
- package/src/utilities/arr.ts +25 -25
- package/src/utilities/base.ts +9 -9
- package/src/utilities/data.ts +48 -48
- package/src/utilities/index.ts +5 -5
- package/src/utilities/tree.ts +20 -20
- package/src/vue/components/ModalTree/ModalTreeApp.vue +175 -175
- package/src/vue/components/ModalTree/TreeItem.vue +262 -262
- package/src/vue/components/ModalTree/TreeModal.vue +225 -225
- package/tests/test.js +4 -4
- package/tsconfig.js.json +25 -25
- package/tsconfig.json +17 -17
- package/vite.assets.config.ts +61 -61
- package/vite.config.test.ts +36 -36
- package/vite.config.ts +112 -112
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"show-on.js","sources":["../../../../../../node_modules/lodash-es/_baseFindIndex.js","../../../../../../node_modules/lodash-es/_baseIsNaN.js","../../../../../../node_modules/lodash-es/_strictIndexOf.js","../../../../../../node_modules/lodash-es/_baseIndexOf.js","../../../../../../node_modules/lodash-es/_arrayIncludes.js","../../../../../../node_modules/lodash-es/_isFlattenable.js","../../../../../../node_modules/lodash-es/_baseFlatten.js","../../../../../../node_modules/lodash-es/_setCacheAdd.js","../../../../../../node_modules/lodash-es/_setCacheHas.js","../../../../../../node_modules/lodash-es/_SetCache.js","../../../../../../node_modules/lodash-es/_cacheHas.js","../../../../../../node_modules/lodash-es/isArrayLikeObject.js","../../../../../../node_modules/lodash-es/_baseDifference.js","../../../../../../node_modules/lodash-es/difference.js","../../src/module/show-on.ts"],"sourcesContent":["/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an 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 an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseDifference;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nexport default difference;\n","\r\nimport { useUniDirective } from '../composable';\r\nimport { fadeIn, fadeOut, selectAll, selectOne, module } from '../service';\r\nimport { difference } from 'lodash-es';\r\n\r\ntype HTMLInputTypes = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\ntype Conditions = Record<string, any>;\r\n\r\nexport class ShowOn {\r\n el!: HTMLElement;\r\n input!: HTMLInputTypes;\r\n conditions: Conditions = {};\r\n targets = {};\r\n defaultReadonly: boolean | null = null;\r\n initialDisplay!: string;\r\n\r\n constructor(el: HTMLElement, conditions: Conditions) {\r\n this.el = el;\r\n this.input = this.el.querySelector<HTMLInputTypes>(\r\n this.el.dataset.inputSelector || '[data-field-input]'\r\n )!;\r\n this.conditions = conditions;\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.initialDisplay = window.getComputedStyle(this.el).display || 'block';\r\n\r\n for (const selector in this.conditions) {\r\n const value = this.conditions[selector];\r\n\r\n const target = selectOne<HTMLElement>(selector)!;\r\n\r\n if (this.input) {\r\n this.defaultReadonly = this.input.hasAttribute('readonly');\r\n }\r\n\r\n let listenTarget: HTMLInputTypes[];\r\n\r\n if (target.nodeName === 'DIV') {\r\n listenTarget = Array.from(target.querySelectorAll<HTMLInputTypes>('input, select, textarea'));\r\n } else {\r\n listenTarget = [target as HTMLInputTypes];\r\n }\r\n\r\n selectAll(listenTarget, (ele) => {\r\n ele.addEventListener('change', () => {\r\n this.updateShowState(target, value);\r\n });\r\n });\r\n\r\n this.updateShowState(target, value, 1);\r\n }\r\n }\r\n\r\n updateShowState(target: HTMLElement, value: any, duration = 300) {\r\n const matched = this.isValueMatched(target, value);\r\n\r\n if (matched) {\r\n setTimeout(() => {\r\n fadeIn(this.el, duration, this.initialDisplay);\r\n }, duration + 30);\r\n } else {\r\n if (this.input) {\r\n this.defaultReadonly ??= this.input.hasAttribute('readonly');\r\n }\r\n\r\n fadeOut(this.el, duration);\r\n }\r\n\r\n if (this.input) {\r\n if (matched) {\r\n if (!this.defaultReadonly) {\r\n this.input.removeAttribute('readonly');\r\n }\r\n\r\n this.defaultReadonly = null;\r\n } else {\r\n this.input.setAttribute('readonly', 'readonly');\r\n }\r\n }\r\n }\r\n\r\n isValueMatched(target: HTMLElement, value: any) {\r\n let targetValue: any = null;\r\n\r\n const type = this.nodeType(target);\r\n\r\n switch (type) {\r\n case 'input':\r\n case 'textarea':\r\n targetValue = (target as HTMLInputElement).value;\r\n break;\r\n case 'select':\r\n if (!(target as HTMLSelectElement).multiple) {\r\n targetValue = (target as HTMLSelectElement).value;\r\n } else {\r\n targetValue = selectAll(target.querySelectorAll('option'))\r\n .filter(option => option.selected)\r\n .map(option => option.value);\r\n }\r\n break;\r\n\r\n case 'checkbox':\r\n targetValue = (target as HTMLInputElement).checked ? (target as HTMLInputElement).value : [null, false];\r\n break;\r\n\r\n case 'radio':\r\n targetValue = target.querySelector<HTMLInputElement>('input[type=radio]:checked')?.value;\r\n break;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n if (Array.isArray(targetValue)) {\r\n return difference(value, targetValue).length === 0;\r\n }\r\n\r\n return value.indexOf(targetValue) !== -1;\r\n }\r\n\r\n if (targetValue && Array.isArray(targetValue)) {\r\n return targetValue.indexOf(value) !== -1;\r\n }\r\n\r\n return value == targetValue;\r\n }\r\n\r\n /**\r\n * @see https://github.com/nickjackson/val/blob/master/index.js#L55\r\n * @param el\r\n * @returns {string}\r\n */\r\n nodeType(el: HTMLElement): \"select\" | \"textarea\" | \"checkbox\" | \"input\" | \"radio\" {\r\n var node = el.nodeName.toLowerCase();\r\n var type = (el as HTMLInputElement).type;\r\n\r\n if (node === 'select') {\r\n return 'select';\r\n }\r\n\r\n if (node === 'textarea') {\r\n return 'textarea';\r\n }\r\n\r\n if (node === 'input') {\r\n if (type === 'checkbox') {\r\n return 'checkbox';\r\n }\r\n\r\n return 'input';\r\n }\r\n\r\n if (node === 'div') {\r\n if (el.querySelector('input[type=radio]')) {\r\n return 'radio';\r\n }\r\n }\r\n\r\n return 'input';\r\n }\r\n}\r\n\r\nexport const ready = useUniDirective('show-on', {\r\n mounted(el, { value }) {\r\n module<HTMLElement, HTMLElement>(el, 'show.on', (el) => {\r\n return new ShowOn(el, JSON.parse(value));\r\n });\r\n }\r\n});\r\n\r\nexport interface ShowOnModule {\r\n ShowOn: typeof ShowOn;\r\n ready: typeof ready;\r\n}\r\n"],"names":["Symbol","el"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13]}
|
|
1
|
+
{"version":3,"file":"show-on.js","sources":["../../../../../../node_modules/lodash-es/_baseFindIndex.js","../../../../../../node_modules/lodash-es/_baseIsNaN.js","../../../../../../node_modules/lodash-es/_strictIndexOf.js","../../../../../../node_modules/lodash-es/_baseIndexOf.js","../../../../../../node_modules/lodash-es/_arrayIncludes.js","../../../../../../node_modules/lodash-es/_isFlattenable.js","../../../../../../node_modules/lodash-es/_baseFlatten.js","../../../../../../node_modules/lodash-es/_setCacheAdd.js","../../../../../../node_modules/lodash-es/_setCacheHas.js","../../../../../../node_modules/lodash-es/_SetCache.js","../../../../../../node_modules/lodash-es/_cacheHas.js","../../../../../../node_modules/lodash-es/isArrayLikeObject.js","../../../../../../node_modules/lodash-es/_baseDifference.js","../../../../../../node_modules/lodash-es/difference.js","../../src/module/show-on.ts"],"sourcesContent":["/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an 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 an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseDifference;\n","import baseDifference from './_baseDifference.js';\nimport baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\nvar difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n});\n\nexport default difference;\n","\nimport { useUniDirective } from '../composable';\nimport { fadeIn, fadeOut, selectAll, selectOne, module } from '../service';\nimport { difference } from 'lodash-es';\n\ntype HTMLInputTypes = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\ntype Conditions = Record<string, any>;\n\nexport class ShowOn {\n el!: HTMLElement;\n input!: HTMLInputTypes;\n conditions: Conditions = {};\n targets = {};\n defaultReadonly: boolean | null = null;\n initialDisplay!: string;\n\n constructor(el: HTMLElement, conditions: Conditions) {\n this.el = el;\n this.input = this.el.querySelector<HTMLInputTypes>(\n this.el.dataset.inputSelector || '[data-field-input]'\n )!;\n this.conditions = conditions;\n\n this.init();\n }\n\n init() {\n this.initialDisplay = window.getComputedStyle(this.el).display || 'block';\n\n for (const selector in this.conditions) {\n const value = this.conditions[selector];\n\n const target = selectOne<HTMLElement>(selector)!;\n\n if (this.input) {\n this.defaultReadonly = this.input.hasAttribute('readonly');\n }\n\n let listenTarget: HTMLInputTypes[];\n\n if (target.nodeName === 'DIV') {\n listenTarget = Array.from(target.querySelectorAll<HTMLInputTypes>('input, select, textarea'));\n } else {\n listenTarget = [target as HTMLInputTypes];\n }\n\n selectAll(listenTarget, (ele) => {\n ele.addEventListener('change', () => {\n this.updateShowState(target, value);\n });\n });\n\n this.updateShowState(target, value, 1);\n }\n }\n\n updateShowState(target: HTMLElement, value: any, duration = 300) {\n const matched = this.isValueMatched(target, value);\n\n if (matched) {\n setTimeout(() => {\n fadeIn(this.el, duration, this.initialDisplay);\n }, duration + 30);\n } else {\n if (this.input) {\n this.defaultReadonly ??= this.input.hasAttribute('readonly');\n }\n\n fadeOut(this.el, duration);\n }\n\n if (this.input) {\n if (matched) {\n if (!this.defaultReadonly) {\n this.input.removeAttribute('readonly');\n }\n\n this.defaultReadonly = null;\n } else {\n this.input.setAttribute('readonly', 'readonly');\n }\n }\n }\n\n isValueMatched(target: HTMLElement, value: any) {\n let targetValue: any = null;\n\n const type = this.nodeType(target);\n\n switch (type) {\n case 'input':\n case 'textarea':\n targetValue = (target as HTMLInputElement).value;\n break;\n case 'select':\n if (!(target as HTMLSelectElement).multiple) {\n targetValue = (target as HTMLSelectElement).value;\n } else {\n targetValue = selectAll(target.querySelectorAll('option'))\n .filter(option => option.selected)\n .map(option => option.value);\n }\n break;\n\n case 'checkbox':\n targetValue = (target as HTMLInputElement).checked ? (target as HTMLInputElement).value : [null, false];\n break;\n\n case 'radio':\n targetValue = target.querySelector<HTMLInputElement>('input[type=radio]:checked')?.value;\n break;\n }\n\n if (Array.isArray(value)) {\n if (Array.isArray(targetValue)) {\n return difference(value, targetValue).length === 0;\n }\n\n return value.indexOf(targetValue) !== -1;\n }\n\n if (targetValue && Array.isArray(targetValue)) {\n return targetValue.indexOf(value) !== -1;\n }\n\n return value == targetValue;\n }\n\n /**\n * @see https://github.com/nickjackson/val/blob/master/index.js#L55\n * @param el\n * @returns {string}\n */\n nodeType(el: HTMLElement): \"select\" | \"textarea\" | \"checkbox\" | \"input\" | \"radio\" {\n var node = el.nodeName.toLowerCase();\n var type = (el as HTMLInputElement).type;\n\n if (node === 'select') {\n return 'select';\n }\n\n if (node === 'textarea') {\n return 'textarea';\n }\n\n if (node === 'input') {\n if (type === 'checkbox') {\n return 'checkbox';\n }\n\n return 'input';\n }\n\n if (node === 'div') {\n if (el.querySelector('input[type=radio]')) {\n return 'radio';\n }\n }\n\n return 'input';\n }\n}\n\nexport const ready = useUniDirective('show-on', {\n mounted(el, { value }) {\n module<HTMLElement, HTMLElement>(el, 'show.on', (el) => {\n return new ShowOn(el, JSON.parse(value));\n });\n }\n});\n\nexport interface ShowOnModule {\n ShowOn: typeof ShowOn;\n ready: typeof ready;\n}\n"],"names":["Symbol","module","el"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tinymce.js","sources":["../../src/module/tinymce.ts"],"sourcesContent":["import type { Editor, EditorOptions, TinyMCE } from 'tinymce';\r\nimport { useHttpClient, useStack } from '../composable';\r\nimport { useImport, useScriptImport } from '../service';\r\nimport { Dictionary, MaybePromise } from '../types';\r\nimport { mergeDeep } from '../utilities';\r\n\r\nconst instances: Dictionary<TinymceController> = {};\r\nlet hooks: ((tinymce: TinyMCE) => MaybePromise<any>)[] = [];\r\nlet imported: Promise<TinyMCE>;\r\n\r\ndeclare type UploadHandlerParams = Parameters<NonNullable<EditorOptions['images_upload_handler']>>;\r\n\r\nexport async function get(\r\n selector: string,\r\n options: Record<string, any> = {}\r\n): Promise<TinymceController> {\r\n return instances[selector] ??= await create(document.querySelector<HTMLElement>(selector)!, options);\r\n}\r\n\r\nexport async function create(\r\n selector: string | HTMLElement,\r\n options: Record<string, any> = {}\r\n): Promise<TinymceController> {\r\n const tinymce = await loadTinymce();\r\n let el: HTMLElement;\r\n\r\n if (typeof selector === 'string') {\r\n el = document.querySelector<HTMLElement>(selector)!;\r\n } else {\r\n el = selector;\r\n }\r\n\r\n return new TinymceController(tinymce, el, options);\r\n}\r\n\r\nexport function destroy(selector: string): void {\r\n delete instances[selector];\r\n}\r\n\r\nexport function addHook(handler: ((tinymce: TinyMCE) => MaybePromise<any>)) {\r\n hooks.push(handler);\r\n}\r\n\r\nexport function clearHooks() {\r\n hooks = [];\r\n}\r\n\r\nasync function loadTinymce(): Promise<TinyMCE> {\r\n return imported ??= new Promise((resolve) => {\r\n useScriptImport('@tinymce').then(() => {\r\n for (const hook of hooks) {\r\n hook(tinymce);\r\n }\r\n registerDragPlugin(tinymce).then(() => {\r\n resolve(tinymce);\r\n });\r\n });\r\n });\r\n}\r\n\r\nconst defaultOptions: Record<string, any> = {};\r\n\r\nexport class TinymceController {\r\n editor?: Editor;\r\n options: Record<string, any> = {};\r\n\r\n constructor(protected tinymce: TinyMCE, public element: HTMLElement, options: Record<string, any>) {\r\n this.options = mergeDeep(\r\n {\r\n unicorn: {\r\n stack_name: 'uploading'\r\n }\r\n },\r\n defaultOptions,\r\n this.prepareOptions(options, tinymce.majorVersion),\r\n );\r\n\r\n this.options.target = element;\r\n\r\n tinymce.init(this.options).then((editor) => {\r\n this.editor = editor[0];\r\n });\r\n }\r\n\r\n prepareOptions(options: Record<string, any>, version = '6') {\r\n const defaults: Partial<EditorOptions> = {};\r\n\r\n if (options.images_upload_url) {\r\n defaults.paste_data_images = true;\r\n defaults.remove_script_host = false;\r\n defaults.relative_urls = false;\r\n\r\n if (Number(version) >= 6) {\r\n defaults.images_upload_handler = (blobInfo, progress) =>\r\n this.imageUploadHandler(blobInfo, progress);\r\n } else {\r\n options.plugins.push('paste');\r\n\r\n // @ts-ignore\r\n defaults.images_upload_handler = (blobInfo, success, failure, progress) =>\r\n this.imageUploadHandler(blobInfo, progress)\r\n .then((url) => {\r\n success(url);\r\n return url;\r\n })\r\n .catch((e) => {\r\n failure(e.message, { remove: true });\r\n throw e;\r\n });\r\n }\r\n }\r\n\r\n // defaults.file_picker_callback = (...args) => this.filePickerCallback(...args);\r\n\r\n defaults.plugins = defaults.plugins || [];\r\n\r\n defaults.setup = (editor) => {\r\n editor.on('change', () => {\r\n this.tinymce.triggerSave();\r\n });\r\n };\r\n\r\n options = mergeDeep({}, defaults, options);\r\n\r\n if (options.plugins.indexOf('unicorndragdrop') === -1) {\r\n options.plugins.push('unicorndragdrop');\r\n }\r\n\r\n return options;\r\n }\r\n\r\n insert(text: string) {\r\n this.editor?.insertContent(text);\r\n }\r\n\r\n getValue(): string {\r\n return this.editor?.getContent() ?? '';\r\n }\r\n\r\n setValue(text: string): void {\r\n this.editor?.setContent(text);\r\n }\r\n\r\n // filePickerCallback(callback, value, meta) {\r\n // const input = document.createElement('input');\r\n // input.setAttribute('type', 'file');\r\n // input.style.display = 'none';\r\n //\r\n // if (meta.filetype === 'image') {\r\n // input.setAttribute('accept', `image/\\*`);\r\n // }\r\n //\r\n // document.body.appendChild(input);\r\n //\r\n // input.onchange = function () {\r\n // const file = this.files[0];\r\n //\r\n // const reader = new FileReader();\r\n // reader.onload = function () {\r\n // const id = 'blobid' + (new Date()).getTime();\r\n // const blobCache = tinymce.activeEditor.editorUpload.blobCache;\r\n // const base64 = reader.result.split(',')[1];\r\n // const blobInfo = blobCache.create(id, file, base64);\r\n // blobCache.add(blobInfo);\r\n //\r\n // /* call the callback and populate the Title field with the file name */\r\n // callback(blobInfo.blobUri(), { title: file.name, text: file.name });\r\n // };\r\n // reader.readAsDataURL(file);\r\n // input.remove();\r\n // };\r\n //\r\n // input.click();\r\n // }\r\n\r\n async imageUploadHandler(blobInfo: UploadHandlerParams[0], progress: UploadHandlerParams[1]) {\r\n const element = this.element;\r\n\r\n element.dispatchEvent(new CustomEvent('upload-start'));\r\n\r\n const formData = new FormData();\r\n formData.append('file', blobInfo.blob(), blobInfo.filename());\r\n\r\n const stack = useStack(this.options.unicorn.stack_name);\r\n stack.push(true);\r\n\r\n const { post, isAxiosError } = await useHttpClient();\r\n\r\n try {\r\n let res = await post(\r\n this.options.images_upload_url,\r\n formData,\r\n {\r\n withCredentials: false,\r\n onUploadProgress: (e) => {\r\n progress(e.loaded / e.total! * 100);\r\n }\r\n }\r\n );\r\n element.dispatchEvent(new CustomEvent('upload-success'));\r\n\r\n return res.data.data.url;\r\n } catch (err) {\r\n if (isAxiosError(err)) {\r\n const message = err?.response?.data?.message || err.message;\r\n console.error(err?.response?.data?.message || err.message, err);\r\n element.dispatchEvent(new CustomEvent('upload-error', { detail: err }));\r\n\r\n return Promise.reject({ message, remove: true });\r\n }\r\n\r\n throw err;\r\n } finally {\r\n element.dispatchEvent(new CustomEvent('upload-complete'));\r\n stack.pop();\r\n }\r\n }\r\n}\r\n\r\nfunction registerDragPlugin(tinymce: TinyMCE) {\r\n tinymce.PluginManager.add('unicorndragdrop', function (editor) {\r\n // Reset the drop area border\r\n tinymce.DOM.bind(document, 'dragleave', function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n if (tinymce.activeEditor) {\r\n tinymce.activeEditor.contentAreaContainer.style.transition = 'all .3s';\r\n tinymce.activeEditor.contentAreaContainer.style.borderWidth = '';\r\n }\r\n\r\n return false;\r\n });\r\n\r\n if (typeof FormData !== 'undefined') {\r\n\r\n // Fix for Chrome\r\n editor.on('dragenter', e => {\r\n e.stopPropagation();\r\n return false;\r\n });\r\n\r\n // Notify user when file is over the drop area\r\n editor.on('dragover', e => {\r\n e.preventDefault();\r\n\r\n if (tinymce.activeEditor) {\r\n tinymce.activeEditor.contentAreaContainer.style.transition = 'all .3s';\r\n tinymce.activeEditor.contentAreaContainer.style.border = '3px dashed rgba(0, 0, 0, .35)';\r\n }\r\n\r\n return false;\r\n });\r\n\r\n editor.on('drop', e => {\r\n editor.contentAreaContainer.style.borderWidth = '';\r\n editor.contentAreaContainer.style.borderWidth = '';\r\n });\r\n }\r\n });\r\n\r\n return Promise.resolve();\r\n}\r\n\r\nexport interface TinymceModule {\r\n get: typeof get;\r\n create: typeof create;\r\n destroy: typeof destroy;\r\n addHook: typeof addHook;\r\n clearHooks: typeof clearHooks;\r\n TinymceController: typeof TinymceController;\r\n}\r\n\r\ndeclare global {\r\n var tinymce: TinyMCE;\r\n}\r\n"],"names":["tinymce"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tinymce.js","sources":["../../src/module/tinymce.ts"],"sourcesContent":["import type { Editor, EditorOptions, TinyMCE } from 'tinymce';\nimport { useHttpClient, useStack } from '../composable';\nimport { useImport, useScriptImport } from '../service';\nimport { Dictionary, MaybePromise } from '../types';\nimport { mergeDeep } from '../utilities';\n\nconst instances: Dictionary<TinymceController> = {};\nlet hooks: ((tinymce: TinyMCE) => MaybePromise<any>)[] = [];\nlet imported: Promise<TinyMCE>;\n\ndeclare type UploadHandlerParams = Parameters<NonNullable<EditorOptions['images_upload_handler']>>;\n\nexport async function get(\n selector: string,\n options: Record<string, any> = {}\n): Promise<TinymceController> {\n return instances[selector] ??= await create(document.querySelector<HTMLElement>(selector)!, options);\n}\n\nexport async function create(\n selector: string | HTMLElement,\n options: Record<string, any> = {}\n): Promise<TinymceController> {\n const tinymce = await loadTinymce();\n let el: HTMLElement;\n\n if (typeof selector === 'string') {\n el = document.querySelector<HTMLElement>(selector)!;\n } else {\n el = selector;\n }\n\n return new TinymceController(tinymce, el, options);\n}\n\nexport function destroy(selector: string): void {\n delete instances[selector];\n}\n\nexport function addHook(handler: ((tinymce: TinyMCE) => MaybePromise<any>)) {\n hooks.push(handler);\n}\n\nexport function clearHooks() {\n hooks = [];\n}\n\nasync function loadTinymce(): Promise<TinyMCE> {\n return imported ??= new Promise((resolve) => {\n useScriptImport('@tinymce').then(() => {\n for (const hook of hooks) {\n hook(tinymce);\n }\n registerDragPlugin(tinymce).then(() => {\n resolve(tinymce);\n });\n });\n });\n}\n\nconst defaultOptions: Record<string, any> = {};\n\nexport class TinymceController {\n editor?: Editor;\n options: Record<string, any> = {};\n\n constructor(protected tinymce: TinyMCE, public element: HTMLElement, options: Record<string, any>) {\n this.options = mergeDeep(\n {\n unicorn: {\n stack_name: 'uploading'\n }\n },\n defaultOptions,\n this.prepareOptions(options, tinymce.majorVersion),\n );\n\n this.options.target = element;\n\n tinymce.init(this.options).then((editor) => {\n this.editor = editor[0];\n });\n }\n\n prepareOptions(options: Record<string, any>, version = '6') {\n const defaults: Partial<EditorOptions> = {};\n\n if (options.images_upload_url) {\n defaults.paste_data_images = true;\n defaults.remove_script_host = false;\n defaults.relative_urls = false;\n\n if (Number(version) >= 6) {\n defaults.images_upload_handler = (blobInfo, progress) =>\n this.imageUploadHandler(blobInfo, progress);\n } else {\n options.plugins.push('paste');\n\n // @ts-ignore\n defaults.images_upload_handler = (blobInfo, success, failure, progress) =>\n this.imageUploadHandler(blobInfo, progress)\n .then((url) => {\n success(url);\n return url;\n })\n .catch((e) => {\n failure(e.message, { remove: true });\n throw e;\n });\n }\n }\n\n // defaults.file_picker_callback = (...args) => this.filePickerCallback(...args);\n\n defaults.plugins = defaults.plugins || [];\n\n defaults.setup = (editor) => {\n editor.on('change', () => {\n this.tinymce.triggerSave();\n });\n };\n\n options = mergeDeep({}, defaults, options);\n\n if (options.plugins.indexOf('unicorndragdrop') === -1) {\n options.plugins.push('unicorndragdrop');\n }\n\n return options;\n }\n\n insert(text: string) {\n this.editor?.insertContent(text);\n }\n\n getValue(): string {\n return this.editor?.getContent() ?? '';\n }\n\n setValue(text: string): void {\n this.editor?.setContent(text);\n }\n\n // filePickerCallback(callback, value, meta) {\n // const input = document.createElement('input');\n // input.setAttribute('type', 'file');\n // input.style.display = 'none';\n //\n // if (meta.filetype === 'image') {\n // input.setAttribute('accept', `image/\\*`);\n // }\n //\n // document.body.appendChild(input);\n //\n // input.onchange = function () {\n // const file = this.files[0];\n //\n // const reader = new FileReader();\n // reader.onload = function () {\n // const id = 'blobid' + (new Date()).getTime();\n // const blobCache = tinymce.activeEditor.editorUpload.blobCache;\n // const base64 = reader.result.split(',')[1];\n // const blobInfo = blobCache.create(id, file, base64);\n // blobCache.add(blobInfo);\n //\n // /* call the callback and populate the Title field with the file name */\n // callback(blobInfo.blobUri(), { title: file.name, text: file.name });\n // };\n // reader.readAsDataURL(file);\n // input.remove();\n // };\n //\n // input.click();\n // }\n\n async imageUploadHandler(blobInfo: UploadHandlerParams[0], progress: UploadHandlerParams[1]) {\n const element = this.element;\n\n element.dispatchEvent(new CustomEvent('upload-start'));\n\n const formData = new FormData();\n formData.append('file', blobInfo.blob(), blobInfo.filename());\n\n const stack = useStack(this.options.unicorn.stack_name);\n stack.push(true);\n\n const { post, isAxiosError } = await useHttpClient();\n\n try {\n let res = await post(\n this.options.images_upload_url,\n formData,\n {\n withCredentials: false,\n onUploadProgress: (e) => {\n progress(e.loaded / e.total! * 100);\n }\n }\n );\n element.dispatchEvent(new CustomEvent('upload-success'));\n\n return res.data.data.url;\n } catch (err) {\n if (isAxiosError(err)) {\n const message = err?.response?.data?.message || err.message;\n console.error(err?.response?.data?.message || err.message, err);\n element.dispatchEvent(new CustomEvent('upload-error', { detail: err }));\n\n return Promise.reject({ message, remove: true });\n }\n\n throw err;\n } finally {\n element.dispatchEvent(new CustomEvent('upload-complete'));\n stack.pop();\n }\n }\n}\n\nfunction registerDragPlugin(tinymce: TinyMCE) {\n tinymce.PluginManager.add('unicorndragdrop', function (editor) {\n // Reset the drop area border\n tinymce.DOM.bind(document, 'dragleave', function (e) {\n e.stopPropagation();\n e.preventDefault();\n\n if (tinymce.activeEditor) {\n tinymce.activeEditor.contentAreaContainer.style.transition = 'all .3s';\n tinymce.activeEditor.contentAreaContainer.style.borderWidth = '';\n }\n\n return false;\n });\n\n if (typeof FormData !== 'undefined') {\n\n // Fix for Chrome\n editor.on('dragenter', e => {\n e.stopPropagation();\n return false;\n });\n\n // Notify user when file is over the drop area\n editor.on('dragover', e => {\n e.preventDefault();\n\n if (tinymce.activeEditor) {\n tinymce.activeEditor.contentAreaContainer.style.transition = 'all .3s';\n tinymce.activeEditor.contentAreaContainer.style.border = '3px dashed rgba(0, 0, 0, .35)';\n }\n\n return false;\n });\n\n editor.on('drop', e => {\n editor.contentAreaContainer.style.borderWidth = '';\n editor.contentAreaContainer.style.borderWidth = '';\n });\n }\n });\n\n return Promise.resolve();\n}\n\nexport interface TinymceModule {\n get: typeof get;\n create: typeof create;\n destroy: typeof destroy;\n addHook: typeof addHook;\n clearHooks: typeof clearHooks;\n TinymceController: typeof TinymceController;\n}\n\ndeclare global {\n var tinymce: TinyMCE;\n}\n"],"names":["tinymce"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-bootstrap5.js","sources":["../../src/module/ui-bootstrap5.ts"],"sourcesContent":["import * as bootstrap from 'bootstrap';\
|
|
1
|
+
{"version":3,"file":"ui-bootstrap5.js","sources":["../../src/module/ui-bootstrap5.ts"],"sourcesContent":["import * as bootstrap from 'bootstrap';\nimport { Tooltip } from 'bootstrap';\nimport type { ButtonRadio, ButtonRadioModule, ButtonRadioOptions } from '../bootstrap/button-radio';\nimport type { KeepTab, KeepTabModule, KeepTabOptions } from '../bootstrap/keep-tab';\nimport { html, selectAll, selectOne, uid } from '../service';\nimport type { UIThemeInterface } from '../types';\n\nexport class UIBootstrap5 implements UIThemeInterface {\n static instance: UIBootstrap5 | null = null;\n\n bootstrap = bootstrap;\n\n static get() {\n return this.instance ??= new this();\n }\n\n renderMessage(messages: string | string[], type: string = 'info'): () => void {\n if (!Array.isArray(messages)) {\n messages = [messages];\n }\n\n let text = '';\n const id = 'uni-msg-' + uid();\n\n messages.forEach((msg) => {\n text += `<div class=\"\">${msg}</div>`;\n });\n\n const msgHtml = html(`<div id=\"${id}\" class=\"alert alert-${type} alert-dismissible fade show\" role=\"alert\">\n ${text}\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n</div>`);\n\n const container = selectOne('.c-messages-container');\n\n if (container) {\n container.appendChild(msgHtml);\n }\n\n return () => {\n const ele = document.getElementById(id);\n\n if (ele) {\n ele.remove();\n }\n }\n }\n\n clearMessages() {\n const container = selectOne('.c-messages-container');\n\n if (container) {\n container.innerHTML = '';\n }\n }\n\n async keepTab(): Promise<KeepTabModule>;\n async keepTab(selector?: string | HTMLElement, options?: KeepTabOptions): Promise<KeepTab>;\n async keepTab(selector?: string | HTMLElement, options: KeepTabOptions = {}): Promise<any> {\n const module = await import('../bootstrap/keep-tab');\n\n await module.ready;\n\n if (selector) {\n return new module.KeepTab(selector, options);\n }\n\n return module;\n }\n\n async buttonRadio(): Promise<ButtonRadioModule>;\n async buttonRadio(selector?: string | HTMLElement, options?: ButtonRadioOptions): Promise<ButtonRadio>;\n async buttonRadio(selector?: string | HTMLElement, options: ButtonRadioOptions = {}): Promise<any> {\n const m = await import('../bootstrap/button-radio');\n\n await m.ready;\n\n if (selector) {\n return m.ButtonRadio.handle(selector, options);\n }\n\n return m;\n }\n\n tooltip(\n selector: NodeListOf<Element> | Element | string = '[data-bs-toggle=\"tooltip\"]',\n config: Partial<Tooltip.Options> = {}\n ): Tooltip[] {\n return this.selectAsArray(selector)\n .map((ele) => Tooltip.getOrCreateInstance(ele, config));\n }\n\n protected selectAsArray(selector: NodeListOf<Element> | Element | string) {\n if (selector instanceof NodeList) {\n return Array.from(selector);\n } else if (typeof selector === 'string') {\n return selectAll(selector);\n } else {\n return [selector];\n }\n }\n\n getMajorVersion(module: any) {\n return Number(module.VERSION.split('.').shift());\n }\n\n pushBootstrapToGlobal() {\n window.bootstrap = bootstrap;\n }\n}\n\ndeclare global {\n export interface Window {\n bootstrap: typeof bootstrap;\n }\n}\n"],"names":[],"mappings":";;;AAOO,MAAM,aAAyC;AAAA,EACpD,OAAO,WAAgC;AAAA,EAEvC,YAAY;AAAA,EAEZ,OAAO,MAAM;AACX,WAAO,KAAK,aAAa,IAAI,KAAA;AAAA,EAC/B;AAAA,EAEA,cAAc,UAA6B,OAAe,QAAoB;AAC5E,QAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC5B,iBAAW,CAAC,QAAQ;AAAA,IACtB;AAEA,QAAI,OAAO;AACX,UAAM,KAAK,aAAa,IAAA;AAExB,aAAS,QAAQ,CAAC,QAAQ;AACxB,cAAQ,iBAAiB,GAAG;AAAA,IAC9B,CAAC;AAED,UAAM,UAAU,KAAK,YAAY,EAAE,wBAAwB,IAAI;AAAA,IAC/D,IAAI;AAAA;AAAA,OAED;AAEH,UAAM,YAAY,UAAU,uBAAuB;AAEnD,QAAI,WAAW;AACb,gBAAU,YAAY,OAAO;AAAA,IAC/B;AAEA,WAAO,MAAM;AACX,YAAM,MAAM,SAAS,eAAe,EAAE;AAEtC,UAAI,KAAK;AACP,YAAI,OAAA;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAAA,EAEA,gBAAgB;AACd,UAAM,YAAY,UAAU,uBAAuB;AAEnD,QAAI,WAAW;AACb,gBAAU,YAAY;AAAA,IACxB;AAAA,EACF;AAAA,EAIA,MAAM,QAAQ,UAAiC,UAA0B,IAAkB;AACzF,UAAM,SAAS,MAAM,OAAO,eAAuB;AAEnD,UAAM,OAAO;AAEb,QAAI,UAAU;AACZ,aAAO,IAAI,OAAO,QAAQ,UAAU,OAAO;AAAA,IAC7C;AAEA,WAAO;AAAA,EACT;AAAA,EAIA,MAAM,YAAY,UAAiC,UAA8B,IAAkB;AACjG,UAAM,IAAI,MAAM,OAAO,mBAA2B;AAElD,UAAM,EAAE;AAER,QAAI,UAAU;AACZ,aAAO,EAAE,YAAY,OAAO,UAAU,OAAO;AAAA,IAC/C;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,QACE,WAAmD,8BACnD,SAAmC,CAAA,GACxB;AACX,WAAO,KAAK,cAAc,QAAQ,EAC/B,IAAI,CAAC,QAAQ,QAAQ,oBAAoB,KAAK,MAAM,CAAC;AAAA,EAC1D;AAAA,EAEU,cAAc,UAAkD;AACxE,QAAI,oBAAoB,UAAU;AAChC,aAAO,MAAM,KAAK,QAAQ;AAAA,IAC5B,WAAW,OAAO,aAAa,UAAU;AACvC,aAAO,UAAU,QAAQ;AAAA,IAC3B,OAAO;AACL,aAAO,CAAC,QAAQ;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,gBAAgB,QAAa;AAC3B,WAAO,OAAO,OAAO,QAAQ,MAAM,GAAG,EAAE,OAAO;AAAA,EACjD;AAAA,EAEA,wBAAwB;AACtB,WAAO,YAAY;AAAA,EACrB;AACF;"}
|
package/dist/chunks/unicorn.js
CHANGED
|
@@ -232,7 +232,21 @@ function getBoundedInstanceList(selector, name, callback = () => null) {
|
|
|
232
232
|
const items = typeof selector === "string" ? document.querySelectorAll(selector) : selector;
|
|
233
233
|
return Array.from(items).map((ele) => getBoundedInstance(ele, name, callback));
|
|
234
234
|
}
|
|
235
|
-
function
|
|
235
|
+
function removeBoundedInstance(selector, name) {
|
|
236
|
+
const element = typeof selector === "string" ? document.querySelector(selector) : selector;
|
|
237
|
+
if (element) {
|
|
238
|
+
removeData(element, name);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
function module$1(ele, name, callback = () => null) {
|
|
242
|
+
if (callback === false) {
|
|
243
|
+
if (typeof ele === "string" || ele instanceof Element) {
|
|
244
|
+
removeBoundedInstance(ele, name);
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
Array.from(ele).forEach((el) => removeBoundedInstance(el, name));
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
236
250
|
if (typeof ele === "string") {
|
|
237
251
|
return getBoundedInstanceList(ele, name, callback);
|
|
238
252
|
}
|
|
@@ -704,12 +718,15 @@ function nextTick(callback) {
|
|
|
704
718
|
function wait(...promisee) {
|
|
705
719
|
return Promise.all(promisee);
|
|
706
720
|
}
|
|
721
|
+
function isError(e) {
|
|
722
|
+
return e instanceof Error;
|
|
723
|
+
}
|
|
707
724
|
var sprintf = {};
|
|
708
725
|
var hasRequiredSprintf;
|
|
709
726
|
function requireSprintf() {
|
|
710
727
|
if (hasRequiredSprintf) return sprintf;
|
|
711
728
|
hasRequiredSprintf = 1;
|
|
712
|
-
(function(exports) {
|
|
729
|
+
(function(exports$1) {
|
|
713
730
|
!(function() {
|
|
714
731
|
var re = {
|
|
715
732
|
not_type: /[^T]/,
|
|
@@ -887,8 +904,8 @@ function requireSprintf() {
|
|
|
887
904
|
return sprintf_cache[fmt] = parse_tree;
|
|
888
905
|
}
|
|
889
906
|
{
|
|
890
|
-
exports["sprintf"] = sprintf2;
|
|
891
|
-
exports["vsprintf"] = vsprintf;
|
|
907
|
+
exports$1["sprintf"] = sprintf2;
|
|
908
|
+
exports$1["vsprintf"] = vsprintf;
|
|
892
909
|
}
|
|
893
910
|
if (typeof window !== "undefined") {
|
|
894
911
|
window["sprintf"] = sprintf2;
|
|
@@ -1061,7 +1078,7 @@ async function useCssImport(...hrefs) {
|
|
|
1061
1078
|
return importedSheets[href];
|
|
1062
1079
|
})
|
|
1063
1080
|
);
|
|
1064
|
-
const styles = modules.map((
|
|
1081
|
+
const styles = modules.map((module) => module.default);
|
|
1065
1082
|
return injectCssToDocument(...styles);
|
|
1066
1083
|
}
|
|
1067
1084
|
async function simulateCssImport(href) {
|
|
@@ -1109,14 +1126,14 @@ async function useCheckboxesMultiSelect(selector, options = {}) {
|
|
|
1109
1126
|
return m;
|
|
1110
1127
|
}
|
|
1111
1128
|
async function useFieldCascadeSelect() {
|
|
1112
|
-
const
|
|
1113
|
-
await
|
|
1114
|
-
return
|
|
1129
|
+
const module = await import("./field-cascade-select.js");
|
|
1130
|
+
await module.ready;
|
|
1131
|
+
return module;
|
|
1115
1132
|
}
|
|
1116
1133
|
async function useFieldFileDrag() {
|
|
1117
|
-
const
|
|
1118
|
-
await
|
|
1119
|
-
return
|
|
1134
|
+
const module = await import("./field-file-drag.js");
|
|
1135
|
+
await module.ready;
|
|
1136
|
+
return module;
|
|
1120
1137
|
}
|
|
1121
1138
|
function useFieldFlatpickr() {
|
|
1122
1139
|
return import("./field-flatpickr.js");
|
|
@@ -1128,14 +1145,14 @@ function useFieldModalTree() {
|
|
|
1128
1145
|
return import("./field-modal-tree.js");
|
|
1129
1146
|
}
|
|
1130
1147
|
async function useFieldRepeatable() {
|
|
1131
|
-
const
|
|
1132
|
-
await
|
|
1133
|
-
return
|
|
1148
|
+
const module = await import("./field-repeatable.js");
|
|
1149
|
+
await module.ready;
|
|
1150
|
+
return module;
|
|
1134
1151
|
}
|
|
1135
1152
|
async function useFieldSingleImageDrag() {
|
|
1136
|
-
const
|
|
1137
|
-
await
|
|
1138
|
-
return
|
|
1153
|
+
const module = await import("./field-single-image-drag.js");
|
|
1154
|
+
await module.ready;
|
|
1155
|
+
return module;
|
|
1139
1156
|
}
|
|
1140
1157
|
let formElement;
|
|
1141
1158
|
async function useFormAsync(ele, options = {}) {
|
|
@@ -1152,7 +1169,7 @@ function useForm(ele, options = {}) {
|
|
|
1152
1169
|
if (!el) {
|
|
1153
1170
|
throw new Error(`Form element of: ${selector} not found.`);
|
|
1154
1171
|
}
|
|
1155
|
-
return module(
|
|
1172
|
+
return module$1(
|
|
1156
1173
|
el,
|
|
1157
1174
|
"unicorn.form",
|
|
1158
1175
|
() => new formElement(selector, el, options)
|
|
@@ -1183,7 +1200,7 @@ function useGrid(ele, options = {}) {
|
|
|
1183
1200
|
if (!form) {
|
|
1184
1201
|
throw new Error("UnicornGrid is depends on UnicornForm");
|
|
1185
1202
|
}
|
|
1186
|
-
return module(
|
|
1203
|
+
return module$1(
|
|
1187
1204
|
element,
|
|
1188
1205
|
"grid.plugin",
|
|
1189
1206
|
() => new gridElement(selector, element, form, options)
|
|
@@ -1199,18 +1216,18 @@ async function useHttpClient(config) {
|
|
|
1199
1216
|
return createHttpClient(config);
|
|
1200
1217
|
}
|
|
1201
1218
|
async function useIframeModal() {
|
|
1202
|
-
const
|
|
1203
|
-
await
|
|
1204
|
-
return
|
|
1219
|
+
const module = await import("./iframe-modal.js");
|
|
1220
|
+
await module.ready;
|
|
1221
|
+
return module;
|
|
1205
1222
|
}
|
|
1206
1223
|
async function useListDependent(element, dependent, options = {}) {
|
|
1207
|
-
const
|
|
1208
|
-
await
|
|
1224
|
+
const module = await import("./list-dependent.js");
|
|
1225
|
+
await module.ready;
|
|
1209
1226
|
if (element) {
|
|
1210
|
-
const { ListDependent } =
|
|
1227
|
+
const { ListDependent } = module;
|
|
1211
1228
|
return ListDependent.handle(element, dependent ?? void 0, options);
|
|
1212
1229
|
}
|
|
1213
|
-
return
|
|
1230
|
+
return module;
|
|
1214
1231
|
}
|
|
1215
1232
|
const queues = {};
|
|
1216
1233
|
function useQueue(name = "default", maxRunning = 1) {
|
|
@@ -1220,24 +1237,24 @@ function createQueue(maxRunning = 1) {
|
|
|
1220
1237
|
return queue(maxRunning);
|
|
1221
1238
|
}
|
|
1222
1239
|
async function useS3Uploader(name, options = {}) {
|
|
1223
|
-
const
|
|
1240
|
+
const module = await import("./s3-uploader.js");
|
|
1224
1241
|
if (!name) {
|
|
1225
|
-
return
|
|
1242
|
+
return module;
|
|
1226
1243
|
}
|
|
1227
|
-
const { get } =
|
|
1244
|
+
const { get } = module;
|
|
1228
1245
|
return get(name, options);
|
|
1229
1246
|
}
|
|
1230
1247
|
async function useS3MultipartUploader(options) {
|
|
1231
|
-
const
|
|
1248
|
+
const module = await import("./s3-multipart-uploader.js");
|
|
1232
1249
|
if (options != null) {
|
|
1233
|
-
return new
|
|
1250
|
+
return new module.S3MultipartUploader(options);
|
|
1234
1251
|
}
|
|
1235
|
-
return
|
|
1252
|
+
return module;
|
|
1236
1253
|
}
|
|
1237
1254
|
async function useShowOn() {
|
|
1238
|
-
const
|
|
1239
|
-
await
|
|
1240
|
-
return
|
|
1255
|
+
const module = await import("./show-on.js");
|
|
1256
|
+
await module.ready;
|
|
1257
|
+
return module;
|
|
1241
1258
|
}
|
|
1242
1259
|
const stacks = {};
|
|
1243
1260
|
function useStack(name = "default", store = []) {
|
|
@@ -1252,7 +1269,7 @@ async function useTomSelect(selector, options = {}, theme = "bootstrap5") {
|
|
|
1252
1269
|
useCssImport(`@vendor/tom-select/dist/css/tom-select.${theme}.min.css`)
|
|
1253
1270
|
);
|
|
1254
1271
|
if (selector) {
|
|
1255
|
-
module(
|
|
1272
|
+
module$1(
|
|
1256
1273
|
selector,
|
|
1257
1274
|
"tom.select",
|
|
1258
1275
|
(ele) => {
|
|
@@ -1294,11 +1311,11 @@ async function useTomSelect(selector, options = {}, theme = "bootstrap5") {
|
|
|
1294
1311
|
return m;
|
|
1295
1312
|
}
|
|
1296
1313
|
async function useTinymce(selector, options = {}) {
|
|
1297
|
-
const
|
|
1314
|
+
const module = await import("./tinymce.js");
|
|
1298
1315
|
if (selector) {
|
|
1299
|
-
return
|
|
1316
|
+
return module.get(selector, options);
|
|
1300
1317
|
}
|
|
1301
|
-
return
|
|
1318
|
+
return module;
|
|
1302
1319
|
}
|
|
1303
1320
|
async function useTinymceHook(handler) {
|
|
1304
1321
|
const { addHook } = await import("./tinymce.js");
|
|
@@ -1346,10 +1363,10 @@ async function createWebDirective(options = {}) {
|
|
|
1346
1363
|
return wd;
|
|
1347
1364
|
}
|
|
1348
1365
|
async function useFormValidation(selector) {
|
|
1349
|
-
const
|
|
1350
|
-
await
|
|
1366
|
+
const module = await import("./validation.js");
|
|
1367
|
+
await module.ready;
|
|
1351
1368
|
if (!selector) {
|
|
1352
|
-
return
|
|
1369
|
+
return module;
|
|
1353
1370
|
}
|
|
1354
1371
|
return useFormValidationInstance(selector);
|
|
1355
1372
|
}
|
|
@@ -1610,7 +1627,7 @@ async function useColorPicker(selector, options = {}) {
|
|
|
1610
1627
|
}
|
|
1611
1628
|
}
|
|
1612
1629
|
if (selector) {
|
|
1613
|
-
module(selector, "spectrum", (ele) => Spectrum.getInstance(ele, options));
|
|
1630
|
+
return module$1(selector, "spectrum", (ele) => Spectrum.getInstance(ele, options));
|
|
1614
1631
|
}
|
|
1615
1632
|
return m;
|
|
1616
1633
|
}
|
|
@@ -1984,11 +2001,11 @@ class UnicornApp extends (/* @__PURE__ */ Mixin(EventMixin)) {
|
|
|
1984
2001
|
return this;
|
|
1985
2002
|
}
|
|
1986
2003
|
inject(id, def) {
|
|
1987
|
-
if (!
|
|
2004
|
+
if (!this.registry.has(id)) {
|
|
1988
2005
|
if (def !== void 0) {
|
|
1989
2006
|
return def;
|
|
1990
2007
|
}
|
|
1991
|
-
throw new Error(`Injectable: ${id.name} not found.`);
|
|
2008
|
+
throw new Error(`Injectable: "${id.name ?? id}" not found.`);
|
|
1992
2009
|
}
|
|
1993
2010
|
return this.registry.get(id);
|
|
1994
2011
|
}
|
|
@@ -2058,9 +2075,9 @@ function polyfill() {
|
|
|
2058
2075
|
}
|
|
2059
2076
|
}
|
|
2060
2077
|
async function useFieldMultiUploader() {
|
|
2061
|
-
const
|
|
2062
|
-
await
|
|
2063
|
-
return
|
|
2078
|
+
const module = await import("./field-multi-uploader.js");
|
|
2079
|
+
await module.ready;
|
|
2080
|
+
return module;
|
|
2064
2081
|
}
|
|
2065
2082
|
function useUnicornPhpAdapter(app2) {
|
|
2066
2083
|
app2 ??= useUnicorn();
|
|
@@ -2168,7 +2185,7 @@ export {
|
|
|
2168
2185
|
useKeepAlive as Z,
|
|
2169
2186
|
__ as _,
|
|
2170
2187
|
useUniDirective as a,
|
|
2171
|
-
|
|
2188
|
+
useListDependent as a$,
|
|
2172
2189
|
useBs5ButtonRadio as a0,
|
|
2173
2190
|
useBs5Tooltip as a1,
|
|
2174
2191
|
useFormAsync as a2,
|
|
@@ -2179,33 +2196,33 @@ export {
|
|
|
2179
2196
|
mergeDeep as a7,
|
|
2180
2197
|
injectCssToDocument as a8,
|
|
2181
2198
|
watchAttributes as a9,
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2199
|
+
isError as aA,
|
|
2200
|
+
useLang as aB,
|
|
2201
|
+
doImport as aC,
|
|
2202
|
+
useSeriesImport as aD,
|
|
2203
|
+
useCssIncludes as aE,
|
|
2204
|
+
useAlertAdapter as aF,
|
|
2205
|
+
useUI as aG,
|
|
2206
|
+
UnicornUI as aH,
|
|
2207
|
+
useVueComponentField as aI,
|
|
2208
|
+
addUriBase as aJ,
|
|
2209
|
+
UnicornSystemUri as aK,
|
|
2210
|
+
UnicornAssetUri as aL,
|
|
2211
|
+
addRoute as aM,
|
|
2212
|
+
hasRoute as aN,
|
|
2213
|
+
addQuery as aO,
|
|
2214
|
+
parseQuery as aP,
|
|
2215
|
+
buildQuery as aQ,
|
|
2216
|
+
useFieldCascadeSelect as aR,
|
|
2217
|
+
useFieldFileDrag as aS,
|
|
2218
|
+
useFieldFlatpickr as aT,
|
|
2219
|
+
useFieldModalSelect as aU,
|
|
2220
|
+
useFieldModalTree as aV,
|
|
2221
|
+
useFieldRepeatable as aW,
|
|
2222
|
+
useFieldSingleImageDrag as aX,
|
|
2223
|
+
useFormComponent as aY,
|
|
2224
|
+
useGridComponent as aZ,
|
|
2225
|
+
useIframeModal as a_,
|
|
2209
2226
|
useImport as aa,
|
|
2210
2227
|
useCssImport as ab,
|
|
2211
2228
|
data as ac,
|
|
@@ -2228,19 +2245,21 @@ export {
|
|
|
2228
2245
|
removeData as at,
|
|
2229
2246
|
randomBytes as au,
|
|
2230
2247
|
randomBytesString as av,
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2248
|
+
removeBoundedInstance as aw,
|
|
2249
|
+
AttributeMutationObserver as ax,
|
|
2250
|
+
nextTick as ay,
|
|
2251
|
+
wait as az,
|
|
2235
2252
|
animateTo as b,
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2253
|
+
useS3Uploader as b0,
|
|
2254
|
+
useS3MultipartUploader as b1,
|
|
2255
|
+
useShowOn as b2,
|
|
2256
|
+
createStack as b3,
|
|
2257
|
+
useTinymce as b4,
|
|
2258
|
+
useTinymceHook as b5,
|
|
2259
|
+
useUIBootstrap5 as b6,
|
|
2260
|
+
useWebDirective as b7,
|
|
2261
|
+
useUnicornPhpAdapter as b8,
|
|
2262
|
+
UnicornPhpAdapter as b9,
|
|
2244
2263
|
renderMessage as c,
|
|
2245
2264
|
clearMessages as d,
|
|
2246
2265
|
clearNotifies as e,
|
|
@@ -2264,6 +2283,6 @@ export {
|
|
|
2264
2283
|
selectAll as w,
|
|
2265
2284
|
getBoundedInstance as x,
|
|
2266
2285
|
getBoundedInstanceList as y,
|
|
2267
|
-
module as z
|
|
2286
|
+
module$1 as z
|
|
2268
2287
|
};
|
|
2269
2288
|
//# sourceMappingURL=unicorn.js.map
|