@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.
Files changed (175) hide show
  1. package/.editorconfig +18 -0
  2. package/.gulp.json +7 -0
  3. package/bin/release.mjs +47 -0
  4. package/dist/chunks/_arrayPush.js +168 -0
  5. package/dist/chunks/_arrayPush.js.map +1 -0
  6. package/dist/chunks/_baseRest.js +73 -0
  7. package/dist/chunks/_baseRest.js.map +1 -0
  8. package/dist/chunks/_commonjsHelpers.js +7 -0
  9. package/dist/chunks/_commonjsHelpers.js.map +1 -0
  10. package/dist/chunks/_getPrototype.js +130 -0
  11. package/dist/chunks/_getPrototype.js.map +1 -0
  12. package/dist/chunks/button-radio.js +147 -0
  13. package/dist/chunks/button-radio.js.map +1 -0
  14. package/dist/chunks/checkboxes-multi-select.js +44 -0
  15. package/dist/chunks/checkboxes-multi-select.js.map +1 -0
  16. package/dist/chunks/cloneDeep.js +287 -0
  17. package/dist/chunks/cloneDeep.js.map +1 -0
  18. package/dist/chunks/cropper.min.js +5 -0
  19. package/dist/chunks/cropper.min.js.map +1 -0
  20. package/dist/chunks/field-cascade-select.js +256 -0
  21. package/dist/chunks/field-cascade-select.js.map +1 -0
  22. package/dist/chunks/field-file-drag.js +218 -0
  23. package/dist/chunks/field-file-drag.js.map +1 -0
  24. package/dist/chunks/field-flatpickr.js +893 -0
  25. package/dist/chunks/field-flatpickr.js.map +1 -0
  26. package/dist/chunks/field-modal-select.js +403 -0
  27. package/dist/chunks/field-modal-select.js.map +1 -0
  28. package/dist/chunks/field-modal-tree.js +790 -0
  29. package/dist/chunks/field-modal-tree.js.map +1 -0
  30. package/dist/chunks/field-multi-uploader.js +256 -0
  31. package/dist/chunks/field-multi-uploader.js.map +1 -0
  32. package/dist/chunks/field-repeatable.js +132 -0
  33. package/dist/chunks/field-repeatable.js.map +1 -0
  34. package/dist/chunks/field-single-image-drag.js +338 -0
  35. package/dist/chunks/field-single-image-drag.js.map +1 -0
  36. package/dist/chunks/form.js +154 -0
  37. package/dist/chunks/form.js.map +1 -0
  38. package/dist/chunks/grid.js +345 -0
  39. package/dist/chunks/grid.js.map +1 -0
  40. package/dist/chunks/http-client.js +229 -0
  41. package/dist/chunks/http-client.js.map +1 -0
  42. package/dist/chunks/iframe-modal.js +124 -0
  43. package/dist/chunks/iframe-modal.js.map +1 -0
  44. package/dist/chunks/index.js +309 -0
  45. package/dist/chunks/index.js.map +1 -0
  46. package/dist/chunks/isArguments.js +146 -0
  47. package/dist/chunks/isArguments.js.map +1 -0
  48. package/dist/chunks/keep-tab.js +101 -0
  49. package/dist/chunks/keep-tab.js.map +1 -0
  50. package/dist/chunks/legacy.js +210 -0
  51. package/dist/chunks/legacy.js.map +1 -0
  52. package/dist/chunks/list-dependent.js +231 -0
  53. package/dist/chunks/list-dependent.js.map +1 -0
  54. package/dist/chunks/s3-multipart-uploader.js +172 -0
  55. package/dist/chunks/s3-multipart-uploader.js.map +1 -0
  56. package/dist/chunks/s3-uploader.js +136 -0
  57. package/dist/chunks/s3-uploader.js.map +1 -0
  58. package/dist/chunks/show-on.js +237 -0
  59. package/dist/chunks/show-on.js.map +1 -0
  60. package/dist/chunks/tinymce.js +196 -0
  61. package/dist/chunks/tinymce.js.map +1 -0
  62. package/dist/chunks/ui-bootstrap5.js +71 -0
  63. package/dist/chunks/ui-bootstrap5.js.map +1 -0
  64. package/dist/chunks/unicorn.js +2202 -0
  65. package/dist/chunks/unicorn.js.map +1 -0
  66. package/dist/chunks/validation.js +854 -0
  67. package/dist/chunks/validation.js.map +1 -0
  68. package/dist/editor.css +1 -0
  69. package/dist/index.d.ts +1427 -0
  70. package/dist/multi-level-menu.css +1 -0
  71. package/dist/switcher.css +1 -0
  72. package/dist/unicorn-next.css +12 -0
  73. package/dist/unicorn.js +125 -0
  74. package/dist/unicorn.js.map +1 -0
  75. package/fusionfile.mjs +155 -0
  76. package/images/ajax-loader.gif +0 -0
  77. package/images/placeholder/avatar.png +0 -0
  78. package/images/placeholder/image-16x10.png +0 -0
  79. package/images/placeholder/image-16x9.png +0 -0
  80. package/images/placeholder/image-1x1.png +0 -0
  81. package/images/placeholder/image-4x3.png +0 -0
  82. package/package.json +102 -0
  83. package/scss/bootstrap/multi-level-menu.scss +121 -0
  84. package/scss/editor.scss +116 -0
  85. package/scss/field/file-drag.scss +102 -0
  86. package/scss/field/single-image-drag.scss +88 -0
  87. package/scss/field/vue-drag-uploader.scss +160 -0
  88. package/scss/switcher.scss +156 -0
  89. package/src/app.ts +128 -0
  90. package/src/bootstrap/button-radio.ts +208 -0
  91. package/src/bootstrap/keep-tab.ts +155 -0
  92. package/src/composable/index.ts +21 -0
  93. package/src/composable/useCheckboxesMultiSelect.ts +22 -0
  94. package/src/composable/useFieldCascadeSelect.ts +9 -0
  95. package/src/composable/useFieldFileDrag.ts +9 -0
  96. package/src/composable/useFieldFlatpickr.ts +3 -0
  97. package/src/composable/useFieldModalSelect.ts +6 -0
  98. package/src/composable/useFieldModalTree.ts +3 -0
  99. package/src/composable/useFieldMultiUploader.ts +3 -0
  100. package/src/composable/useFieldRepeatable.ts +9 -0
  101. package/src/composable/useFieldSingleImageDrag.ts +5 -0
  102. package/src/composable/useForm.ts +43 -0
  103. package/src/composable/useGrid.ts +57 -0
  104. package/src/composable/useHttp.ts +8 -0
  105. package/src/composable/useIframeModal.ts +9 -0
  106. package/src/composable/useListDependent.ts +26 -0
  107. package/src/composable/useQueue.ts +13 -0
  108. package/src/composable/useS3Uploader.ts +32 -0
  109. package/src/composable/useShowOn.ts +9 -0
  110. package/src/composable/useStack.ts +13 -0
  111. package/src/composable/useTinymce.ts +29 -0
  112. package/src/composable/useTomSelect.ts +72 -0
  113. package/src/composable/useUIBootstrap5.ts +48 -0
  114. package/src/composable/useUniDirective.ts +32 -0
  115. package/src/composable/useValidation.ts +39 -0
  116. package/src/data.ts +36 -0
  117. package/src/events.ts +73 -0
  118. package/src/legacy/legacy.ts +186 -0
  119. package/src/legacy/loader.ts +125 -0
  120. package/src/module/checkboxes-multi-select.ts +54 -0
  121. package/src/module/field-cascade-select.ts +292 -0
  122. package/src/module/field-file-drag.ts +292 -0
  123. package/src/module/field-flatpickr.ts +127 -0
  124. package/src/module/field-modal-select.ts +174 -0
  125. package/src/module/field-modal-tree.ts +27 -0
  126. package/src/module/field-multi-uploader.ts +361 -0
  127. package/src/module/field-repeatable.ts +202 -0
  128. package/src/module/field-single-image-drag.ts +468 -0
  129. package/src/module/form.ts +223 -0
  130. package/src/module/grid.ts +465 -0
  131. package/src/module/http-client.ts +243 -0
  132. package/src/module/iframe-modal.ts +167 -0
  133. package/src/module/list-dependent.ts +321 -0
  134. package/src/module/s3-multipart-uploader.ts +300 -0
  135. package/src/module/s3-uploader.ts +234 -0
  136. package/src/module/show-on.ts +173 -0
  137. package/src/module/tinymce.ts +263 -0
  138. package/src/module/ui-bootstrap5.ts +107 -0
  139. package/src/module/validation.ts +1019 -0
  140. package/src/plugin/index.ts +1 -0
  141. package/src/plugin/php-adapter.ts +65 -0
  142. package/src/polyfill/form-request-submit.ts +31 -0
  143. package/src/polyfill/index.ts +9 -0
  144. package/src/service/animate.ts +58 -0
  145. package/src/service/crypto.ts +27 -0
  146. package/src/service/dom-watcher.ts +62 -0
  147. package/src/service/dom.ts +265 -0
  148. package/src/service/helper.ts +48 -0
  149. package/src/service/index.ts +10 -0
  150. package/src/service/lang.ts +122 -0
  151. package/src/service/loader.ts +152 -0
  152. package/src/service/router.ts +118 -0
  153. package/src/service/ui.ts +497 -0
  154. package/src/service/uri.ts +106 -0
  155. package/src/types/base.ts +9 -0
  156. package/src/types/index.ts +4 -0
  157. package/src/types/modal-tree.ts +12 -0
  158. package/src/types/plugin.ts +6 -0
  159. package/src/types/shims.d.ts +18 -0
  160. package/src/types/ui.ts +6 -0
  161. package/src/unicorn.ts +63 -0
  162. package/src/utilities/arr.ts +25 -0
  163. package/src/utilities/base.ts +9 -0
  164. package/src/utilities/data.ts +48 -0
  165. package/src/utilities/index.ts +5 -0
  166. package/src/utilities/tree.ts +20 -0
  167. package/src/vue/components/ModalTree/ModalTreeApp.vue +175 -0
  168. package/src/vue/components/ModalTree/TreeItem.vue +262 -0
  169. package/src/vue/components/ModalTree/TreeModal.vue +225 -0
  170. package/tests/test.js +4 -0
  171. package/tsconfig.js.json +25 -0
  172. package/tsconfig.json +17 -0
  173. package/vite.assets.config.ts +61 -0
  174. package/vite.config.test.ts +36 -0
  175. package/vite.config.ts +112 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unicorn.js","sources":["../../../../../../node_modules/ts-mixer/dist/esm/index.js","../../src/utilities/arr.ts","../../src/utilities/data.ts","../../src/service/dom.ts","../../src/service/animate.ts","../../../../../../node_modules/@lyrasoft/ts-toolkit/src/generic/alert-adapter.ts","../../../../../../node_modules/@lyrasoft/ts-toolkit/src/generic/alert.ts","../../../../../../node_modules/@lyrasoft/ts-toolkit/src/generic/env.ts","../../../../../../node_modules/@lyrasoft/ts-toolkit/src/generic/crypto.ts","../../../../../../node_modules/@lyrasoft/ts-toolkit/src/generic/queue.ts","../../../../../../node_modules/@lyrasoft/ts-toolkit/src/generic/stack.ts","../../../../../../node_modules/@lyrasoft/ts-toolkit/src/generic/timing.ts","../../src/service/crypto.ts","../../src/service/dom-watcher.ts","../../src/service/helper.ts","../../../../../../node_modules/sprintf-js/src/sprintf.js","../../src/service/lang.ts","../../src/service/loader.ts","../../src/composable/useCheckboxesMultiSelect.ts","../../src/composable/useFieldCascadeSelect.ts","../../src/composable/useFieldFileDrag.ts","../../src/composable/useFieldFlatpickr.ts","../../src/composable/useFieldModalSelect.ts","../../src/composable/useFieldModalTree.ts","../../src/composable/useFieldRepeatable.ts","../../src/composable/useFieldSingleImageDrag.ts","../../src/composable/useForm.ts","../../src/composable/useGrid.ts","../../src/composable/useHttp.ts","../../src/composable/useIframeModal.ts","../../src/composable/useListDependent.ts","../../src/composable/useQueue.ts","../../src/composable/useS3Uploader.ts","../../src/composable/useShowOn.ts","../../src/composable/useStack.ts","../../src/composable/useTomSelect.ts","../../src/composable/useUIBootstrap5.ts","../../src/composable/useUniDirective.ts","../../src/composable/useValidation.ts","../../src/service/ui.ts","../../src/service/uri.ts","../../../../../../node_modules/qss/dist/qss.mjs","../../src/service/router.ts","../../src/utilities/base.ts","../../src/data.ts","../../src/events.ts","../../src/app.ts","../../src/polyfill/form-request-submit.ts","../../src/polyfill/index.ts","../../src/composable/useFieldMultiUploader.ts","../../src/composable/useTinymce.ts","../../src/plugin/php-adapter.ts","../../src/unicorn.ts"],"sourcesContent":["/**\n * Utility function that works like `Object.apply`, but copies getters and setters properly as well. Additionally gives\n * the option to exclude properties by name.\n */\nconst copyProps = (dest, src, exclude = []) => {\n const props = Object.getOwnPropertyDescriptors(src);\n for (let prop of exclude)\n delete props[prop];\n Object.defineProperties(dest, props);\n};\n/**\n * Returns the full chain of prototypes up until Object.prototype given a starting object. The order of prototypes will\n * be closest to farthest in the chain.\n */\nconst protoChain = (obj, currentChain = [obj]) => {\n const proto = Object.getPrototypeOf(obj);\n if (proto === null)\n return currentChain;\n return protoChain(proto, [...currentChain, proto]);\n};\n/**\n * Identifies the nearest ancestor common to all the given objects in their prototype chains. For most unrelated\n * objects, this function should return Object.prototype.\n */\nconst nearestCommonProto = (...objs) => {\n if (objs.length === 0)\n return undefined;\n let commonProto = undefined;\n const protoChains = objs.map(obj => protoChain(obj));\n while (protoChains.every(protoChain => protoChain.length > 0)) {\n const protos = protoChains.map(protoChain => protoChain.pop());\n const potentialCommonProto = protos[0];\n if (protos.every(proto => proto === potentialCommonProto))\n commonProto = potentialCommonProto;\n else\n break;\n }\n return commonProto;\n};\n/**\n * Creates a new prototype object that is a mixture of the given prototypes. The mixing is achieved by first\n * identifying the nearest common ancestor and using it as the prototype for a new object. Then all properties/methods\n * downstream of this prototype (ONLY downstream) are copied into the new object.\n *\n * The resulting prototype is more performant than softMixProtos(...), as well as ES5 compatible. However, it's not as\n * flexible as updates to the source prototypes aren't captured by the mixed result. See softMixProtos for why you may\n * want to use that instead.\n */\nconst hardMixProtos = (ingredients, constructor, exclude = []) => {\n var _a;\n const base = (_a = nearestCommonProto(...ingredients)) !== null && _a !== void 0 ? _a : Object.prototype;\n const mixedProto = Object.create(base);\n // Keeps track of prototypes we've already visited to avoid copying the same properties multiple times. We init the\n // list with the proto chain below the nearest common ancestor because we don't want any of those methods mixed in\n // when they will already be accessible via prototype access.\n const visitedProtos = protoChain(base);\n for (let prototype of ingredients) {\n let protos = protoChain(prototype);\n // Apply the prototype chain in reverse order so that old methods don't override newer ones.\n for (let i = protos.length - 1; i >= 0; i--) {\n let newProto = protos[i];\n if (visitedProtos.indexOf(newProto) === -1) {\n copyProps(mixedProto, newProto, ['constructor', ...exclude]);\n visitedProtos.push(newProto);\n }\n }\n }\n mixedProto.constructor = constructor;\n return mixedProto;\n};\nconst unique = (arr) => arr.filter((e, i) => arr.indexOf(e) == i);\n\n/**\n * Finds the ingredient with the given prop, searching in reverse order and breadth-first if searching ingredient\n * prototypes is required.\n */\nconst getIngredientWithProp = (prop, ingredients) => {\n const protoChains = ingredients.map(ingredient => protoChain(ingredient));\n // since we search breadth-first, we need to keep track of our depth in the prototype chains\n let protoDepth = 0;\n // not all prototype chains are the same depth, so this remains true as long as at least one of the ingredients'\n // prototype chains has an object at this depth\n let protosAreLeftToSearch = true;\n while (protosAreLeftToSearch) {\n // with the start of each horizontal slice, we assume this is the one that's deeper than any of the proto chains\n protosAreLeftToSearch = false;\n // scan through the ingredients right to left\n for (let i = ingredients.length - 1; i >= 0; i--) {\n const searchTarget = protoChains[i][protoDepth];\n if (searchTarget !== undefined && searchTarget !== null) {\n // if we find something, this is proof that this horizontal slice potentially more objects to search\n protosAreLeftToSearch = true;\n // eureka, we found it\n if (Object.getOwnPropertyDescriptor(searchTarget, prop) != undefined) {\n return protoChains[i][0];\n }\n }\n }\n protoDepth++;\n }\n return undefined;\n};\n/**\n * \"Mixes\" ingredients by wrapping them in a Proxy. The optional prototype argument allows the mixed object to sit\n * downstream of an existing prototype chain. Note that \"properties\" cannot be added, deleted, or modified.\n */\nconst proxyMix = (ingredients, prototype = Object.prototype) => new Proxy({}, {\n getPrototypeOf() {\n return prototype;\n },\n setPrototypeOf() {\n throw Error('Cannot set prototype of Proxies created by ts-mixer');\n },\n getOwnPropertyDescriptor(_, prop) {\n return Object.getOwnPropertyDescriptor(getIngredientWithProp(prop, ingredients) || {}, prop);\n },\n defineProperty() {\n throw new Error('Cannot define new properties on Proxies created by ts-mixer');\n },\n has(_, prop) {\n return getIngredientWithProp(prop, ingredients) !== undefined || prototype[prop] !== undefined;\n },\n get(_, prop) {\n return (getIngredientWithProp(prop, ingredients) || prototype)[prop];\n },\n set(_, prop, val) {\n const ingredientWithProp = getIngredientWithProp(prop, ingredients);\n if (ingredientWithProp === undefined)\n throw new Error('Cannot set new properties on Proxies created by ts-mixer');\n ingredientWithProp[prop] = val;\n return true;\n },\n deleteProperty() {\n throw new Error('Cannot delete properties on Proxies created by ts-mixer');\n },\n ownKeys() {\n return ingredients\n .map(Object.getOwnPropertyNames)\n .reduce((prev, curr) => curr.concat(prev.filter(key => curr.indexOf(key) < 0)));\n },\n});\n/**\n * Creates a new proxy-prototype object that is a \"soft\" mixture of the given prototypes. The mixing is achieved by\n * proxying all property access to the ingredients. This is not ES5 compatible and less performant. However, any\n * changes made to the source prototypes will be reflected in the proxy-prototype, which may be desirable.\n */\nconst softMixProtos = (ingredients, constructor) => proxyMix([...ingredients, { constructor }]);\n\nconst settings = {\n initFunction: null,\n staticsStrategy: 'copy',\n prototypeStrategy: 'copy',\n decoratorInheritance: 'deep',\n};\n\n// Keeps track of constituent classes for every mixin class created by ts-mixer.\nconst mixins = new WeakMap();\nconst getMixinsForClass = (clazz) => mixins.get(clazz);\nconst registerMixins = (mixedClass, constituents) => mixins.set(mixedClass, constituents);\nconst hasMixin = (instance, mixin) => {\n if (instance instanceof mixin)\n return true;\n const constructor = instance.constructor;\n const visited = new Set();\n let frontier = new Set();\n frontier.add(constructor);\n while (frontier.size > 0) {\n // check if the frontier has the mixin we're looking for. if not, we can say we visited every item in the frontier\n if (frontier.has(mixin))\n return true;\n frontier.forEach((item) => visited.add(item));\n // build a new frontier based on the associated mixin classes and prototype chains of each frontier item\n const newFrontier = new Set();\n frontier.forEach((item) => {\n var _a;\n const itemConstituents = (_a = mixins.get(item)) !== null && _a !== void 0 ? _a : protoChain(item.prototype)\n .map((proto) => proto.constructor)\n .filter((item) => item !== null);\n if (itemConstituents)\n itemConstituents.forEach((constituent) => {\n if (!visited.has(constituent) && !frontier.has(constituent))\n newFrontier.add(constituent);\n });\n });\n // we have a new frontier, now search again\n frontier = newFrontier;\n }\n // if we get here, we couldn't find the mixin anywhere in the prototype chain or associated mixin classes\n return false;\n};\n\nconst mergeObjectsOfDecorators = (o1, o2) => {\n var _a, _b;\n const allKeys = unique([...Object.getOwnPropertyNames(o1), ...Object.getOwnPropertyNames(o2)]);\n const mergedObject = {};\n for (let key of allKeys)\n mergedObject[key] = unique([...((_a = o1 === null || o1 === void 0 ? void 0 : o1[key]) !== null && _a !== void 0 ? _a : []), ...((_b = o2 === null || o2 === void 0 ? void 0 : o2[key]) !== null && _b !== void 0 ? _b : [])]);\n return mergedObject;\n};\nconst mergePropertyAndMethodDecorators = (d1, d2) => {\n var _a, _b, _c, _d;\n return ({\n property: mergeObjectsOfDecorators((_a = d1 === null || d1 === void 0 ? void 0 : d1.property) !== null && _a !== void 0 ? _a : {}, (_b = d2 === null || d2 === void 0 ? void 0 : d2.property) !== null && _b !== void 0 ? _b : {}),\n method: mergeObjectsOfDecorators((_c = d1 === null || d1 === void 0 ? void 0 : d1.method) !== null && _c !== void 0 ? _c : {}, (_d = d2 === null || d2 === void 0 ? void 0 : d2.method) !== null && _d !== void 0 ? _d : {}),\n });\n};\nconst mergeDecorators = (d1, d2) => {\n var _a, _b, _c, _d, _e, _f;\n return ({\n class: unique([...(_a = d1 === null || d1 === void 0 ? void 0 : d1.class) !== null && _a !== void 0 ? _a : [], ...(_b = d2 === null || d2 === void 0 ? void 0 : d2.class) !== null && _b !== void 0 ? _b : []]),\n static: mergePropertyAndMethodDecorators((_c = d1 === null || d1 === void 0 ? void 0 : d1.static) !== null && _c !== void 0 ? _c : {}, (_d = d2 === null || d2 === void 0 ? void 0 : d2.static) !== null && _d !== void 0 ? _d : {}),\n instance: mergePropertyAndMethodDecorators((_e = d1 === null || d1 === void 0 ? void 0 : d1.instance) !== null && _e !== void 0 ? _e : {}, (_f = d2 === null || d2 === void 0 ? void 0 : d2.instance) !== null && _f !== void 0 ? _f : {}),\n });\n};\nconst decorators = new Map();\nconst findAllConstituentClasses = (...classes) => {\n var _a;\n const allClasses = new Set();\n const frontier = new Set([...classes]);\n while (frontier.size > 0) {\n for (let clazz of frontier) {\n const protoChainClasses = protoChain(clazz.prototype).map(proto => proto.constructor);\n const mixinClasses = (_a = getMixinsForClass(clazz)) !== null && _a !== void 0 ? _a : [];\n const potentiallyNewClasses = [...protoChainClasses, ...mixinClasses];\n const newClasses = potentiallyNewClasses.filter(c => !allClasses.has(c));\n for (let newClass of newClasses)\n frontier.add(newClass);\n allClasses.add(clazz);\n frontier.delete(clazz);\n }\n }\n return [...allClasses];\n};\nconst deepDecoratorSearch = (...classes) => {\n const decoratorsForClassChain = findAllConstituentClasses(...classes)\n .map(clazz => decorators.get(clazz))\n .filter(decorators => !!decorators);\n if (decoratorsForClassChain.length == 0)\n return {};\n if (decoratorsForClassChain.length == 1)\n return decoratorsForClassChain[0];\n return decoratorsForClassChain.reduce((d1, d2) => mergeDecorators(d1, d2));\n};\nconst directDecoratorSearch = (...classes) => {\n const classDecorators = classes.map(clazz => getDecoratorsForClass(clazz));\n if (classDecorators.length === 0)\n return {};\n if (classDecorators.length === 1)\n return classDecorators[0];\n return classDecorators.reduce((d1, d2) => mergeDecorators(d1, d2));\n};\nconst getDecoratorsForClass = (clazz) => {\n let decoratorsForClass = decorators.get(clazz);\n if (!decoratorsForClass) {\n decoratorsForClass = {};\n decorators.set(clazz, decoratorsForClass);\n }\n return decoratorsForClass;\n};\nconst decorateClass = (decorator) => ((clazz) => {\n const decoratorsForClass = getDecoratorsForClass(clazz);\n let classDecorators = decoratorsForClass.class;\n if (!classDecorators) {\n classDecorators = [];\n decoratorsForClass.class = classDecorators;\n }\n classDecorators.push(decorator);\n return decorator(clazz);\n});\nconst decorateMember = (decorator) => ((object, key, ...otherArgs) => {\n var _a, _b, _c;\n const decoratorTargetType = typeof object === 'function' ? 'static' : 'instance';\n const decoratorType = typeof object[key] === 'function' ? 'method' : 'property';\n const clazz = decoratorTargetType === 'static' ? object : object.constructor;\n const decoratorsForClass = getDecoratorsForClass(clazz);\n const decoratorsForTargetType = (_a = decoratorsForClass === null || decoratorsForClass === void 0 ? void 0 : decoratorsForClass[decoratorTargetType]) !== null && _a !== void 0 ? _a : {};\n decoratorsForClass[decoratorTargetType] = decoratorsForTargetType;\n let decoratorsForType = (_b = decoratorsForTargetType === null || decoratorsForTargetType === void 0 ? void 0 : decoratorsForTargetType[decoratorType]) !== null && _b !== void 0 ? _b : {};\n decoratorsForTargetType[decoratorType] = decoratorsForType;\n let decoratorsForKey = (_c = decoratorsForType === null || decoratorsForType === void 0 ? void 0 : decoratorsForType[key]) !== null && _c !== void 0 ? _c : [];\n decoratorsForType[key] = decoratorsForKey;\n // @ts-ignore: array is type `A[] | B[]` and item is type `A | B`, so technically a type error, but it's fine\n decoratorsForKey.push(decorator);\n // @ts-ignore\n return decorator(object, key, ...otherArgs);\n});\nconst decorate = (decorator) => ((...args) => {\n if (args.length === 1)\n return decorateClass(decorator)(args[0]);\n return decorateMember(decorator)(...args);\n});\n\nfunction Mixin(...constructors) {\n var _a, _b, _c;\n const prototypes = constructors.map(constructor => constructor.prototype);\n // Here we gather up the init functions of the ingredient prototypes, combine them into one init function, and\n // attach it to the mixed class prototype. The reason we do this is because we want the init functions to mix\n // similarly to constructors -- not methods, which simply override each other.\n const initFunctionName = settings.initFunction;\n if (initFunctionName !== null) {\n const initFunctions = prototypes\n .map(proto => proto[initFunctionName])\n .filter(func => typeof func === 'function');\n const combinedInitFunction = function (...args) {\n for (let initFunction of initFunctions)\n initFunction.apply(this, args);\n };\n const extraProto = { [initFunctionName]: combinedInitFunction };\n prototypes.push(extraProto);\n }\n function MixedClass(...args) {\n for (const constructor of constructors)\n // @ts-ignore: potentially abstract class\n copyProps(this, new constructor(...args));\n if (initFunctionName !== null && typeof this[initFunctionName] === 'function')\n this[initFunctionName].apply(this, args);\n }\n MixedClass.prototype = settings.prototypeStrategy === 'copy'\n ? hardMixProtos(prototypes, MixedClass)\n : softMixProtos(prototypes, MixedClass);\n Object.setPrototypeOf(MixedClass, settings.staticsStrategy === 'copy'\n ? hardMixProtos(constructors, null, ['prototype'])\n : proxyMix(constructors, Function.prototype));\n let DecoratedMixedClass = MixedClass;\n if (settings.decoratorInheritance !== 'none') {\n const classDecorators = settings.decoratorInheritance === 'deep'\n ? deepDecoratorSearch(...constructors)\n : directDecoratorSearch(...constructors);\n for (let decorator of (_a = classDecorators === null || classDecorators === void 0 ? void 0 : classDecorators.class) !== null && _a !== void 0 ? _a : []) {\n const result = decorator(DecoratedMixedClass);\n if (result) {\n DecoratedMixedClass = result;\n }\n }\n applyPropAndMethodDecorators((_b = classDecorators === null || classDecorators === void 0 ? void 0 : classDecorators.static) !== null && _b !== void 0 ? _b : {}, DecoratedMixedClass);\n applyPropAndMethodDecorators((_c = classDecorators === null || classDecorators === void 0 ? void 0 : classDecorators.instance) !== null && _c !== void 0 ? _c : {}, DecoratedMixedClass.prototype);\n }\n registerMixins(DecoratedMixedClass, constructors);\n return DecoratedMixedClass;\n}\nconst applyPropAndMethodDecorators = (propAndMethodDecorators, target) => {\n const propDecorators = propAndMethodDecorators.property;\n const methodDecorators = propAndMethodDecorators.method;\n if (propDecorators)\n for (let key in propDecorators)\n for (let decorator of propDecorators[key])\n decorator(target, key);\n if (methodDecorators)\n for (let key in methodDecorators)\n for (let decorator of methodDecorators[key])\n decorator(target, key, Object.getOwnPropertyDescriptor(target, key));\n};\n/**\n * A decorator version of the `Mixin` function. You'll want to use this instead of `Mixin` for mixing generic classes.\n */\nconst mix = (...ingredients) => decoratedClass => {\n // @ts-ignore\n const mixedClass = Mixin(...ingredients.concat([decoratedClass]));\n Object.defineProperty(mixedClass, 'name', {\n value: decoratedClass.name,\n writable: false,\n });\n return mixedClass;\n};\n\nexport { Mixin, decorate, hasMixin, mix, settings };\n","\r\nexport function isPlainObject(val: any): val is Record<string, any> {\r\n return val && typeof val === \"object\" && !Array.isArray(val);\r\n}\r\n\r\nexport function mergeDeep<T = Record<string, any>>(target: Partial<T>, ...sources: any[]): T {\r\n let out: any = isPlainObject(target) ? { ...target } : target;\r\n\r\n for (const source of sources) {\r\n if (Array.isArray(source)) {\r\n out = (Array.isArray(out) ? out.concat(source) : source) as T;\r\n continue;\r\n }\r\n if (isPlainObject(source)) {\r\n out = { ...(isPlainObject(out) ? out : {}) };\r\n for (const key of Object.keys(source)) {\r\n out[key] =\r\n key in out ? mergeDeep(out[key], source[key]) : source[key];\r\n }\r\n continue;\r\n }\r\n out = source as T;\r\n }\r\n return out;\r\n}\r\n","\r\nexport function getData(element: Element, name: string | undefined = undefined) {\r\n prepareData(element);\r\n\r\n if (name === undefined) {\r\n return element.__unicorn;\r\n }\r\n\r\n return element.__unicorn[name];\r\n}\r\n\r\nexport function setData(element: Element, name: string, value: any) {\r\n prepareData(element);\r\n element.__unicorn[name] = value;\r\n}\r\n\r\nexport function defData(element: Element, name: string, defCallback: Function) {\r\n prepareData(element);\r\n element.__unicorn[name] = element.__unicorn[name] || defCallback(element);\r\n\r\n return element.__unicorn[name];\r\n}\r\n\r\nexport function removeData(element: Element, name: string) {\r\n prepareData(element);\r\n\r\n const v = element.__unicorn[name];\r\n delete element.__unicorn[name];\r\n\r\n return v;\r\n}\r\n\r\nexport function prepareData<T extends Node>(element: T): T {\r\n if (!element) {\r\n return element;\r\n }\r\n\r\n element.__unicorn = element.__unicorn || {};\r\n return element;\r\n}\r\n\r\ndeclare global {\r\n interface Node {\r\n __unicorn?: any;\r\n }\r\n}\r\n\r\n\r\n","import { defData } from '../utilities';\r\n\r\n/**\r\n * @see https://stackoverflow.com/a/9899701\r\n */\r\nexport function domready(callback?: ((value: any) => any)): Promise<void> {\r\n let promise = new Promise<void>((resolve) => {\r\n // see if DOM is already available\r\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\r\n // call on next available tick\r\n setTimeout(resolve, 0);\r\n } else {\r\n document.addEventListener('DOMContentLoaded', () => resolve());\r\n }\r\n });\r\n\r\n if (callback) {\r\n promise = promise.then(callback);\r\n }\r\n\r\n return promise;\r\n}\r\n\r\nexport function selectOne<K extends keyof HTMLElementTagNameMap>(ele: K): HTMLElementTagNameMap[K] | null;\r\nexport function selectOne<E extends Element = Element>(ele: string): E | null;\r\nexport function selectOne<E extends Element = Element>(ele: E): E;\r\nexport function selectOne<E extends Element = Element>(ele: string | E): E | null;\r\n// selectOne(ele: string): Element;\r\nexport function selectOne<E extends Element = Element>(ele: E | string): E | null {\r\n let r: E | null;\r\n\r\n if (typeof ele === 'string') {\r\n r = document.querySelector<E>(ele);\r\n } else {\r\n r = ele;\r\n }\r\n\r\n if (!r) {\r\n return r;\r\n }\r\n\r\n return r;\r\n}\r\n\r\nexport function selectAll<E extends Element = Element>(ele: string, callback?: ((ele: E) => any)): E[];\r\nexport function selectAll<E extends Element = Element>(ele: NodeListOf<E> | E[], callback?: ((ele: E) => any)): E[];\r\nexport function selectAll<E extends Element = Element>(\r\n ele: string | NodeListOf<E> | E[],\r\n callback?: ((ele: E) => any)\r\n): E[];\r\nexport function selectAll<E extends keyof HTMLElementTagNameMap>(\r\n ele: E,\r\n callback?: ((ele: HTMLElementTagNameMap[E]) => any)\r\n): HTMLElementTagNameMap[E][];\r\nexport function selectAll(\r\n ele: NodeListOf<Element> | Element[] | string,\r\n callback: ((el: Element) => any) | undefined = undefined\r\n): Element[] {\r\n if (typeof ele === 'string') {\r\n ele = document.querySelectorAll(ele);\r\n }\r\n\r\n const resultSet: Element[] = [].slice.call(ele);\r\n\r\n if (callback) {\r\n return resultSet.map((el) => callback(el) || el);\r\n }\r\n\r\n return resultSet;\r\n}\r\n\r\nexport function getBoundedInstance<T = any, E = Element>(selector: E, name: string, callback?: ((el: E) => any)): T;\r\nexport function getBoundedInstance<T = any, E extends Element = Element>(\r\n selector: string | E,\r\n name: string,\r\n callback?: ((el: E) => any)\r\n): T | null;\r\nexport function getBoundedInstance<T = any, E extends Element = Element>(selector: string | E,\r\n name: string,\r\n callback: ((el: E) => any) = () => null): T | null {\r\n const element = typeof selector === 'string' ? document.querySelector<E>(selector) : selector;\r\n\r\n if (!element) {\r\n return null;\r\n }\r\n\r\n return defData(element, name, callback);\r\n}\r\n\r\nexport function getBoundedInstanceList<T = any, E extends Element = Element>(\r\n selector: string | NodeListOf<E>,\r\n name: string,\r\n callback: ((el: E) => any) = () => null\r\n): (T | null)[] {\r\n const items = typeof selector === 'string' ? document.querySelectorAll<E>(selector) : selector;\r\n\r\n return Array.from(items).map((ele: E) => getBoundedInstance(ele, name, callback));\r\n}\r\n\r\nexport function module<T = any, E extends Element = Element>(\r\n ele: string,\r\n name: string,\r\n callback?: ((el: E) => any)\r\n): (T | null)[];\r\nexport function module<T = any, E extends Element = Element>(\r\n ele: NodeListOf<Element>,\r\n name: string,\r\n callback?: ((el: E) => any)): (T | null)[];\r\nexport function module<T = any, E extends Element = Element>(\r\n ele: Element,\r\n name: string,\r\n callback?: ((el: E) => any)\r\n): T | null;\r\nexport function module<T = any, E extends Element = Element>(\r\n ele: string | Element | NodeListOf<Element>,\r\n name: string,\r\n callback?: ((el: E) => any)\r\n): (T | null)[] | T | null;\r\nexport function module<T = any, E extends Element = Element>(\r\n ele: string | E | NodeListOf<E>,\r\n name: string,\r\n callback: ((el: E) => any) = () => null\r\n): (T | null)[] | T | null {\r\n if (typeof ele === 'string') {\r\n return getBoundedInstanceList<T, E>(ele, name, callback);\r\n }\r\n\r\n if (ele instanceof HTMLElement) {\r\n return getBoundedInstance<T, E>(ele, name, callback);\r\n }\r\n\r\n return getBoundedInstanceList<T, E>(ele as NodeListOf<E>, name, callback);\r\n}\r\n\r\nexport function h<T extends keyof HTMLElementTagNameMap>(\r\n element: T,\r\n attrs?: Record<string, any>,\r\n content?: any\r\n): HTMLElementTagNameMap[T]\r\nexport function h(element: string, attrs: Record<string, any> = {}, content: any = undefined): HTMLElement {\r\n const ele = document.createElement(element);\r\n\r\n for (let i in attrs) {\r\n const v = attrs[i];\r\n\r\n ele.setAttribute(i, v);\r\n }\r\n\r\n if (content !== null) {\r\n ele.innerHTML = content;\r\n }\r\n\r\n return ele;\r\n}\r\n\r\nexport function html<T extends Element = HTMLElement>(html: string): T {\r\n const div = document.createElement('div');\r\n div.innerHTML = html;\r\n return div.children[0] as T;\r\n}\r\n\r\n/**\r\n * Pure JS version of jQuery delegate()\r\n *\r\n * @see https://gist.github.com/iagobruno/4db2ed62dc40fa841bb9a5c7de92f5f8\r\n */\r\nexport function delegate(\r\n wrapper: Element | string,\r\n selector: string,\r\n eventName: string,\r\n callback: (e: Event) => void\r\n): () => void {\r\n if (typeof selector === 'undefined' || selector === '') {\r\n throw new Error('The provided selector is empty.');\r\n }\r\n\r\n if (typeof callback === 'undefined' || typeof callback !== 'function') {\r\n throw new Error('Please specify an callback.');\r\n }\r\n\r\n const delegationSelectorsMap: Record<string, Function[]> = {};\r\n\r\n const wrapperElement = selectOne(wrapper);\r\n\r\n wrapperElement?.addEventListener(eventName, function (event) {\r\n let element: HTMLElement | null = event.target as HTMLElement;\r\n let forceBreak = false;\r\n\r\n while (element && element !== wrapperElement) {\r\n for (const selector in delegationSelectorsMap) {\r\n if (element.matches(selector)) {\r\n event.stopPropagation = function () {\r\n forceBreak = true;\r\n };\r\n Object.defineProperty(\r\n event,\r\n 'currentTarget',\r\n {\r\n get() {\r\n return element;\r\n }\r\n }\r\n );\r\n\r\n const callbackList = delegationSelectorsMap[selector];\r\n\r\n callbackList.forEach(function (callback) {\r\n callback(event);\r\n });\r\n }\r\n }\r\n\r\n if (forceBreak) {\r\n break;\r\n }\r\n\r\n element = element.parentElement;\r\n }\r\n });\r\n\r\n if (!delegationSelectorsMap[selector]) {\r\n // Add new selector to the list\r\n delegationSelectorsMap[selector] = [callback];\r\n } else {\r\n delegationSelectorsMap[selector].push(callback);\r\n }\r\n\r\n return function unsubscribe() {\r\n if (!delegationSelectorsMap[selector]) {\r\n return;\r\n }\r\n\r\n if (delegationSelectorsMap[selector].length >= 2) {\r\n delegationSelectorsMap[selector] = delegationSelectorsMap[selector].filter(cb => cb !== callback);\r\n } else {\r\n delete delegationSelectorsMap[selector];\r\n }\r\n };\r\n}\r\n\r\nexport function injectCssToDocument(doc: Document, ...css: (string | CSSStyleSheet)[]): CSSStyleSheet[];\r\nexport function injectCssToDocument(...css: (string | CSSStyleSheet)[]): CSSStyleSheet[];\r\nexport function injectCssToDocument(\r\n doc: Document | string | CSSStyleSheet,\r\n ...css: (string | CSSStyleSheet)[]\r\n): CSSStyleSheet[] {\r\n if (!(doc instanceof Document)) {\r\n css.push(doc);\r\n doc = document;\r\n }\r\n\r\n const styles = css.map((css) => {\r\n if (typeof css === 'string') {\r\n const style = new CSSStyleSheet();\r\n style.replaceSync(css);\r\n return style;\r\n }\r\n\r\n return css;\r\n });\r\n\r\n doc.adoptedStyleSheets = [...doc.adoptedStyleSheets, ...styles];\r\n\r\n return styles;\r\n}\r\n","import { selectOne } from './dom';\r\n\r\nexport function animateTo(\r\n element: HTMLElement,\r\n styles: Partial<Record<keyof CSSStyleDeclaration, any>>,\r\n options: number | KeyframeAnimationOptions = {}\r\n): Animation {\r\n element = selectOne(element);\r\n\r\n const currentStyles = window.getComputedStyle(element);\r\n const transitions: Record<string, any[]> = {};\r\n\r\n for (const name in styles) {\r\n const value = styles[name];\r\n\r\n transitions[name] = Array.isArray(value)\r\n ? value\r\n : [\r\n currentStyles.getPropertyValue(name),\r\n value\r\n ];\r\n }\r\n\r\n if (typeof options === 'number') {\r\n options = { duration: options };\r\n }\r\n\r\n options = Object.assign(\r\n {\r\n duration: 400,\r\n easing: 'linear',\r\n fill: 'both'\r\n },\r\n options\r\n );\r\n\r\n const animation = element.animate(\r\n transitions,\r\n options\r\n );\r\n\r\n animation.addEventListener('finish', () => {\r\n for (const name in styles) {\r\n const value = styles[name];\r\n\r\n element.style.setProperty(\r\n name,\r\n Array.isArray(value)\r\n ? value[value.length - 1]\r\n : value\r\n );\r\n }\r\n\r\n animation.cancel();\r\n });\r\n\r\n return animation;\r\n}\r\n","export type AlertHandler = (title: string, text?: string, icon?: string, extra?: any) => Promise<void>;\r\nexport type ConfirmHandler = (title: string, text?: string, icon?: string, extra?: any) => Promise<boolean>;\r\n\r\nexport class AlertAdapter {\r\n static alert: AlertHandler = async (title: string) => window.alert(title);\r\n static confirm: ConfirmHandler = async (title: string) => {\r\n return new Promise<boolean>((resolve) => {\r\n const v = confirm(title);\r\n\r\n resolve(v);\r\n });\r\n };\r\n static deleteConfirm: ConfirmHandler = async (title: string) => this.confirm(title);\r\n\r\n static confirmText: () => string = () => '確認';\r\n static cancelText: () => string = () => '取消';\r\n static deleteText: () => string = () => '刪除';\r\n}\r\n\r\n","import { AlertAdapter } from './alert-adapter';\r\n\r\nexport async function simpleAlert(\r\n title: string,\r\n text: string = '',\r\n icon: string = 'info',\r\n extra?: any\r\n) {\r\n return AlertAdapter.alert(title, text, icon, extra);\r\n}\r\n\r\nexport async function simpleConfirm(\r\n title: string,\r\n text: string = '',\r\n icon: string = 'info',\r\n extra?: any,\r\n) {\r\n return AlertAdapter.confirm(title, text, icon, extra);\r\n}\r\n\r\nexport async function deleteConfirm(\r\n title: string,\r\n text: string = '',\r\n icon: string = 'info',\r\n extra?: any,\r\n) {\r\n return AlertAdapter.deleteConfirm(title, text, icon, extra);\r\n}\r\n","\nexport function getGlobalThis() {\n return globalThis;\n}\n\nexport function isBrowser() {\n return typeof window !== 'undefined';\n}\n\nexport function isNode() {\n return typeof window === 'undefined';\n}\n","import { isNode } from './env';\n\nexport function base64UrlEncode(string: string): string {\n return btoa(String(string))\n .replace(/\\+/, '-')\n .replace(new RegExp('\\\\/'), '_')\n .replace(/=+$/, '');\n}\n\nexport function base64UrlDecode(string: string): string {\n return atob(\n String(string)\n .replace(/-/, '+')\n .replace(/_/, '/')\n );\n}\n\nexport function uid(prefix: string = '', timebase: boolean = false): string {\n if (timebase) {\n const start = performance?.timeOrigin\n ? Math.round(performance.timeOrigin)\n : performance.timing.navigationStart;\n\n const time = (start * 100000) + (performance.now() * 100);\n\n return prefix + time.toString(12) + (randomBytesString(4));\n }\n\n return prefix + randomBytesString(12);\n}\n\nexport function tid(prefix: string = ''): string {\n return uid(prefix, true);\n}\n\nexport function randomBytesString(size: number = 12): string {\n if (!isNode() && !globalThis.crypto) {\n return String(Math.floor(Math.random() * (size ** 10)));\n }\n\n return Array.from(randomBytes(size))\n .map(x => x.toString(16).padStart(2, '0'))\n .join('');\n}\n\nexport function randomBytes(size: number = 12): Uint8Array {\n const arr = new Uint8Array(size);\n globalThis.crypto.getRandomValues(arr);\n return arr;\n}\n\nexport const STR_SEED_BASE32 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\nexport const STR_SEED_BASE32HEX = '0123456789ABCDEFGHIJKLMNOPQRSTUV';\nexport const STR_SEED_BASE36 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\nexport const STR_SEED_BASE58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\nexport const STR_SEED_BASE64SAFE = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nexport const STR_SEED_BASE62 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\nexport function randomString(length: number, characters: string = STR_SEED_BASE62): string {\n let result = '';\n const charactersLength = characters.length;\n\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n\n return result;\n}\n","export class TaskQueue {\n items: (() => Promise<any>)[] = [];\n\n currentRunning = 0;\n\n running = false;\n\n observers: {\n handler: Function;\n once: boolean;\n }[] = [];\n\n constructor(public maxRunning = 1) {\n //\n }\n\n push<T extends ((...args: any[]) => any)>(callback: T): Promise<Awaited<ReturnType<T>>> {\n const p = new Promise<Awaited<ReturnType<T>>>((resolve, reject) => {\n this.items.push(() => {\n return Promise.resolve(callback()).then(resolve);\n });\n });\n\n this.run();\n\n return p;\n }\n\n run(): void {\n if (!this.running) {\n this.running = true;\n }\n\n this.pop();\n }\n\n async pop() {\n const callback = this.items.shift();\n\n // If empty, stop running.\n if (!callback) {\n this.running = false;\n return Promise.resolve();\n }\n\n // If current running full, set back to queue and leave.\n if (this.currentRunning >= this.maxRunning) {\n this.items.unshift(callback);\n return Promise.resolve();\n }\n\n this.currentRunning++;\n\n this.notice();\n\n try {\n return await callback();\n } catch (e) {\n throw e;\n } finally {\n this.endPop();\n }\n }\n\n endPop() {\n this.currentRunning--;\n this.notice();\n this.pop();\n }\n\n clear() {\n this.items = [];\n\n this.notice();\n\n return this;\n }\n\n isEmpty(): boolean {\n return this.items.length === 0;\n }\n\n get length(): number {\n return this.items.length;\n }\n\n peek() {\n return this.items;\n }\n\n observe(handler: ObserverFunction, options: { once?: boolean } = {}): () => void {\n this.observers.push({\n handler,\n once: options.once || false,\n });\n\n return () => {\n this.off(handler);\n };\n }\n\n once(handler: ObserverFunction, options: { once?: boolean } = {}): () => void {\n options.once = true;\n\n return this.observe(handler, options);\n }\n\n onEnd(callback: ObserverFunction, options: { once?: boolean } = {}) {\n return this.observe((queue, length, running) => {\n if (length === 0 && running === 0) {\n callback(queue, length, running);\n }\n }, options);\n }\n\n notice() {\n this.observers.forEach((observer) => {\n observer.handler(this, this.length, this.currentRunning);\n });\n\n this.observers = this.observers.filter((observer) => !observer.once);\n\n return this;\n }\n\n off(callback?: Function) {\n if (callback == null) {\n this.observers = [];\n return this;\n }\n\n this.observers = this.observers.filter((observer) => observer.handler !== callback);\n return this;\n }\n}\n\ndeclare type ObserverFunction = (queue: TaskQueue, length: number, running: number) => void\n\nexport function queue(maxRunning: number = 1) {\n return new TaskQueue(maxRunning);\n}\n","declare type StackHandler<T> = (stack: Stack<T>, length: number) => void;\n\ndeclare type StackValue<V> = V | true;\n\nexport class Stack<T = any> {\n observers: { handler: StackHandler<T>, once: boolean }[] = [];\n\n constructor(protected store: StackValue<T>[] = []) {\n //\n }\n\n push(value?: T): number {\n const r = this.store.push(value ?? true);\n\n this.notice();\n\n return r;\n }\n\n pop(): T | true | undefined {\n const r = this.store.pop();\n\n this.notice();\n\n return r;\n }\n\n clear(): this {\n this.store = [];\n\n this.notice();\n\n return this;\n }\n\n isEmpty(): boolean {\n return this.store.length === 0;\n }\n\n get length() {\n return this.store.length;\n }\n\n peek(): StackValue<T>[] {\n return this.store;\n }\n\n observe(handler: (stack: Stack, length: number) => void): () => void {\n this.observers.push({\n handler,\n once: false\n });\n\n return () => {\n this.off(handler);\n };\n }\n\n once(handler: StackHandler<T>): () => void {\n this.observers.push({\n handler,\n once: true\n });\n\n return () => {\n this.off(handler);\n };\n }\n\n notice(): this {\n this.observers.forEach((observer) => {\n observer.handler(this, this.length);\n });\n\n this.observers = this.observers.filter((observer) => observer.once !== true);\n\n return this;\n }\n\n off(callback?: StackHandler<T>): this {\n this.observers = this.observers.filter((observer) => observer.handler !== callback);\n return this;\n }\n}\n\nexport function stack<T = any>(store: any[] = []) {\n return new Stack<T>(store);\n}\n","export function sleep(time: number) {\r\n return new Promise((resolve) => {\r\n setTimeout(resolve, time);\r\n });\r\n}\r\n\r\nexport function nextTick(callback = () => {}) {\r\n return Promise.resolve().then(callback);\r\n}\r\n","import { uid, tid, randomBytes, randomBytesString } from '@lyrasoft/ts-toolkit/generic';\r\n\r\nexport function base64UrlEncode(string: string): string {\r\n return btoa(String(string))\r\n .replace(/\\+/, '-')\r\n .replace(new RegExp('\\\\/'), '_')\r\n .replace(/=+$/, '');\r\n}\r\n\r\n/**\r\n * Base64 URL decode\r\n */\r\nexport function base64UrlDecode(string: string): string {\r\n return atob(\r\n String(string)\r\n .replace(/-/, '+')\r\n .replace(/_/, '/')\r\n );\r\n}\r\n\r\nexport { uid, tid, randomBytes, randomBytesString };\r\n\r\nlet globalSerial = 1;\r\n\r\nexport function serial(): number {\r\n return globalSerial++;\r\n}\r\n","export function watchAttributes<T extends HTMLElement>(el: T, callback?: AttributeMutationCallback<T>) {\r\n return new AttributeMutationObserver<T>(el, callback);\r\n}\r\n\r\nexport type AttributeMutationCallback<T extends HTMLElement = HTMLElement> = (el: T, name: string, value: any, oldValue: any) => void;\r\nexport type AttributeWatcher<T extends HTMLElement = HTMLElement> = (el: T, value: any, oldValue: any) => void;\r\n\r\nexport class AttributeMutationObserver<T extends HTMLElement> {\r\n observer: MutationObserver;\r\n watches: Record<string, (AttributeWatcher<T>)[]> = {};\r\n\r\n constructor(protected element: T, public callback?: (el: T, name: string, value: any, oldValue: any) => void) {\r\n this.element = element;\r\n\r\n this.observer = new MutationObserver((mutations) => {\r\n for (const mutation of mutations) {\r\n if (mutation.type === 'attributes') {\r\n const attrName = mutation.attributeName!;\r\n const target = mutation.target as T;\r\n const value = target.getAttribute(attrName);\r\n\r\n this.callback?.(\r\n target,\r\n attrName,\r\n value,\r\n mutation.oldValue\r\n );\r\n\r\n if (this.watches[attrName]) {\r\n for (const watch of this.watches[attrName]) {\r\n watch(target, value, mutation.oldValue);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.observe();\r\n }\r\n\r\n watch(name: string, callback: AttributeWatcher<T>): () => void {\r\n this.watches[name] ??= [];\r\n this.watches[name].push(callback);\r\n\r\n return () => {\r\n this.watches[name] = this.watches[name].filter(fn => fn !== callback);\r\n };\r\n }\r\n\r\n observe() {\r\n this.observer.observe(this.element, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n });\r\n }\r\n\r\n disconnect() {\r\n this.observer.disconnect();\r\n }\r\n}\r\n\r\n\r\n","import { data } from '../data';\r\nimport { sleep } from '@lyrasoft/ts-toolkit/generic';\r\n\r\nexport { sleep };\r\n\r\nexport function forceArray<T>(item: T | T[]): T[] {\r\n if (Array.isArray(item)) {\r\n return item;\r\n } else {\r\n return [item];\r\n }\r\n}\r\n\r\nexport function debounce<T extends Function = Function>(handler: T, wait = 1): T {\r\n let timer: ReturnType<typeof setTimeout> | number, result: any;\r\n return function (this: any, ...args: any[]) {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => result = handler.call(this, ...args), wait);\r\n return result;\r\n } as any as T;\r\n}\r\n\r\nexport function throttle<T extends Function = Function>(handler: T, wait: number = 1): T {\r\n let timer: ReturnType<typeof setTimeout> | number | undefined, result: any;\r\n return function (this: any, ...args: any[]) {\r\n if (!timer) {\r\n return result = handler.call(this, ...args);\r\n }\r\n\r\n clearTimeout(timer);\r\n timer = setTimeout(() => timer = undefined, wait);\r\n return result;\r\n } as any as T;\r\n}\r\n\r\nexport function isDebug() {\r\n return Boolean(data('windwalker.debug'));\r\n}\r\n\r\nexport function nextTick(callback?: () => any): Promise<any> {\r\n return Promise.resolve().then(callback ?? (() => null));\r\n}\r\n\r\nexport function wait<T extends readonly unknown[]>(\r\n ...promisee: { [K in keyof T]: PromiseLike<T[K]> | T[K] }\r\n): Promise<Awaited<T>> {\r\n return Promise.all(promisee) as Promise<Awaited<T>>;\r\n}\r\n","/* global window, exports, define */\n\n!function() {\n 'use strict'\n\n var re = {\n not_string: /[^s]/,\n not_bool: /[^t]/,\n not_type: /[^T]/,\n not_primitive: /[^v]/,\n number: /[diefg]/,\n numeric_arg: /[bcdiefguxX]/,\n json: /[j]/,\n not_json: /[^j]/,\n text: /^[^\\x25]+/,\n modulo: /^\\x25{2}/,\n placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n key: /^([a-z_][a-z_\\d]*)/i,\n key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n index_access: /^\\[(\\d+)\\]/,\n sign: /^[+-]/\n }\n\n function sprintf(key) {\n // `arguments` is not an array, but should be fine for this call\n return sprintf_format(sprintf_parse(key), arguments)\n }\n\n function vsprintf(fmt, argv) {\n return sprintf.apply(null, [fmt].concat(argv || []))\n }\n\n function sprintf_format(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign\n for (i = 0; i < tree_length; i++) {\n if (typeof parse_tree[i] === 'string') {\n output += parse_tree[i]\n }\n else if (typeof parse_tree[i] === 'object') {\n ph = parse_tree[i] // convenience purposes only\n if (ph.keys) { // keyword argument\n arg = argv[cursor]\n for (k = 0; k < ph.keys.length; k++) {\n if (arg == undefined) {\n throw new Error(sprintf('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"', ph.keys[k], ph.keys[k-1]))\n }\n arg = arg[ph.keys[k]]\n }\n }\n else if (ph.param_no) { // positional argument (explicit)\n arg = argv[ph.param_no]\n }\n else { // positional argument (implicit)\n arg = argv[cursor++]\n }\n\n if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {\n arg = arg()\n }\n\n if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {\n throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))\n }\n\n if (re.number.test(ph.type)) {\n is_positive = arg >= 0\n }\n\n switch (ph.type) {\n case 'b':\n arg = parseInt(arg, 10).toString(2)\n break\n case 'c':\n arg = String.fromCharCode(parseInt(arg, 10))\n break\n case 'd':\n case 'i':\n arg = parseInt(arg, 10)\n break\n case 'j':\n arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)\n break\n case 'e':\n arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()\n break\n case 'f':\n arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)\n break\n case 'g':\n arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)\n break\n case 'o':\n arg = (parseInt(arg, 10) >>> 0).toString(8)\n break\n case 's':\n arg = String(arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 't':\n arg = String(!!arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'T':\n arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'u':\n arg = parseInt(arg, 10) >>> 0\n break\n case 'v':\n arg = arg.valueOf()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'x':\n arg = (parseInt(arg, 10) >>> 0).toString(16)\n break\n case 'X':\n arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()\n break\n }\n if (re.json.test(ph.type)) {\n output += arg\n }\n else {\n if (re.number.test(ph.type) && (!is_positive || ph.sign)) {\n sign = is_positive ? '+' : '-'\n arg = arg.toString().replace(re.sign, '')\n }\n else {\n sign = ''\n }\n pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '\n pad_length = ph.width - (sign + arg).length\n pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''\n output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n }\n }\n }\n return output\n }\n\n var sprintf_cache = Object.create(null)\n\n function sprintf_parse(fmt) {\n if (sprintf_cache[fmt]) {\n return sprintf_cache[fmt]\n }\n\n var _fmt = fmt, match, parse_tree = [], arg_names = 0\n while (_fmt) {\n if ((match = re.text.exec(_fmt)) !== null) {\n parse_tree.push(match[0])\n }\n else if ((match = re.modulo.exec(_fmt)) !== null) {\n parse_tree.push('%')\n }\n else if ((match = re.placeholder.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1\n var field_list = [], replacement_field = match[2], field_match = []\n if ((field_match = re.key.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n }\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n match[2] = field_list\n }\n else {\n arg_names |= 2\n }\n if (arg_names === 3) {\n throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')\n }\n\n parse_tree.push(\n {\n placeholder: match[0],\n param_no: match[1],\n keys: match[2],\n sign: match[3],\n pad_char: match[4],\n align: match[5],\n width: match[6],\n precision: match[7],\n type: match[8]\n }\n )\n }\n else {\n throw new SyntaxError('[sprintf] unexpected placeholder')\n }\n _fmt = _fmt.substring(match[0].length)\n }\n return sprintf_cache[fmt] = parse_tree\n }\n\n /**\n * export to either browser or node.js\n */\n /* eslint-disable quote-props */\n if (typeof exports !== 'undefined') {\n exports['sprintf'] = sprintf\n exports['vsprintf'] = vsprintf\n }\n if (typeof window !== 'undefined') {\n window['sprintf'] = sprintf\n window['vsprintf'] = vsprintf\n\n if (typeof define === 'function' && define['amd']) {\n define(function() {\n return {\n 'sprintf': sprintf,\n 'vsprintf': vsprintf\n }\n })\n }\n }\n /* eslint-enable quote-props */\n}(); // eslint-disable-line\n","import { data } from '../data';\r\nimport { isDebug } from './/helper';\r\nimport { Dictionary } from '../types';\r\nimport { vsprintf } from 'sprintf-js';\r\n\r\nlet lang: UnicornLang;\r\n\r\nexport function useLang() {\r\n return lang ??= new UnicornLang();\r\n}\r\n\r\nexport function trans(id: string, ...args: any[]) {\r\n return useLang().trans(id, ...args);\r\n}\r\n\r\nexport function __(id: string, ...args: any[]) {\r\n return trans(id, ...args);\r\n}\r\n\r\nexport default class UnicornLang {\r\n /**\r\n * Translate a string.\r\n */\r\n trans(id: string, ...args: any[]): string {\r\n const key = this.normalize(id);\r\n\r\n let translated = this.get(key) || '';\r\n\r\n translated = this.replace(translated, args);\r\n\r\n return translated !== '' ? translated : this.wrapDebug(id, false);\r\n }\r\n\r\n protected replace(str: string, args: any[]): string {\r\n let replacements: Dictionary<any> = {};\r\n let values: any[] = [];\r\n\r\n for (const arg of args) {\r\n if (typeof arg === 'object') {\r\n replacements = { ...replacements, ...arg };\r\n } else {\r\n values.push(arg);\r\n }\r\n }\r\n\r\n if (values.length) {\r\n str = vsprintf(str, values);\r\n }\r\n\r\n if (Object.values(replacements).length) {\r\n for (const key in replacements) {\r\n let value = replacements[key];\r\n\r\n if (typeof value === 'function') {\r\n value = value();\r\n }\r\n\r\n str = str.replace(new RegExp(':' + key, 'g'), String(value));\r\n }\r\n }\r\n\r\n return str;\r\n }\r\n\r\n /**\r\n * Find text.\r\n */\r\n get(id: string): string | null {\r\n const strings = this.getStrings();\r\n\r\n if (strings[id]) {\r\n return strings[id];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Has language key.\r\n */\r\n has(key: string): boolean {\r\n const strings = this.getStrings();\r\n\r\n return strings[key] !== undefined;\r\n }\r\n\r\n /**\r\n * Add language key.\r\n */\r\n add(key: string, value: string): this {\r\n const strings = this.getStrings();\r\n\r\n strings[this.normalize(key)] = value;\r\n\r\n data('unicorn.languages', strings);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Replace all symbols to dot(.).\r\n */\r\n protected normalize(text: string): string {\r\n return text.replace(/[^A-Z0-9]+/ig, '.');\r\n }\r\n\r\n protected wrapDebug(text: string, success: boolean): string {\r\n if (isDebug()) {\r\n if (success) {\r\n return '**' + text + '**';\r\n }\r\n\r\n return '??' + text + '??';\r\n }\r\n\r\n return text;\r\n }\r\n\r\n getStrings(): Record<string, string> {\r\n return data('unicorn.languages') || {};\r\n }\r\n}\r\n","import { Dictionary } from '../types';\r\nimport { injectCssToDocument } from './';\r\n\r\nexport function useScriptImport(src: string, attrs: Record<string, string> = {}): Promise<void> {\r\n const script = document.createElement('script');\r\n script.src = src;\r\n\r\n for (const key in attrs) {\r\n script.setAttribute(key, attrs[key]);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n script.onload = () => {\r\n resolve();\r\n document.body.removeChild(script);\r\n };\r\n script.onerror = (e) => {\r\n reject(e);\r\n document.body.removeChild(script);\r\n };\r\n\r\n document.body.appendChild(script);\r\n });\r\n}\r\n\r\nexport function doImport<T = any>(src: string): Promise<T> {\r\n return import(/* @vite-ignore */src);\r\n}\r\n\r\nexport async function useImport(...src: any[]): Promise<any>;\r\nexport async function useImport<T extends any[]>(...src: string[]): Promise<T>;\r\nexport async function useImport<T = any>(src: string): Promise<{ default: T }>;\r\nexport async function useImport<D = any, C = any>(src: string): Promise<{ default: D } & Dictionary<C>>;\r\nexport async function useImport(...src: any[]): Promise<any> {\r\n if (src.length === 1) {\r\n return 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 : doImport(link)\r\n );\r\n });\r\n\r\n return Promise.all(promises);\r\n}\r\n\r\nexport async function useSeriesImport(...src: any[]): Promise<any>;\r\nexport async function useSeriesImport<T extends any[]>(...src: string[]): Promise<T>;\r\nexport async function useSeriesImport<T = any>(src: string): Promise<{ default: T }>;\r\nexport async function useSeriesImport<D = any, C = any>(src: string): Promise<{ default: D } & Dictionary<C>>;\r\nexport async function useSeriesImport(...src: any[]): Promise<any> {\r\n const modules: any[] = [];\r\n\r\n for (const source of src) {\r\n if (Array.isArray(source)) {\r\n const m = await useImport(...source);\r\n modules.push(m);\r\n\r\n continue;\r\n }\r\n\r\n const m = await useImport(source);\r\n\r\n modules.push(m);\r\n }\r\n\r\n return modules;\r\n}\r\n\r\nexport async function useCssIncludes(...hrefs: string[]): Promise<void[]> {\r\n const promises = hrefs.map((href) => {\r\n href = resolveUrl(href);\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n const link = document.createElement('link');\r\n link.rel = 'stylesheet';\r\n link.href = href;\r\n link.onload = () => resolve();\r\n link.onerror = (e) => reject(e);\r\n\r\n document.head.appendChild(link);\r\n });\r\n });\r\n\r\n return Promise.all(promises);\r\n}\r\n\r\nconst importedSheets: Record<string, Promise<{ default: CSSStyleSheet }>> = {};\r\n\r\nexport async function useCssImport(...hrefs: string[]): Promise<CSSStyleSheet[]> {\r\n // Todo: Use `{ assert: { type: \"css\" }` after all browsers support it.\r\n const modules = await Promise.all(\r\n hrefs.map((href) => {\r\n if (!importedSheets[href]) {\r\n importedSheets[href] = simulateCssImport(href);\r\n }\r\n\r\n return importedSheets[href];\r\n })\r\n );\r\n const styles = modules.map(module => module.default);\r\n\r\n return injectCssToDocument(...styles);\r\n}\r\n\r\nasync function simulateCssImport(href: string) {\r\n href = resolveUrl(href);\r\n\r\n const response = await fetch(href);\r\n if (!response.ok) {\r\n throw new Error(`Failed to load CSS: ${href}`);\r\n }\r\n const cssText = await response.text();\r\n\r\n const sheet = new CSSStyleSheet();\r\n await sheet.replace(cssText);\r\n return { default: sheet };\r\n}\r\n\r\nlet importMap: Record<string, string>;\r\n\r\nfunction parseImportMap() {\r\n const importMapScript = document.querySelector('script[type=\"importmap\"]');\r\n if (importMapScript) {\r\n try {\r\n return JSON.parse(importMapScript.textContent || '{}').imports || {};\r\n } catch (e) {\r\n console.error('Failed to parse import map:', e);\r\n }\r\n }\r\n return {};\r\n}\r\n\r\nfunction resolveUrl(specifier: string) {\r\n importMap ??= parseImportMap();\r\n\r\n for (const [prefix, target] of Object.entries(importMap)) {\r\n if (specifier === prefix) {\r\n return target;\r\n }\r\n }\r\n\r\n for (const [prefix, target] of Object.entries(importMap)) {\r\n if (specifier.startsWith(prefix)) {\r\n return specifier.replace(prefix, target);\r\n }\r\n }\r\n return specifier;\r\n}\r\n","import type { CheckboxesMultiSelect } from '../module/checkboxes-multi-select';\r\nimport type { Nullable } from '../types';\r\n\r\nexport async function useCheckboxesMultiSelect(): Promise<any>;\r\n\r\nexport async function useCheckboxesMultiSelect(\r\n selector?: Nullable<string | HTMLElement>,\r\n options?: Record<string, any>\r\n): Promise<CheckboxesMultiSelect>;\r\n\r\nexport async function useCheckboxesMultiSelect(\r\n selector?: Nullable<string | HTMLElement>,\r\n options: Record<string, any> = {}\r\n): Promise<any> {\r\n const m = await import('../module/checkboxes-multi-select');\r\n\r\n if (selector) {\r\n m.CheckboxesMultiSelect.handle(selector, options);\r\n }\r\n\r\n return m;\r\n}\r\n","import { CascadeSelectModule } from '../module/field-cascade-select';\r\n\r\nexport async function useFieldCascadeSelect(): Promise<CascadeSelectModule> {\r\n const module = await import('../module/field-cascade-select');\r\n\r\n await module.ready;\r\n\r\n return module;\r\n}\r\n","import { FileDragModule } from '../module/field-file-drag';\r\n\r\nexport async function useFieldFileDrag(): Promise<FileDragModule> {\r\n const module = await import('../module/field-file-drag');\r\n\r\n await module.ready;\r\n\r\n return module;\r\n}\r\n","export function useFieldFlatpickr(): Promise<any> {\r\n return import('../module/field-flatpickr');\r\n}\r\n","import type { ModalSelectModule } from '../module/field-modal-select';\r\n\r\nexport function useFieldModalSelect(): Promise<ModalSelectModule> {\r\n // Modal select has no exports now\r\n return import('../module/field-modal-select');\r\n}\r\n","export function useFieldModalTree() {\r\n import('../module/field-modal-tree');\r\n}\r\n","import { RepeatableModule } from '../module/field-repeatable';\r\n\r\nexport async function useFieldRepeatable(): Promise<RepeatableModule> {\r\n const module = await import('../module/field-repeatable');\r\n\r\n await module.ready;\r\n\r\n return module;\r\n}\r\n","import { SingleImageDragModule } from '../module/field-single-image-drag';\r\n\r\nexport function useFieldSingleImageDrag(): Promise<SingleImageDragModule> {\r\n return import('../module/field-single-image-drag');\r\n}\r\n","import type { UnicornFormElement } from '../module/form';\r\nimport { selectOne, module } from '../service';\r\n\r\nlet formElement: typeof UnicornFormElement;\r\n\r\nexport async function useFormAsync(): Promise<UnicornFormElement>;\r\nexport async function useFormAsync(ele?: string | Element, options?: Record<string, any>): Promise<UnicornFormElement | null>;\r\nexport async function useFormAsync(ele?: string | Element, options: Record<string, any> = {}): Promise<UnicornFormElement | null> {\r\n const { UnicornFormElement } = await import('../module/form');\r\n\r\n formElement ??= UnicornFormElement;\r\n\r\n return useForm(ele, options);\r\n}\r\n\r\nexport function useForm(): UnicornFormElement;\r\nexport function useForm(ele?: string | Element, options?: Record<string, any>): UnicornFormElement | null;\r\nexport function useForm(ele?: string | Element, options: Record<string, any> = {}): UnicornFormElement | null {\r\n if (ele == null) {\r\n return new formElement(undefined, undefined, options);\r\n }\r\n\r\n const selector = typeof ele === 'string' ? ele : undefined;\r\n const el = selectOne<HTMLFormElement>(ele as string);\r\n\r\n if (!el) {\r\n throw new Error(`Form element of: ${selector} not found.`);\r\n }\r\n\r\n return module(\r\n el,\r\n 'unicorn.form',\r\n () => new formElement(selector, el, options)\r\n );\r\n}\r\n\r\nexport async function useFormComponent(ele?: string | Element, options: Record<string, any> = {}) {\r\n const form = await useFormAsync(ele, options);\r\n\r\n await form?.initComponent();\r\n\r\n return form;\r\n}\r\n","import type { UnicornGridElement } from '../module/grid';\r\nimport { useForm, useFormAsync } from './useForm';\r\nimport { selectOne, module } from '../service';\r\n\r\nlet gridElement: typeof UnicornGridElement;\r\n\r\nexport async function useGridAsync(\r\n ele?: string | HTMLElement,\r\n options: Record<string, any> | undefined = {}\r\n): Promise<UnicornGridElement | null> {\r\n await useFormAsync();\r\n\r\n const { UnicornGridElement } = await import('../module/grid');\r\n\r\n gridElement ??= UnicornGridElement;\r\n\r\n if (!ele) {\r\n return null;\r\n }\r\n\r\n return useGrid(ele, options);\r\n}\r\n\r\nexport function useGrid(\r\n ele: string | HTMLElement,\r\n options: Record<string, any> | undefined = {}\r\n): UnicornGridElement | null {\r\n const selector = typeof ele === 'string' ? ele : '';\r\n const element = selectOne(ele);\r\n\r\n if (!element) {\r\n throw new Error('Element is empty');\r\n }\r\n\r\n const form = useForm(selector || element);\r\n\r\n if (!form) {\r\n throw new Error('UnicornGrid is depends on UnicornForm');\r\n }\r\n\r\n return module(\r\n element,\r\n 'grid.plugin',\r\n () => new gridElement(selector, element, form, options)\r\n );\r\n}\r\n\r\nexport async function useGridComponent(\r\n ele: string | HTMLElement,\r\n options: Record<string, any> | undefined = {}\r\n): Promise<UnicornGridElement | null> {\r\n const grid = await useGridAsync(ele, options);\r\n\r\n await grid?.initComponent();\r\n\r\n return grid;\r\n}\r\n","import type { UnicornHttpClient } from '../module/http-client';\r\nimport type { AxiosInstance, CreateAxiosDefaults } from 'axios';\r\n\r\nexport async function useHttpClient(config?: CreateAxiosDefaults | AxiosInstance): Promise<UnicornHttpClient> {\r\n const { createHttpClient } = await import('../module/http-client');\r\n\r\n return createHttpClient(config as CreateAxiosDefaults | undefined);\r\n}\r\n","import { IframeModalModule } from '../module/iframe-modal';\r\n\r\nexport async function useIframeModal(): Promise<IframeModalModule> {\r\n const module = await import('../module/iframe-modal');\r\n\r\n await module.ready;\r\n\r\n return module;\r\n}\r\n","import type { ListDependent, ListDependentModule, ListDependentOptions } from '../module/list-dependent';\r\nimport { Nullable } from '../types';\r\n\r\nexport async function useListDependent(): Promise<ListDependentModule>;\r\nexport async function useListDependent(\r\n element: string | HTMLSelectElement,\r\n dependent?: Nullable<string | HTMLSelectElement>,\r\n options?: Partial<ListDependentOptions>\r\n): Promise<ListDependent>;\r\nexport async function useListDependent(\r\n element?: Nullable<string | HTMLSelectElement>,\r\n dependent?: Nullable<string | HTMLSelectElement>,\r\n options: Partial<ListDependentOptions> = {}\r\n): Promise<any> {\r\n const module = await import('../module/list-dependent');\r\n\r\n await module.ready;\r\n\r\n if (element) {\r\n const { ListDependent } = module;\r\n\r\n return ListDependent.handle(element, dependent ?? undefined, options);\r\n }\r\n\r\n return module;\r\n}\r\n","import { Dictionary } from '../types';\r\nimport { TaskQueue, queue } from '@lyrasoft/ts-toolkit/generic';\r\n\r\nconst queues: Dictionary<TaskQueue> = {};\r\n\r\nexport function useQueue(name: string = 'default', maxRunning = 1): TaskQueue {\r\n return queues[name] ??= createQueue(maxRunning);\r\n}\r\n\r\nexport function createQueue(maxRunning = 1): TaskQueue {\r\n return queue(maxRunning);\r\n}\r\n\r\n","import {\r\n S3MultipartUploader,\r\n S3MultipartUploaderModule,\r\n S3MultipartUploaderOptions\r\n} from '../module/s3-multipart-uploader';\r\nimport type { S3Uploader, S3UploaderGlobalOptions, S3UploaderModule } from '../module/s3-uploader';\r\n\r\nexport async function useS3Uploader(): Promise<S3UploaderModule>;\r\nexport async function useS3Uploader(name: string, options?: Partial<S3UploaderGlobalOptions>): Promise<S3Uploader>;\r\nexport async function useS3Uploader(name?: string, options: Partial<S3UploaderGlobalOptions> = {}): Promise<any> {\r\n const module = await import('../module/s3-uploader');\r\n\r\n if (!name) {\r\n return module;\r\n }\r\n\r\n const { get } = module;\r\n\r\n return get(name, options);\r\n}\r\n\r\nexport async function useS3MultipartUploader(): Promise<S3MultipartUploaderModule>;\r\nexport async function useS3MultipartUploader(options: Partial<S3MultipartUploaderOptions>): Promise<S3MultipartUploader>;\r\nexport async function useS3MultipartUploader(options?: Partial<S3MultipartUploaderOptions>): Promise<any> {\r\n const module = await import('../module/s3-multipart-uploader');\r\n\r\n if (options != null) {\r\n return new module.S3MultipartUploader(options);\r\n }\r\n\r\n return module;\r\n}\r\n","import { ShowOnModule } from '../module/show-on';\r\n\r\nexport async function useShowOn(): Promise<ShowOnModule> {\r\n const module = await import('../module/show-on');\r\n\r\n await module.ready;\r\n\r\n return module;\r\n}\r\n","\r\nimport { Dictionary } from '../types';\r\nimport { Stack, stack } from '@lyrasoft/ts-toolkit/generic';\r\n\r\nconst stacks: Dictionary<Stack> = {};\r\n\r\nexport function useStack<T = any>(name: string = 'default', store: any[] = []): Stack<T> {\r\n return stacks[name] ??= createStack<T>(store);\r\n}\r\n\r\nexport function createStack<T = any>(store: any[] = []): Stack<T> {\r\n return stack<T>(store);\r\n}\r\n","import { module, useCssImport, useCssIncludes, useImport, wait } from '../service';\r\nimport type { Nullable } from '../types';\r\nimport { mergeDeep } from '../utilities';\r\n\r\n/**\r\n * @see https://tom-select.js.org/\r\n */\r\nexport async function useTomSelect(\r\n selector?: Nullable<string | HTMLElement | NodeListOf<HTMLElement>>,\r\n options: Record<string, any> = {},\r\n theme: string = 'bootstrap5'\r\n) {\r\n const [m] = await wait(\r\n useImport('@vendor/tom-select/dist/js/tom-select.complete.min.js'),\r\n useCssImport(`@vendor/tom-select/dist/css/tom-select.${theme}.min.css`)\r\n );\r\n\r\n if (selector) {\r\n module<any, HTMLSelectElement>(\r\n selector,\r\n 'tom.select',\r\n (ele) => {\r\n options = mergeDeep({\r\n allowEmptyOption: true,\r\n maxOptions: null,\r\n plugins: {\r\n caret_position: {},\r\n clear_button: {},\r\n }\r\n }, options);\r\n\r\n if ((ele as HTMLSelectElement).multiple) {\r\n options.plugins.remove_button = {};\r\n } else {\r\n options.plugins.dropdown_input = {};\r\n }\r\n\r\n // Auto select first if options changed.\r\n // @see https://github.com/orchidjs/tom-select/issues/362\r\n class UnicornTomSelect extends TomSelect {\r\n syncOptionsWithoutKeepSelected() {\r\n const oldValue = ele.value;\r\n\r\n this.clear();\r\n this.clearOptions();\r\n this.sync();\r\n\r\n if (ele.value !== oldValue) {\r\n this.setValue(\r\n ele.querySelector<HTMLOptionElement>(`option[value=\"${oldValue}\"]`)?.value\r\n ?? ele.querySelector<HTMLOptionElement>('option')?.value\r\n ?? '',\r\n true\r\n );\r\n }\r\n }\r\n }\r\n\r\n // @ts-ignore\r\n const t = new UnicornTomSelect(ele as TomInput, options);\r\n\r\n ele.addEventListener('list:updated', () => {\r\n t.syncOptionsWithoutKeepSelected();\r\n });\r\n\r\n return t;\r\n }\r\n );\r\n }\r\n\r\n return m;\r\n}\r\n","import type { Tooltip } from 'bootstrap';\r\nimport { ButtonRadioOptions } from '../bootstrap/button-radio';\r\nimport type { KeepTabOptions } from '../bootstrap/keep-tab';\r\nimport type { UIBootstrap5 } from '../module/ui-bootstrap5';\r\nimport { useUITheme } from '../service';\r\n\r\nexport async function useUIBootstrap5(install = false, pushToGlobal = false): Promise<UIBootstrap5> {\r\n const { UIBootstrap5 } = await import('../module/ui-bootstrap5');\r\n\r\n const theme = UIBootstrap5.get();\r\n\r\n if (install) {\r\n useUITheme(theme);\r\n\r\n if (pushToGlobal) {\r\n theme.pushBootstrapToGlobal();\r\n }\r\n }\r\n\r\n return theme;\r\n}\r\n\r\nexport async function useBs5Tooltip(\r\n selector: NodeListOf<Element> | Element | string = '[data-bs-toggle=\"tooltip\"]',\r\n config: Partial<Tooltip.Options> = {}\r\n): Promise<Tooltip[]> {\r\n const bs5 = await useUIBootstrap5();\r\n\r\n return bs5.tooltip(selector, config);\r\n}\r\n\r\nexport const useBs5KeepTab: typeof UIBootstrap5.prototype.keepTab = async (\r\n selector?: string | HTMLElement,\r\n options: KeepTabOptions = {}\r\n): Promise<any> => {\r\n const bs5 = await useUIBootstrap5();\r\n\r\n return bs5.keepTab(selector, options);\r\n};\r\n\r\nexport const useBs5ButtonRadio: typeof UIBootstrap5.prototype.buttonRadio = async (\r\n selector?: string | HTMLElement,\r\n options: ButtonRadioOptions = {}\r\n): Promise<any> => {\r\n const bs5 = await useUIBootstrap5();\r\n\r\n return bs5.buttonRadio(selector, options);\r\n};\r\n","import { Dictionary } from '../types';\r\nimport type { default as WebDirective } from 'web-directive';\r\nimport type { WebDirectiveHandler, WebDirectiveOptions } from 'web-directive/src/types';\r\n\r\nlet instances: Dictionary<WebDirective> = {};\r\n\r\nexport async function useWebDirective(\r\n name: string = 'unicorn',\r\n options: Partial<WebDirectiveOptions> = {}\r\n): Promise<WebDirective> {\r\n return instances[name] ??= await createWebDirective(Object.assign({}, options, { prefix: 'uni-' }));\r\n}\r\n\r\nexport async function useUniDirective<T extends Element = HTMLElement>(\r\n name: string,\r\n handler: WebDirectiveHandler<T>,\r\n wdInstance: WebDirective | string = 'unicorn'\r\n): Promise<void> {\r\n const wd = typeof wdInstance === 'string' ? await useWebDirective(wdInstance) : wdInstance;\r\n\r\n // Todo: Should fix web-directive types\r\n wd.register(name, handler as WebDirectiveHandler<any>);\r\n}\r\n\r\nasync function createWebDirective(options: Partial<WebDirectiveOptions> = {}): Promise<WebDirective> {\r\n const WebDirective = (await import('web-directive')).default;\r\n\r\n const wd = new WebDirective(options);\r\n wd.listen();\r\n\r\n return wd;\r\n}\r\n","import type {\r\n UnicornFieldValidation,\r\n UnicornFormValidation,\r\n ValidationHandler,\r\n ValidationModule\r\n} from '../module/validation';\r\nimport { getBoundedInstance } from '../service';\r\n\r\nexport async function useFormValidation(): Promise<ValidationModule>;\r\nexport async function useFormValidation(selector: string | Element): Promise<UnicornFormValidation | null>;\r\nexport async function useFormValidation(selector?: string | Element): Promise<any> {\r\n const module = await import('../module/validation');\r\n\r\n await module.ready;\r\n\r\n if (!selector) {\r\n return module;\r\n }\r\n\r\n return useFormValidationSync(selector);\r\n}\r\n\r\nexport function useFormValidationSync(selector: string | Element): UnicornFormValidation | null {\r\n return getBoundedInstance<UnicornFormValidation>(selector, 'form.validation');\r\n}\r\n\r\nexport function useFieldValidationSync(selector: string | Element): UnicornFieldValidation | null {\r\n return getBoundedInstance<UnicornFieldValidation>(selector, 'field.validation');\r\n}\r\n\r\nexport async function addGlobalValidator(\r\n name: string,\r\n validator: ValidationHandler,\r\n options: Record<string, any> = {}\r\n): Promise<void> {\r\n const { UnicornFormValidation } = await useFormValidation();\r\n\r\n UnicornFormValidation.addGlobalValidator(name, validator, options);\r\n}\r\n","import { AlertAdapter, deleteConfirm, simpleAlert, simpleConfirm } from '@lyrasoft/ts-toolkit/generic';\r\nimport type { Alpine as AlpineGlobal } from 'alpinejs';\r\nimport type { default as SpectrumGlobal } from 'spectrum-vanilla';\r\nimport type { SpectrumOptions } from 'spectrum-vanilla/dist/types/types';\r\nimport type { default as TomSelectGlobal } from 'tom-select';\r\nimport { useStack } from '../composable';\r\nimport { data, removeData } from '../data';\r\nimport type { Constructor, MaybePromise, Nullable, UIThemeInterface } from '../types';\r\nimport { animateTo } from './animate';\r\nimport { html, module, selectAll, selectOne } from './dom';\r\nimport { nextTick } from './helper';\r\nimport { useCssImport, useImport } from './loader';\r\n\r\nlet ui: UnicornUI;\r\n\r\nAlertAdapter.alert = (title: string, text = '', type = 'info'): Promise<void> => {\r\n if (text) {\r\n title += ' | ' + text;\r\n }\r\n\r\n window.alert(title);\r\n\r\n return Promise.resolve();\r\n};\r\n\r\nAlertAdapter.confirm = (message: string): Promise<boolean> => {\r\n message = message || 'Are you sure?';\r\n\r\n return new Promise((resolve) => {\r\n resolve(window.confirm(message));\r\n });\r\n};\r\n\r\nAlertAdapter.confirmText = () => 'OK';\r\nAlertAdapter.cancelText = () => 'Cancel';\r\nAlertAdapter.deleteText = () => 'Delete';\r\n\r\nexport { simpleAlert, simpleConfirm, deleteConfirm, AlertAdapter };\r\n\r\nexport function useUI(instance?: UnicornUI): UnicornUI {\r\n if (instance) {\r\n ui = instance;\r\n }\r\n\r\n return ui ??= new UnicornUI();\r\n}\r\n\r\nexport function useUITheme<T extends UIThemeInterface>(theme?: T | Constructor<T>): T {\r\n const ui = useUI();\r\n\r\n if (ui.theme && !theme) {\r\n return ui.theme;\r\n }\r\n\r\n if (typeof theme === 'function') {\r\n theme = new theme();\r\n }\r\n\r\n ui.installTheme(theme);\r\n\r\n return ui.theme;\r\n}\r\n\r\nexport class UnicornUI {\r\n theme?: any;\r\n aliveHandle?: any;\r\n\r\n static get defaultOptions() {\r\n return {\r\n messageSelector: '.message-wrap',\r\n };\r\n }\r\n\r\n installTheme(theme: any) {\r\n this.theme = theme;\r\n }\r\n\r\n // confirm(message: string): Promise<boolean> {\r\n // message = message || 'Are you sure?';\r\n //\r\n // return new Promise((resolve) => {\r\n // resolve(window.confirm(message));\r\n // });\r\n // }\r\n //\r\n // alert(title: string, text = '', type = 'info'): Promise<boolean> {\r\n // if (text) {\r\n // title += ' | ' + text;\r\n // }\r\n //\r\n // window.alert(title);\r\n //\r\n // return Promise.resolve(true);\r\n // }\r\n}\r\n\r\nconst prepares: AlpinePrepareCallback[] = [];\r\ntype AlpinePrepareCallback = (Alpine: AlpineGlobal) => MaybePromise<any>;\r\nconst { promise: alpineLoaded, resolve: alpineResolve } = Promise.withResolvers<AlpineGlobal>();\r\n\r\nexport async function loadAlpine(callback?: Nullable<AlpinePrepareCallback>): Promise<AlpineGlobal> {\r\n if (callback && !window.Alpine) {\r\n prepares.push(callback);\r\n }\r\n\r\n const { default: Alpine }: { default: AlpineGlobal } = await useImport('@alpinejs');\r\n\r\n if (!window.Alpine) {\r\n await Promise.all(prepares.map((callback) => Promise.resolve(callback(Alpine))));\r\n\r\n Alpine.start();\r\n\r\n window.Alpine = Alpine;\r\n\r\n alpineResolve(Alpine);\r\n } else if (callback) {\r\n await callback(Alpine);\r\n }\r\n\r\n return Alpine;\r\n}\r\n\r\nexport async function initAlpineComponent(directive: string) {\r\n const Alpine = await alpineLoaded;\r\n\r\n await nextTick();\r\n\r\n selectAll<HTMLElement>(`[${directive}]`, (el) => {\r\n const code = el.getAttribute(directive) || '';\r\n el.removeAttribute(directive);\r\n\r\n // @see https://github.com/alpinejs/alpine/issues/359#issuecomment-973688464\r\n Alpine.mutateDom(() => {\r\n el.setAttribute('x-data', code);\r\n });\r\n\r\n Alpine.initTree(el);\r\n });\r\n}\r\n\r\n/**\r\n * Before Alpine init\r\n */\r\nexport async function prepareAlpine(callback: AlpinePrepareCallback) {\r\n if (window.Alpine) {\r\n await callback(window.Alpine);\r\n } else {\r\n prepares.push(callback);\r\n }\r\n}\r\nexport async function prepareAlpineDefer(callback: AlpinePrepareCallback) {\r\n const Alpine = await alpineLoaded;\r\n\r\n await callback(window.Alpine);\r\n}\r\n\r\n/**\r\n * Render Messages.\r\n */\r\nexport function renderMessage(messages: string | string[], type: string = 'info') {\r\n ui.theme.renderMessage(messages, type);\r\n}\r\n\r\n/**\r\n * Clear messages.\r\n */\r\nexport function clearMessages() {\r\n ui.theme.clearMessages();\r\n}\r\n\r\n/**\r\n * Show notify.\r\n */\r\nexport function notify(messages: string | string[], type: string = 'info') {\r\n ui.theme.renderMessage(messages, type);\r\n}\r\n\r\n/**\r\n * Clear notifies.\r\n */\r\nexport function clearNotifies() {\r\n ui.theme.clearMessages();\r\n}\r\n\r\nexport async function mark(selector?: string | HTMLElement, keyword: string = '', options: Record<string, any> = {}) {\r\n const modules = await useImport('@vendor/mark.js/dist/mark.min.js');\r\n\r\n if (selector != null) {\r\n const instance = new Mark(selector);\r\n instance.mark(keyword, options);\r\n }\r\n\r\n return modules;\r\n}\r\n\r\nexport async function slideUp(target: string | HTMLElement, duration: number = 300): Promise<Animation | void> {\r\n const ele = selectOne(target);\r\n\r\n if (!ele) {\r\n return Promise.resolve();\r\n }\r\n\r\n ele.style.overflow = 'hidden';\r\n\r\n const animation = animateTo(\r\n ele,\r\n { height: 0, paddingTop: 0, paddingBottom: 0 },\r\n { duration, easing: 'ease-out' }\r\n );\r\n\r\n data(ele, 'animation.sliding.up', true);\r\n\r\n const r = await animation.finished;\r\n\r\n if (!data(ele, 'animation.sliding.down')) {\r\n ele.style.display = 'none';\r\n }\r\n\r\n removeData(ele, 'animation.sliding.up');\r\n\r\n return r;\r\n}\r\n\r\nexport function slideDown(\r\n target: string | HTMLElement,\r\n duration: number = 300,\r\n display: string = 'block'): Promise<Animation | void> {\r\n const ele = selectOne(target);\r\n\r\n if (!ele) {\r\n return Promise.resolve();\r\n }\r\n\r\n data(ele, 'animation.sliding.down', true);\r\n\r\n ele.style.display = display;\r\n\r\n// Get height\r\n let maxHeight = 0;\r\n for (const child of Array.from(ele.children) as HTMLElement[]) {\r\n maxHeight = Math.max(child.offsetHeight, maxHeight);\r\n }\r\n\r\n const animation = animateTo(\r\n ele,\r\n {\r\n height: [\r\n 0,\r\n maxHeight + 'px'\r\n ]\r\n },\r\n { duration, easing: 'ease-out' }\r\n );\r\n\r\n animation.addEventListener('finish', () => {\r\n ele.style.height = '';\r\n\r\n if (!data(ele, 'animation.sliding.up')) {\r\n ele.style.overflow = 'visible';\r\n }\r\n\r\n removeData(ele, 'animation.sliding.down');\r\n });\r\n\r\n return animation.finished;\r\n}\r\n\r\n/**\r\n * slideToggle\r\n */\r\nexport function slideToggle(\r\n target: string | HTMLElement,\r\n duration: number = 500,\r\n display: string = 'block'): Promise<Animation | void> {\r\n const ele = selectOne(target);\r\n\r\n if (!ele) {\r\n return Promise.resolve();\r\n }\r\n\r\n if (window.getComputedStyle(ele).display === 'none') {\r\n return slideDown(ele, duration, display);\r\n } else {\r\n return slideUp(ele, duration);\r\n }\r\n}\r\n\r\nexport async function fadeOut(selector: string | HTMLElement, duration: number = 500): Promise<Animation | void> {\r\n const el = selectOne(selector);\r\n\r\n if (!el) {\r\n return;\r\n }\r\n\r\n const animation = animateTo(el, { opacity: 0 }, { duration, easing: 'ease-out' });\r\n\r\n const p = await animation.finished;\r\n el.style.display = 'none';\r\n\r\n return p;\r\n};\r\n\r\nexport async function fadeIn(\r\n selector: string | HTMLElement,\r\n duration: number = 500,\r\n display: string = 'block'\r\n): Promise<Animation | void> {\r\n const el = selectOne(selector);\r\n\r\n if (!el) {\r\n return;\r\n }\r\n\r\n el.style.display = '';\r\n\r\n if (window.getComputedStyle(el).display !== display) {\r\n el.style.display = display;\r\n }\r\n\r\n const animation = animateTo(el, { opacity: 1 }, { duration, easing: 'ease-out' });\r\n\r\n return animation.finished;\r\n};\r\n\r\nexport async function highlight(\r\n selector: string | HTMLElement,\r\n color: string = '#ffff99',\r\n duration: number = 600\r\n): Promise<Animation | void> {\r\n const ele = selectOne(selector);\r\n\r\n if (!ele) {\r\n return;\r\n }\r\n\r\n duration /= 2;\r\n const bg = window.getComputedStyle(ele).backgroundColor;\r\n\r\n const animation = animateTo(ele, { backgroundColor: color }, { duration });\r\n\r\n await animation.finished;\r\n\r\n return animateTo(ele, { backgroundColor: bg }, { duration });\r\n}\r\n\r\n/**\r\n * Color Picker.\r\n */\r\nexport async function useColorPicker(\r\n selector?: Nullable<string | HTMLElement | NodeListOf<HTMLElement>>,\r\n options: Partial<SpectrumOptions> = {}\r\n): Promise<any> {\r\n if (options?.theme === 'dark') {\r\n useCssImport('@spectrum/spectrum-dark.min.css');\r\n } else if (!options?.theme) {\r\n useCssImport('@spectrum/spectrum.min.css');\r\n }\r\n\r\n const m = await useImport('@spectrum');\r\n\r\n// Locale\r\n if (typeof options.locale === 'string') {\r\n let ls: any = options.locale.split('-').map((l) => l.toLowerCase());\r\n\r\n if (ls[0] === ls[1]) {\r\n ls = [ls];\r\n }\r\n\r\n ls = ls.join('-');\r\n try {\r\n await useImport(`@spectrum/i18n/${ls}.js`);\r\n } catch (e) {\r\n console.warn(`Unable to load Spectrum locale \"${ls}\" (${options.locale})`);\r\n }\r\n }\r\n\r\n if (selector) {\r\n module<any, HTMLElement>(selector, 'spectrum', (ele) => Spectrum.getInstance(ele, options));\r\n }\r\n\r\n return m;\r\n}\r\n\r\nexport function useDisableOnSubmit(\r\n formSelector: string | HTMLFormElement = '#admin-form',\r\n buttonSelector: string = '',\r\n options: Record<string, any> = {}\r\n) {\r\n // Todo: Use object to handle it\r\n buttonSelector = buttonSelector || [\r\n '#admin-toolbar button',\r\n '#admin-toolbar a',\r\n formSelector + ' .disable-on-submit',\r\n formSelector + ' .js-dos',\r\n formSelector + ' [data-dos]',\r\n ].join(',');\r\n\r\n const iconSelector = options.iconSelector || [\r\n '[class*=\"fa-\"]',\r\n '[data-spin]',\r\n '[data-spinner]',\r\n ].join(',');\r\n\r\n const event = options.event || 'submit';\r\n const spinnerClass = options.spinnerClass || 'spinner-border spinner-border-sm';\r\n\r\n selectAll<HTMLElement>(buttonSelector, (button) => {\r\n button.addEventListener('click', (e) => {\r\n button.dataset.clicked = '1';\r\n\r\n setTimeout(() => {\r\n delete button.dataset.clicked;\r\n }, 1500);\r\n });\r\n });\r\n\r\n const form = selectOne<HTMLFormElement>(formSelector);\r\n form?.addEventListener(event, (e: SubmitEvent) => {\r\n setTimeout(() => {\r\n if (!form.checkValidity()) {\r\n return;\r\n }\r\n\r\n selectAll<HTMLElement>(buttonSelector, (button) => {\r\n button.style.pointerEvents = 'none';\r\n button.setAttribute('disabled', 'disabled');\r\n button.classList.add('disabled');\r\n\r\n if (button.dataset.clicked) {\r\n let icon = button.querySelector(iconSelector);\r\n\r\n if (icon) {\r\n const i = html('<i></i>');\r\n icon.parentNode.replaceChild(i, icon);\r\n\r\n i.setAttribute('class', spinnerClass);\r\n // icon.styles.width = '1em';\r\n // icon.styles.height = '1em';\r\n // icon.styles.borderWith = '.15em';\r\n }\r\n }\r\n });\r\n }, 0);\r\n });\r\n}\r\n\r\nexport function useDisableIfStackNotEmpty(buttonSelector: string = '[data-task=save]',\r\n stackName: string = 'uploading') {\r\n const stack = useStack(stackName);\r\n\r\n stack.observe((stack, length) => {\r\n for (const button of selectAll<HTMLElement>(buttonSelector)) {\r\n if (length > 0) {\r\n button.setAttribute('disabled', 'disabled');\r\n button.classList.add('disabled');\r\n } else {\r\n button.removeAttribute('disabled');\r\n button.classList.remove('disabled');\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Keep alive.\r\n */\r\nexport function useKeepAlive(url: string, time: number = 60000): () => void {\r\n const aliveHandle = window.setInterval(() => fetch(url), time);\r\n\r\n return () => {\r\n clearInterval(aliveHandle);\r\n };\r\n}\r\n\r\n/**\r\n * Vue component field.\r\n */\r\nexport async function useVueComponentField(\r\n selector?: Nullable<string | HTMLElement>,\r\n value?: any,\r\n options: Record<string, any> = {}\r\n): Promise<any> {\r\n const m = await useImport('@unicorn/field/vue-component-field.js');\r\n\r\n if (selector) {\r\n m.VueComponentField.init(selector, value, options);\r\n }\r\n\r\n return m;\r\n}\r\n\r\ndeclare global {\r\n var Alpine: AlpineGlobal;\r\n var TomSelect: typeof TomSelectGlobal;\r\n var Spectrum: typeof SpectrumGlobal;\r\n var Mark: any;\r\n}\r\n","import { data } from '../data';\r\n\r\ntype UriTypes = 'full' | 'path' | 'root' | 'current' | 'route' | 'script';\r\ntype AssetTypes = 'root' | 'path';\r\n\r\nexport function useSystemUri(): UnicornSystemUri;\r\nexport function useSystemUri(type: UriTypes): string;\r\nexport function useSystemUri(type?: UriTypes, path?: string): UnicornSystemUri | string {\r\n const uri = UnicornSystemUri.get();\r\n\r\n if (type) {\r\n return uri[type](path);\r\n }\r\n\r\n return uri;\r\n}\r\n\r\nexport function useAssetUri(): UnicornAssetUri;\r\nexport function useAssetUri(type?: AssetTypes, path?: string): string;\r\nexport function useAssetUri(type?: AssetTypes, path?: string): UnicornAssetUri | string {\r\n const asset = UnicornAssetUri.get();\r\n\r\n if (type) {\r\n return asset[type](path);\r\n }\r\n\r\n return asset;\r\n}\r\n\r\nfunction uri(type: string) {\r\n return data('unicorn.uri')[type];\r\n}\r\n\r\nfunction asset(type: string) {\r\n return uri('asset')[type];\r\n}\r\n\r\nexport function addUriBase(uri: string, type = 'path') {\r\n if (uri.substring(0, 2) === '/\\/' || uri.substring(0, 4) === 'http') {\r\n return uri;\r\n }\r\n\r\n return asset(type) + '/' + uri;\r\n}\r\n\r\nexport class UnicornSystemUri extends URL {\r\n static instance: UnicornSystemUri;\r\n\r\n static get() {\r\n return this.instance ??= new this(uri('full'));\r\n }\r\n\r\n path(path: string = ''): string {\r\n return uri('path') + path;\r\n }\r\n\r\n root(path: string = ''): string {\r\n return uri('root') + path;\r\n }\r\n\r\n current(): string {\r\n return uri('current') || '';\r\n }\r\n\r\n full(): string {\r\n return uri('full') || '';\r\n }\r\n\r\n route(): string {\r\n return uri('route') || '';\r\n }\r\n\r\n script(): string {\r\n return uri('script') || '';\r\n }\r\n\r\n routeWithQuery() {\r\n const route = this.route();\r\n const query = this.searchParams.toString();\r\n\r\n return query ? `${route}?${query}` : route;\r\n }\r\n\r\n routeAndQuery() {\r\n const route = this.route();\r\n const query = this.searchParams.toString();\r\n\r\n return [route, query];\r\n }\r\n}\r\n\r\nexport class UnicornAssetUri {\r\n static instance: UnicornAssetUri;\r\n\r\n static get() {\r\n return this.instance ??= new this();\r\n }\r\n\r\n path(path: string = ''): string {\r\n return asset('path') + path;\r\n }\r\n\r\n root(path: string = ''): string {\r\n return asset('root') + path;\r\n }\r\n}\r\n","export function encode(obj, pfx) {\n\tvar k, i, tmp, str='';\n\n\tfor (k in obj) {\n\t\tif ((tmp = obj[k]) !== void 0) {\n\t\t\tif (Array.isArray(tmp)) {\n\t\t\t\tfor (i=0; i < tmp.length; i++) {\n\t\t\t\t\tstr && (str += '&');\n\t\t\t\t\tstr += encodeURIComponent(k) + '=' + encodeURIComponent(tmp[i]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstr && (str += '&');\n\t\t\t\tstr += encodeURIComponent(k) + '=' + encodeURIComponent(tmp);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (pfx || '') + str;\n}\n\nfunction toValue(mix) {\n\tif (!mix) return '';\n\tvar str = decodeURIComponent(mix);\n\tif (str === 'false') return false;\n\tif (str === 'true') return true;\n\treturn (+str * 0 === 0) ? (+str) : str;\n}\n\nexport function decode(str) {\n\tvar tmp, k, out={}, arr=str.split('&');\n\n\twhile (tmp = arr.shift()) {\n\t\ttmp = tmp.split('=');\n\t\tk = tmp.shift();\n\t\tif (out[k] !== void 0) {\n\t\t\tout[k] = [].concat(out[k], toValue(tmp.shift()));\n\t\t} else {\n\t\t\tout[k] = toValue(tmp.shift());\n\t\t}\n\t}\n\n\treturn out;\n}\n","\r\nimport { data } from '../data';\r\nimport { decode, encode } from 'qss';\r\n\r\n/**\r\n * Add a route.\r\n */\r\nexport function addRoute(route: string, url: string) {\r\n const routes = data('unicorn.routes') || {};\r\n routes[route] = url;\r\n\r\n data('unicorn.routes', routes);\r\n}\r\n\r\n/**\r\n * Get route.\r\n */\r\nexport function route(route: string, query?: Record<string, any>): string {\r\n const source = route;\r\n const extract = extractRoute(source);\r\n route = extract.route;\r\n let path = extract.path;\r\n const routes = data('unicorn.routes') || {};\r\n\r\n let url = routes[route];\r\n\r\n if (url == null) {\r\n if (!route.startsWith('@')) {\r\n route = '@' + route;\r\n } else {\r\n route = route.substring(1);\r\n }\r\n }\r\n\r\n url = routes[route];\r\n\r\n if (url == null) {\r\n throw new Error(`Route: \"${source}\" not found`);\r\n }\r\n\r\n // Merge query\r\n if (path) {\r\n const { route: u1, path: u1q } = extractRoute(url, '?');\r\n const { route: u2, path: u2q } = extractRoute(path, '?');\r\n\r\n url = u1 + '/' + u2;\r\n\r\n if (u1q || u2q) {\r\n const q = [ u1q, u2q ].filter(u => u).join('&');\r\n url += '?' + q;\r\n }\r\n }\r\n\r\n return addQuery(url, query);\r\n}\r\n\r\nfunction extractRoute(route: string, sep: string = '/'): { path: string; route: string } {\r\n if (route.indexOf(sep) === -1) {\r\n return { route, path: '' }\r\n }\r\n\r\n const segments = route.split(sep);\r\n\r\n route = segments.shift() || '';\r\n const path = segments.join(sep);\r\n\r\n return { route, path };\r\n}\r\n\r\nexport function hasRoute(route: string): boolean {\r\n return undefined !== data('unicorn.routes')[route];\r\n}\r\n\r\nexport function addQuery(url: string, query?: Record<string, any>): string {\r\n if (query == null) {\r\n return url;\r\n }\r\n\r\n for (let k in query) {\r\n const v = query[k];\r\n\r\n const placeholder = `{${k}}`;\r\n\r\n if (url.indexOf(placeholder) !== -1) {\r\n url = url.replace(\r\n new RegExp(`${placeholder}`, 'g'),\r\n v\r\n );\r\n delete query[k];\r\n }\r\n\r\n const encodedPlaceholder = encodeURIComponent(`{${k}}`);\r\n\r\n if (url.indexOf(encodedPlaceholder) !== -1) {\r\n url = url.replace(\r\n new RegExp(`${encodedPlaceholder}`, 'g'),\r\n v\r\n );\r\n delete query[k];\r\n }\r\n }\r\n\r\n if (Object.keys(query).length === 0) {\r\n return url;\r\n }\r\n\r\n const queryString = encode(query);\r\n\r\n return url + (/\\?/.test(url) ? `&${queryString}` : `?${queryString}`);\r\n}\r\n\r\nexport function parseQuery<T = Record<string, any>>(queryString: string): T {\r\n return decode(queryString) as T;\r\n}\r\n\r\nexport function buildQuery(query: Record<string, any>): string {\r\n return encode(query);\r\n}\r\n","import { selectAll } from '../service';\r\n\r\nexport function removeCloak() {\r\n if (globalThis.document == null) {\r\n return;\r\n }\r\n\r\n selectAll('[uni-cloak]', (el) => el.removeAttribute('uni-cloak'));\r\n}\r\n","import { getData, setData, removeData as rmdata } from './utilities';\r\n\r\nexport function data(name: string, data: any): any;\r\nexport function data(name: string): any;\r\nexport function data(ele: Element, name: string): any;\r\nexport function data(ele: Element, name: string, data?: any): any;\r\nexport function data(ele: Element | string, name: any = undefined, value: any = undefined) {\r\n if (!(ele instanceof HTMLElement)) {\r\n value = name;\r\n name = ele;\r\n ele = document as any as Element;\r\n }\r\n\r\n if (name === undefined) {\r\n return getData(ele);\r\n }\r\n\r\n if (value === undefined) {\r\n const res = getData(ele, name);\r\n\r\n return res;\r\n }\r\n\r\n setData(ele, name, value);\r\n}\r\n\r\nexport function removeData(name: string): any;\r\nexport function removeData(ele: Element, name: string): any;\r\nexport function removeData(ele: Element|string, name: any = undefined) {\r\n if (!(ele instanceof HTMLElement)) {\r\n name = ele;\r\n ele = document as any as Element;\r\n }\r\n\r\n rmdata(ele, name);\r\n}\r\n","export abstract class EventMixin implements EventAwareInterface {\r\n _listeners: Record<string, EventHandler[]> = {};\r\n\r\n on(event: string | string[], handler: EventHandler): this {\r\n if (Array.isArray(event)) {\r\n for (const e of event) {\r\n this.on(e, handler);\r\n }\r\n return this;\r\n }\r\n\r\n this._listeners[event] ??= [];\r\n\r\n this._listeners[event].push(handler);\r\n\r\n return this;\r\n }\r\n\r\n once(event: string | string[], handler: EventHandler): this {\r\n handler.once = true;\r\n return this.on(event, handler);\r\n }\r\n\r\n off(event: string, handler?: EventHandler): this {\r\n if (handler) {\r\n this._listeners[event] = this.listeners(event).filter((listener) => listener !== handler);\r\n return this;\r\n }\r\n\r\n delete this._listeners[event];\r\n\r\n return this;\r\n }\r\n\r\n trigger(event: string | string[], ...args: any[]): this {\r\n if (Array.isArray(event)) {\r\n for (const e of event) {\r\n this.trigger(e);\r\n }\r\n return this;\r\n }\r\n\r\n for (const listener of this.listeners(event)) {\r\n listener(...args);\r\n }\r\n\r\n // Remove once\r\n this._listeners[event] = this.listeners(event).filter((listener) => listener?.once !== true);\r\n\r\n return this;\r\n }\r\n\r\n listeners(event: string): EventHandler[] {\r\n return this._listeners[event] === undefined ? [] : this._listeners[event];\r\n }\r\n}\r\n\r\n// export class EventBus extends Mixin(EventMixin) {\r\n// }\r\n\r\nexport type EventHandler = ((...event: any[]) => void) & { once?: boolean };\r\n\r\nexport interface EventAwareInterface {\r\n on(event: string | string[], handler: EventHandler): this;\r\n\r\n once(event: string | string[], handler: EventHandler): this;\r\n\r\n off(event: string, handler?: EventHandler): this;\r\n\r\n trigger(event: string | string[], ...args: any[]): this;\r\n\r\n listeners(event: string): EventHandler[];\r\n}\r\n","\r\nimport { Mixin } from 'ts-mixer';\r\nimport { data } from './data';\r\nimport { EventAwareInterface, EventMixin } from './events';\r\nimport { domready } from './service';\r\nimport { Constructor, UnicornPlugin } from './types';\r\n\r\nexport type InjectionKey<T = any> = string | symbol | Constructor<T>;\r\n\r\nexport interface UnicornApp extends EventAwareInterface {}\r\n\r\nexport class UnicornApp extends Mixin(EventMixin) implements EventAwareInterface {\r\n registry = new Map();\r\n plugins = new Map();\r\n // _listeners = {};\r\n waits: Promise<any>[] = [];\r\n options: Record<string, any>;\r\n defaultOptions: Record<string, any> = {};\r\n domready = domready;\r\n data = data;\r\n\r\n constructor(options = {}) {\r\n super();\r\n this.options = Object.assign({}, this.defaultOptions, options);\r\n\r\n // Wait dom ready\r\n if (typeof document !== 'undefined') {\r\n this.wait((resolve: Function) => {\r\n document.addEventListener('DOMContentLoaded', () => resolve());\r\n });\r\n\r\n // Ready\r\n document.addEventListener('DOMContentLoaded', () => {\r\n this.completed().then(() => this.trigger('loaded'));\r\n });\r\n }\r\n }\r\n\r\n use(plugin: UnicornPlugin, options: Record<string, any> = {}) {\r\n if (Array.isArray(plugin)) {\r\n plugin.forEach(p => this.use(p));\r\n return this;\r\n }\r\n\r\n // if (plugin.is === undefined) {\r\n // throw new Error(`Plugin: ${plugin.name} must instance of : ${Plugin.name}`);\r\n // }\r\n\r\n plugin?.install?.(this, options);\r\n\r\n this.trigger('plugin.installed', plugin);\r\n\r\n this.plugins.set(plugin, plugin);\r\n\r\n return this;\r\n }\r\n\r\n detach(plugin: any) {\r\n if (plugin.uninstall) {\r\n plugin.uninstall(this);\r\n }\r\n\r\n this.trigger('plugin.uninstalled', plugin);\r\n\r\n return this;\r\n }\r\n\r\n inject<T>(id: InjectionKey<T>): T;\r\n inject<T>(id: InjectionKey<T>, def: T): T;\r\n inject<T>(id: InjectionKey<T>, def?: T): T;\r\n inject<T>(id: InjectionKey<T>, def?: T): T | undefined {\r\n if (!typeof this.registry.has(id)) {\r\n if (def !== undefined) {\r\n return def;\r\n }\r\n\r\n throw new Error(`Injectable: ${(id as any).name} not found.`);\r\n }\r\n\r\n return this.registry.get(id);\r\n }\r\n\r\n provide<T>(id: InjectionKey<T>, value: any) {\r\n this.registry.set(id, value);\r\n\r\n return this;\r\n }\r\n\r\n // trigger(event, ...args) {\r\n // return this.tap(super.trigger(event, ...args), () => {\r\n // if (this.data('windwalker.debug')) {\r\n // console.debug(`[Unicorn Event] ${event}`, args, this.listeners(event));\r\n // }\r\n // });\r\n // }\r\n\r\n wait(callback: Function): Promise<any> {\r\n const p = new Promise((resolve, reject) => {\r\n const promise = callback(resolve, reject);\r\n\r\n if (promise && 'then' in promise) {\r\n promise.then(resolve).catch(reject);\r\n }\r\n });\r\n\r\n this.waits.push(p);\r\n\r\n return p;\r\n }\r\n\r\n completed(): Promise<any[]> {\r\n const promise = Promise.all(this.waits);\r\n\r\n this.waits = [];\r\n\r\n return promise;\r\n }\r\n\r\n macro(name: string, callback: Function) {\r\n if ((this as any)[name]) {\r\n throw new Error(`Macro: ${name} already exists.`);\r\n }\r\n\r\n (this as any)[name] = callback;\r\n\r\n return this;\r\n }\r\n}\r\n","// @ts-nocheck\r\n// @see https://github.com/javan/form-request-submit-polyfill\r\nexport function formRequestSubmit(prototype) {\r\n if (typeof prototype.requestSubmit == 'function') {\r\n return;\r\n }\r\n\r\n prototype.requestSubmit = function (submitter) {\r\n if (submitter) {\r\n validateSubmitter(submitter, this);\r\n submitter.click();\r\n } else {\r\n submitter = document.createElement('input');\r\n submitter.type = 'submit';\r\n submitter.hidden = true;\r\n this.appendChild(submitter);\r\n submitter.click();\r\n this.removeChild(submitter);\r\n }\r\n };\r\n\r\n function validateSubmitter(submitter, form) {\r\n submitter instanceof HTMLElement || raise(TypeError, 'parameter 1 is not of type \\'HTMLElement\\'');\r\n submitter.type == 'submit' || raise(TypeError, 'The specified element is not a submit button');\r\n submitter.form == form || raise(DOMException, 'The specified element is not owned by this form element', 'NotFoundError');\r\n }\r\n\r\n function raise(errorConstructor, message, name) {\r\n throw new errorConstructor('Failed to execute \\'requestSubmit\\' on \\'HTMLFormElement\\': ' + message + '.', name);\r\n }\r\n}\r\n","\r\nimport { formRequestSubmit } from './form-request-submit';\r\n\r\nexport function polyfill() {\r\n // If in browser\r\n if (typeof window !== 'undefined') {\r\n formRequestSubmit(HTMLFormElement.prototype);\r\n }\r\n}\r\n","export async function useFieldMultiUploader() {\r\n await import('../module/field-multi-uploader');\r\n}\r\n","import type { TinymceController, TinymceModule } from '../module/tinymce';\r\nimport type { MaybePromise } from '../types';\r\nimport type { TinyMCE } from 'tinymce';\r\n\r\nexport async function useTinymce(): Promise<TinymceModule>\r\nexport async function useTinymce(\r\n selector?: string,\r\n options?: Record<string, any>\r\n): Promise<TinymceController>;\r\nexport async function useTinymce(\r\n selector?: string,\r\n options: Record<string, any> = {}\r\n): Promise<any> {\r\n const module = await import('../module/tinymce');\r\n\r\n if (selector) {\r\n return module.get(selector, options);\r\n }\r\n\r\n return module;\r\n}\r\n\r\nexport async function useTinymceHook(\r\n handler: ((tinymce: TinyMCE) => MaybePromise<any>)\r\n): Promise<void> {\r\n const { addHook } = await import('../module/tinymce');\r\n\r\n return addHook(handler);\r\n}\r\n","import type { UnicornApp } from '../app';\r\nimport {\r\n useFieldCascadeSelect,\r\n useFieldFileDrag,\r\n useFieldFlatpickr,\r\n useFieldModalSelect, useFieldModalTree,\r\n useFieldRepeatable,\r\n useFieldSingleImageDrag,\r\n useIframeModal, useS3Uploader,\r\n useShowOn, useTomSelect,\r\n} from '../composable';\r\nimport { useFieldMultiUploader } from '../composable/useFieldMultiUploader';\r\nimport { useTinymce } from '../composable/useTinymce';\r\nimport { useUnicorn } from '../unicorn';\r\n\r\ndeclare module '../app' {\r\n export interface UnicornApp {\r\n /** @deprecated Only for code generator use. */\r\n $ui: typeof methods;\r\n }\r\n}\r\n\r\n// @ts-ignore\r\ndeclare module '@windwalker-io/unicorn-next' {\r\n export interface UnicornApp {\r\n /** @deprecated Only for code generator use. */\r\n $ui: typeof methods;\r\n }\r\n}\r\n\r\nexport function useUnicornPhpAdapter(app?: UnicornApp) {\r\n app ??= useUnicorn();\r\n\r\n app.use(UnicornPhpAdapter);\r\n\r\n return app.$ui;\r\n}\r\n\r\nconst methods = {\r\n repeatable: useFieldRepeatable,\r\n flatpickr: useFieldFlatpickr,\r\n fileDrag: useFieldFileDrag,\r\n modalField: useFieldModalSelect,\r\n cascadeSelect: useFieldCascadeSelect,\r\n sid: useFieldSingleImageDrag,\r\n tinymce: {\r\n init: useTinymce\r\n },\r\n s3Uploader: useS3Uploader,\r\n iframeModal: useIframeModal,\r\n initShowOn: useShowOn,\r\n modalTree: useFieldModalTree,\r\n multiUploader: useFieldMultiUploader,\r\n tomSelect: useTomSelect,\r\n};\r\n\r\nexport class UnicornPhpAdapter {\r\n static install(app: UnicornApp) {\r\n if (app.$ui) {\r\n app.$ui = { ...app.$ui, ...methods };\r\n } else {\r\n app.$ui = methods;\r\n }\r\n }\r\n}\r\n","import { InjectionKey, UnicornApp } from './app';\r\nimport { polyfill } from './polyfill';\r\nimport { removeCloak } from './utilities';\r\n\r\nexport * from './data';\r\nexport * from './events';\r\nexport * from './service';\r\nexport * from './composable';\r\nexport * from './plugin';\r\n\r\nexport type { UnicornApp };\r\n\r\nlet app: UnicornApp;\r\n\r\nexport function createUnicorn(): UnicornApp {\r\n polyfill();\r\n removeCloak();\r\n\r\n return app = new UnicornApp();\r\n}\r\n\r\nexport function createUnicornWithPlugins(): UnicornApp {\r\n const app = createUnicorn();\r\n\r\n // app.use(UnicornUI);\r\n\r\n // app.use(UnicornDom);\r\n\r\n return app;\r\n}\r\n\r\nexport function useUnicorn(instance?: UnicornApp): UnicornApp {\r\n if (instance) {\r\n app = instance;\r\n }\r\n\r\n return app ??= createUnicorn();\r\n}\r\n\r\nexport const useInject: typeof UnicornApp.prototype.inject = <T = any>(id: InjectionKey<T>, def?: T): T => {\r\n return useUnicorn().inject<T>(id, def);\r\n}\r\n\r\nexport function pushUnicornToGlobal(app?: UnicornApp) {\r\n // @ts-ignore\r\n window.u = app ?? useUnicorn();\r\n}\r\n\r\nexport function useMacro(name: string, handler: (...args: any[]) => any) {\r\n useUnicorn().macro(name, handler);\r\n}\r\n\r\nexport async function useLegacy(app?: UnicornApp) {\r\n app ??= useUnicorn();\r\n\r\n pushUnicornToGlobal(app);\r\n\r\n const { useLegacyMethods } = await import('./legacy/legacy');\r\n\r\n await useLegacyMethods(app);\r\n\r\n return app;\r\n}\r\n"],"names":["protoChain","decorators","removeData","html","selector","callback","css","queue","wait","sprintf","vsprintf","m","module","ui","stack","uri","asset","route","rmdata","app"],"mappings":"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","x_google_ignoreList":[0,5,6,7,8,9,10,11,15,41]}