@windwalker-io/unicorn-next 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/.editorconfig +18 -18
  2. package/.gulp.json +7 -7
  3. package/bin/release.mjs +47 -47
  4. package/dist/chunks/button-radio.js.map +1 -1
  5. package/dist/chunks/checkboxes-multi-select.js.map +1 -1
  6. package/dist/chunks/field-cascade-select.js +2 -2
  7. package/dist/chunks/field-cascade-select.js.map +1 -1
  8. package/dist/chunks/field-file-drag.js.map +1 -1
  9. package/dist/chunks/field-flatpickr.js.map +1 -1
  10. package/dist/chunks/field-modal-select.js.map +1 -1
  11. package/dist/chunks/field-modal-tree.js +2 -2
  12. package/dist/chunks/field-modal-tree.js.map +1 -1
  13. package/dist/chunks/field-multi-uploader.js.map +1 -1
  14. package/dist/chunks/field-repeatable.js.map +1 -1
  15. package/dist/chunks/field-single-image-drag.js.map +1 -1
  16. package/dist/chunks/form.js.map +1 -1
  17. package/dist/chunks/grid.js.map +1 -1
  18. package/dist/chunks/http-client.js.map +1 -1
  19. package/dist/chunks/iframe-modal.js.map +1 -1
  20. package/dist/chunks/index.js +1 -15
  21. package/dist/chunks/index.js.map +1 -1
  22. package/dist/chunks/keep-tab.js +2 -2
  23. package/dist/chunks/keep-tab.js.map +1 -1
  24. package/dist/chunks/legacy.js +3 -3
  25. package/dist/chunks/legacy.js.map +1 -1
  26. package/dist/chunks/list-dependent.js.map +1 -1
  27. package/dist/chunks/s3-multipart-uploader.js +23 -2
  28. package/dist/chunks/s3-multipart-uploader.js.map +1 -1
  29. package/dist/chunks/s3-uploader.js.map +1 -1
  30. package/dist/chunks/show-on.js +2 -2
  31. package/dist/chunks/show-on.js.map +1 -1
  32. package/dist/chunks/tinymce.js.map +1 -1
  33. package/dist/chunks/ui-bootstrap5.js.map +1 -1
  34. package/dist/chunks/unicorn.js +108 -89
  35. package/dist/chunks/unicorn.js.map +1 -1
  36. package/dist/chunks/validation.js.map +1 -1
  37. package/dist/index.d.ts +28 -6
  38. package/dist/unicorn.js +43 -41
  39. package/fusionfile.mjs +155 -155
  40. package/package.json +104 -104
  41. package/scss/bootstrap/multi-level-menu.scss +121 -121
  42. package/scss/editor.scss +116 -116
  43. package/scss/field/file-drag.scss +102 -102
  44. package/scss/field/single-image-drag.scss +88 -88
  45. package/scss/field/vue-drag-uploader.scss +160 -160
  46. package/scss/switcher.scss +156 -156
  47. package/src/app.ts +128 -128
  48. package/src/bootstrap/button-radio.ts +208 -208
  49. package/src/bootstrap/keep-tab.ts +155 -155
  50. package/src/composable/index.ts +22 -22
  51. package/src/composable/useCheckboxesMultiSelect.ts +22 -22
  52. package/src/composable/useFieldCascadeSelect.ts +9 -9
  53. package/src/composable/useFieldFileDrag.ts +9 -9
  54. package/src/composable/useFieldFlatpickr.ts +3 -3
  55. package/src/composable/useFieldModalSelect.ts +6 -6
  56. package/src/composable/useFieldModalTree.ts +3 -3
  57. package/src/composable/useFieldMultiUploader.ts +9 -9
  58. package/src/composable/useFieldRepeatable.ts +9 -9
  59. package/src/composable/useFieldSingleImageDrag.ts +9 -9
  60. package/src/composable/useForm.ts +43 -43
  61. package/src/composable/useGrid.ts +57 -57
  62. package/src/composable/useHttp.ts +9 -9
  63. package/src/composable/useIframeModal.ts +10 -10
  64. package/src/composable/useListDependent.ts +26 -26
  65. package/src/composable/useQueue.ts +13 -13
  66. package/src/composable/useS3Uploader.ts +32 -32
  67. package/src/composable/useShowOn.ts +9 -9
  68. package/src/composable/useStack.ts +13 -13
  69. package/src/composable/useTinymce.ts +29 -29
  70. package/src/composable/useTomSelect.ts +72 -72
  71. package/src/composable/useUIBootstrap5.ts +48 -48
  72. package/src/composable/useUniDirective.ts +43 -43
  73. package/src/composable/useValidation.ts +50 -50
  74. package/src/data.ts +34 -34
  75. package/src/events.ts +82 -82
  76. package/src/legacy/legacy.ts +190 -190
  77. package/src/legacy/loader.ts +125 -125
  78. package/src/module/checkboxes-multi-select.ts +54 -54
  79. package/src/module/field-cascade-select.ts +292 -292
  80. package/src/module/field-file-drag.ts +295 -295
  81. package/src/module/field-flatpickr.ts +130 -130
  82. package/src/module/field-modal-select.ts +179 -179
  83. package/src/module/field-modal-tree.ts +31 -31
  84. package/src/module/field-multi-uploader.ts +368 -368
  85. package/src/module/field-repeatable.ts +202 -202
  86. package/src/module/field-single-image-drag.ts +477 -477
  87. package/src/module/form.ts +223 -223
  88. package/src/module/grid.ts +479 -479
  89. package/src/module/http-client.ts +248 -248
  90. package/src/module/iframe-modal.ts +170 -170
  91. package/src/module/list-dependent.ts +321 -321
  92. package/src/module/s3-multipart-uploader.ts +330 -300
  93. package/src/module/s3-uploader.ts +234 -234
  94. package/src/module/show-on.ts +175 -175
  95. package/src/module/tinymce.ts +276 -276
  96. package/src/module/ui-bootstrap5.ts +116 -116
  97. package/src/module/validation.ts +1046 -1046
  98. package/src/plugin/index.ts +1 -1
  99. package/src/plugin/php-adapter.ts +72 -72
  100. package/src/polyfill/form-request-submit.ts +31 -31
  101. package/src/polyfill/index.ts +9 -9
  102. package/src/service/animate.ts +58 -58
  103. package/src/service/crypto.ts +27 -27
  104. package/src/service/dom-watcher.ts +62 -62
  105. package/src/service/dom.ts +291 -265
  106. package/src/service/helper.ts +52 -48
  107. package/src/service/index.ts +10 -10
  108. package/src/service/lang.ts +122 -122
  109. package/src/service/loader.ts +152 -152
  110. package/src/service/router.ts +118 -118
  111. package/src/service/ui.ts +525 -525
  112. package/src/service/uri.ts +106 -106
  113. package/src/types/base.ts +9 -9
  114. package/src/types/index.ts +4 -4
  115. package/src/types/modal-tree.ts +12 -12
  116. package/src/types/plugin.ts +6 -6
  117. package/src/types/shims.d.ts +18 -18
  118. package/src/types/ui.ts +6 -6
  119. package/src/unicorn.ts +79 -79
  120. package/src/utilities/arr.ts +25 -25
  121. package/src/utilities/base.ts +9 -9
  122. package/src/utilities/data.ts +48 -48
  123. package/src/utilities/index.ts +5 -5
  124. package/src/utilities/tree.ts +20 -20
  125. package/src/vue/components/ModalTree/ModalTreeApp.vue +175 -175
  126. package/src/vue/components/ModalTree/TreeItem.vue +262 -262
  127. package/src/vue/components/ModalTree/TreeModal.vue +225 -225
  128. package/tests/test.js +4 -4
  129. package/tsconfig.js.json +25 -25
  130. package/tsconfig.json +17 -17
  131. package/vite.assets.config.ts +61 -61
  132. package/vite.config.test.ts +36 -36
  133. package/vite.config.ts +112 -112
@@ -1 +1 @@
1
- {"version":3,"file":"field-modal-select.js","sources":["../../../../../../node_modules/lodash-es/isSymbol.js","../../../../../../node_modules/lodash-es/_arrayMap.js","../../../../../../node_modules/lodash-es/_baseToString.js","../../../../../../node_modules/lodash-es/_copyObject.js","../../../../../../node_modules/lodash-es/_isIterateeCall.js","../../../../../../node_modules/lodash-es/_createAssigner.js","../../../../../../node_modules/lodash-es/_nativeKeysIn.js","../../../../../../node_modules/lodash-es/_baseKeysIn.js","../../../../../../node_modules/lodash-es/keysIn.js","../../../../../../node_modules/lodash-es/assignInWith.js","../../../../../../node_modules/lodash-es/toString.js","../../../../../../node_modules/lodash-es/isPlainObject.js","../../../../../../node_modules/lodash-es/isError.js","../../../../../../node_modules/lodash-es/attempt.js","../../../../../../node_modules/lodash-es/_basePropertyOf.js","../../../../../../node_modules/lodash-es/_escapeHtmlChar.js","../../../../../../node_modules/lodash-es/escape.js","../../../../../../node_modules/lodash-es/_baseValues.js","../../../../../../node_modules/lodash-es/_customDefaultsAssignIn.js","../../../../../../node_modules/lodash-es/_escapeStringChar.js","../../../../../../node_modules/lodash-es/_reInterpolate.js","../../../../../../node_modules/lodash-es/_reEscape.js","../../../../../../node_modules/lodash-es/_reEvaluate.js","../../../../../../node_modules/lodash-es/templateSettings.js","../../../../../../node_modules/lodash-es/template.js","../../src/module/field-modal-select.ts"],"sourcesContent":["import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport createAssigner from './_createAssigner.js';\nimport keysIn from './keysIn.js';\n\n/**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n});\n\nexport default assignInWith;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\nimport isPlainObject from './isPlainObject.js';\n\n/** `Object#toString` result references. */\nvar domExcTag = '[object DOMException]',\n errorTag = '[object Error]';\n\n/**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\nfunction isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n}\n\nexport default isError;\n","import apply from './_apply.js';\nimport baseRest from './_baseRest.js';\nimport isError from './isError.js';\n\n/**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\nvar attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n});\n\nexport default attempt;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default basePropertyOf;\n","import basePropertyOf from './_basePropertyOf.js';\n\n/** Used to map characters to HTML entities. */\nvar htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n};\n\n/**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\nvar escapeHtmlChar = basePropertyOf(htmlEscapes);\n\nexport default escapeHtmlChar;\n","import escapeHtmlChar from './_escapeHtmlChar.js';\nimport toString from './toString.js';\n\n/** Used to match HTML entities and HTML characters. */\nvar reUnescapedHtml = /[&<>\"']/g,\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n/**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\nfunction escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n}\n\nexport default escape;\n","import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nexport default baseValues;\n","import eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\nfunction customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n}\n\nexport default customDefaultsAssignIn;\n","/** Used to escape characters for inclusion in compiled string literals. */\nvar stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\n/**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\nfunction escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n}\n\nexport default escapeStringChar;\n","/** Used to match template delimiters. */\nvar reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\nexport default reInterpolate;\n","/** Used to match template delimiters. */\nvar reEscape = /<%-([\\s\\S]+?)%>/g;\n\nexport default reEscape;\n","/** Used to match template delimiters. */\nvar reEvaluate = /<%([\\s\\S]+?)%>/g;\n\nexport default reEvaluate;\n","import escape from './escape.js';\nimport reEscape from './_reEscape.js';\nimport reEvaluate from './_reEvaluate.js';\nimport reInterpolate from './_reInterpolate.js';\n\n/**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\nvar templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': { 'escape': escape }\n }\n};\n\nexport default templateSettings;\n","import assignInWith from './assignInWith.js';\nimport attempt from './attempt.js';\nimport baseValues from './_baseValues.js';\nimport customDefaultsAssignIn from './_customDefaultsAssignIn.js';\nimport escapeStringChar from './_escapeStringChar.js';\nimport isError from './isError.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keys from './keys.js';\nimport reInterpolate from './_reInterpolate.js';\nimport templateSettings from './templateSettings.js';\nimport toString from './toString.js';\n\n/** Error message constants. */\nvar INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n/** Used to match empty string literals in compiled template source. */\nvar reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n/**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\nvar reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n/**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\nvar reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n/** Used to ensure capturing order of template delimiters. */\nvar reNoMatch = /($^)/;\n\n/** Used to match unescaped characters in compiled string literals. */\nvar reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b>&lt;script&gt;</b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\nfunction template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = templateSettings.imports._.templateSettings || templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n // and escape the comment, thus injecting code that gets evaled.\n var sourceURL = hasOwnProperty.call(options, 'sourceURL')\n ? ('//# sourceURL=' +\n (options.sourceURL + '').replace(/\\s/g, ' ') +\n '\\n')\n : '';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Throw an error if a forbidden character was found in `variable`, to prevent\n // potential command injection attacks.\n else if (reForbiddenIdentifierChars.test(variable)) {\n throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n }\n\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n}\n\nexport default template;\n","import type { IFrameModalElement } from './iframe-modal';\r\nimport { data } from '../data';\r\nimport { __, highlight, html, selectOne, slideUp } from '../service';\r\nimport { template } from 'lodash-es';\r\n\r\nexport type ModalSelectCallback = (item: any) => void;\r\n\r\nexport function createCallback(type: 'list' | 'single', selector: string, modalSelector: string): ModalSelectCallback {\r\n switch (type) {\r\n // case 'tag':\r\n // return () => {\r\n //\r\n // };\r\n case 'list':\r\n return (item: any) => {\r\n const modalList = document.querySelector(selector) as any as ModalListSelectElement;\r\n\r\n if (!modalList.querySelector(`[data-value=\"${item.value}\"]`)) {\r\n modalList.appendItem(item, true);\r\n\r\n selectOne<IFrameModalElement>(modalSelector)?.close();\r\n } else {\r\n alert(__('unicorn.field.modal.already.selected'));\r\n }\r\n };\r\n\r\n case 'single':\r\n default:\r\n return (item) => {\r\n const element = document.querySelector<HTMLDivElement>(selector)!;\r\n\r\n const image = element.querySelector<HTMLDivElement>('[data-role=image]')!;\r\n const title = element.querySelector<HTMLInputElement>('[data-role=title]')!;\r\n const store = element.querySelector<HTMLInputElement>('[data-role=value]')!;\r\n\r\n if (image && item.image) {\r\n image.style.backgroundImage = `url(${item.image});`;\r\n }\r\n\r\n title.value = item.title || '';\r\n store.value = item.value || '';\r\n\r\n store.dispatchEvent(new CustomEvent('change'));\r\n\r\n selectOne<IFrameModalElement>(modalSelector)?.close();\r\n\r\n highlight(title);\r\n };\r\n }\r\n}\r\n\r\ninterface ModalListOptions {\r\n modalSelector: string;\r\n itemTemplate: string;\r\n sortable: boolean;\r\n dataKey: string;\r\n max: number;\r\n}\r\n\r\nclass ModalListSelectElement extends HTMLElement {\r\n static is = 'uni-modal-list';\r\n\r\n itemTemplate!: ReturnType<typeof template>;\r\n options!: ModalListOptions;\r\n\r\n get listContainer() {\r\n return this.querySelector<HTMLDivElement>('[data-role=list-container]')!;\r\n }\r\n\r\n get modal() {\r\n return document.querySelector<IFrameModalElement>(this.options.modalSelector);\r\n }\r\n\r\n get items(): Element[] {\r\n return Array.from(this.listContainer.children);\r\n }\r\n\r\n connectedCallback() {\r\n this.options = JSON.parse(this.getAttribute('options') || '{}');\r\n this.itemTemplate = template(document.querySelector(this.options.itemTemplate)!.innerHTML);\r\n\r\n const emptyInput = this.querySelector<HTMLInputElement>('[data-role=empty]');\r\n\r\n if (emptyInput) {\r\n emptyInput.name = emptyInput.dataset.name || '';\r\n }\r\n\r\n if (this.options.sortable) {\r\n import('sortablejs').then(({ default: Sortable }) => {\r\n new Sortable(this.listContainer, { handle: '.h-drag-handle', animation: 150 });\r\n });\r\n }\r\n\r\n const selectButton = this.querySelector<HTMLButtonElement>('[data-role=select]')!;\r\n selectButton.addEventListener('click', (e) => {\r\n this.open(e);\r\n });\r\n\r\n this.querySelector('[data-role=clear]')?.addEventListener('click', () => {\r\n this.items.forEach((item) => {\r\n item.querySelector<HTMLButtonElement>('[data-role=remove]')?.click();\r\n });\r\n });\r\n\r\n selectButton.style.pointerEvents = '';\r\n\r\n this.render();\r\n }\r\n\r\n render() {\r\n const items: Record<string, any>[] = data('unicorn.modal-field')[this.options.dataKey] || [];\r\n\r\n items.forEach((item) => {\r\n this.appendItem(item);\r\n });\r\n }\r\n\r\n appendItem(item: Record<string, any>, highlights = false) {\r\n const itemHtml = html(this.itemTemplate({ item }));\r\n\r\n itemHtml.dataset.value = item.value;\r\n itemHtml.querySelector<HTMLButtonElement>('[data-role=remove]')?.addEventListener('click', () => {\r\n slideUp(itemHtml).then(() => {\r\n itemHtml.remove();\r\n this.toggleRequired();\r\n });\r\n });\r\n\r\n this.listContainer.appendChild(itemHtml);\r\n this.toggleRequired();\r\n\r\n if (highlights) {\r\n highlight(itemHtml);\r\n }\r\n }\r\n\r\n toggleRequired() {\r\n const placeholder = this.querySelector<HTMLInputElement>('[data-role=validation-placeholder]');\r\n\r\n if (placeholder) {\r\n placeholder.disabled = this.listContainer.children.length !== 0;\r\n }\r\n }\r\n\r\n open(event: Event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const max = this.options.max;\r\n\r\n const target = event.target as HTMLAnchorElement;\r\n\r\n if (!max) {\r\n this.modal?.open(target.href, { size: 'modal-xl' });\r\n return;\r\n }\r\n\r\n if (this.listContainer.children.length >= max) {\r\n alert(\r\n __('unicorn.field.modal.max.selected', max)\r\n );\r\n\r\n return;\r\n }\r\n\r\n this.modal?.open(target.href, { size: 'modal-xl' });\r\n }\r\n}\r\n\r\nasync function init() {\r\n customElements.define(ModalListSelectElement.is, ModalListSelectElement);\r\n}\r\n\r\nexport const ready = init();\r\n\r\nexport interface ModalSelectModule {\r\n createCallback: typeof createCallback;\r\n ready: typeof ready;\r\n}\r\n"],"names":["Symbol","objectProto","hasOwnProperty"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]}
1
+ {"version":3,"file":"field-modal-select.js","sources":["../../../../../../node_modules/lodash-es/isSymbol.js","../../../../../../node_modules/lodash-es/_arrayMap.js","../../../../../../node_modules/lodash-es/_baseToString.js","../../../../../../node_modules/lodash-es/_copyObject.js","../../../../../../node_modules/lodash-es/_isIterateeCall.js","../../../../../../node_modules/lodash-es/_createAssigner.js","../../../../../../node_modules/lodash-es/_nativeKeysIn.js","../../../../../../node_modules/lodash-es/_baseKeysIn.js","../../../../../../node_modules/lodash-es/keysIn.js","../../../../../../node_modules/lodash-es/assignInWith.js","../../../../../../node_modules/lodash-es/toString.js","../../../../../../node_modules/lodash-es/isPlainObject.js","../../../../../../node_modules/lodash-es/isError.js","../../../../../../node_modules/lodash-es/attempt.js","../../../../../../node_modules/lodash-es/_basePropertyOf.js","../../../../../../node_modules/lodash-es/_escapeHtmlChar.js","../../../../../../node_modules/lodash-es/escape.js","../../../../../../node_modules/lodash-es/_baseValues.js","../../../../../../node_modules/lodash-es/_customDefaultsAssignIn.js","../../../../../../node_modules/lodash-es/_escapeStringChar.js","../../../../../../node_modules/lodash-es/_reInterpolate.js","../../../../../../node_modules/lodash-es/_reEscape.js","../../../../../../node_modules/lodash-es/_reEvaluate.js","../../../../../../node_modules/lodash-es/templateSettings.js","../../../../../../node_modules/lodash-es/template.js","../../src/module/field-modal-select.ts"],"sourcesContent":["import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport createAssigner from './_createAssigner.js';\nimport keysIn from './keysIn.js';\n\n/**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n});\n\nexport default assignInWith;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\nimport isPlainObject from './isPlainObject.js';\n\n/** `Object#toString` result references. */\nvar domExcTag = '[object DOMException]',\n errorTag = '[object Error]';\n\n/**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\nfunction isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n}\n\nexport default isError;\n","import apply from './_apply.js';\nimport baseRest from './_baseRest.js';\nimport isError from './isError.js';\n\n/**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\nvar attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n});\n\nexport default attempt;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default basePropertyOf;\n","import basePropertyOf from './_basePropertyOf.js';\n\n/** Used to map characters to HTML entities. */\nvar htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n};\n\n/**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\nvar escapeHtmlChar = basePropertyOf(htmlEscapes);\n\nexport default escapeHtmlChar;\n","import escapeHtmlChar from './_escapeHtmlChar.js';\nimport toString from './toString.js';\n\n/** Used to match HTML entities and HTML characters. */\nvar reUnescapedHtml = /[&<>\"']/g,\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n/**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\nfunction escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n}\n\nexport default escape;\n","import arrayMap from './_arrayMap.js';\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nexport default baseValues;\n","import eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\nfunction customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n}\n\nexport default customDefaultsAssignIn;\n","/** Used to escape characters for inclusion in compiled string literals. */\nvar stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\n/**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\nfunction escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n}\n\nexport default escapeStringChar;\n","/** Used to match template delimiters. */\nvar reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\nexport default reInterpolate;\n","/** Used to match template delimiters. */\nvar reEscape = /<%-([\\s\\S]+?)%>/g;\n\nexport default reEscape;\n","/** Used to match template delimiters. */\nvar reEvaluate = /<%([\\s\\S]+?)%>/g;\n\nexport default reEvaluate;\n","import escape from './escape.js';\nimport reEscape from './_reEscape.js';\nimport reEvaluate from './_reEvaluate.js';\nimport reInterpolate from './_reInterpolate.js';\n\n/**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\nvar templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': { 'escape': escape }\n }\n};\n\nexport default templateSettings;\n","import assignInWith from './assignInWith.js';\nimport attempt from './attempt.js';\nimport baseValues from './_baseValues.js';\nimport customDefaultsAssignIn from './_customDefaultsAssignIn.js';\nimport escapeStringChar from './_escapeStringChar.js';\nimport isError from './isError.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keys from './keys.js';\nimport reInterpolate from './_reInterpolate.js';\nimport templateSettings from './templateSettings.js';\nimport toString from './toString.js';\n\n/** Error message constants. */\nvar INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n/** Used to match empty string literals in compiled template source. */\nvar reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n/**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\nvar reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n/**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\nvar reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n/** Used to ensure capturing order of template delimiters. */\nvar reNoMatch = /($^)/;\n\n/** Used to match unescaped characters in compiled string literals. */\nvar reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b>&lt;script&gt;</b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\nfunction template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = templateSettings.imports._.templateSettings || templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n // and escape the comment, thus injecting code that gets evaled.\n var sourceURL = hasOwnProperty.call(options, 'sourceURL')\n ? ('//# sourceURL=' +\n (options.sourceURL + '').replace(/\\s/g, ' ') +\n '\\n')\n : '';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Throw an error if a forbidden character was found in `variable`, to prevent\n // potential command injection attacks.\n else if (reForbiddenIdentifierChars.test(variable)) {\n throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n }\n\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n}\n\nexport default template;\n","import type { IFrameModalElement } from './iframe-modal';\nimport { data } from '../data';\nimport { __, highlight, html, selectOne, slideUp } from '../service';\nimport { template } from 'lodash-es';\n\nexport type ModalSelectCallback = (item: any) => void;\n\nexport function createCallback(type: 'list' | 'single', selector: string, modalSelector: string): ModalSelectCallback {\n switch (type) {\n // case 'tag':\n // return () => {\n //\n // };\n case 'list':\n return (item: any) => {\n const modalList = document.querySelector(selector) as any as ModalListSelectElement;\n\n if (!modalList.querySelector(`[data-value=\"${item.value}\"]`)) {\n modalList.appendItem(item, true);\n\n selectOne<IFrameModalElement>(modalSelector)?.close();\n } else {\n alert(__('unicorn.field.modal.already.selected'));\n }\n };\n\n case 'single':\n default:\n return (item) => {\n const element = document.querySelector<HTMLDivElement>(selector)!;\n\n const image = element.querySelector<HTMLDivElement>('[data-role=image]')!;\n const title = element.querySelector<HTMLInputElement>('[data-role=title]')!;\n const store = element.querySelector<HTMLInputElement>('[data-role=value]')!;\n\n if (image && item.image) {\n image.style.backgroundImage = `url(${item.image});`;\n }\n\n title.value = item.title || '';\n store.value = item.value || '';\n\n store.dispatchEvent(new CustomEvent('change'));\n\n selectOne<IFrameModalElement>(modalSelector)?.close();\n\n highlight(title);\n };\n }\n}\n\ninterface ModalListOptions {\n modalSelector: string;\n itemTemplate: string;\n sortable: boolean;\n dataKey: string;\n max: number;\n}\n\nclass ModalListSelectElement extends HTMLElement {\n static is = 'uni-modal-list';\n\n itemTemplate!: ReturnType<typeof template>;\n options!: ModalListOptions;\n\n get listContainer() {\n return this.querySelector<HTMLDivElement>('[data-role=list-container]')!;\n }\n\n get modal() {\n return document.querySelector<IFrameModalElement>(this.options.modalSelector);\n }\n\n get items(): Element[] {\n return Array.from(this.listContainer.children);\n }\n\n connectedCallback() {\n this.options = JSON.parse(this.getAttribute('options') || '{}');\n this.itemTemplate = template(document.querySelector(this.options.itemTemplate)!.innerHTML);\n\n const emptyInput = this.querySelector<HTMLInputElement>('[data-role=empty]');\n\n if (emptyInput) {\n emptyInput.name = emptyInput.dataset.name || '';\n }\n\n if (this.options.sortable) {\n import('sortablejs').then(({ default: Sortable }) => {\n new Sortable(this.listContainer, { handle: '.h-drag-handle', animation: 150 });\n });\n }\n\n const selectButton = this.querySelector<HTMLButtonElement>('[data-role=select]')!;\n selectButton.addEventListener('click', (e) => {\n this.open(e);\n });\n\n this.querySelector('[data-role=clear]')?.addEventListener('click', () => {\n this.items.forEach((item) => {\n item.querySelector<HTMLButtonElement>('[data-role=remove]')?.click();\n });\n });\n\n selectButton.style.pointerEvents = '';\n\n this.render();\n }\n\n render() {\n const items: Record<string, any>[] = data('unicorn.modal-field')[this.options.dataKey] || [];\n\n items.forEach((item) => {\n this.appendItem(item);\n });\n }\n\n appendItem(item: Record<string, any>, highlights = false) {\n const itemHtml = html(this.itemTemplate({ item }));\n\n itemHtml.dataset.value = item.value;\n itemHtml.querySelector<HTMLButtonElement>('[data-role=remove]')?.addEventListener('click', () => {\n slideUp(itemHtml).then(() => {\n itemHtml.remove();\n this.toggleRequired();\n });\n });\n\n this.listContainer.appendChild(itemHtml);\n this.toggleRequired();\n\n if (highlights) {\n highlight(itemHtml);\n }\n }\n\n toggleRequired() {\n const placeholder = this.querySelector<HTMLInputElement>('[data-role=validation-placeholder]');\n\n if (placeholder) {\n placeholder.disabled = this.listContainer.children.length !== 0;\n }\n }\n\n open(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n\n const max = this.options.max;\n\n const target = event.target as HTMLAnchorElement;\n\n if (!max) {\n this.modal?.open(target.href, { size: 'modal-xl' });\n return;\n }\n\n if (this.listContainer.children.length >= max) {\n alert(\n __('unicorn.field.modal.max.selected', max)\n );\n\n return;\n }\n\n this.modal?.open(target.href, { size: 'modal-xl' });\n }\n}\n\nasync function init() {\n customElements.define(ModalListSelectElement.is, ModalListSelectElement);\n}\n\nexport const ready = init();\n\nexport interface ModalSelectModule {\n createCallback: typeof createCallback;\n ready: typeof ready;\n}\n"],"names":["Symbol","objectProto","hasOwnProperty"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]}
@@ -405,7 +405,7 @@ function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
405
405
  }, 8, ["modelValue"])) : createCommentVNode("", true)
406
406
  ], 2);
407
407
  }
408
- const TreeItem = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2], ["__scopeId", "data-v-8a4ae0be"], ["__file", "TreeItem.vue"]]);
408
+ const TreeItem = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2], ["__scopeId", "data-v-897596f4"], ["__file", "TreeItem.vue"]]);
409
409
  const _sfc_main$1 = /* @__PURE__ */ defineComponent({
410
410
  __name: "TreeModal",
411
411
  props: {
@@ -768,7 +768,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
768
768
  }), null, 16, ["open", "id", "title", "source", "value", "branchSelectable", "disabled", "readonly", "search-text"])
769
769
  ]);
770
770
  }
771
- const ModalTreeApp = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-22fa7050"], ["__file", "ModalTreeApp.vue"]]);
771
+ const ModalTreeApp = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-f21c791b"], ["__file", "ModalTreeApp.vue"]]);
772
772
  const app = /* @__PURE__ */ createApp({
773
773
  name: "modal-tree",
774
774
  components: {
@@ -1 +1 @@
1
- {"version":3,"file":"field-modal-tree.js","sources":["../../src/utilities/tree.ts","../../../../../../node_modules/vue3-slide-up-down/dist/vue3-slide-up-down.js","../../src/vue/components/ModalTree/TreeItem.vue","../../src/vue/components/ModalTree/TreeItem.vue","../../src/vue/components/ModalTree/TreeModal.vue","../../src/vue/components/ModalTree/TreeModal.vue","../../src/vue/components/ModalTree/ModalTreeApp.vue","../../src/vue/components/ModalTree/ModalTreeApp.vue","../../src/module/field-modal-tree.ts"],"sourcesContent":["import { TreeNode } from '../types';\r\n\r\nexport function flattenChildren(children: TreeNode[]) {\r\n const flat: TreeNode[] = [];\r\n\r\n function loopChildren(children: TreeNode[]) {\r\n for (const child of children) {\r\n if (child.children.length === 0) {\r\n flat.push(child);\r\n continue;\r\n }\r\n\r\n loopChildren(child.children);\r\n }\r\n }\r\n\r\n loopChildren(children);\r\n return flat;\r\n}\r\n\r\n","import { defineComponent as C, ref as E, computed as h, h as p, Transition as W, withDirectives as F, mergeProps as L, vShow as k, unref as b } from \"vue\";\nfunction y(t) {\n return {\n height: t.style.height,\n width: t.style.width,\n position: t.style.position,\n visibility: t.style.visibility,\n overflow: t.style.overflow,\n paddingTop: t.style.paddingTop,\n paddingBottom: t.style.paddingBottom,\n borderTopWidth: t.style.borderTopWidth,\n borderBottomWidth: t.style.borderBottomWidth,\n marginTop: t.style.marginTop,\n marginBottom: t.style.marginBottom\n };\n}\nfunction V(t, o, i) {\n const e = b(t), { width: n } = getComputedStyle(o);\n o.style.width = n, o.style.position = \"absolute\", o.style.visibility = \"hidden\", o.style.height = \"\";\n const { height: s } = getComputedStyle(o);\n return o.style.width = i.width, o.style.position = i.position, o.style.visibility = i.visibility, o.style.height = e, o.style.overflow = \"hidden\", i.height && i.height != e ? i.height : s;\n}\nfunction f(t, o, i, e, n) {\n const s = t.animate(e, n);\n t.style.height = o.height, s.onfinish = () => {\n t.style.overflow = o.overflow, i();\n };\n}\nfunction m(t, o, i, e) {\n const n = b(o);\n return [\n {\n height: n,\n opacity: t.opacityClosed,\n paddingTop: n,\n paddingBottom: n,\n borderTopWidth: n,\n borderBottomWidth: n,\n marginTop: n,\n marginBottom: n\n },\n {\n height: i,\n opacity: t.opacityOpen,\n paddingTop: e.paddingTop || 0,\n paddingBottom: e.paddingBottom || 0,\n borderTopWidth: e.borderTopWidth || 0,\n borderBottomWidth: e.borderBottomWidth || 0,\n marginTop: e.marginTop || 0,\n marginBottom: e.marginBottom || 0\n }\n ];\n}\nconst x = C({\n props: {\n modelValue: {\n type: Boolean,\n default: !1\n },\n /**\n * Time in milliseconds for the slide duration\n */\n duration: {\n type: Number,\n default: 500\n },\n /**\n * Timing function for the animation\n */\n timingFunction: {\n type: String,\n default: \"ease-in-out\"\n },\n /**\n * Independent timing function for the animation when entering\n */\n timingFunctionEnter: {\n type: String,\n default: null\n },\n /**\n * Independent timing function for the animation when leaving\n */\n timingFunctionLeave: {\n type: String,\n default: null\n },\n /**\n * Opacity value from 0 - 1 of the element when open\n */\n opacityOpen: {\n type: Number,\n default: 1\n },\n /**\n * Opacity value from 0 - 1 of the element when closed\n */\n opacityClosed: {\n type: Number,\n default: 0\n },\n /**\n * HTML tag to use for the outer container\n */\n tag: {\n type: String,\n default: \"div\"\n },\n /**\n * Always render the element inside the slide container\n */\n eager: {\n type: Boolean,\n default: !1\n }\n },\n emits: [\"update:modelValue\", \"open-start\", \"open-end\", \"close-start\", \"close-end\"],\n setup(t, { slots: o, attrs: i, emit: e }) {\n const n = E(\"0px\"), s = h(() => t.timingFunctionEnter || t.timingFunction), v = h(() => t.timingFunctionLeave || t.timingFunction);\n function T(g, l) {\n const d = g, a = y(d), r = V(n, d, a), u = m(t, n, r, a), c = { duration: t.duration, easing: s.value };\n f(d, a, () => {\n l(), e(\"open-end\");\n }, u, c);\n }\n function B(g, l) {\n const d = g, a = y(d), { height: r } = getComputedStyle(d);\n d.style.height = r, d.style.overflow = \"hidden\";\n const u = m(t, n, r, a).reverse(), c = { duration: t.duration, easing: v.value };\n f(d, a, () => {\n l(), e(\"close-end\");\n }, u, c);\n }\n return () => p(\n W,\n {\n css: !1,\n persisted: t.eager,\n onBeforeEnter: () => e(\"open-start\"),\n onEnter: T,\n onBeforeLeave: () => e(\"close-start\"),\n onLeave: B\n },\n {\n default: () => t.modelValue || t.eager ? F(\n p(\n t.tag,\n L(i, {\n class: \"slide-up-down__container\"\n }),\n o\n ),\n [t.eager ? [k, t.modelValue === !0] : [null]]\n ) : null\n }\n );\n }\n});\nexport {\n x as Vue3SlideUpDown\n};\n","<script setup lang=\"ts\">\r\nimport { type ComponentPublicInstance, type ComputedRef, computed, inject, nextTick, onBeforeUpdate, onMounted, ref, watch } from 'vue';\r\nimport { Vue3SlideUpDown } from 'vue3-slide-up-down';\r\nimport { TitleGetter, TreeNode, ValueGetter } from '../../../types';\r\nimport { flattenChildren } from '../../../utilities';\r\nimport TreeItem from './TreeItem.vue';\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n node: TreeNode;\r\n level?: number;\r\n branchSelectable?: boolean;\r\n }>(),\r\n {\r\n level: 1,\r\n branchSelectable: false,\r\n }\r\n);\r\n\r\nconst emit = defineEmits<{\r\n change: [checked: boolean];\r\n input: [checked: boolean];\r\n}>();\r\n\r\nconst node = ref<TreeNode>(props.node);\r\n// const selectNode = inject<(node: TreeNode, select: boolean) => any>('selectNode');\r\nconst selectedValues = inject<ComputedRef<(string | number)[]>>('selectedValues');\r\nconst id = inject('id');\r\nconst multiple = inject('multiple');\r\nconst valueGetter = inject<ValueGetter>('valueGetter');\r\nconst titleGetter = inject<TitleGetter>('titleGetter');\r\n\r\nconst selected = ref(false);\r\nconst indeterminate = computed(() => !!props.node.indeterminate);\r\nconst stopWatch = ref(false);\r\nconst open = ref(false);\r\nconst childrenComponents = ref<ComponentPublicInstance<typeof TreeItem>[]>([]);\r\n\r\nwatch(() => props.node, () => {\r\n selected.value = !!props.node.selected;\r\n}, { deep: true });\r\n\r\nfunction setChildrenComponent(child: ComponentPublicInstance<typeof TreeItem>) {\r\n childrenComponents.value.push(child);\r\n}\r\n\r\nonBeforeUpdate(() => {\r\n childrenComponents.value = [];\r\n});\r\n\r\nconst indentPx = computed(() => {\r\n return (props.level - 1) * 15;\r\n});\r\n\r\nconst isBranch = computed(() => {\r\n return props.node.children.length > 0;\r\n});\r\n\r\nconst isLeaf = computed(() => {\r\n return !isBranch.value;\r\n});\r\n\r\nfunction updateSelected() {\r\n if (isBranch.value) {\r\n return;\r\n }\r\n\r\n node.value.selected = selectedValues.value.includes(valueGetter(props.node.value));\r\n}\r\n\r\nfunction select(select: boolean) {\r\n if (selected.value === select) {\r\n return;\r\n }\r\n\r\n node.value.selected = select;\r\n\r\n checkboxChanged(select);\r\n}\r\n\r\nfunction checkboxChanged(v: boolean) {\r\n if (isBranch.value) {\r\n node.value.selected = v;\r\n\r\n if (multiple) {\r\n stopWatchThen(() => {\r\n const flatChildren = flattenChildren(node.value.children);\r\n for (const child of flatChildren) {\r\n child.selected = v;\r\n child.indeterminate = false;\r\n }\r\n });\r\n // syncChildrenStatus();\r\n }\r\n } else {\r\n nextTick(() => {\r\n node.value.selected = v;\r\n });\r\n }\r\n emit('change', v);\r\n emit('input', v);\r\n}\r\n\r\nfunction childChanged(v: boolean) {\r\n if (isLeaf.value || stopWatch.value) {\r\n return;\r\n }\r\n if (!childrenComponents.value) {\r\n return;\r\n }\r\n if (childrenComponents.value.length === 0) {\r\n return;\r\n }\r\n syncChildrenStatus();\r\n}\r\n\r\nfunction syncChildrenStatus() {\r\n if (isLeaf.value) {\r\n return;\r\n }\r\n let selectedCount = 0;\r\n let unselectCount = 0;\r\n let indeterminateInner = 0;\r\n const oldIndeterminate = indeterminate.value;\r\n const oldSelected = selected.value;\r\n \r\n for (const child of flattenChildren(props.node.children)) {\r\n if (child.selected) {\r\n selectedCount++;\r\n } else {\r\n unselectCount++;\r\n }\r\n\r\n if (child.indeterminate) {\r\n indeterminateInner++;\r\n }\r\n }\r\n\r\n // for (const childComponent of childrenComponents.value) {\r\n // if (childComponent.selected) {\r\n // checked++;\r\n // } else {\r\n // unchecked++;\r\n // }\r\n // if (childComponent.indeterminate) {\r\n // indeterminateInner++;\r\n // }\r\n // }\r\n\r\n if ((selectedCount !== 0 && unselectCount !== 0) || indeterminateInner > 0) {\r\n node.value.indeterminate = true;\r\n } else {\r\n node.value.selected = unselectCount === 0;\r\n node.value.indeterminate = false;\r\n }\r\n\r\n if (\r\n selected.value !== oldSelected\r\n || indeterminate.value !== oldIndeterminate\r\n ) {\r\n emit('change', selected.value);\r\n emit('input', selected.value);\r\n }\r\n}\r\n\r\nfunction stopWatchThen(callback: () => any) {\r\n stopWatch.value = true;\r\n callback();\r\n stopWatch.value = false;\r\n}\r\n\r\nwatch(() => selectedValues, async () => {\r\n if (!isBranch.value) {\r\n updateSelected();\r\n }\r\n await nextTick();\r\n\r\n syncChildrenStatus();\r\n}, { deep: true });\r\n\r\nwatch(selected, (v) => {\r\n});\r\n\r\nupdateSelected();\r\n\r\nonMounted(() => {\r\n syncChildrenStatus();\r\n});\r\n\r\ndefineExpose({\r\n select,\r\n selected,\r\n indeterminate\r\n});\r\n</script>\r\n\r\n<template>\r\n <div class=\"c-tree-item\"\r\n :class=\"[ isBranch ? 'c-tree-item--branch' : 'c-tree-item--leaf' ]\">\r\n <div class=\"d-flex c-tree-item__title\"\r\n :style=\"{ 'padding-left': indentPx + 'px' }\"\r\n :class=\"[ isBranch ? 'bg-light ' : '' ]\">\r\n <div class=\"p-2 ms-2\">\r\n <input\r\n :type=\"multiple ? 'checkbox' : 'radio'\"\r\n class=\"form-check-input\"\r\n v-if=\"isLeaf || (branchSelectable && multiple)\"\r\n :id=\"id + '__item-' + valueGetter(node.value)\"\r\n v-model=\"selected\"\r\n :value=\"true\"\r\n :unchecked-value=\"false\"\r\n :indeterminate.sync=\"indeterminate\"\r\n @change=\"checkboxChanged(($event.target as HTMLInputElement).checked)\"\r\n />\r\n <input v-else\r\n :type=\"multiple ? 'checkbox' : 'radio'\"\r\n class=\"form-check-input\"\r\n disabled\r\n :checked=\"indeterminate\" :indeterminate.sync=\"indeterminate\" />\r\n </div>\r\n <a class=\"c-tree-item__text d-flex align-items-center flex-grow-1 py-2 text-decoration-none\"\r\n style=\"cursor: pointer;\"\r\n :data-level=\"level\"\r\n data-bs-toggle=\"collapse\"\r\n @click.prevent=\"isLeaf ? select(!selected) : open = !open\">\r\n <span class=\"me-2 fa\" :class=\"[ isLeaf ? 'fa-tag' : 'fa-folder' ]\"></span>\r\n\r\n {{ node.value.title }}\r\n\r\n <span v-if=\"isBranch\" class=\"ms-auto me-3\">\r\n <span :class=\"[ open ? 'fa fa-chevron-up' : 'fa fa-chevron-down' ]\"></span>\r\n </span>\r\n </a>\r\n </div>\r\n\r\n <Vue3SlideUpDown\r\n v-if=\"node.children.length > 0\"\r\n v-model=\"open\"\r\n :duration=\"300\"\r\n class=\"c-tree-item__children\"\r\n >\r\n <TreeItem v-for=\"(child, i) of node.children\"\r\n :node=\"child\"\r\n :key=\"valueGetter(child.value)\"\r\n :level=\"level + 1\"\r\n :branch-selectable=\"branchSelectable\"\r\n :ref=\"setChildrenComponent\"\r\n @change=\"childChanged\"\r\n />\r\n </Vue3SlideUpDown>\r\n </div>\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n.c-tree-item {\r\n &__title {\r\n border-bottom: 1px solid #ddd;\r\n }\r\n\r\n cursor: pointer;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { type ComponentPublicInstance, type ComputedRef, computed, inject, nextTick, onBeforeUpdate, onMounted, ref, watch } from 'vue';\r\nimport { Vue3SlideUpDown } from 'vue3-slide-up-down';\r\nimport { TitleGetter, TreeNode, ValueGetter } from '../../../types';\r\nimport { flattenChildren } from '../../../utilities';\r\nimport TreeItem from './TreeItem.vue';\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n node: TreeNode;\r\n level?: number;\r\n branchSelectable?: boolean;\r\n }>(),\r\n {\r\n level: 1,\r\n branchSelectable: false,\r\n }\r\n);\r\n\r\nconst emit = defineEmits<{\r\n change: [checked: boolean];\r\n input: [checked: boolean];\r\n}>();\r\n\r\nconst node = ref<TreeNode>(props.node);\r\n// const selectNode = inject<(node: TreeNode, select: boolean) => any>('selectNode');\r\nconst selectedValues = inject<ComputedRef<(string | number)[]>>('selectedValues');\r\nconst id = inject('id');\r\nconst multiple = inject('multiple');\r\nconst valueGetter = inject<ValueGetter>('valueGetter');\r\nconst titleGetter = inject<TitleGetter>('titleGetter');\r\n\r\nconst selected = ref(false);\r\nconst indeterminate = computed(() => !!props.node.indeterminate);\r\nconst stopWatch = ref(false);\r\nconst open = ref(false);\r\nconst childrenComponents = ref<ComponentPublicInstance<typeof TreeItem>[]>([]);\r\n\r\nwatch(() => props.node, () => {\r\n selected.value = !!props.node.selected;\r\n}, { deep: true });\r\n\r\nfunction setChildrenComponent(child: ComponentPublicInstance<typeof TreeItem>) {\r\n childrenComponents.value.push(child);\r\n}\r\n\r\nonBeforeUpdate(() => {\r\n childrenComponents.value = [];\r\n});\r\n\r\nconst indentPx = computed(() => {\r\n return (props.level - 1) * 15;\r\n});\r\n\r\nconst isBranch = computed(() => {\r\n return props.node.children.length > 0;\r\n});\r\n\r\nconst isLeaf = computed(() => {\r\n return !isBranch.value;\r\n});\r\n\r\nfunction updateSelected() {\r\n if (isBranch.value) {\r\n return;\r\n }\r\n\r\n node.value.selected = selectedValues.value.includes(valueGetter(props.node.value));\r\n}\r\n\r\nfunction select(select: boolean) {\r\n if (selected.value === select) {\r\n return;\r\n }\r\n\r\n node.value.selected = select;\r\n\r\n checkboxChanged(select);\r\n}\r\n\r\nfunction checkboxChanged(v: boolean) {\r\n if (isBranch.value) {\r\n node.value.selected = v;\r\n\r\n if (multiple) {\r\n stopWatchThen(() => {\r\n const flatChildren = flattenChildren(node.value.children);\r\n for (const child of flatChildren) {\r\n child.selected = v;\r\n child.indeterminate = false;\r\n }\r\n });\r\n // syncChildrenStatus();\r\n }\r\n } else {\r\n nextTick(() => {\r\n node.value.selected = v;\r\n });\r\n }\r\n emit('change', v);\r\n emit('input', v);\r\n}\r\n\r\nfunction childChanged(v: boolean) {\r\n if (isLeaf.value || stopWatch.value) {\r\n return;\r\n }\r\n if (!childrenComponents.value) {\r\n return;\r\n }\r\n if (childrenComponents.value.length === 0) {\r\n return;\r\n }\r\n syncChildrenStatus();\r\n}\r\n\r\nfunction syncChildrenStatus() {\r\n if (isLeaf.value) {\r\n return;\r\n }\r\n let selectedCount = 0;\r\n let unselectCount = 0;\r\n let indeterminateInner = 0;\r\n const oldIndeterminate = indeterminate.value;\r\n const oldSelected = selected.value;\r\n \r\n for (const child of flattenChildren(props.node.children)) {\r\n if (child.selected) {\r\n selectedCount++;\r\n } else {\r\n unselectCount++;\r\n }\r\n\r\n if (child.indeterminate) {\r\n indeterminateInner++;\r\n }\r\n }\r\n\r\n // for (const childComponent of childrenComponents.value) {\r\n // if (childComponent.selected) {\r\n // checked++;\r\n // } else {\r\n // unchecked++;\r\n // }\r\n // if (childComponent.indeterminate) {\r\n // indeterminateInner++;\r\n // }\r\n // }\r\n\r\n if ((selectedCount !== 0 && unselectCount !== 0) || indeterminateInner > 0) {\r\n node.value.indeterminate = true;\r\n } else {\r\n node.value.selected = unselectCount === 0;\r\n node.value.indeterminate = false;\r\n }\r\n\r\n if (\r\n selected.value !== oldSelected\r\n || indeterminate.value !== oldIndeterminate\r\n ) {\r\n emit('change', selected.value);\r\n emit('input', selected.value);\r\n }\r\n}\r\n\r\nfunction stopWatchThen(callback: () => any) {\r\n stopWatch.value = true;\r\n callback();\r\n stopWatch.value = false;\r\n}\r\n\r\nwatch(() => selectedValues, async () => {\r\n if (!isBranch.value) {\r\n updateSelected();\r\n }\r\n await nextTick();\r\n\r\n syncChildrenStatus();\r\n}, { deep: true });\r\n\r\nwatch(selected, (v) => {\r\n});\r\n\r\nupdateSelected();\r\n\r\nonMounted(() => {\r\n syncChildrenStatus();\r\n});\r\n\r\ndefineExpose({\r\n select,\r\n selected,\r\n indeterminate\r\n});\r\n</script>\r\n\r\n<template>\r\n <div class=\"c-tree-item\"\r\n :class=\"[ isBranch ? 'c-tree-item--branch' : 'c-tree-item--leaf' ]\">\r\n <div class=\"d-flex c-tree-item__title\"\r\n :style=\"{ 'padding-left': indentPx + 'px' }\"\r\n :class=\"[ isBranch ? 'bg-light ' : '' ]\">\r\n <div class=\"p-2 ms-2\">\r\n <input\r\n :type=\"multiple ? 'checkbox' : 'radio'\"\r\n class=\"form-check-input\"\r\n v-if=\"isLeaf || (branchSelectable && multiple)\"\r\n :id=\"id + '__item-' + valueGetter(node.value)\"\r\n v-model=\"selected\"\r\n :value=\"true\"\r\n :unchecked-value=\"false\"\r\n :indeterminate.sync=\"indeterminate\"\r\n @change=\"checkboxChanged(($event.target as HTMLInputElement).checked)\"\r\n />\r\n <input v-else\r\n :type=\"multiple ? 'checkbox' : 'radio'\"\r\n class=\"form-check-input\"\r\n disabled\r\n :checked=\"indeterminate\" :indeterminate.sync=\"indeterminate\" />\r\n </div>\r\n <a class=\"c-tree-item__text d-flex align-items-center flex-grow-1 py-2 text-decoration-none\"\r\n style=\"cursor: pointer;\"\r\n :data-level=\"level\"\r\n data-bs-toggle=\"collapse\"\r\n @click.prevent=\"isLeaf ? select(!selected) : open = !open\">\r\n <span class=\"me-2 fa\" :class=\"[ isLeaf ? 'fa-tag' : 'fa-folder' ]\"></span>\r\n\r\n {{ node.value.title }}\r\n\r\n <span v-if=\"isBranch\" class=\"ms-auto me-3\">\r\n <span :class=\"[ open ? 'fa fa-chevron-up' : 'fa fa-chevron-down' ]\"></span>\r\n </span>\r\n </a>\r\n </div>\r\n\r\n <Vue3SlideUpDown\r\n v-if=\"node.children.length > 0\"\r\n v-model=\"open\"\r\n :duration=\"300\"\r\n class=\"c-tree-item__children\"\r\n >\r\n <TreeItem v-for=\"(child, i) of node.children\"\r\n :node=\"child\"\r\n :key=\"valueGetter(child.value)\"\r\n :level=\"level + 1\"\r\n :branch-selectable=\"branchSelectable\"\r\n :ref=\"setChildrenComponent\"\r\n @change=\"childChanged\"\r\n />\r\n </Vue3SlideUpDown>\r\n </div>\r\n</template>\r\n\r\n<style scoped lang=\"scss\">\r\n.c-tree-item {\r\n &__title {\r\n border-bottom: 1px solid #ddd;\r\n }\r\n\r\n cursor: pointer;\r\n}\r\n</style>\r\n","<script lang=\"ts\" setup>\r\nimport { Modal } from 'bootstrap';\r\nimport { computed, getCurrentInstance, inject, onMounted, onUnmounted, provide, ref, useTemplateRef, watch } from 'vue';\r\nimport { useHttpClient } from '../../../composable';\r\nimport { forceArray } from '../../../service';\r\nimport { MaybeArray, ModalTreeSource, SearchMatcher, TitleGetter, TreeNode, ValueGetter } from '../../../types';\r\nimport { flattenChildren } from '../../../utilities';\r\nimport TreeItem from './TreeItem.vue';\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n open?: boolean;\r\n id?: string;\r\n name?: string;\r\n types?: string[];\r\n title?: string;\r\n disabled?: boolean;\r\n readonly?: boolean;\r\n value?: MaybeArray<string | number>;\r\n branchSelectable?: boolean;\r\n source?: ModalTreeSource;\r\n searchText?: string;\r\n }>(),\r\n {\r\n branchSelectable: false,\r\n }\r\n);\r\n\r\nconst emits = defineEmits<{\r\n change: [value: any];\r\n input: [value: any];\r\n selected: [items: any[]];\r\n hide: [];\r\n}>();\r\n\r\n// provide('selectNode', selectNode);\r\n\r\nconst valueGetter = inject<ValueGetter>('valueGetter');\r\nconst titleGetter = inject<TitleGetter>('titleGetter');\r\nconst searchMatcher = inject<SearchMatcher>('searchMatcher');\r\n\r\nconst loading = ref(false);\r\nconst multiple = inject<boolean>('multiple', false);\r\nconst modalElement = useTemplateRef<HTMLDivElement>('modal')\r\n\r\nlet $modal: Modal;\r\n\r\nonMounted(() => {\r\n $modal = Modal.getOrCreateInstance(modalElement.value!);\r\n modalElement.value!.addEventListener('show.bs.modal', onShow);\r\n modalElement.value!.addEventListener('hide.bs.modal', onHide);\r\n});\r\n\r\nonUnmounted(() => {\r\n modalElement.value!.removeEventListener('show.bs.modal', onShow);\r\n modalElement.value!.removeEventListener('hide.bs.modal', onHide);\r\n});\r\n\r\n// Items\r\nconst nodes = ref<TreeNode[]>([]);\r\nconst selectedNodes = ref<TreeNode[]>([]);\r\n\r\nconst displayNodes = computed(() => {\r\n if (searchEnabled.value) {\r\n return searchedItems.value;\r\n }\r\n return nodes.value;\r\n});\r\n\r\nconst flatNodes = computed(() => flattenChildren(nodes.value));\r\n\r\nconst selectedValues = computed(() => {\r\n return flatNodes.value.filter((node) => node.selected).map((node) => valueGetter(node.value));\r\n});\r\n\r\nprovide('selectedValues', selectedValues);\r\n\r\nwatch(() => selectedValues, () => {\r\n emits('change', selectedValues.value);\r\n emits('input', selectedValues.value);\r\n emits('selected', selectedNodes.value);\r\n});\r\n\r\n// function selectNode(node: TreeNode, select: boolean) {\r\n// node.selected = select;\r\n//\r\n// // if (select) {\r\n// // if (!multiple) {\r\n// // selectedNodes.value = [];\r\n// // }\r\n// // if (!selectedValues.value.includes(valueGetter(node.value))) {\r\n// // selectedNodes.value.push(node);\r\n// // }\r\n// // } else {\r\n// // selectedNodes.value = selectedNodes.value.filter(\r\n// // (selectedNode: TreeNode) => valueGetter(selectedNode.value) !== valueGetter(node.value)\r\n// // );\r\n// // }\r\n// emits('change', selectedValues.value);\r\n// emits('input', selectedValues.value);\r\n// emits('selected', selectedNodes.value);\r\n// }\r\n\r\nconst canModify = computed(() => {\r\n return !props.readonly && !props.disabled;\r\n});\r\n\r\n// Search\r\nconst q = ref('');\r\nconst searchEnabled = computed(() => q.value !== '');\r\n\r\nconst searchedItems = computed(() => {\r\n if (q.value === '') {\r\n return [];\r\n }\r\n\r\n return flatNodes.value.filter((item: TreeNode) => {\r\n return searchMatcher(item.value, q.value);\r\n });\r\n});\r\n\r\nasync function loadItems() {\r\n loading.value = true;\r\n const http = await useHttpClient();\r\n try {\r\n let src = props.source;\r\n\r\n if (typeof src === 'string') {\r\n const res = await http.get(src);\r\n nodes.value = res.data.data;\r\n } else if (typeof src === 'function') {\r\n nodes.value = await src();\r\n } else {\r\n if (!Array.isArray(src)) {\r\n src = src.children;\r\n }\r\n\r\n nodes.value = src;\r\n }\r\n } finally {\r\n loading.value = false;\r\n }\r\n}\r\n\r\n// Modal Control\r\nwatch(() => props.open, (v) => {\r\n if (v) {\r\n $modal.show();\r\n } else {\r\n $modal.hide();\r\n }\r\n});\r\n\r\nasync function onShow() {\r\n await loadItems();\r\n updateSelectedItemsByValue();\r\n}\r\n\r\nfunction onHide() {\r\n nodes.value = [];\r\n q.value = '';\r\n emits('hide');\r\n}\r\n\r\nfunction updateSelectedItemsByValue() {\r\n const values = forceArray(props.value);\r\n\r\n selectedNodes.value = flatNodes.value\r\n .filter((item: TreeNode) => {\r\n return values.includes(valueGetter(item.value));\r\n });\r\n}\r\n\r\nwatch(\r\n () => props.value,\r\n () => updateSelectedItemsByValue(),\r\n { immediate: true, deep: true }\r\n);\r\n\r\n</script>\r\n\r\n<template>\r\n <div ref=\"modal\" class=\"modal fade\" :id=\"`${id}__modal`\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"-modal-label\"\r\n aria-hidden=\"true\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" :id=\"`${id}__modal-label`\">\r\n {{ title }}\r\n </h4>\r\n <button type=\"button\" class=\"close btn-close\" data-bs-dismiss=\"modal\" data-dismiss=\"modal\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"modal-body p-0\">\r\n <div class=\"std-form box-list m-3\">\r\n <div class=\"form-group\">\r\n <input type=\"search\" class=\"form-control\" :placeholder=\"searchText\"\r\n v-model=\"q\" />\r\n </div>\r\n </div>\r\n\r\n <div v-if=\"!loading\" class=\"box-list__items\">\r\n <TreeItem v-for=\"node of displayNodes\"\r\n :node\r\n :key=\"valueGetter(node.value)\"\r\n :level=\"1\"\r\n :branchSelectable\r\n />\r\n </div>\r\n <div v-else>\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"spinner-border spinner-border-sm my-3\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","<script lang=\"ts\" setup>\r\nimport { Modal } from 'bootstrap';\r\nimport { computed, getCurrentInstance, inject, onMounted, onUnmounted, provide, ref, useTemplateRef, watch } from 'vue';\r\nimport { useHttpClient } from '../../../composable';\r\nimport { forceArray } from '../../../service';\r\nimport { MaybeArray, ModalTreeSource, SearchMatcher, TitleGetter, TreeNode, ValueGetter } from '../../../types';\r\nimport { flattenChildren } from '../../../utilities';\r\nimport TreeItem from './TreeItem.vue';\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n open?: boolean;\r\n id?: string;\r\n name?: string;\r\n types?: string[];\r\n title?: string;\r\n disabled?: boolean;\r\n readonly?: boolean;\r\n value?: MaybeArray<string | number>;\r\n branchSelectable?: boolean;\r\n source?: ModalTreeSource;\r\n searchText?: string;\r\n }>(),\r\n {\r\n branchSelectable: false,\r\n }\r\n);\r\n\r\nconst emits = defineEmits<{\r\n change: [value: any];\r\n input: [value: any];\r\n selected: [items: any[]];\r\n hide: [];\r\n}>();\r\n\r\n// provide('selectNode', selectNode);\r\n\r\nconst valueGetter = inject<ValueGetter>('valueGetter');\r\nconst titleGetter = inject<TitleGetter>('titleGetter');\r\nconst searchMatcher = inject<SearchMatcher>('searchMatcher');\r\n\r\nconst loading = ref(false);\r\nconst multiple = inject<boolean>('multiple', false);\r\nconst modalElement = useTemplateRef<HTMLDivElement>('modal')\r\n\r\nlet $modal: Modal;\r\n\r\nonMounted(() => {\r\n $modal = Modal.getOrCreateInstance(modalElement.value!);\r\n modalElement.value!.addEventListener('show.bs.modal', onShow);\r\n modalElement.value!.addEventListener('hide.bs.modal', onHide);\r\n});\r\n\r\nonUnmounted(() => {\r\n modalElement.value!.removeEventListener('show.bs.modal', onShow);\r\n modalElement.value!.removeEventListener('hide.bs.modal', onHide);\r\n});\r\n\r\n// Items\r\nconst nodes = ref<TreeNode[]>([]);\r\nconst selectedNodes = ref<TreeNode[]>([]);\r\n\r\nconst displayNodes = computed(() => {\r\n if (searchEnabled.value) {\r\n return searchedItems.value;\r\n }\r\n return nodes.value;\r\n});\r\n\r\nconst flatNodes = computed(() => flattenChildren(nodes.value));\r\n\r\nconst selectedValues = computed(() => {\r\n return flatNodes.value.filter((node) => node.selected).map((node) => valueGetter(node.value));\r\n});\r\n\r\nprovide('selectedValues', selectedValues);\r\n\r\nwatch(() => selectedValues, () => {\r\n emits('change', selectedValues.value);\r\n emits('input', selectedValues.value);\r\n emits('selected', selectedNodes.value);\r\n});\r\n\r\n// function selectNode(node: TreeNode, select: boolean) {\r\n// node.selected = select;\r\n//\r\n// // if (select) {\r\n// // if (!multiple) {\r\n// // selectedNodes.value = [];\r\n// // }\r\n// // if (!selectedValues.value.includes(valueGetter(node.value))) {\r\n// // selectedNodes.value.push(node);\r\n// // }\r\n// // } else {\r\n// // selectedNodes.value = selectedNodes.value.filter(\r\n// // (selectedNode: TreeNode) => valueGetter(selectedNode.value) !== valueGetter(node.value)\r\n// // );\r\n// // }\r\n// emits('change', selectedValues.value);\r\n// emits('input', selectedValues.value);\r\n// emits('selected', selectedNodes.value);\r\n// }\r\n\r\nconst canModify = computed(() => {\r\n return !props.readonly && !props.disabled;\r\n});\r\n\r\n// Search\r\nconst q = ref('');\r\nconst searchEnabled = computed(() => q.value !== '');\r\n\r\nconst searchedItems = computed(() => {\r\n if (q.value === '') {\r\n return [];\r\n }\r\n\r\n return flatNodes.value.filter((item: TreeNode) => {\r\n return searchMatcher(item.value, q.value);\r\n });\r\n});\r\n\r\nasync function loadItems() {\r\n loading.value = true;\r\n const http = await useHttpClient();\r\n try {\r\n let src = props.source;\r\n\r\n if (typeof src === 'string') {\r\n const res = await http.get(src);\r\n nodes.value = res.data.data;\r\n } else if (typeof src === 'function') {\r\n nodes.value = await src();\r\n } else {\r\n if (!Array.isArray(src)) {\r\n src = src.children;\r\n }\r\n\r\n nodes.value = src;\r\n }\r\n } finally {\r\n loading.value = false;\r\n }\r\n}\r\n\r\n// Modal Control\r\nwatch(() => props.open, (v) => {\r\n if (v) {\r\n $modal.show();\r\n } else {\r\n $modal.hide();\r\n }\r\n});\r\n\r\nasync function onShow() {\r\n await loadItems();\r\n updateSelectedItemsByValue();\r\n}\r\n\r\nfunction onHide() {\r\n nodes.value = [];\r\n q.value = '';\r\n emits('hide');\r\n}\r\n\r\nfunction updateSelectedItemsByValue() {\r\n const values = forceArray(props.value);\r\n\r\n selectedNodes.value = flatNodes.value\r\n .filter((item: TreeNode) => {\r\n return values.includes(valueGetter(item.value));\r\n });\r\n}\r\n\r\nwatch(\r\n () => props.value,\r\n () => updateSelectedItemsByValue(),\r\n { immediate: true, deep: true }\r\n);\r\n\r\n</script>\r\n\r\n<template>\r\n <div ref=\"modal\" class=\"modal fade\" :id=\"`${id}__modal`\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"-modal-label\"\r\n aria-hidden=\"true\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" :id=\"`${id}__modal-label`\">\r\n {{ title }}\r\n </h4>\r\n <button type=\"button\" class=\"close btn-close\" data-bs-dismiss=\"modal\" data-dismiss=\"modal\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"modal-body p-0\">\r\n <div class=\"std-form box-list m-3\">\r\n <div class=\"form-group\">\r\n <input type=\"search\" class=\"form-control\" :placeholder=\"searchText\"\r\n v-model=\"q\" />\r\n </div>\r\n </div>\r\n\r\n <div v-if=\"!loading\" class=\"box-list__items\">\r\n <TreeItem v-for=\"node of displayNodes\"\r\n :node\r\n :key=\"valueGetter(node.value)\"\r\n :level=\"1\"\r\n :branchSelectable\r\n />\r\n </div>\r\n <div v-else>\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"spinner-border spinner-border-sm my-3\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","<script lang=\"ts\" setup>\r\nimport { cloneDeep } from 'lodash-es';\r\nimport { computed, provide, ref, watch } from 'vue';\r\nimport { forceArray } from '../../../service';\r\nimport {\r\n ValueGetter,\r\n ModalTreeSource,\r\n TitleGetter,\r\n TreeNode,\r\n SearchMatcher,\r\n MaybeArray,\r\n MaybePromise\r\n} from '../../../types';\r\nimport TreeModal from './TreeModal.vue';\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n id?: string;\r\n name?: string;\r\n title?: string;\r\n disabled?: boolean;\r\n readonly?: boolean;\r\n value?: MaybeArray<string | number>;\r\n source?: ModalTreeSource;\r\n items?: MaybeArray<TreeNode> | (() => MaybePromise<MaybeArray<TreeNode>>);\r\n valueGetter?: ValueGetter;\r\n titleGetter?: TitleGetter;\r\n searchMatcher?: SearchMatcher;\r\n modalTitle?: string;\r\n vertical?: boolean;\r\n branchSelectable?: boolean;\r\n selectAllChildren?: boolean;\r\n placeholder?: string;\r\n multiple?: boolean;\r\n buttonText?: string;\r\n itemClass?: string;\r\n searchText?: string;\r\n }>(),\r\n {\r\n branchSelectable: false,\r\n selectAllChildren: false,\r\n placeholder: '- No selected -',\r\n multiple: false,\r\n buttonText: 'Select',\r\n itemClass: 'badge bg-primary badge-pill',\r\n searchText: 'Search',\r\n valueGetter: (item: any) => item.id,\r\n titleGetter: (item: any) => item.title,\r\n }\r\n);\r\n\r\nprovide('id', props.id);\r\nprovide('name', props.name);\r\nprovide('multiple', props.multiple);\r\nprovide('valueGetter', props.valueGetter);\r\nprovide('titleGetter', props.titleGetter);\r\nprovide('searchMatcher', props.searchMatcher ?? defaultSearchMatcher);\r\n\r\nfunction defaultSearchMatcher(item: any, q: string) {\r\n return props.titleGetter(item).toLowerCase().includes(q.toLowerCase());\r\n}\r\n\r\nconst selected = ref<TreeNode[]>([]);\r\nconst value = ref<(string|number)[]>(forceArray(props.value));\r\n\r\n// Modal\r\nconst treeModalOpen = ref(false);\r\n\r\nfunction openSelector() {\r\n treeModalOpen.value = true;\r\n}\r\n\r\nfunction deleteItem(i: number, node: TreeNode) {\r\n selected.value = selected.value.filter((it: TreeNode) => props.valueGetter(it.value) !== props.valueGetter(node.value));\r\n}\r\n\r\nfunction handleSelected(items: any[]) {\r\n selected.value = cloneDeep(items);\r\n}\r\n\r\nwatch(() => props.items, async (v) => {\r\n if (typeof v === 'function') {\r\n v = await v();\r\n }\r\n\r\n selected.value = forceArray(v).filter((node: TreeNode) => {\r\n return value.value.includes(props.valueGetter(node.value));\r\n });\r\n}, { immediate: true });\r\n\r\nconst selectedValues = computed(() => {\r\n return selected.value.map(node => props.valueGetter(node.value));\r\n});\r\n\r\nconst canModify = computed(() => {\r\n return !props.readonly && !props.disabled;\r\n});\r\n\r\n</script>\r\n\r\n<template>\r\n <div class=\"c-modal-tree\">\r\n <div class=\"c-modal-tree__container p-2 d-flex flex-column\"\r\n :class=\"[ vertical ? '' : 'flex-md-row' ]\">\r\n <div v-if=\"canModify\" class=\"me-2 mb-2\"\r\n :class=\"{ 'mb-md-0': !vertical }\">\r\n <div class=\"btn-group\">\r\n <button class=\"btn btn-secondary btn-sm btn-rounded text-nowrap\" type=\"button\"\r\n @click=\"openSelector\">\r\n {{ buttonText }}\r\n </button>\r\n <button class=\"btn btn-secondary btn-sm btn-rounded\" type=\"button\"\r\n @click=\"selected = []\">\r\n <span class=\"fa fa-times\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div v-if=\"selected.length > 0\">\r\n <TransitionGroup name=\"fade\">\r\n <span v-for=\"(node, i) of selected\"\r\n class=\"me-2 mb-2 c-item\"\r\n :class=\"itemClass\"\r\n :key=\"valueGetter(node.value)\"\r\n style=\"animation-duration: .3s\">\r\n <span>{{ titleGetter(node.value) }}</span>\r\n <span type=\"button\" v-if=\"canModify\"\r\n @click.prevent=\"deleteItem(i, node)\" class=\"ms-2\" style=\"cursor: pointer\">\r\n <span class=\"fa fa-times\"></span>\r\n </span>\r\n </span>\r\n </TransitionGroup>\r\n </div>\r\n <div v-else class=\"text-muted\">\r\n {{ placeholder }}\r\n </div>\r\n </div>\r\n\r\n <select multiple\r\n style=\"display: none;\"\r\n ref=\"input\"\r\n :id=\"id\"\r\n :name=\"name\"\r\n :disabled=\"disabled\"\r\n :readonly=\"readonly\"\r\n v-bind=\"$attrs\"\r\n >\r\n <option v-for=\"id of selectedValues\" :value=\"id\" :selected=\"true\">{{ id }}</option>\r\n </select>\r\n\r\n <TreeModal\r\n :open=\"treeModalOpen\"\r\n @hide=\"treeModalOpen = false\"\r\n :id=\"id\"\r\n :title=\"modalTitle\"\r\n :source=\"source\"\r\n :value=\"selectedValues\"\r\n :branchSelectable\r\n v-bind=\"$attrs\"\r\n :disabled=\"disabled\"\r\n :readonly=\"readonly\"\r\n :search-text=\"searchText\"\r\n @selected=\"handleSelected\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.c-item {\r\n padding-left: .75rem;\r\n padding-right: .75rem;\r\n padding-top: .5rem;\r\n padding-bottom: .5rem;\r\n}\r\n</style>\r\n","<script lang=\"ts\" setup>\r\nimport { cloneDeep } from 'lodash-es';\r\nimport { computed, provide, ref, watch } from 'vue';\r\nimport { forceArray } from '../../../service';\r\nimport {\r\n ValueGetter,\r\n ModalTreeSource,\r\n TitleGetter,\r\n TreeNode,\r\n SearchMatcher,\r\n MaybeArray,\r\n MaybePromise\r\n} from '../../../types';\r\nimport TreeModal from './TreeModal.vue';\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n id?: string;\r\n name?: string;\r\n title?: string;\r\n disabled?: boolean;\r\n readonly?: boolean;\r\n value?: MaybeArray<string | number>;\r\n source?: ModalTreeSource;\r\n items?: MaybeArray<TreeNode> | (() => MaybePromise<MaybeArray<TreeNode>>);\r\n valueGetter?: ValueGetter;\r\n titleGetter?: TitleGetter;\r\n searchMatcher?: SearchMatcher;\r\n modalTitle?: string;\r\n vertical?: boolean;\r\n branchSelectable?: boolean;\r\n selectAllChildren?: boolean;\r\n placeholder?: string;\r\n multiple?: boolean;\r\n buttonText?: string;\r\n itemClass?: string;\r\n searchText?: string;\r\n }>(),\r\n {\r\n branchSelectable: false,\r\n selectAllChildren: false,\r\n placeholder: '- No selected -',\r\n multiple: false,\r\n buttonText: 'Select',\r\n itemClass: 'badge bg-primary badge-pill',\r\n searchText: 'Search',\r\n valueGetter: (item: any) => item.id,\r\n titleGetter: (item: any) => item.title,\r\n }\r\n);\r\n\r\nprovide('id', props.id);\r\nprovide('name', props.name);\r\nprovide('multiple', props.multiple);\r\nprovide('valueGetter', props.valueGetter);\r\nprovide('titleGetter', props.titleGetter);\r\nprovide('searchMatcher', props.searchMatcher ?? defaultSearchMatcher);\r\n\r\nfunction defaultSearchMatcher(item: any, q: string) {\r\n return props.titleGetter(item).toLowerCase().includes(q.toLowerCase());\r\n}\r\n\r\nconst selected = ref<TreeNode[]>([]);\r\nconst value = ref<(string|number)[]>(forceArray(props.value));\r\n\r\n// Modal\r\nconst treeModalOpen = ref(false);\r\n\r\nfunction openSelector() {\r\n treeModalOpen.value = true;\r\n}\r\n\r\nfunction deleteItem(i: number, node: TreeNode) {\r\n selected.value = selected.value.filter((it: TreeNode) => props.valueGetter(it.value) !== props.valueGetter(node.value));\r\n}\r\n\r\nfunction handleSelected(items: any[]) {\r\n selected.value = cloneDeep(items);\r\n}\r\n\r\nwatch(() => props.items, async (v) => {\r\n if (typeof v === 'function') {\r\n v = await v();\r\n }\r\n\r\n selected.value = forceArray(v).filter((node: TreeNode) => {\r\n return value.value.includes(props.valueGetter(node.value));\r\n });\r\n}, { immediate: true });\r\n\r\nconst selectedValues = computed(() => {\r\n return selected.value.map(node => props.valueGetter(node.value));\r\n});\r\n\r\nconst canModify = computed(() => {\r\n return !props.readonly && !props.disabled;\r\n});\r\n\r\n</script>\r\n\r\n<template>\r\n <div class=\"c-modal-tree\">\r\n <div class=\"c-modal-tree__container p-2 d-flex flex-column\"\r\n :class=\"[ vertical ? '' : 'flex-md-row' ]\">\r\n <div v-if=\"canModify\" class=\"me-2 mb-2\"\r\n :class=\"{ 'mb-md-0': !vertical }\">\r\n <div class=\"btn-group\">\r\n <button class=\"btn btn-secondary btn-sm btn-rounded text-nowrap\" type=\"button\"\r\n @click=\"openSelector\">\r\n {{ buttonText }}\r\n </button>\r\n <button class=\"btn btn-secondary btn-sm btn-rounded\" type=\"button\"\r\n @click=\"selected = []\">\r\n <span class=\"fa fa-times\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div v-if=\"selected.length > 0\">\r\n <TransitionGroup name=\"fade\">\r\n <span v-for=\"(node, i) of selected\"\r\n class=\"me-2 mb-2 c-item\"\r\n :class=\"itemClass\"\r\n :key=\"valueGetter(node.value)\"\r\n style=\"animation-duration: .3s\">\r\n <span>{{ titleGetter(node.value) }}</span>\r\n <span type=\"button\" v-if=\"canModify\"\r\n @click.prevent=\"deleteItem(i, node)\" class=\"ms-2\" style=\"cursor: pointer\">\r\n <span class=\"fa fa-times\"></span>\r\n </span>\r\n </span>\r\n </TransitionGroup>\r\n </div>\r\n <div v-else class=\"text-muted\">\r\n {{ placeholder }}\r\n </div>\r\n </div>\r\n\r\n <select multiple\r\n style=\"display: none;\"\r\n ref=\"input\"\r\n :id=\"id\"\r\n :name=\"name\"\r\n :disabled=\"disabled\"\r\n :readonly=\"readonly\"\r\n v-bind=\"$attrs\"\r\n >\r\n <option v-for=\"id of selectedValues\" :value=\"id\" :selected=\"true\">{{ id }}</option>\r\n </select>\r\n\r\n <TreeModal\r\n :open=\"treeModalOpen\"\r\n @hide=\"treeModalOpen = false\"\r\n :id=\"id\"\r\n :title=\"modalTitle\"\r\n :source=\"source\"\r\n :value=\"selectedValues\"\r\n :branchSelectable\r\n v-bind=\"$attrs\"\r\n :disabled=\"disabled\"\r\n :readonly=\"readonly\"\r\n :search-text=\"searchText\"\r\n @selected=\"handleSelected\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.c-item {\r\n padding-left: .75rem;\r\n padding-right: .75rem;\r\n padding-top: .5rem;\r\n padding-bottom: .5rem;\r\n}\r\n</style>\r\n","import { data } from '../data';\r\nimport { useCssImport } from '../service';\r\nimport { createApp } from 'vue';\r\nimport ModalTreeApp from '../vue/components/ModalTree/ModalTreeApp.vue';\r\n\r\nconst app = createApp({\r\n name: 'modal-tree',\r\n components: {\r\n ModalTreeApp\r\n }\r\n});\r\napp.config.globalProperties.$getData = data;\r\n\r\nclass ModalTreeElement extends HTMLElement {\r\n static is = 'modal-tree';\r\n\r\n vm: any;\r\n\r\n connectedCallback() {\r\n if (!this.vm) {\r\n this.vm = app.mount(this);\r\n }\r\n }\r\n}\r\n\r\nasync function init() {\r\n customElements.define(ModalTreeElement.is, ModalTreeElement);\r\n await useCssImport('@vue-animate');\r\n}\r\n\r\nexport const ready = init();\r\n"],"names":["children","b","C","E","h","p","W","F","L","k","select","_hoisted_1","_createElementBlock","_normalizeClass","_createElementVNode","_normalizeStyle","_withDirectives","_openBlock","_hoisted_2","_hoisted_3","_createTextVNode","_toDisplayString","_hoisted_5","_createBlock","_Fragment","_renderList","_hoisted_4","_hoisted_6","_hoisted_7","_createVNode","_TransitionGroup","_withCtx","_withModifiers","_createCommentVNode","_mergeProps"],"mappings":"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","x_google_ignoreList":[1]}
1
+ {"version":3,"file":"field-modal-tree.js","sources":["../../src/utilities/tree.ts","../../../../../../node_modules/vue3-slide-up-down/dist/vue3-slide-up-down.js","../../src/vue/components/ModalTree/TreeItem.vue","../../src/vue/components/ModalTree/TreeModal.vue","../../src/vue/components/ModalTree/ModalTreeApp.vue","../../src/module/field-modal-tree.ts"],"sourcesContent":["import { TreeNode } from '../types';\n\nexport function flattenChildren(children: TreeNode[]) {\n const flat: TreeNode[] = [];\n\n function loopChildren(children: TreeNode[]) {\n for (const child of children) {\n if (child.children.length === 0) {\n flat.push(child);\n continue;\n }\n\n loopChildren(child.children);\n }\n }\n\n loopChildren(children);\n return flat;\n}\n\n","import { defineComponent as C, ref as E, computed as h, h as p, Transition as W, withDirectives as F, mergeProps as L, vShow as k, unref as b } from \"vue\";\nfunction y(t) {\n return {\n height: t.style.height,\n width: t.style.width,\n position: t.style.position,\n visibility: t.style.visibility,\n overflow: t.style.overflow,\n paddingTop: t.style.paddingTop,\n paddingBottom: t.style.paddingBottom,\n borderTopWidth: t.style.borderTopWidth,\n borderBottomWidth: t.style.borderBottomWidth,\n marginTop: t.style.marginTop,\n marginBottom: t.style.marginBottom\n };\n}\nfunction V(t, o, i) {\n const e = b(t), { width: n } = getComputedStyle(o);\n o.style.width = n, o.style.position = \"absolute\", o.style.visibility = \"hidden\", o.style.height = \"\";\n const { height: s } = getComputedStyle(o);\n return o.style.width = i.width, o.style.position = i.position, o.style.visibility = i.visibility, o.style.height = e, o.style.overflow = \"hidden\", i.height && i.height != e ? i.height : s;\n}\nfunction f(t, o, i, e, n) {\n const s = t.animate(e, n);\n t.style.height = o.height, s.onfinish = () => {\n t.style.overflow = o.overflow, i();\n };\n}\nfunction m(t, o, i, e) {\n const n = b(o);\n return [\n {\n height: n,\n opacity: t.opacityClosed,\n paddingTop: n,\n paddingBottom: n,\n borderTopWidth: n,\n borderBottomWidth: n,\n marginTop: n,\n marginBottom: n\n },\n {\n height: i,\n opacity: t.opacityOpen,\n paddingTop: e.paddingTop || 0,\n paddingBottom: e.paddingBottom || 0,\n borderTopWidth: e.borderTopWidth || 0,\n borderBottomWidth: e.borderBottomWidth || 0,\n marginTop: e.marginTop || 0,\n marginBottom: e.marginBottom || 0\n }\n ];\n}\nconst x = C({\n props: {\n modelValue: {\n type: Boolean,\n default: !1\n },\n /**\n * Time in milliseconds for the slide duration\n */\n duration: {\n type: Number,\n default: 500\n },\n /**\n * Timing function for the animation\n */\n timingFunction: {\n type: String,\n default: \"ease-in-out\"\n },\n /**\n * Independent timing function for the animation when entering\n */\n timingFunctionEnter: {\n type: String,\n default: null\n },\n /**\n * Independent timing function for the animation when leaving\n */\n timingFunctionLeave: {\n type: String,\n default: null\n },\n /**\n * Opacity value from 0 - 1 of the element when open\n */\n opacityOpen: {\n type: Number,\n default: 1\n },\n /**\n * Opacity value from 0 - 1 of the element when closed\n */\n opacityClosed: {\n type: Number,\n default: 0\n },\n /**\n * HTML tag to use for the outer container\n */\n tag: {\n type: String,\n default: \"div\"\n },\n /**\n * Always render the element inside the slide container\n */\n eager: {\n type: Boolean,\n default: !1\n }\n },\n emits: [\"update:modelValue\", \"open-start\", \"open-end\", \"close-start\", \"close-end\"],\n setup(t, { slots: o, attrs: i, emit: e }) {\n const n = E(\"0px\"), s = h(() => t.timingFunctionEnter || t.timingFunction), v = h(() => t.timingFunctionLeave || t.timingFunction);\n function T(g, l) {\n const d = g, a = y(d), r = V(n, d, a), u = m(t, n, r, a), c = { duration: t.duration, easing: s.value };\n f(d, a, () => {\n l(), e(\"open-end\");\n }, u, c);\n }\n function B(g, l) {\n const d = g, a = y(d), { height: r } = getComputedStyle(d);\n d.style.height = r, d.style.overflow = \"hidden\";\n const u = m(t, n, r, a).reverse(), c = { duration: t.duration, easing: v.value };\n f(d, a, () => {\n l(), e(\"close-end\");\n }, u, c);\n }\n return () => p(\n W,\n {\n css: !1,\n persisted: t.eager,\n onBeforeEnter: () => e(\"open-start\"),\n onEnter: T,\n onBeforeLeave: () => e(\"close-start\"),\n onLeave: B\n },\n {\n default: () => t.modelValue || t.eager ? F(\n p(\n t.tag,\n L(i, {\n class: \"slide-up-down__container\"\n }),\n o\n ),\n [t.eager ? [k, t.modelValue === !0] : [null]]\n ) : null\n }\n );\n }\n});\nexport {\n x as Vue3SlideUpDown\n};\n","<script setup lang=\"ts\">\nimport { type ComponentPublicInstance, type ComputedRef, computed, inject, nextTick, onBeforeUpdate, onMounted, ref, watch } from 'vue';\nimport { Vue3SlideUpDown } from 'vue3-slide-up-down';\nimport { TitleGetter, TreeNode, ValueGetter } from '../../../types';\nimport { flattenChildren } from '../../../utilities';\nimport TreeItem from './TreeItem.vue';\n\nconst props = withDefaults(\n defineProps<{\n node: TreeNode;\n level?: number;\n branchSelectable?: boolean;\n }>(),\n {\n level: 1,\n branchSelectable: false,\n }\n);\n\nconst emit = defineEmits<{\n change: [checked: boolean];\n input: [checked: boolean];\n}>();\n\nconst node = ref<TreeNode>(props.node);\n// const selectNode = inject<(node: TreeNode, select: boolean) => any>('selectNode');\nconst selectedValues = inject<ComputedRef<(string | number)[]>>('selectedValues');\nconst id = inject('id');\nconst multiple = inject('multiple');\nconst valueGetter = inject<ValueGetter>('valueGetter');\nconst titleGetter = inject<TitleGetter>('titleGetter');\n\nconst selected = ref(false);\nconst indeterminate = computed(() => !!props.node.indeterminate);\nconst stopWatch = ref(false);\nconst open = ref(false);\nconst childrenComponents = ref<ComponentPublicInstance<typeof TreeItem>[]>([]);\n\nwatch(() => props.node, () => {\n selected.value = !!props.node.selected;\n}, { deep: true });\n\nfunction setChildrenComponent(child: ComponentPublicInstance<typeof TreeItem>) {\n childrenComponents.value.push(child);\n}\n\nonBeforeUpdate(() => {\n childrenComponents.value = [];\n});\n\nconst indentPx = computed(() => {\n return (props.level - 1) * 15;\n});\n\nconst isBranch = computed(() => {\n return props.node.children.length > 0;\n});\n\nconst isLeaf = computed(() => {\n return !isBranch.value;\n});\n\nfunction updateSelected() {\n if (isBranch.value) {\n return;\n }\n\n node.value.selected = selectedValues.value.includes(valueGetter(props.node.value));\n}\n\nfunction select(select: boolean) {\n if (selected.value === select) {\n return;\n }\n\n node.value.selected = select;\n\n checkboxChanged(select);\n}\n\nfunction checkboxChanged(v: boolean) {\n if (isBranch.value) {\n node.value.selected = v;\n\n if (multiple) {\n stopWatchThen(() => {\n const flatChildren = flattenChildren(node.value.children);\n for (const child of flatChildren) {\n child.selected = v;\n child.indeterminate = false;\n }\n });\n // syncChildrenStatus();\n }\n } else {\n nextTick(() => {\n node.value.selected = v;\n });\n }\n emit('change', v);\n emit('input', v);\n}\n\nfunction childChanged(v: boolean) {\n if (isLeaf.value || stopWatch.value) {\n return;\n }\n if (!childrenComponents.value) {\n return;\n }\n if (childrenComponents.value.length === 0) {\n return;\n }\n syncChildrenStatus();\n}\n\nfunction syncChildrenStatus() {\n if (isLeaf.value) {\n return;\n }\n let selectedCount = 0;\n let unselectCount = 0;\n let indeterminateInner = 0;\n const oldIndeterminate = indeterminate.value;\n const oldSelected = selected.value;\n \n for (const child of flattenChildren(props.node.children)) {\n if (child.selected) {\n selectedCount++;\n } else {\n unselectCount++;\n }\n\n if (child.indeterminate) {\n indeterminateInner++;\n }\n }\n\n // for (const childComponent of childrenComponents.value) {\n // if (childComponent.selected) {\n // checked++;\n // } else {\n // unchecked++;\n // }\n // if (childComponent.indeterminate) {\n // indeterminateInner++;\n // }\n // }\n\n if ((selectedCount !== 0 && unselectCount !== 0) || indeterminateInner > 0) {\n node.value.indeterminate = true;\n } else {\n node.value.selected = unselectCount === 0;\n node.value.indeterminate = false;\n }\n\n if (\n selected.value !== oldSelected\n || indeterminate.value !== oldIndeterminate\n ) {\n emit('change', selected.value);\n emit('input', selected.value);\n }\n}\n\nfunction stopWatchThen(callback: () => any) {\n stopWatch.value = true;\n callback();\n stopWatch.value = false;\n}\n\nwatch(() => selectedValues, async () => {\n if (!isBranch.value) {\n updateSelected();\n }\n await nextTick();\n\n syncChildrenStatus();\n}, { deep: true });\n\nwatch(selected, (v) => {\n});\n\nupdateSelected();\n\nonMounted(() => {\n syncChildrenStatus();\n});\n\ndefineExpose({\n select,\n selected,\n indeterminate\n});\n</script>\n\n<template>\n <div class=\"c-tree-item\"\n :class=\"[ isBranch ? 'c-tree-item--branch' : 'c-tree-item--leaf' ]\">\n <div class=\"d-flex c-tree-item__title\"\n :style=\"{ 'padding-left': indentPx + 'px' }\"\n :class=\"[ isBranch ? 'bg-light ' : '' ]\">\n <div class=\"p-2 ms-2\">\n <input\n :type=\"multiple ? 'checkbox' : 'radio'\"\n class=\"form-check-input\"\n v-if=\"isLeaf || (branchSelectable && multiple)\"\n :id=\"id + '__item-' + valueGetter(node.value)\"\n v-model=\"selected\"\n :value=\"true\"\n :unchecked-value=\"false\"\n :indeterminate.sync=\"indeterminate\"\n @change=\"checkboxChanged(($event.target as HTMLInputElement).checked)\"\n />\n <input v-else\n :type=\"multiple ? 'checkbox' : 'radio'\"\n class=\"form-check-input\"\n disabled\n :checked=\"indeterminate\" :indeterminate.sync=\"indeterminate\" />\n </div>\n <a class=\"c-tree-item__text d-flex align-items-center flex-grow-1 py-2 text-decoration-none\"\n style=\"cursor: pointer;\"\n :data-level=\"level\"\n data-bs-toggle=\"collapse\"\n @click.prevent=\"isLeaf ? select(!selected) : open = !open\">\n <span class=\"me-2 fa\" :class=\"[ isLeaf ? 'fa-tag' : 'fa-folder' ]\"></span>\n\n {{ node.value.title }}\n\n <span v-if=\"isBranch\" class=\"ms-auto me-3\">\n <span :class=\"[ open ? 'fa fa-chevron-up' : 'fa fa-chevron-down' ]\"></span>\n </span>\n </a>\n </div>\n\n <Vue3SlideUpDown\n v-if=\"node.children.length > 0\"\n v-model=\"open\"\n :duration=\"300\"\n class=\"c-tree-item__children\"\n >\n <TreeItem v-for=\"(child, i) of node.children\"\n :node=\"child\"\n :key=\"valueGetter(child.value)\"\n :level=\"level + 1\"\n :branch-selectable=\"branchSelectable\"\n :ref=\"setChildrenComponent\"\n @change=\"childChanged\"\n />\n </Vue3SlideUpDown>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n.c-tree-item {\n &__title {\n border-bottom: 1px solid #ddd;\n }\n\n cursor: pointer;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { Modal } from 'bootstrap';\nimport { computed, getCurrentInstance, inject, onMounted, onUnmounted, provide, ref, useTemplateRef, watch } from 'vue';\nimport { useHttpClient } from '../../../composable';\nimport { forceArray } from '../../../service';\nimport { MaybeArray, ModalTreeSource, SearchMatcher, TitleGetter, TreeNode, ValueGetter } from '../../../types';\nimport { flattenChildren } from '../../../utilities';\nimport TreeItem from './TreeItem.vue';\n\nconst props = withDefaults(\n defineProps<{\n open?: boolean;\n id?: string;\n name?: string;\n types?: string[];\n title?: string;\n disabled?: boolean;\n readonly?: boolean;\n value?: MaybeArray<string | number>;\n branchSelectable?: boolean;\n source?: ModalTreeSource;\n searchText?: string;\n }>(),\n {\n branchSelectable: false,\n }\n);\n\nconst emits = defineEmits<{\n change: [value: any];\n input: [value: any];\n selected: [items: any[]];\n hide: [];\n}>();\n\n// provide('selectNode', selectNode);\n\nconst valueGetter = inject<ValueGetter>('valueGetter');\nconst titleGetter = inject<TitleGetter>('titleGetter');\nconst searchMatcher = inject<SearchMatcher>('searchMatcher');\n\nconst loading = ref(false);\nconst multiple = inject<boolean>('multiple', false);\nconst modalElement = useTemplateRef<HTMLDivElement>('modal')\n\nlet $modal: Modal;\n\nonMounted(() => {\n $modal = Modal.getOrCreateInstance(modalElement.value!);\n modalElement.value!.addEventListener('show.bs.modal', onShow);\n modalElement.value!.addEventListener('hide.bs.modal', onHide);\n});\n\nonUnmounted(() => {\n modalElement.value!.removeEventListener('show.bs.modal', onShow);\n modalElement.value!.removeEventListener('hide.bs.modal', onHide);\n});\n\n// Items\nconst nodes = ref<TreeNode[]>([]);\nconst selectedNodes = ref<TreeNode[]>([]);\n\nconst displayNodes = computed(() => {\n if (searchEnabled.value) {\n return searchedItems.value;\n }\n return nodes.value;\n});\n\nconst flatNodes = computed(() => flattenChildren(nodes.value));\n\nconst selectedValues = computed(() => {\n return flatNodes.value.filter((node) => node.selected).map((node) => valueGetter(node.value));\n});\n\nprovide('selectedValues', selectedValues);\n\nwatch(() => selectedValues, () => {\n emits('change', selectedValues.value);\n emits('input', selectedValues.value);\n emits('selected', selectedNodes.value);\n});\n\n// function selectNode(node: TreeNode, select: boolean) {\n// node.selected = select;\n//\n// // if (select) {\n// // if (!multiple) {\n// // selectedNodes.value = [];\n// // }\n// // if (!selectedValues.value.includes(valueGetter(node.value))) {\n// // selectedNodes.value.push(node);\n// // }\n// // } else {\n// // selectedNodes.value = selectedNodes.value.filter(\n// // (selectedNode: TreeNode) => valueGetter(selectedNode.value) !== valueGetter(node.value)\n// // );\n// // }\n// emits('change', selectedValues.value);\n// emits('input', selectedValues.value);\n// emits('selected', selectedNodes.value);\n// }\n\nconst canModify = computed(() => {\n return !props.readonly && !props.disabled;\n});\n\n// Search\nconst q = ref('');\nconst searchEnabled = computed(() => q.value !== '');\n\nconst searchedItems = computed(() => {\n if (q.value === '') {\n return [];\n }\n\n return flatNodes.value.filter((item: TreeNode) => {\n return searchMatcher(item.value, q.value);\n });\n});\n\nasync function loadItems() {\n loading.value = true;\n const http = await useHttpClient();\n try {\n let src = props.source;\n\n if (typeof src === 'string') {\n const res = await http.get(src);\n nodes.value = res.data.data;\n } else if (typeof src === 'function') {\n nodes.value = await src();\n } else {\n if (!Array.isArray(src)) {\n src = src.children;\n }\n\n nodes.value = src;\n }\n } finally {\n loading.value = false;\n }\n}\n\n// Modal Control\nwatch(() => props.open, (v) => {\n if (v) {\n $modal.show();\n } else {\n $modal.hide();\n }\n});\n\nasync function onShow() {\n await loadItems();\n updateSelectedItemsByValue();\n}\n\nfunction onHide() {\n nodes.value = [];\n q.value = '';\n emits('hide');\n}\n\nfunction updateSelectedItemsByValue() {\n const values = forceArray(props.value);\n\n selectedNodes.value = flatNodes.value\n .filter((item: TreeNode) => {\n return values.includes(valueGetter(item.value));\n });\n}\n\nwatch(\n () => props.value,\n () => updateSelectedItemsByValue(),\n { immediate: true, deep: true }\n);\n\n</script>\n\n<template>\n <div ref=\"modal\" class=\"modal fade\" :id=\"`${id}__modal`\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"-modal-label\"\n aria-hidden=\"true\">\n <div class=\"modal-dialog\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title\" :id=\"`${id}__modal-label`\">\n {{ title }}\n </h4>\n <button type=\"button\" class=\"close btn-close\" data-bs-dismiss=\"modal\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n </button>\n </div>\n\n <div class=\"modal-body p-0\">\n <div class=\"std-form box-list m-3\">\n <div class=\"form-group\">\n <input type=\"search\" class=\"form-control\" :placeholder=\"searchText\"\n v-model=\"q\" />\n </div>\n </div>\n\n <div v-if=\"!loading\" class=\"box-list__items\">\n <TreeItem v-for=\"node of displayNodes\"\n :node\n :key=\"valueGetter(node.value)\"\n :level=\"1\"\n :branchSelectable\n />\n </div>\n <div v-else>\n <div class=\"d-flex justify-content-center\">\n <div class=\"spinner-border spinner-border-sm my-3\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n\n</style>\n","<script lang=\"ts\" setup>\nimport { cloneDeep } from 'lodash-es';\nimport { computed, provide, ref, watch } from 'vue';\nimport { forceArray } from '../../../service';\nimport {\n ValueGetter,\n ModalTreeSource,\n TitleGetter,\n TreeNode,\n SearchMatcher,\n MaybeArray,\n MaybePromise\n} from '../../../types';\nimport TreeModal from './TreeModal.vue';\n\nconst props = withDefaults(\n defineProps<{\n id?: string;\n name?: string;\n title?: string;\n disabled?: boolean;\n readonly?: boolean;\n value?: MaybeArray<string | number>;\n source?: ModalTreeSource;\n items?: MaybeArray<TreeNode> | (() => MaybePromise<MaybeArray<TreeNode>>);\n valueGetter?: ValueGetter;\n titleGetter?: TitleGetter;\n searchMatcher?: SearchMatcher;\n modalTitle?: string;\n vertical?: boolean;\n branchSelectable?: boolean;\n selectAllChildren?: boolean;\n placeholder?: string;\n multiple?: boolean;\n buttonText?: string;\n itemClass?: string;\n searchText?: string;\n }>(),\n {\n branchSelectable: false,\n selectAllChildren: false,\n placeholder: '- No selected -',\n multiple: false,\n buttonText: 'Select',\n itemClass: 'badge bg-primary badge-pill',\n searchText: 'Search',\n valueGetter: (item: any) => item.id,\n titleGetter: (item: any) => item.title,\n }\n);\n\nprovide('id', props.id);\nprovide('name', props.name);\nprovide('multiple', props.multiple);\nprovide('valueGetter', props.valueGetter);\nprovide('titleGetter', props.titleGetter);\nprovide('searchMatcher', props.searchMatcher ?? defaultSearchMatcher);\n\nfunction defaultSearchMatcher(item: any, q: string) {\n return props.titleGetter(item).toLowerCase().includes(q.toLowerCase());\n}\n\nconst selected = ref<TreeNode[]>([]);\nconst value = ref<(string|number)[]>(forceArray(props.value));\n\n// Modal\nconst treeModalOpen = ref(false);\n\nfunction openSelector() {\n treeModalOpen.value = true;\n}\n\nfunction deleteItem(i: number, node: TreeNode) {\n selected.value = selected.value.filter((it: TreeNode) => props.valueGetter(it.value) !== props.valueGetter(node.value));\n}\n\nfunction handleSelected(items: any[]) {\n selected.value = cloneDeep(items);\n}\n\nwatch(() => props.items, async (v) => {\n if (typeof v === 'function') {\n v = await v();\n }\n\n selected.value = forceArray(v).filter((node: TreeNode) => {\n return value.value.includes(props.valueGetter(node.value));\n });\n}, { immediate: true });\n\nconst selectedValues = computed(() => {\n return selected.value.map(node => props.valueGetter(node.value));\n});\n\nconst canModify = computed(() => {\n return !props.readonly && !props.disabled;\n});\n\n</script>\n\n<template>\n <div class=\"c-modal-tree\">\n <div class=\"c-modal-tree__container p-2 d-flex flex-column\"\n :class=\"[ vertical ? '' : 'flex-md-row' ]\">\n <div v-if=\"canModify\" class=\"me-2 mb-2\"\n :class=\"{ 'mb-md-0': !vertical }\">\n <div class=\"btn-group\">\n <button class=\"btn btn-secondary btn-sm btn-rounded text-nowrap\" type=\"button\"\n @click=\"openSelector\">\n {{ buttonText }}\n </button>\n <button class=\"btn btn-secondary btn-sm btn-rounded\" type=\"button\"\n @click=\"selected = []\">\n <span class=\"fa fa-times\"></span>\n </button>\n </div>\n </div>\n\n <div v-if=\"selected.length > 0\">\n <TransitionGroup name=\"fade\">\n <span v-for=\"(node, i) of selected\"\n class=\"me-2 mb-2 c-item\"\n :class=\"itemClass\"\n :key=\"valueGetter(node.value)\"\n style=\"animation-duration: .3s\">\n <span>{{ titleGetter(node.value) }}</span>\n <span type=\"button\" v-if=\"canModify\"\n @click.prevent=\"deleteItem(i, node)\" class=\"ms-2\" style=\"cursor: pointer\">\n <span class=\"fa fa-times\"></span>\n </span>\n </span>\n </TransitionGroup>\n </div>\n <div v-else class=\"text-muted\">\n {{ placeholder }}\n </div>\n </div>\n\n <select multiple\n style=\"display: none;\"\n ref=\"input\"\n :id=\"id\"\n :name=\"name\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n v-bind=\"$attrs\"\n >\n <option v-for=\"id of selectedValues\" :value=\"id\" :selected=\"true\">{{ id }}</option>\n </select>\n\n <TreeModal\n :open=\"treeModalOpen\"\n @hide=\"treeModalOpen = false\"\n :id=\"id\"\n :title=\"modalTitle\"\n :source=\"source\"\n :value=\"selectedValues\"\n :branchSelectable\n v-bind=\"$attrs\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :search-text=\"searchText\"\n @selected=\"handleSelected\"\n />\n </div>\n</template>\n\n<style scoped>\n.c-item {\n padding-left: .75rem;\n padding-right: .75rem;\n padding-top: .5rem;\n padding-bottom: .5rem;\n}\n</style>\n","import { data } from '../data';\nimport { useCssImport } from '../service';\nimport { createApp } from 'vue';\nimport ModalTreeApp from '../vue/components/ModalTree/ModalTreeApp.vue';\n\nconst app = createApp({\n name: 'modal-tree',\n components: {\n ModalTreeApp\n }\n});\napp.config.globalProperties.$getData = data;\n\nclass ModalTreeElement extends HTMLElement {\n static is = 'modal-tree';\n\n vm: any;\n\n connectedCallback() {\n if (!this.vm) {\n this.vm = app.mount(this);\n }\n }\n}\n\nasync function init() {\n customElements.define(ModalTreeElement.is, ModalTreeElement);\n await useCssImport('@vue-animate');\n}\n\nexport const ready = init();\n"],"names":["children","b","C","E","h","p","W","F","L","k","select","_hoisted_1","_createElementBlock","_normalizeClass","_createElementVNode","_normalizeStyle","_withDirectives","_openBlock","_hoisted_2","_hoisted_3","_createTextVNode","_toDisplayString","_hoisted_5","_createBlock","_Fragment","_renderList","_hoisted_4","_hoisted_6","_hoisted_7","_createVNode","_TransitionGroup","_withCtx","_withModifiers","_createCommentVNode","_mergeProps"],"mappings":";;;;AAEO,SAAS,gBAAgB,UAAsB;AACpD,QAAM,OAAmB,CAAA;AAEzB,WAAS,aAAaA,WAAsB;AAC1C,eAAW,SAASA,WAAU;AAC5B,UAAI,MAAM,SAAS,WAAW,GAAG;AAC/B,aAAK,KAAK,KAAK;AACf;AAAA,MACF;AAEA,mBAAa,MAAM,QAAQ;AAAA,IAC7B;AAAA,EACF;AAEA,eAAa,QAAQ;AACrB,SAAO;AACT;ACjBA,SAAS,EAAE,GAAG;AACZ,SAAO;AAAA,IACL,QAAQ,EAAE,MAAM;AAAA,IAChB,OAAO,EAAE,MAAM;AAAA,IACf,UAAU,EAAE,MAAM;AAAA,IAClB,YAAY,EAAE,MAAM;AAAA,IACpB,UAAU,EAAE,MAAM;AAAA,IAClB,YAAY,EAAE,MAAM;AAAA,IACpB,eAAe,EAAE,MAAM;AAAA,IACvB,gBAAgB,EAAE,MAAM;AAAA,IACxB,mBAAmB,EAAE,MAAM;AAAA,IAC3B,WAAW,EAAE,MAAM;AAAA,IACnB,cAAc,EAAE,MAAM;AAAA,EAC1B;AACA;AACA,SAAS,EAAE,GAAG,GAAG,GAAG;AAClB,QAAM,IAAIC,MAAE,CAAC,GAAG,EAAE,OAAO,EAAC,IAAK,iBAAiB,CAAC;AACjD,IAAE,MAAM,QAAQ,GAAG,EAAE,MAAM,WAAW,YAAY,EAAE,MAAM,aAAa,UAAU,EAAE,MAAM,SAAS;AAClG,QAAM,EAAE,QAAQ,MAAM,iBAAiB,CAAC;AACxC,SAAO,EAAE,MAAM,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,GAAG,EAAE,MAAM,WAAW,UAAU,EAAE,UAAU,EAAE,UAAU,IAAI,EAAE,SAAS;AAC5L;AACA,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG;AACxB,QAAM,IAAI,EAAE,QAAQ,GAAG,CAAC;AACxB,IAAE,MAAM,SAAS,EAAE,QAAQ,EAAE,WAAW,MAAM;AAC5C,MAAE,MAAM,WAAW,EAAE,UAAU,EAAC;AAAA,EAClC;AACF;AACA,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG;AACrB,QAAM,IAAIA,MAAE,CAAC;AACb,SAAO;AAAA,IACL;AAAA,MACE,QAAQ;AAAA,MACR,SAAS,EAAE;AAAA,MACX,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,WAAW;AAAA,MACX,cAAc;AAAA,IACpB;AAAA,IACI;AAAA,MACE,QAAQ;AAAA,MACR,SAAS,EAAE;AAAA,MACX,YAAY,EAAE,cAAc;AAAA,MAC5B,eAAe,EAAE,iBAAiB;AAAA,MAClC,gBAAgB,EAAE,kBAAkB;AAAA,MACpC,mBAAmB,EAAE,qBAAqB;AAAA,MAC1C,WAAW,EAAE,aAAa;AAAA,MAC1B,cAAc,EAAE,gBAAgB;AAAA,IACtC;AAAA,EACA;AACA;AACA,MAAM,IAAIC,gCAAE;AAAA,EACV,OAAO;AAAA,IACL,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACf;AAAA;AAAA;AAAA;AAAA,IAII,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACf;AAAA;AAAA;AAAA;AAAA,IAII,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACf;AAAA;AAAA;AAAA;AAAA,IAII,qBAAqB;AAAA,MACnB,MAAM;AAAA,MACN,SAAS;AAAA,IACf;AAAA;AAAA;AAAA;AAAA,IAII,qBAAqB;AAAA,MACnB,MAAM;AAAA,MACN,SAAS;AAAA,IACf;AAAA;AAAA;AAAA;AAAA,IAII,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACf;AAAA;AAAA;AAAA;AAAA,IAII,eAAe;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,IACf;AAAA;AAAA;AAAA;AAAA,IAII,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACf;AAAA;AAAA;AAAA;AAAA,IAII,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACf;AAAA,EACA;AAAA,EACE,OAAO,CAAC,qBAAqB,cAAc,YAAY,eAAe,WAAW;AAAA,EACjF,MAAM,GAAG,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,KAAK;AACxC,UAAM,IAAIC,IAAE,KAAK,GAAG,IAAIC,SAAE,MAAM,EAAE,uBAAuB,EAAE,cAAc,GAAG,IAAIA,SAAE,MAAM,EAAE,uBAAuB,EAAE,cAAc;AACjI,aAAS,EAAE,GAAG,GAAG;AACf,YAAM,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,UAAU,QAAQ,EAAE,MAAK;AACrG,QAAE,GAAG,GAAG,MAAM;AACZ,UAAC,GAAI,EAAE,UAAU;AAAA,MACnB,GAAG,GAAG,CAAC;AAAA,IACT;AACA,aAAS,EAAE,GAAG,GAAG;AACf,YAAM,IAAI,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,QAAQ,MAAM,iBAAiB,CAAC;AACzD,QAAE,MAAM,SAAS,GAAG,EAAE,MAAM,WAAW;AACvC,YAAM,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,QAAO,GAAI,IAAI,EAAE,UAAU,EAAE,UAAU,QAAQ,EAAE,MAAK;AAC9E,QAAE,GAAG,GAAG,MAAM;AACZ,UAAC,GAAI,EAAE,WAAW;AAAA,MACpB,GAAG,GAAG,CAAC;AAAA,IACT;AACA,WAAO,MAAMC;AAAAA,MACXC;AAAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,WAAW,EAAE;AAAA,QACb,eAAe,MAAM,EAAE,YAAY;AAAA,QACnC,SAAS;AAAA,QACT,eAAe,MAAM,EAAE,aAAa;AAAA,QACpC,SAAS;AAAA,MACjB;AAAA,MACM;AAAA,QACE,SAAS,MAAM,EAAE,cAAc,EAAE,QAAQC;AAAAA,UACvCF;AAAAA,YACE,EAAE;AAAA,YACFG,WAAE,GAAG;AAAA,cACH,OAAO;AAAA,YACrB,CAAa;AAAA,YACD;AAAA,UACZ;AAAA,UACU,CAAC,EAAE,QAAQ,CAACC,OAAG,EAAE,eAAe,IAAE,IAAI,CAAC,IAAI,CAAC;AAAA,QACtD,IAAY;AAAA,MACZ;AAAA,IACA;AAAA,EACE;AACF,CAAC;;;;;;;;;;ACtJD,UAAM,QAAQ;AAYd,UAAM,OAAO;AAKb,UAAM,OAAO,IAAc,MAAM,IAAI;AAErC,UAAM,iBAAiB,OAAyC,gBAAgB;AAChF,UAAM,KAAK,OAAO,IAAI;AACtB,UAAM,WAAW,OAAO,UAAU;AAClC,UAAM,cAAc,OAAoB,aAAa;AACrD,UAAM,cAAc,OAAoB,aAAa;AAErD,UAAM,WAAW,IAAI,KAAK;AAC1B,UAAM,gBAAgB,SAAS,MAAM,CAAC,CAAC,MAAM,KAAK,aAAa;AAC/D,UAAM,YAAY,IAAI,KAAK;AAC3B,UAAM,OAAO,IAAI,KAAK;AACtB,UAAM,qBAAqB,IAAgD,EAAE;AAE7E,UAAM,MAAM,MAAM,MAAM,MAAM;AAC5B,eAAS,QAAQ,CAAC,CAAC,MAAM,KAAK;AAAA,IAChC,GAAG,EAAE,MAAM,MAAM;AAEjB,aAAS,qBAAqB,OAAiD;AAC7E,yBAAmB,MAAM,KAAK,KAAK;AAAA,IACrC;AAEA,mBAAe,MAAM;AACnB,yBAAmB,QAAQ,CAAA;AAAA,IAC7B,CAAC;AAED,UAAM,WAAW,SAAS,MAAM;AAC9B,cAAQ,MAAM,QAAQ,KAAK;AAAA,IAC7B,CAAC;AAED,UAAM,WAAW,SAAS,MAAM;AAC9B,aAAO,MAAM,KAAK,SAAS,SAAS;AAAA,IACtC,CAAC;AAED,UAAM,SAAS,SAAS,MAAM;AAC5B,aAAO,CAAC,SAAS;AAAA,IACnB,CAAC;AAED,aAAS,iBAAiB;AACxB,UAAI,SAAS,OAAO;AAClB;AAAA,MACF;AAEA,WAAK,MAAM,WAAW,eAAe,MAAM,SAAS,YAAY,MAAM,KAAK,KAAK,CAAC;AAAA,IACnF;AAEA,aAAS,OAAOC,SAAiB;AAC/B,UAAI,SAAS,UAAUA,SAAQ;AAC7B;AAAA,MACF;AAEA,WAAK,MAAM,WAAWA;AAEtB,sBAAgBA,OAAM;AAAA,IACxB;AAEA,aAAS,gBAAgB,GAAY;AACnC,UAAI,SAAS,OAAO;AAClB,aAAK,MAAM,WAAW;AAEtB,YAAI,UAAU;AACZ,wBAAc,MAAM;AAClB,kBAAM,eAAe,gBAAgB,KAAK,MAAM,QAAQ;AACxD,uBAAW,SAAS,cAAc;AAChC,oBAAM,WAAW;AACjB,oBAAM,gBAAgB;AAAA,YACxB;AAAA,UACF,CAAC;AAAA,QAEH;AAAA,MACF,OAAO;AACL,iBAAS,MAAM;AACb,eAAK,MAAM,WAAW;AAAA,QACxB,CAAC;AAAA,MACH;AACA,WAAK,UAAU,CAAC;AAChB,WAAK,SAAS,CAAC;AAAA,IACjB;AAEA,aAAS,aAAa,GAAY;AAChC,UAAI,OAAO,SAAS,UAAU,OAAO;AACnC;AAAA,MACF;AACA,UAAI,CAAC,mBAAmB,OAAO;AAC7B;AAAA,MACF;AACA,UAAI,mBAAmB,MAAM,WAAW,GAAG;AACzC;AAAA,MACF;AACA,yBAAA;AAAA,IACF;AAEA,aAAS,qBAAqB;AAC5B,UAAI,OAAO,OAAO;AAChB;AAAA,MACF;AACA,UAAI,gBAAgB;AACpB,UAAI,gBAAgB;AACpB,UAAI,qBAAqB;AACzB,YAAM,mBAAmB,cAAc;AACvC,YAAM,cAAc,SAAS;AAE7B,iBAAW,SAAS,gBAAgB,MAAM,KAAK,QAAQ,GAAG;AACxD,YAAI,MAAM,UAAU;AAClB;AAAA,QACF,OAAO;AACL;AAAA,QACF;AAEA,YAAI,MAAM,eAAe;AACvB;AAAA,QACF;AAAA,MACF;AAaA,UAAK,kBAAkB,KAAK,kBAAkB,KAAM,qBAAqB,GAAG;AAC1E,aAAK,MAAM,gBAAgB;AAAA,MAC7B,OAAO;AACL,aAAK,MAAM,WAAW,kBAAkB;AACxC,aAAK,MAAM,gBAAgB;AAAA,MAC7B;AAEA,UACE,SAAS,UAAU,eAChB,cAAc,UAAU,kBAC3B;AACA,aAAK,UAAU,SAAS,KAAK;AAC7B,aAAK,SAAS,SAAS,KAAK;AAAA,MAC9B;AAAA,IACF;AAEA,aAAS,cAAc,UAAqB;AAC1C,gBAAU,QAAQ;AAClB,eAAA;AACA,gBAAU,QAAQ;AAAA,IACpB;AAEA,UAAM,MAAM,gBAAgB,YAAY;AACtC,UAAI,CAAC,SAAS,OAAO;AACnB,uBAAA;AAAA,MACF;AACA,YAAM,SAAA;AAEN,yBAAA;AAAA,IACF,GAAG,EAAE,MAAM,MAAM;AAEjB,UAAM,UAAU,CAAC,MAAM;AAAA,IACvB,CAAC;AAED,mBAAA;AAEA,cAAU,MAAM;AACd,yBAAA;AAAA,IACF,CAAC;AAED,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;;;;;;;;;;;;;;;AASU,MAAAC,eAAA,EAAA,OAAM,WAAA;;;;;;EA2Ba,OAAM;;;sBAhClCC,mBAqDM,OAAA;AAAA,IArDD,OAAKC,eAAA,CAAC,eAAa,CACZ,OAAA,WAAQ,wBAAA,mBAAA,CAAA,CAAA;AAAA,EAAA,GAAA;AAAA,IAClBC,mBAkCM,OAAA;AAAA,MAlCD,OAAKD,eAAA,CAAC,6BAA2B,CAE1B,OAAA,WAAQ,cAAA,EAAA,CAAA,CAAA;AAAA,MADjB,OAAKE,iCAAoB,OAAA,WAAQ,KAAA,CAAA;AAAA,IAAA,GAAA;AAAA,MAElCD,mBAiBM,OAjBNH,cAiBM;AAAA,QAbI,OAAA,UAAW,OAAA,oBAAoB,OAAA,WAAAK,gBAAAC,UAAA,GAHvCL,mBAUE,SAAA;AAAA,UAAA,KAAA;AAAA,UATC,MAAM,OAAA,WAAQ,aAAA;AAAA,UACf,OAAM;AAAA,UAEL,IAAI,OAAA,KAAE,YAAe,OAAA,YAAY,YAAK,KAAK;AAAA,UAAA,uBAAA,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WACnC,OAAA,WAAQ;AAAA,UAChB,OAAO;AAAA,UACP,mBAAiB;AAAA,UACjB,eAAoB,OAAA;AAAA,UACpB,UAAM,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,OAAA,gBAAiB,OAAO,OAA4B,OAAO;AAAA,QAAA,GAAA,MAAA,IAAAM,YAAA,IAAA;AAAA,0BAJ3D,OAAA,QAAQ;AAAA,QAAA,CAAA,KAAAD,UAAA,GAMnBL,mBAIiE,SAAA;AAAA,UAAA,KAAA;AAAA,UAH9D,MAAM,OAAA,WAAQ,aAAA;AAAA,UACf,OAAM;AAAA,UACN,UAAA;AAAA,UACC,SAAS,OAAA;AAAA,UAAgB,eAAoB,OAAA;AAAA,QAAA,GAAA,MAAA,GAAAO,YAAA;AAAA;MAElDL,mBAYI,KAAA;AAAA,QAZD,OAAM;AAAA,QACP,OAAA,EAAA,UAAA,UAAA;AAAA,QACC,cAAY,OAAA;AAAA,QACb,kBAAe;AAAA,QACd,SAAK,oDAAU,OAAA,SAAS,OAAA,OAAM,CAAE,OAAA,QAAQ,IAAI,OAAA,OAAI,CAAI,OAAA,MAAI,CAAA,SAAA,CAAA;AAAA,MAAA,GAAA;AAAA,QACzDA,mBAA0E,QAAA;AAAA,UAApE,OAAKD,eAAA,CAAC,WAAS,CAAW,OAAA,SAAM,WAAA,WAAA,CAAA,CAAA;AAAA,QAAA,GAAA,MAAA,CAAA;AAAA,QAAoCO,gBAAA,MAE1EC,gBAAG,OAAA,KAAK,MAAM,KAAK,IAAG,KAEtB,CAAA;AAAA,QAAY,OAAA,YAAAJ,UAAA,GAAZL,mBAEO,QAFPU,cAEO;AAAA,UADLR,mBAA2E,QAAA;AAAA,YAApE,OAAKD,gBAAI,OAAA,OAAI,qBAAA,oBAAA,CAAA;AAAA,UAAA,GAAA,MAAA,CAAA;AAAA;;;IAMlB,OAAA,KAAK,SAAS,SAAM,KAAAI,UAAA,GAD5BM,YAckB,OAAA,iBAAA,GAAA;AAAA,MAAA,KAAA;AAAA,MAZP,YAAA,OAAA;AAAA,MAAA,uBAAA,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAA,OAAA,OAAI;AAAA,MACZ,UAAU;AAAA,MACX,OAAM;AAAA,IAAA,GAAA;AAAA,uBAEI,MAAmC;AAAA,SAAAN,UAAA,IAAA,GAA7CL,mBAOEY,UAAA,MAAAC,WAP6B,OAAA,KAAK,UAAQ,CAA1B,OAAO,MAAC;8BAA1BF,YAOE,OAAA,UAAA,GAAA;AAAA,YANC,MAAM;AAAA,YACN,KAAK,OAAA,YAAY,MAAM,KAAK;AAAA,YAC5B,OAAO,OAAA,QAAK;AAAA,YACZ,qBAAmB,OAAA;AAAA,YAAA,SAAA;AAAA,YACnB,KAAK,OAAA;AAAA,YACL,UAAQ,OAAA;AAAA,UAAA,GAAA,MAAA,GAAA,CAAA,QAAA,SAAA,mBAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;AC9OjB,UAAM,QAAQ;AAmBd,UAAM,QAAQ;AASd,UAAM,cAAc,OAAoB,aAAa;AACrD,UAAM,cAAc,OAAoB,aAAa;AACrD,UAAM,gBAAgB,OAAsB,eAAe;AAE3D,UAAM,UAAU,IAAI,KAAK;AACzB,UAAM,WAAW,OAAgB,YAAY,KAAK;AAClD,UAAM,eAAe,eAA+B,OAAO;AAE3D,QAAI;AAEJ,cAAU,MAAM;AACd,eAAS,MAAM,oBAAoB,aAAa,KAAM;AACtD,mBAAa,MAAO,iBAAiB,iBAAiB,MAAM;AAC5D,mBAAa,MAAO,iBAAiB,iBAAiB,MAAM;AAAA,IAC9D,CAAC;AAED,gBAAY,MAAM;AAChB,mBAAa,MAAO,oBAAoB,iBAAiB,MAAM;AAC/D,mBAAa,MAAO,oBAAoB,iBAAiB,MAAM;AAAA,IACjE,CAAC;AAGD,UAAM,QAAQ,IAAgB,EAAE;AAChC,UAAM,gBAAgB,IAAgB,EAAE;AAExC,UAAM,eAAe,SAAS,MAAM;AAClC,UAAI,cAAc,OAAO;AACvB,eAAO,cAAc;AAAA,MACvB;AACA,aAAO,MAAM;AAAA,IACf,CAAC;AAED,UAAM,YAAY,SAAS,MAAM,gBAAgB,MAAM,KAAK,CAAC;AAE7D,UAAM,iBAAiB,SAAS,MAAM;AACpC,aAAO,UAAU,MAAM,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,IAAI,CAAC,SAAS,YAAY,KAAK,KAAK,CAAC;AAAA,IAC9F,CAAC;AAED,YAAQ,kBAAkB,cAAc;AAExC,UAAM,MAAM,gBAAgB,MAAM;AAChC,YAAM,UAAU,eAAe,KAAK;AACpC,YAAM,SAAS,eAAe,KAAK;AACnC,YAAM,YAAY,cAAc,KAAK;AAAA,IACvC,CAAC;AAsBD,UAAM,YAAY,SAAS,MAAM;AAC/B,aAAO,CAAC,MAAM,YAAY,CAAC,MAAM;AAAA,IACnC,CAAC;AAGD,UAAM,IAAI,IAAI,EAAE;AAChB,UAAM,gBAAgB,SAAS,MAAM,EAAE,UAAU,EAAE;AAEnD,UAAM,gBAAgB,SAAS,MAAM;AACnC,UAAI,EAAE,UAAU,IAAI;AAClB,eAAO,CAAA;AAAA,MACT;AAEA,aAAO,UAAU,MAAM,OAAO,CAAC,SAAmB;AAChD,eAAO,cAAc,KAAK,OAAO,EAAE,KAAK;AAAA,MAC1C,CAAC;AAAA,IACH,CAAC;AAED,mBAAe,YAAY;AACzB,cAAQ,QAAQ;AAChB,YAAM,OAAO,MAAM,cAAA;AACnB,UAAI;AACF,YAAI,MAAM,MAAM;AAEhB,YAAI,OAAO,QAAQ,UAAU;AAC3B,gBAAM,MAAM,MAAM,KAAK,IAAI,GAAG;AAC9B,gBAAM,QAAQ,IAAI,KAAK;AAAA,QACzB,WAAW,OAAO,QAAQ,YAAY;AACpC,gBAAM,QAAQ,MAAM,IAAA;AAAA,QACtB,OAAO;AACL,cAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACvB,kBAAM,IAAI;AAAA,UACZ;AAEA,gBAAM,QAAQ;AAAA,QAChB;AAAA,MACF,UAAA;AACE,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AAGA,UAAM,MAAM,MAAM,MAAM,CAAC,MAAM;AAC7B,UAAI,GAAG;AACL,eAAO,KAAA;AAAA,MACT,OAAO;AACL,eAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAC;AAED,mBAAe,SAAS;AACtB,YAAM,UAAA;AACN,iCAAA;AAAA,IACF;AAEA,aAAS,SAAS;AAChB,YAAM,QAAQ,CAAA;AACd,QAAE,QAAQ;AACV,YAAM,MAAM;AAAA,IACd;AAEA,aAAS,6BAA6B;AACpC,YAAM,SAAS,WAAW,MAAM,KAAK;AAErC,oBAAc,QAAQ,UAAU,MAC7B,OAAO,CAAC,SAAmB;AAC1B,eAAO,OAAO,SAAS,YAAY,KAAK,KAAK,CAAC;AAAA,MAChD,CAAC;AAAA,IACL;AAEA;AAAA,MACE,MAAM,MAAM;AAAA,MACZ,MAAM,2BAAA;AAAA,MACN,EAAE,WAAW,MAAM,MAAM,KAAA;AAAA,IAAK;;;;;;;;;;;;EAQvB,OAAM;AAAA,EAAe,MAAK;;AACxB,MAAAJ,eAAA,EAAA,OAAM,gBAAA;AACJ,MAAAO,eAAA,EAAA,OAAM,eAAA;;AASN,MAAAC,eAAA,EAAA,OAAM,iBAAA;AACJ,MAAAC,eAAA,EAAA,OAAM,wBAAA;AACJ,MAAA,aAAA,EAAA,OAAM,aAAA;;;;EAMQ,OAAM;;;;sBArBnChB,mBAqCM,OAAA;AAAA,IArCD,KAAI;AAAA,IAAQ,OAAM;AAAA,IAAc,IAAE,GAAK,OAAA,EAAE;AAAA,IAAW,UAAS;AAAA,IAAK,MAAK;AAAA,IAAS,mBAAgB;AAAA,IACnG,eAAY;AAAA,EAAA,GAAA;AAAA,IACZE,mBAkCM,OAlCNI,cAkCM;AAAA,MAjCJJ,mBAgCM,OAhCNK,cAgCM;AAAA,QA/BJL,mBAOM,OAPNY,cAOM;AAAA,UANJZ,mBAEK,MAAA;AAAA,YAFD,OAAM;AAAA,YAAe,IAAE,GAAK,OAAA,EAAE;AAAA,UAAA,GAAAO,gBAC7B,OAAA,KAAK,GAAA,GAAAC,YAAA;AAAA,UAAA,OAAA,CAAA,MAAA,OAAA,CAAA,IAEVR,mBAES,UAAA;AAAA,YAFD,MAAK;AAAA,YAAS,OAAM;AAAA,YAAkB,mBAAgB;AAAA,YAAQ,gBAAa;AAAA,YAAQ,cAAW;AAAA,UAAA,GAAA;AAAA,YACpGA,mBAA+D,QAAA;AAAA,cAAzD,eAAY;AAAA,cAAO,OAAM;AAAA,YAAA,GAAkB,GAAO;AAAA,UAAA,GAAA,EAAA;AAAA;QAI5DA,mBAqBM,OArBNa,cAqBM;AAAA,UApBJb,mBAKM,OALNc,cAKM;AAAA,YAJJd,mBAGM,OAHN,YAGM;AAAA,cAAAE,eAFJF,mBACgB,SAAA;AAAA,gBADT,MAAK;AAAA,gBAAS,OAAM;AAAA,gBAAgB,aAAa,OAAA;AAAA,gBAAA,uBAAA,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAC7C,OAAA,IAAC;AAAA,cAAA,GAAA,MAAA,GAAA,UAAA,GAAA;AAAA,6BAAD,OAAA,CAAC;AAAA,cAAA,CAAA;AAAA;;WAIJ,OAAA,WAAAG,UAAA,GAAZL,mBAOM,OAPN,aAOM;AAAA,aAAAK,UAAA,IAAA,GANJL,mBAKEY,UAAA,MAAAC,WALuB,OAAA,cAAY,CAApB,SAAI;kCAArBF,YAKE,OAAA,UAAA,GAAA;AAAA,gBAJC;AAAA,gBACA,KAAK,OAAA,YAAY,KAAK,KAAK;AAAA,gBAC3B,OAAO;AAAA,gBACP,kBAAA,OAAA;AAAA,cAAA,GAAA,MAAA,GAAA,CAAA,QAAA,kBAAA,CAAA;AAAA;8BAGLX,mBAIM,OAAA,aAAA,CAAA,GAAA,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA;AAAA,YAHJE,mBAEM,OAAA,EAFD,OAAM,gCAAA,GAA+B;AAAA,cACxCA,mBAAyD,OAAA,EAApD,OAAM,wCAAA,CAAuC;AAAA,YAAA,GAAA,EAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtMhE,UAAM,QAAQ;AAoCd,YAAQ,MAAM,MAAM,EAAE;AACtB,YAAQ,QAAQ,MAAM,IAAI;AAC1B,YAAQ,YAAY,MAAM,QAAQ;AAClC,YAAQ,eAAe,MAAM,WAAW;AACxC,YAAQ,eAAe,MAAM,WAAW;AACxC,YAAQ,iBAAiB,MAAM,iBAAiB,oBAAoB;AAEpE,aAAS,qBAAqB,MAAW,GAAW;AAClD,aAAO,MAAM,YAAY,IAAI,EAAE,cAAc,SAAS,EAAE,aAAa;AAAA,IACvE;AAEA,UAAM,WAAW,IAAgB,EAAE;AACnC,UAAM,QAAQ,IAAuB,WAAW,MAAM,KAAK,CAAC;AAG5D,UAAM,gBAAgB,IAAI,KAAK;AAE/B,aAAS,eAAe;AACtB,oBAAc,QAAQ;AAAA,IACxB;AAEA,aAAS,WAAW,GAAW,MAAgB;AAC7C,eAAS,QAAQ,SAAS,MAAM,OAAO,CAAC,OAAiB,MAAM,YAAY,GAAG,KAAK,MAAM,MAAM,YAAY,KAAK,KAAK,CAAC;AAAA,IACxH;AAEA,aAAS,eAAe,OAAc;AACpC,eAAS,QAAQ,UAAU,KAAK;AAAA,IAClC;AAEA,UAAM,MAAM,MAAM,OAAO,OAAO,MAAM;AACpC,UAAI,OAAO,MAAM,YAAY;AAC3B,YAAI,MAAM,EAAA;AAAA,MACZ;AAEA,eAAS,QAAQ,WAAW,CAAC,EAAE,OAAO,CAAC,SAAmB;AACxD,eAAO,MAAM,MAAM,SAAS,MAAM,YAAY,KAAK,KAAK,CAAC;AAAA,MAC3D,CAAC;AAAA,IACH,GAAG,EAAE,WAAW,MAAM;AAEtB,UAAM,iBAAiB,SAAS,MAAM;AACpC,aAAO,SAAS,MAAM,IAAI,CAAA,SAAQ,MAAM,YAAY,KAAK,KAAK,CAAC;AAAA,IACjE,CAAC;AAED,UAAM,YAAY,SAAS,MAAM;AAC/B,aAAO,CAAC,MAAM,YAAY,CAAC,MAAM;AAAA,IACnC,CAAC;;;;;;AAKM,MAAA,aAAA,EAAA,OAAM,eAAA;AAKA,MAAA,aAAA,EAAA,OAAM,YAAA;;;;;EA2BD,OAAM;;;;;AAhCtB,SAAAG,UAAA,GAAAL,mBA+DM,OA/DN,YA+DM;AAAA,IA9DJE,mBAkCM,OAAA;AAAA,MAlCD,OAAKD,eAAA,CAAC,kDAAgD,CAC/C,OAAA,WAAQ,KAAA,aAAA,CAAA,CAAA;AAAA,IAAA,GAAA;AAAA,MACP,OAAA,aAAAI,aAAXL,mBAYM,OAAA;AAAA,QAAA,KAAA;AAAA,QAZgB,OAAKC,eAAA,CAAC,aAAW,EAAA,WAAA,CACf,OAAA,UAAQ,CAAA;AAAA,MAAA,GAAA;AAAA,QAC9BC,mBASM,OATN,YASM;AAAA,UARJA,mBAGS,UAAA;AAAA,YAHD,OAAM;AAAA,YAAmD,MAAK;AAAA,YACnE,SAAO,OAAA;AAAA,UAAA,GAAAO,gBACL,OAAA,UAAU,GAAA,CAAA;AAAA,UAEfP,mBAGS,UAAA;AAAA,YAHD,OAAM;AAAA,YAAuC,MAAK;AAAA,YACvD,SAAK,sCAAE,OAAA,WAAQ,CAAA;AAAA,UAAA,GAAA,CAAA,GAAA,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA;AAAA,YAChBA,mBAAiC,QAAA,EAA3B,OAAM,cAAA,GAAa,MAAA,EAAA;AAAA,UAAA,EAAA,CAAA;AAAA;;MAKpB,OAAA,SAAS,SAAM,kBAA1BF,mBAcM,OAAA,YAAA;AAAA,QAbJiB,YAYkBC,iBAAA,EAZD,MAAK,OAAA,GAAM;AAAA,UAAA,SAAAC,QACpB,MAA6B;AAAA,aAAAd,UAAA,IAAA,GAAnCL,mBAUOY,UAAA,MAAAC,WAVmB,OAAA,UAAQ,CAApB,MAAM,MAAC;kCAArBb,mBAUO,QAAA;AAAA,gBATL,OAAKC,eAAA,CAAC,oBACE,OAAA,SAAS,CAAA;AAAA,gBAChB,KAAK,OAAA,YAAY,KAAK,KAAK;AAAA,gBAC5B,OAAA,EAAA,sBAAA,MAAA;AAAA,cAAA,GAAA;AAAA,gBACAC,mBAA0C,QAAA,MAAAO,gBAAjC,OAAA,YAAY,KAAK,KAAK,CAAA,GAAA,CAAA;AAAA,gBACL,iCAA1BT,mBAGO,QAAA;AAAA,kBAAA,KAAA;AAAA,kBAHD,MAAK;AAAA,kBACR,SAAKoB,cAAA,CAAA,WAAU,OAAA,WAAW,GAAG,IAAI,GAAA,CAAA,SAAA,CAAA;AAAA,kBAAG,OAAM;AAAA,kBAAO,OAAA,EAAA,UAAA,UAAA;AAAA,gBAAA,GAAA,CAAA,GAAA,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA;AAAA,kBAClDlB,mBAAiC,QAAA,EAA3B,OAAM,cAAA,GAAa,MAAA,EAAA;AAAA,gBAAA,EAAA,GAAA,GAAA,UAAA,KAAAmB,mBAAA,IAAA,IAAA;AAAA;;;;;0BAKjCrB,mBAEM,OAFN,YAEMS,gBADD,OAAA,WAAW,GAAA,CAAA;AAAA,IAAA,GAAA,CAAA;AAAA,IAIlBP,mBAUS,UAVToB,WAUS;AAAA,MAVD,UAAA;AAAA,MACN,OAAA,EAAA,WAAA,OAAA;AAAA,MACA,KAAI;AAAA,MACH,IAAI,OAAA;AAAA,MACJ,MAAM,OAAA;AAAA,MACN,UAAU,OAAA;AAAA,MACV,UAAU,OAAA;AAAA,IAAA,GACH,KAAA,MAAM,GAAA;AAAA,OAAAjB,UAAA,IAAA,GAEdL,mBAAmFY,UAAA,MAAAC,WAA9D,OAAA,gBAAc,CAApB,OAAE;4BAAjBb,mBAAmF,UAAA;AAAA,UAA7C,OAAO;AAAA,UAAK,UAAU;AAAA,QAAA,GAAAS,gBAAS,EAAE,GAAA,GAAA,UAAA;AAAA,MAAA,CAAA,GAAA,GAAA;AAAA;IAGzEQ,YAaE,qBAbFK,WAaE;AAAA,MAZC,MAAM,OAAA;AAAA,MACN,QAAI,sCAAE,OAAA,gBAAa;AAAA,MACnB,IAAI,OAAA;AAAA,MACJ,OAAO,OAAA;AAAA,MACP,QAAQ,OAAA;AAAA,MACR,OAAO,OAAA;AAAA,MACP,kBAAA,OAAA;AAAA,IAAA,GACO,KAAA,QAAM;AAAA,MACb,UAAU,OAAA;AAAA,MACV,UAAU,OAAA;AAAA,MACV,eAAa,OAAA;AAAA,MACb,YAAU,OAAA;AAAA,IAAA,CAAA,GAAA,MAAA,IAAA,CAAA,QAAA,MAAA,SAAA,UAAA,SAAA,oBAAA,YAAA,YAAA,aAAA,CAAA;AAAA;;;AC7JjB,MAAM,MAAM,0BAAU;AAAA,EACpB,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,EAAA;AAEJ,CAAC;AACD,IAAI,OAAO,iBAAiB,WAAW;AAEvC,MAAM,yBAAyB,YAAY;AAAA,EACzC,OAAO,KAAK;AAAA,EAEZ;AAAA,EAEA,oBAAoB;AAClB,QAAI,CAAC,KAAK,IAAI;AACZ,WAAK,KAAK,IAAI,MAAM,IAAI;AAAA,IAC1B;AAAA,EACF;AACF;AAEA,eAAe,OAAO;AACpB,iBAAe,OAAO,iBAAiB,IAAI,gBAAgB;AAC3D,QAAM,aAAa,cAAc;AACnC;AAEO,MAAM,QAAQ,qBAAA;","x_google_ignoreList":[1]}