@windwalker-io/unicorn-next 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/.editorconfig +18 -0
  2. package/.gulp.json +7 -0
  3. package/bin/release.mjs +47 -0
  4. package/dist/chunks/_arrayPush.js +168 -0
  5. package/dist/chunks/_arrayPush.js.map +1 -0
  6. package/dist/chunks/_baseRest.js +73 -0
  7. package/dist/chunks/_baseRest.js.map +1 -0
  8. package/dist/chunks/_commonjsHelpers.js +7 -0
  9. package/dist/chunks/_commonjsHelpers.js.map +1 -0
  10. package/dist/chunks/_getPrototype.js +130 -0
  11. package/dist/chunks/_getPrototype.js.map +1 -0
  12. package/dist/chunks/button-radio.js +147 -0
  13. package/dist/chunks/button-radio.js.map +1 -0
  14. package/dist/chunks/checkboxes-multi-select.js +44 -0
  15. package/dist/chunks/checkboxes-multi-select.js.map +1 -0
  16. package/dist/chunks/cloneDeep.js +287 -0
  17. package/dist/chunks/cloneDeep.js.map +1 -0
  18. package/dist/chunks/cropper.min.js +5 -0
  19. package/dist/chunks/cropper.min.js.map +1 -0
  20. package/dist/chunks/field-cascade-select.js +256 -0
  21. package/dist/chunks/field-cascade-select.js.map +1 -0
  22. package/dist/chunks/field-file-drag.js +218 -0
  23. package/dist/chunks/field-file-drag.js.map +1 -0
  24. package/dist/chunks/field-flatpickr.js +893 -0
  25. package/dist/chunks/field-flatpickr.js.map +1 -0
  26. package/dist/chunks/field-modal-select.js +403 -0
  27. package/dist/chunks/field-modal-select.js.map +1 -0
  28. package/dist/chunks/field-modal-tree.js +790 -0
  29. package/dist/chunks/field-modal-tree.js.map +1 -0
  30. package/dist/chunks/field-multi-uploader.js +256 -0
  31. package/dist/chunks/field-multi-uploader.js.map +1 -0
  32. package/dist/chunks/field-repeatable.js +132 -0
  33. package/dist/chunks/field-repeatable.js.map +1 -0
  34. package/dist/chunks/field-single-image-drag.js +338 -0
  35. package/dist/chunks/field-single-image-drag.js.map +1 -0
  36. package/dist/chunks/form.js +154 -0
  37. package/dist/chunks/form.js.map +1 -0
  38. package/dist/chunks/grid.js +345 -0
  39. package/dist/chunks/grid.js.map +1 -0
  40. package/dist/chunks/http-client.js +229 -0
  41. package/dist/chunks/http-client.js.map +1 -0
  42. package/dist/chunks/iframe-modal.js +124 -0
  43. package/dist/chunks/iframe-modal.js.map +1 -0
  44. package/dist/chunks/index.js +309 -0
  45. package/dist/chunks/index.js.map +1 -0
  46. package/dist/chunks/isArguments.js +146 -0
  47. package/dist/chunks/isArguments.js.map +1 -0
  48. package/dist/chunks/keep-tab.js +101 -0
  49. package/dist/chunks/keep-tab.js.map +1 -0
  50. package/dist/chunks/legacy.js +210 -0
  51. package/dist/chunks/legacy.js.map +1 -0
  52. package/dist/chunks/list-dependent.js +231 -0
  53. package/dist/chunks/list-dependent.js.map +1 -0
  54. package/dist/chunks/s3-multipart-uploader.js +172 -0
  55. package/dist/chunks/s3-multipart-uploader.js.map +1 -0
  56. package/dist/chunks/s3-uploader.js +136 -0
  57. package/dist/chunks/s3-uploader.js.map +1 -0
  58. package/dist/chunks/show-on.js +237 -0
  59. package/dist/chunks/show-on.js.map +1 -0
  60. package/dist/chunks/tinymce.js +196 -0
  61. package/dist/chunks/tinymce.js.map +1 -0
  62. package/dist/chunks/ui-bootstrap5.js +71 -0
  63. package/dist/chunks/ui-bootstrap5.js.map +1 -0
  64. package/dist/chunks/unicorn.js +2202 -0
  65. package/dist/chunks/unicorn.js.map +1 -0
  66. package/dist/chunks/validation.js +854 -0
  67. package/dist/chunks/validation.js.map +1 -0
  68. package/dist/editor.css +1 -0
  69. package/dist/index.d.ts +1427 -0
  70. package/dist/multi-level-menu.css +1 -0
  71. package/dist/switcher.css +1 -0
  72. package/dist/unicorn-next.css +12 -0
  73. package/dist/unicorn.js +125 -0
  74. package/dist/unicorn.js.map +1 -0
  75. package/fusionfile.mjs +155 -0
  76. package/images/ajax-loader.gif +0 -0
  77. package/images/placeholder/avatar.png +0 -0
  78. package/images/placeholder/image-16x10.png +0 -0
  79. package/images/placeholder/image-16x9.png +0 -0
  80. package/images/placeholder/image-1x1.png +0 -0
  81. package/images/placeholder/image-4x3.png +0 -0
  82. package/package.json +102 -0
  83. package/scss/bootstrap/multi-level-menu.scss +121 -0
  84. package/scss/editor.scss +116 -0
  85. package/scss/field/file-drag.scss +102 -0
  86. package/scss/field/single-image-drag.scss +88 -0
  87. package/scss/field/vue-drag-uploader.scss +160 -0
  88. package/scss/switcher.scss +156 -0
  89. package/src/app.ts +128 -0
  90. package/src/bootstrap/button-radio.ts +208 -0
  91. package/src/bootstrap/keep-tab.ts +155 -0
  92. package/src/composable/index.ts +21 -0
  93. package/src/composable/useCheckboxesMultiSelect.ts +22 -0
  94. package/src/composable/useFieldCascadeSelect.ts +9 -0
  95. package/src/composable/useFieldFileDrag.ts +9 -0
  96. package/src/composable/useFieldFlatpickr.ts +3 -0
  97. package/src/composable/useFieldModalSelect.ts +6 -0
  98. package/src/composable/useFieldModalTree.ts +3 -0
  99. package/src/composable/useFieldMultiUploader.ts +3 -0
  100. package/src/composable/useFieldRepeatable.ts +9 -0
  101. package/src/composable/useFieldSingleImageDrag.ts +5 -0
  102. package/src/composable/useForm.ts +43 -0
  103. package/src/composable/useGrid.ts +57 -0
  104. package/src/composable/useHttp.ts +8 -0
  105. package/src/composable/useIframeModal.ts +9 -0
  106. package/src/composable/useListDependent.ts +26 -0
  107. package/src/composable/useQueue.ts +13 -0
  108. package/src/composable/useS3Uploader.ts +32 -0
  109. package/src/composable/useShowOn.ts +9 -0
  110. package/src/composable/useStack.ts +13 -0
  111. package/src/composable/useTinymce.ts +29 -0
  112. package/src/composable/useTomSelect.ts +72 -0
  113. package/src/composable/useUIBootstrap5.ts +48 -0
  114. package/src/composable/useUniDirective.ts +32 -0
  115. package/src/composable/useValidation.ts +39 -0
  116. package/src/data.ts +36 -0
  117. package/src/events.ts +73 -0
  118. package/src/legacy/legacy.ts +186 -0
  119. package/src/legacy/loader.ts +125 -0
  120. package/src/module/checkboxes-multi-select.ts +54 -0
  121. package/src/module/field-cascade-select.ts +292 -0
  122. package/src/module/field-file-drag.ts +292 -0
  123. package/src/module/field-flatpickr.ts +127 -0
  124. package/src/module/field-modal-select.ts +174 -0
  125. package/src/module/field-modal-tree.ts +27 -0
  126. package/src/module/field-multi-uploader.ts +361 -0
  127. package/src/module/field-repeatable.ts +202 -0
  128. package/src/module/field-single-image-drag.ts +468 -0
  129. package/src/module/form.ts +223 -0
  130. package/src/module/grid.ts +465 -0
  131. package/src/module/http-client.ts +243 -0
  132. package/src/module/iframe-modal.ts +167 -0
  133. package/src/module/list-dependent.ts +321 -0
  134. package/src/module/s3-multipart-uploader.ts +300 -0
  135. package/src/module/s3-uploader.ts +234 -0
  136. package/src/module/show-on.ts +173 -0
  137. package/src/module/tinymce.ts +263 -0
  138. package/src/module/ui-bootstrap5.ts +107 -0
  139. package/src/module/validation.ts +1019 -0
  140. package/src/plugin/index.ts +1 -0
  141. package/src/plugin/php-adapter.ts +65 -0
  142. package/src/polyfill/form-request-submit.ts +31 -0
  143. package/src/polyfill/index.ts +9 -0
  144. package/src/service/animate.ts +58 -0
  145. package/src/service/crypto.ts +27 -0
  146. package/src/service/dom-watcher.ts +62 -0
  147. package/src/service/dom.ts +265 -0
  148. package/src/service/helper.ts +48 -0
  149. package/src/service/index.ts +10 -0
  150. package/src/service/lang.ts +122 -0
  151. package/src/service/loader.ts +152 -0
  152. package/src/service/router.ts +118 -0
  153. package/src/service/ui.ts +497 -0
  154. package/src/service/uri.ts +106 -0
  155. package/src/types/base.ts +9 -0
  156. package/src/types/index.ts +4 -0
  157. package/src/types/modal-tree.ts +12 -0
  158. package/src/types/plugin.ts +6 -0
  159. package/src/types/shims.d.ts +18 -0
  160. package/src/types/ui.ts +6 -0
  161. package/src/unicorn.ts +63 -0
  162. package/src/utilities/arr.ts +25 -0
  163. package/src/utilities/base.ts +9 -0
  164. package/src/utilities/data.ts +48 -0
  165. package/src/utilities/index.ts +5 -0
  166. package/src/utilities/tree.ts +20 -0
  167. package/src/vue/components/ModalTree/ModalTreeApp.vue +175 -0
  168. package/src/vue/components/ModalTree/TreeItem.vue +262 -0
  169. package/src/vue/components/ModalTree/TreeModal.vue +225 -0
  170. package/tests/test.js +4 -0
  171. package/tsconfig.js.json +25 -0
  172. package/tsconfig.json +17 -0
  173. package/vite.assets.config.ts +61 -0
  174. package/vite.config.test.ts +36 -0
  175. package/vite.config.ts +112 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-flatpickr.js","sources":["../../src/module/field-flatpickr.ts"],"sourcesContent":["import { useCssImport, useImport, injectCssToDocument } from '../service';\r\nimport flatpickr from 'flatpickr';\r\nimport css from 'flatpickr/dist/flatpickr.css?inline';\r\n\r\ninjectCssToDocument(css);\r\n\r\nclass FlatpickrElement extends HTMLElement {\r\n static get is() {\r\n return 'uni-flatpickr';\r\n }\r\n\r\n instance!: flatpickr.Instance;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n get selector() {\r\n return this.getAttribute('selector') || 'input';\r\n }\r\n\r\n get locale() {\r\n return this.getAttribute('locale') || '';\r\n }\r\n\r\n // todo: Currently not support single option attributes\r\n getOptions() {\r\n const options: any = {};\r\n const ignore = [\r\n 'selector'\r\n ];\r\n\r\n this.getAttributeNames().forEach((name) => {\r\n if (ignore.indexOf(name) !== -1) {\r\n return;\r\n }\r\n\r\n options[name] = this.getAttribute(name);\r\n });\r\n\r\n return options;\r\n }\r\n\r\n get $input(): HTMLInputElement {\r\n return this.querySelector<HTMLInputElement>('input')!;\r\n }\r\n\r\n async connectedCallback() {\r\n let options: flatpickr.Options.Options = JSON.parse(this.getAttribute('options') || '{}') || {};\r\n\r\n options.autoFillDefaultTime = true;\r\n const now = new Date();\r\n options.defaultHour = now.getHours();\r\n options.defaultMinute = now.getMinutes();\r\n options.defaultSeconds = now.getSeconds();\r\n\r\n options = await this.handleOptions(options);\r\n\r\n this.instance = flatpickr(\r\n this.querySelector<HTMLElement>(this.selector)!,\r\n options\r\n );\r\n\r\n // If no value, set default time on open\r\n this.instance.config.onOpen.push(() => {\r\n if (this.instance.input.value === '') {\r\n const now = new Date();\r\n this.instance.jumpToDate(now);\r\n this.instance.config.defaultHour = now.getHours();\r\n this.instance.config.defaultMinute = now.getMinutes();\r\n this.instance.config.defaultSeconds = now.getSeconds();\r\n }\r\n });\r\n\r\n this.querySelector('[data-toggle]')?.addEventListener('click', () => {\r\n setTimeout(() => {\r\n this.querySelector<HTMLInputElement>('[data-input]')?.focus();\r\n }, 0);\r\n });\r\n }\r\n\r\n async handleOptions(options: flatpickr.Options.Options): Promise<flatpickr.Options.Options> {\r\n options.plugins = options.plugins || [];\r\n\r\n await Promise.all([\r\n this.handleLocale(options),\r\n this.handleMonthSelect(options)\r\n ]);\r\n\r\n return options;\r\n }\r\n\r\n private async handleLocale(options: Record<string, any>) {\r\n if (this.locale) {\r\n await useImport(`flatpickr/dist/l10n/${this.locale}.js`);\r\n\r\n options.locale = this.locale.replace(/-/, '_');\r\n }\r\n\r\n return options;\r\n }\r\n\r\n private async handleMonthSelect(options: Record<string, any>) {\r\n if (options.monthSelect) {\r\n useCssImport('flatpickr/dist/plugins/monthSelect/style.css');\r\n const { default: monthSelect } = await import('flatpickr/dist/plugins/monthSelect');\r\n\r\n if (typeof options.monthSelect === 'boolean') {\r\n options.monthSelect = {\r\n shorthand: true,\r\n dateFormat: 'Y-m',\r\n altFormat: 'Y-m'\r\n };\r\n }\r\n\r\n options.plugins.push(monthSelect(options.monthSelect));\r\n }\r\n\r\n return options;\r\n }\r\n\r\n getInstance() {\r\n return this.instance;\r\n }\r\n}\r\n\r\ncustomElements.define(FlatpickrElement.is, FlatpickrElement);\r\n"],"names":["now"],"mappings":"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"}
@@ -0,0 +1,403 @@
1
+ import { v as selectOne, U as highlight, _ as __, aa as data, B as html, P as slideUp } from "./unicorn.js";
2
+ import { b as baseAssignValue, a as assignValue, i as isIndex, c as isPrototype, d as arrayLikeKeys, g as getPrototype, k as keys } from "./_getPrototype.js";
3
+ import { b as baseRest, a as apply } from "./_baseRest.js";
4
+ import { i as isObjectLike, b as baseGetTag, a as isArray, S as Symbol$1, c as isObject, d as isArrayLike, e as eq } from "./isArguments.js";
5
+ var symbolTag = "[object Symbol]";
6
+ function isSymbol(value) {
7
+ return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag;
8
+ }
9
+ function arrayMap(array, iteratee) {
10
+ var index = -1, length = array == null ? 0 : array.length, result = Array(length);
11
+ while (++index < length) {
12
+ result[index] = iteratee(array[index], index, array);
13
+ }
14
+ return result;
15
+ }
16
+ var symbolProto = Symbol$1 ? /* @__PURE__ */ (() => Symbol$1.prototype)() : void 0, symbolToString = symbolProto ? /* @__PURE__ */ (() => symbolProto.toString)() : void 0;
17
+ function baseToString(value) {
18
+ if (typeof value == "string") {
19
+ return value;
20
+ }
21
+ if (isArray(value)) {
22
+ return arrayMap(value, baseToString) + "";
23
+ }
24
+ if (isSymbol(value)) {
25
+ return symbolToString ? symbolToString.call(value) : "";
26
+ }
27
+ var result = value + "";
28
+ return result == "0" && 1 / value == -Infinity ? "-0" : result;
29
+ }
30
+ function copyObject(source, props, object, customizer) {
31
+ var isNew = !object;
32
+ object || (object = {});
33
+ var index = -1, length = props.length;
34
+ while (++index < length) {
35
+ var key = props[index];
36
+ var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;
37
+ if (newValue === void 0) {
38
+ newValue = source[key];
39
+ }
40
+ if (isNew) {
41
+ baseAssignValue(object, key, newValue);
42
+ } else {
43
+ assignValue(object, key, newValue);
44
+ }
45
+ }
46
+ return object;
47
+ }
48
+ function isIterateeCall(value, index, object) {
49
+ if (!isObject(object)) {
50
+ return false;
51
+ }
52
+ var type = typeof index;
53
+ if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) {
54
+ return eq(object[index], value);
55
+ }
56
+ return false;
57
+ }
58
+ function createAssigner(assigner) {
59
+ return baseRest(function(object, sources) {
60
+ var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;
61
+ customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0;
62
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
63
+ customizer = length < 3 ? void 0 : customizer;
64
+ length = 1;
65
+ }
66
+ object = Object(object);
67
+ while (++index < length) {
68
+ var source = sources[index];
69
+ if (source) {
70
+ assigner(object, source, index, customizer);
71
+ }
72
+ }
73
+ return object;
74
+ });
75
+ }
76
+ function nativeKeysIn(object) {
77
+ var result = [];
78
+ if (object != null) {
79
+ for (var key in Object(object)) {
80
+ result.push(key);
81
+ }
82
+ }
83
+ return result;
84
+ }
85
+ var objectProto$3 = /* @__PURE__ */ (() => Object.prototype)();
86
+ var hasOwnProperty$3 = /* @__PURE__ */ (() => objectProto$3.hasOwnProperty)();
87
+ function baseKeysIn(object) {
88
+ if (!isObject(object)) {
89
+ return nativeKeysIn(object);
90
+ }
91
+ var isProto = isPrototype(object), result = [];
92
+ for (var key in object) {
93
+ if (!(key == "constructor" && (isProto || !hasOwnProperty$3.call(object, key)))) {
94
+ result.push(key);
95
+ }
96
+ }
97
+ return result;
98
+ }
99
+ function keysIn(object) {
100
+ return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
101
+ }
102
+ var assignInWith = /* @__PURE__ */ createAssigner(function(object, source, srcIndex, customizer) {
103
+ copyObject(source, keysIn(source), object, customizer);
104
+ });
105
+ function toString(value) {
106
+ return value == null ? "" : baseToString(value);
107
+ }
108
+ var objectTag = "[object Object]";
109
+ var funcProto = /* @__PURE__ */ (() => Function.prototype)(), objectProto$2 = /* @__PURE__ */ (() => Object.prototype)();
110
+ var funcToString = /* @__PURE__ */ (() => funcProto.toString)();
111
+ var hasOwnProperty$2 = /* @__PURE__ */ (() => objectProto$2.hasOwnProperty)();
112
+ var objectCtorString = /* @__PURE__ */ funcToString.call(Object);
113
+ function isPlainObject(value) {
114
+ if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
115
+ return false;
116
+ }
117
+ var proto = getPrototype(value);
118
+ if (proto === null) {
119
+ return true;
120
+ }
121
+ var Ctor = hasOwnProperty$2.call(proto, "constructor") && proto.constructor;
122
+ return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
123
+ }
124
+ var domExcTag = "[object DOMException]", errorTag = "[object Error]";
125
+ function isError(value) {
126
+ if (!isObjectLike(value)) {
127
+ return false;
128
+ }
129
+ var tag = baseGetTag(value);
130
+ return tag == errorTag || tag == domExcTag || typeof value.message == "string" && typeof value.name == "string" && !isPlainObject(value);
131
+ }
132
+ var attempt = /* @__PURE__ */ baseRest(function(func, args) {
133
+ try {
134
+ return apply(func, void 0, args);
135
+ } catch (e) {
136
+ return isError(e) ? e : new Error(e);
137
+ }
138
+ });
139
+ function basePropertyOf(object) {
140
+ return function(key) {
141
+ return object == null ? void 0 : object[key];
142
+ };
143
+ }
144
+ var htmlEscapes = {
145
+ "&": "&amp;",
146
+ "<": "&lt;",
147
+ ">": "&gt;",
148
+ '"': "&quot;",
149
+ "'": "&#39;"
150
+ };
151
+ var escapeHtmlChar = /* @__PURE__ */ basePropertyOf(htmlEscapes);
152
+ var reUnescapedHtml = /[&<>"']/g, reHasUnescapedHtml = /* @__PURE__ */ RegExp(/* @__PURE__ */ (() => reUnescapedHtml.source)());
153
+ function escape(string) {
154
+ string = toString(string);
155
+ return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string;
156
+ }
157
+ function baseValues(object, props) {
158
+ return arrayMap(props, function(key) {
159
+ return object[key];
160
+ });
161
+ }
162
+ var objectProto$1 = /* @__PURE__ */ (() => Object.prototype)();
163
+ var hasOwnProperty$1 = /* @__PURE__ */ (() => objectProto$1.hasOwnProperty)();
164
+ function customDefaultsAssignIn(objValue, srcValue, key, object) {
165
+ if (objValue === void 0 || eq(objValue, objectProto$1[key]) && !hasOwnProperty$1.call(object, key)) {
166
+ return srcValue;
167
+ }
168
+ return objValue;
169
+ }
170
+ var stringEscapes = {
171
+ "\\": "\\",
172
+ "'": "'",
173
+ "\n": "n",
174
+ "\r": "r",
175
+ "\u2028": "u2028",
176
+ "\u2029": "u2029"
177
+ };
178
+ function escapeStringChar(chr) {
179
+ return "\\" + stringEscapes[chr];
180
+ }
181
+ var reInterpolate = /<%=([\s\S]+?)%>/g;
182
+ var reEscape = /<%-([\s\S]+?)%>/g;
183
+ var reEvaluate = /<%([\s\S]+?)%>/g;
184
+ var templateSettings = {
185
+ /**
186
+ * Used to detect `data` property values to be HTML-escaped.
187
+ *
188
+ * @memberOf _.templateSettings
189
+ * @type {RegExp}
190
+ */
191
+ "escape": reEscape,
192
+ /**
193
+ * Used to detect code to be evaluated.
194
+ *
195
+ * @memberOf _.templateSettings
196
+ * @type {RegExp}
197
+ */
198
+ "evaluate": reEvaluate,
199
+ /**
200
+ * Used to detect `data` property values to inject.
201
+ *
202
+ * @memberOf _.templateSettings
203
+ * @type {RegExp}
204
+ */
205
+ "interpolate": reInterpolate,
206
+ /**
207
+ * Used to reference the data object in the template text.
208
+ *
209
+ * @memberOf _.templateSettings
210
+ * @type {string}
211
+ */
212
+ "variable": "",
213
+ /**
214
+ * Used to import variables into the compiled template.
215
+ *
216
+ * @memberOf _.templateSettings
217
+ * @type {Object}
218
+ */
219
+ "imports": {
220
+ /**
221
+ * A reference to the `lodash` function.
222
+ *
223
+ * @memberOf _.templateSettings.imports
224
+ * @type {Function}
225
+ */
226
+ "_": { "escape": escape }
227
+ }
228
+ };
229
+ var INVALID_TEMPL_VAR_ERROR_TEXT = "Invalid `variable` option passed into `_.template`";
230
+ var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
231
+ var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
232
+ var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
233
+ var reNoMatch = /($^)/;
234
+ var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
235
+ var objectProto = /* @__PURE__ */ (() => Object.prototype)();
236
+ var hasOwnProperty = /* @__PURE__ */ (() => objectProto.hasOwnProperty)();
237
+ function template(string, options, guard) {
238
+ var settings = templateSettings.imports._.templateSettings || templateSettings;
239
+ string = toString(string);
240
+ options = assignInWith({}, options, settings, customDefaultsAssignIn);
241
+ var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), importsKeys = keys(imports), importsValues = baseValues(imports, importsKeys);
242
+ var isEscaping, isEvaluating, index = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '";
243
+ var reDelimiters = RegExp(
244
+ (options.escape || reNoMatch).source + "|" + interpolate.source + "|" + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + "|" + (options.evaluate || reNoMatch).source + "|$",
245
+ "g"
246
+ );
247
+ var sourceURL = hasOwnProperty.call(options, "sourceURL") ? "//# sourceURL=" + (options.sourceURL + "").replace(/\s/g, " ") + "\n" : "";
248
+ string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
249
+ interpolateValue || (interpolateValue = esTemplateValue);
250
+ source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
251
+ if (escapeValue) {
252
+ isEscaping = true;
253
+ source += "' +\n__e(" + escapeValue + ") +\n'";
254
+ }
255
+ if (evaluateValue) {
256
+ isEvaluating = true;
257
+ source += "';\n" + evaluateValue + ";\n__p += '";
258
+ }
259
+ if (interpolateValue) {
260
+ source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
261
+ }
262
+ index = offset + match.length;
263
+ return match;
264
+ });
265
+ source += "';\n";
266
+ var variable = hasOwnProperty.call(options, "variable") && options.variable;
267
+ if (!variable) {
268
+ source = "with (obj) {\n" + source + "\n}\n";
269
+ } else if (reForbiddenIdentifierChars.test(variable)) {
270
+ throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);
271
+ }
272
+ source = (isEvaluating ? source.replace(reEmptyStringLeading, "") : source).replace(reEmptyStringMiddle, "$1").replace(reEmptyStringTrailing, "$1;");
273
+ source = "function(" + (variable || "obj") + ") {\n" + (variable ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (isEscaping ? ", __e = _.escape" : "") + (isEvaluating ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + source + "return __p\n}";
274
+ var result = attempt(function() {
275
+ return Function(importsKeys, sourceURL + "return " + source).apply(void 0, importsValues);
276
+ });
277
+ result.source = source;
278
+ if (isError(result)) {
279
+ throw result;
280
+ }
281
+ return result;
282
+ }
283
+ function createCallback(type, selector, modalSelector) {
284
+ switch (type) {
285
+ // case 'tag':
286
+ // return () => {
287
+ //
288
+ // };
289
+ case "list":
290
+ return (item) => {
291
+ const modalList = document.querySelector(selector);
292
+ if (!modalList.querySelector(`[data-value="${item.value}"]`)) {
293
+ modalList.appendItem(item, true);
294
+ selectOne(modalSelector)?.close();
295
+ } else {
296
+ alert(__("unicorn.field.modal.already.selected"));
297
+ }
298
+ };
299
+ case "single":
300
+ default:
301
+ return (item) => {
302
+ const element = document.querySelector(selector);
303
+ const image = element.querySelector("[data-role=image]");
304
+ const title = element.querySelector("[data-role=title]");
305
+ const store = element.querySelector("[data-role=value]");
306
+ if (image && item.image) {
307
+ image.style.backgroundImage = `url(${item.image});`;
308
+ }
309
+ title.value = item.title || "";
310
+ store.value = item.value || "";
311
+ store.dispatchEvent(new CustomEvent("change"));
312
+ selectOne(modalSelector)?.close();
313
+ highlight(title);
314
+ };
315
+ }
316
+ }
317
+ class ModalListSelectElement extends HTMLElement {
318
+ static is = "uni-modal-list";
319
+ itemTemplate;
320
+ options;
321
+ get listContainer() {
322
+ return this.querySelector("[data-role=list-container]");
323
+ }
324
+ get modal() {
325
+ return document.querySelector(this.options.modalSelector);
326
+ }
327
+ get items() {
328
+ return Array.from(this.listContainer.children);
329
+ }
330
+ connectedCallback() {
331
+ this.options = JSON.parse(this.getAttribute("options") || "{}");
332
+ this.itemTemplate = template(document.querySelector(this.options.itemTemplate).innerHTML);
333
+ const emptyInput = this.querySelector("[data-role=empty]");
334
+ if (emptyInput) {
335
+ emptyInput.name = emptyInput.dataset.name || "";
336
+ }
337
+ if (this.options.sortable) {
338
+ import("sortablejs").then(({ default: Sortable }) => {
339
+ new Sortable(this.listContainer, { handle: ".h-drag-handle", animation: 150 });
340
+ });
341
+ }
342
+ const selectButton = this.querySelector("[data-role=select]");
343
+ selectButton.addEventListener("click", (e) => {
344
+ this.open(e);
345
+ });
346
+ this.querySelector("[data-role=clear]")?.addEventListener("click", () => {
347
+ this.items.forEach((item) => {
348
+ item.querySelector("[data-role=remove]")?.click();
349
+ });
350
+ });
351
+ selectButton.style.pointerEvents = "";
352
+ this.render();
353
+ }
354
+ render() {
355
+ const items = data("unicorn.modal-field")[this.options.dataKey] || [];
356
+ items.forEach((item) => {
357
+ this.appendItem(item);
358
+ });
359
+ }
360
+ appendItem(item, highlights = false) {
361
+ const itemHtml = html(this.itemTemplate({ item }));
362
+ itemHtml.dataset.value = item.value;
363
+ itemHtml.querySelector("[data-role=remove]")?.addEventListener("click", () => {
364
+ slideUp(itemHtml).then(() => {
365
+ itemHtml.remove();
366
+ this.toggleRequired();
367
+ });
368
+ });
369
+ this.listContainer.appendChild(itemHtml);
370
+ this.toggleRequired();
371
+ if (highlights) {
372
+ highlight(itemHtml);
373
+ }
374
+ }
375
+ toggleRequired() {
376
+ const placeholder = this.querySelector("[data-role=validation-placeholder]");
377
+ if (placeholder) {
378
+ placeholder.disabled = this.listContainer.children.length !== 0;
379
+ }
380
+ }
381
+ open(event) {
382
+ event.preventDefault();
383
+ event.stopPropagation();
384
+ const max = this.options.max;
385
+ const target = event.target;
386
+ if (!max) {
387
+ this.modal?.open(target.href, { size: "modal-xl" });
388
+ return;
389
+ }
390
+ if (this.listContainer.children.length >= max) {
391
+ alert(
392
+ __("unicorn.field.modal.max.selected", max)
393
+ );
394
+ return;
395
+ }
396
+ this.modal?.open(target.href, { size: "modal-xl" });
397
+ }
398
+ }
399
+ /* @__PURE__ */ customElements.define(/* @__PURE__ */ (() => ModalListSelectElement.is)(), ModalListSelectElement);
400
+ export {
401
+ createCallback
402
+ };
403
+ //# sourceMappingURL=field-modal-select.js.map
@@ -0,0 +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\ncustomElements.define(ModalListSelectElement.is, ModalListSelectElement);\r\n\r\nexport interface ModalSelectModule {\r\n createCallback: typeof createCallback;\r\n}\r\n"],"names":["Symbol","objectProto","hasOwnProperty"],"mappings":";;;;AAIA,IAAI,YAAY;AAmBhB,SAAS,SAAS,OAAO;AACvB,SAAO,OAAO,SAAS,YACpB,aAAa,KAAK,KAAK,WAAW,KAAK,KAAK;AACjD;ACjBA,SAAS,SAAS,OAAO,UAAU;AACjC,MAAI,QAAQ,IACR,SAAS,SAAS,OAAO,IAAI,MAAM,QACnC,SAAS,MAAM,MAAM;AAEzB,SAAO,EAAE,QAAQ,QAAQ;AACvB,WAAO,KAAK,IAAI,SAAS,MAAM,KAAK,GAAG,OAAO,KAAK;AAAA,EACrD;AACA,SAAO;AACT;ACTA,IAAI,cAAcA,WAAM,uBAAGA,SAAO,WAAA,IAAY,QAC1C,iBAAiB,cAAW,uBAAG,YAAY,UAAA,IAAW;AAU1D,SAAS,aAAa,OAAO;AAE3B,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO;AAAA,EACT;AACA,MAAI,QAAQ,KAAK,GAAG;AAElB,WAAO,SAAS,OAAO,YAAY,IAAI;AAAA,EACzC;AACA,MAAI,SAAS,KAAK,GAAG;AACnB,WAAO,iBAAiB,eAAe,KAAK,KAAK,IAAI;AAAA,EACvD;AACA,MAAI,SAAU,QAAQ;AACtB,SAAQ,UAAU,OAAQ,IAAI,SAAU,YAAa,OAAO;AAC9D;ACrBA,SAAS,WAAW,QAAQ,OAAO,QAAQ,YAAY;AACrD,MAAI,QAAQ,CAAC;AACb,aAAW,SAAS;AAEpB,MAAI,QAAQ,IACR,SAAS,MAAM;AAEnB,SAAO,EAAE,QAAQ,QAAQ;AACvB,QAAI,MAAM,MAAM,KAAK;AAErB,QAAI,WAAW,aACX,WAAW,OAAO,GAAG,GAAG,OAAO,GAAG,GAAG,KAAK,QAAQ,MAAM,IACxD;AAEJ,QAAI,aAAa,QAAW;AAC1B,iBAAW,OAAO,GAAG;AAAA,IACvB;AACA,QAAI,OAAO;AACT,sBAAgB,QAAQ,KAAK,QAAQ;AAAA,IACvC,OAAO;AACL,kBAAY,QAAQ,KAAK,QAAQ;AAAA,IACnC;AAAA,EACF;AACA,SAAO;AACT;ACtBA,SAAS,eAAe,OAAO,OAAO,QAAQ;AAC5C,MAAI,CAAC,SAAS,MAAM,GAAG;AACrB,WAAO;AAAA,EACT;AACA,MAAI,OAAO,OAAO;AAClB,MAAI,QAAQ,WACH,YAAY,MAAM,KAAK,QAAQ,OAAO,OAAO,MAAM,IACnD,QAAQ,YAAY,SAAS,QAChC;AACJ,WAAO,GAAG,OAAO,KAAK,GAAG,KAAK;AAAA,EAChC;AACA,SAAO;AACT;ACjBA,SAAS,eAAe,UAAU;AAChC,SAAO,SAAS,SAAS,QAAQ,SAAS;AACxC,QAAI,QAAQ,IACR,SAAS,QAAQ,QACjB,aAAa,SAAS,IAAI,QAAQ,SAAS,CAAC,IAAI,QAChD,QAAQ,SAAS,IAAI,QAAQ,CAAC,IAAI;AAEtC,iBAAc,SAAS,SAAS,KAAK,OAAO,cAAc,cACrD,UAAU,cACX;AAEJ,QAAI,SAAS,eAAe,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,KAAK,GAAG;AAC1D,mBAAa,SAAS,IAAI,SAAY;AACtC,eAAS;AAAA,IACX;AACA,aAAS,OAAO,MAAM;AACtB,WAAO,EAAE,QAAQ,QAAQ;AACvB,UAAI,SAAS,QAAQ,KAAK;AAC1B,UAAI,QAAQ;AACV,iBAAS,QAAQ,QAAQ,OAAO,UAAU;AAAA,MAC5C;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AACH;ACzBA,SAAS,aAAa,QAAQ;AAC5B,MAAI,SAAS,CAAA;AACb,MAAI,UAAU,MAAM;AAClB,aAAS,OAAO,OAAO,MAAM,GAAG;AAC9B,aAAO,KAAK,GAAG;AAAA,IACjB;AAAA,EACF;AACA,SAAO;AACT;ACZA,IAAIC,gBAAW,uBAAG,OAAO,WAAA;AAGzB,IAAIC,mBAAc,uBAAGD,cAAY,gBAAA;AASjC,SAAS,WAAW,QAAQ;AAC1B,MAAI,CAAC,SAAS,MAAM,GAAG;AACrB,WAAO,aAAa,MAAM;AAAA,EAC5B;AACA,MAAI,UAAU,YAAY,MAAM,GAC5B,SAAS,CAAA;AAEb,WAAS,OAAO,QAAQ;AACtB,QAAI,EAAE,OAAO,kBAAkB,WAAW,CAACC,iBAAe,KAAK,QAAQ,GAAG,KAAK;AAC7E,aAAO,KAAK,GAAG;AAAA,IACjB;AAAA,EACF;AACA,SAAO;AACT;ACHA,SAAS,OAAO,QAAQ;AACtB,SAAO,YAAY,MAAM,IAAI,cAAc,QAAQ,IAAI,IAAI,WAAW,MAAM;AAC9E;ACIA,IAAI,eAAe,+BAAe,SAAS,QAAQ,QAAQ,UAAU,YAAY;AAC/E,aAAW,QAAQ,OAAO,MAAM,GAAG,QAAQ,UAAU;AACvD,CAAC;ACZD,SAAS,SAAS,OAAO;AACvB,SAAO,SAAS,OAAO,KAAK,aAAa,KAAK;AAChD;ACpBA,IAAI,YAAY;AAGhB,IAAI,YAAS,uBAAG,SAAS,WAAA,GACrBD,gBAAW,uBAAG,OAAO,WAAA;AAGzB,IAAI,eAAY,uBAAG,UAAU,UAAA;AAG7B,IAAIC,mBAAc,uBAAGD,cAAY,gBAAA;AAGjC,IAAI,mBAAmB,6BAAa,KAAK,MAAM;AA8B/C,SAAS,cAAc,OAAO;AAC5B,MAAI,CAAC,aAAa,KAAK,KAAK,WAAW,KAAK,KAAK,WAAW;AAC1D,WAAO;AAAA,EACT;AACA,MAAI,QAAQ,aAAa,KAAK;AAC9B,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AACA,MAAI,OAAOC,iBAAe,KAAK,OAAO,aAAa,KAAK,MAAM;AAC9D,SAAO,OAAO,QAAQ,cAAc,gBAAgB,QAClD,aAAa,KAAK,IAAI,KAAK;AAC/B;ACtDA,IAAI,YAAY,yBACZ,WAAW;AAoBf,SAAS,QAAQ,OAAO;AACtB,MAAI,CAAC,aAAa,KAAK,GAAG;AACxB,WAAO;AAAA,EACT;AACA,MAAI,MAAM,WAAW,KAAK;AAC1B,SAAO,OAAO,YAAY,OAAO,aAC9B,OAAO,MAAM,WAAW,YAAY,OAAO,MAAM,QAAQ,YAAY,CAAC,cAAc,KAAK;AAC9F;ACPA,IAAI,UAAU,yBAAS,SAAS,MAAM,MAAM;AAC1C,MAAI;AACF,WAAO,MAAM,MAAM,QAAW,IAAI;AAAA,EACpC,SAAS,GAAG;AACV,WAAO,QAAQ,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC;AAAA,EACrC;AACF,CAAC;ACzBD,SAAS,eAAe,QAAQ;AAC9B,SAAO,SAAS,KAAK;AACnB,WAAO,UAAU,OAAO,SAAY,OAAO,GAAG;AAAA,EAChD;AACF;ACRA,IAAI,cAAc;AAAA,EAChB,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AASA,IAAI,iBAAiB,+BAAe,WAAW;ACd/C,IAAI,kBAAkB,YAClB,qBAAqB,uBAAM,uBAAC,gBAAgB,SAAM;AA8BtD,SAAS,OAAO,QAAQ;AACtB,WAAS,SAAS,MAAM;AACxB,SAAQ,UAAU,mBAAmB,KAAK,MAAM,IAC5C,OAAO,QAAQ,iBAAiB,cAAc,IAC9C;AACN;AC5BA,SAAS,WAAW,QAAQ,OAAO;AACjC,SAAO,SAAS,OAAO,SAAS,KAAK;AACnC,WAAO,OAAO,GAAG;AAAA,EACnB,CAAC;AACH;ACbA,IAAID,gBAAW,uBAAG,OAAO,WAAA;AAGzB,IAAIC,mBAAc,uBAAGD,cAAY,gBAAA;AAcjC,SAAS,uBAAuB,UAAU,UAAU,KAAK,QAAQ;AAC/D,MAAI,aAAa,UACZ,GAAG,UAAUA,cAAY,GAAG,CAAC,KAAK,CAACC,iBAAe,KAAK,QAAQ,GAAG,GAAI;AACzE,WAAO;AAAA,EACT;AACA,SAAO;AACT;ACzBA,IAAI,gBAAgB;AAAA,EAClB,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AACZ;AASA,SAAS,iBAAiB,KAAK;AAC7B,SAAO,OAAO,cAAc,GAAG;AACjC;AClBA,IAAI,gBAAgB;ACApB,IAAI,WAAW;ACAf,IAAI,aAAa;ACajB,IAAI,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQrB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQV,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQZ,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQf,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQZ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQT,KAAK,EAAE,UAAU,OAAM;AAAA,EAC3B;AACA;ACnDA,IAAI,+BAA+B;AAGnC,IAAI,uBAAuB,kBACvB,sBAAsB,sBACtB,wBAAwB;AAY5B,IAAI,6BAA6B;AAMjC,IAAI,eAAe;AAGnB,IAAI,YAAY;AAGhB,IAAI,oBAAoB;AAGxB,IAAI,cAAW,uBAAG,OAAO,WAAA;AAGzB,IAAI,wCAAiB,YAAY,gBAAA;AA0GjC,SAAS,SAAS,QAAQ,SAAS,OAAO;AAIxC,MAAI,WAAW,iBAAiB,QAAQ,EAAE,oBAAoB;AAK9D,WAAS,SAAS,MAAM;AACxB,YAAU,aAAa,CAAA,GAAI,SAAS,UAAU,sBAAsB;AAEpE,MAAI,UAAU,aAAa,IAAI,QAAQ,SAAS,SAAS,SAAS,sBAAsB,GACpF,cAAc,KAAK,OAAO,GAC1B,gBAAgB,WAAW,SAAS,WAAW;AAEnD,MAAI,YACA,cACA,QAAQ,GACR,cAAc,QAAQ,eAAe,WACrC,SAAS;AAGb,MAAI,eAAe;AAAA,KAChB,QAAQ,UAAU,WAAW,SAAS,MACvC,YAAY,SAAS,OACpB,gBAAgB,gBAAgB,eAAe,WAAW,SAAS,OACnE,QAAQ,YAAY,WAAW,SAAS;AAAA,IACzC;AAAA,EAAG;AAML,MAAI,YAAY,eAAe,KAAK,SAAS,WAAW,IACnD,oBACC,QAAQ,YAAY,IAAI,QAAQ,OAAO,GAAG,IAC3C,OACD;AAEJ,SAAO,QAAQ,cAAc,SAAS,OAAO,aAAa,kBAAkB,iBAAiB,eAAe,QAAQ;AAClH,yBAAqB,mBAAmB;AAGxC,cAAU,OAAO,MAAM,OAAO,MAAM,EAAE,QAAQ,mBAAmB,gBAAgB;AAGjF,QAAI,aAAa;AACf,mBAAa;AACb,gBAAU,cAAc,cAAc;AAAA,IACxC;AACA,QAAI,eAAe;AACjB,qBAAe;AACf,gBAAU,SAAS,gBAAgB;AAAA,IACrC;AACA,QAAI,kBAAkB;AACpB,gBAAU,mBAAmB,mBAAmB;AAAA,IAClD;AACA,YAAQ,SAAS,MAAM;AAIvB,WAAO;AAAA,EACT,CAAC;AAED,YAAU;AAIV,MAAI,WAAW,eAAe,KAAK,SAAS,UAAU,KAAK,QAAQ;AACnE,MAAI,CAAC,UAAU;AACb,aAAS,mBAAmB,SAAS;AAAA,EACvC,WAGS,2BAA2B,KAAK,QAAQ,GAAG;AAClD,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAC9C;AAGA,YAAU,eAAe,OAAO,QAAQ,sBAAsB,EAAE,IAAI,QACjE,QAAQ,qBAAqB,IAAI,EACjC,QAAQ,uBAAuB,KAAK;AAGvC,WAAS,eAAe,YAAY,SAAS,WAC1C,WACG,KACA,0BAEJ,uBACC,aACI,qBACA,OAEJ,eACG,yFAEA,SAEJ,SACA;AAEF,MAAI,SAAS,QAAQ,WAAW;AAC9B,WAAO,SAAS,aAAa,YAAY,YAAY,MAAM,EACxD,MAAM,QAAW,aAAa;AAAA,EACnC,CAAC;AAID,SAAO,SAAS;AAChB,MAAI,QAAQ,MAAM,GAAG;AACnB,UAAM;AAAA,EACR;AACA,SAAO;AACT;ACtQO,SAAS,eAAe,MAAyB,UAAkB,eAA4C;AACpH,UAAQ,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKN,KAAK;AACH,aAAO,CAAC,SAAc;AACpB,cAAM,YAAY,SAAS,cAAc,QAAQ;AAEjD,YAAI,CAAC,UAAU,cAAc,gBAAgB,KAAK,KAAK,IAAI,GAAG;AAC5D,oBAAU,WAAW,MAAM,IAAI;AAE/B,oBAA8B,aAAa,GAAG,MAAA;AAAA,QAChD,OAAO;AACL,gBAAM,GAAG,sCAAsC,CAAC;AAAA,QAClD;AAAA,MACF;AAAA,IAEF,KAAK;AAAA,IACL;AACE,aAAO,CAAC,SAAS;AACf,cAAM,UAAU,SAAS,cAA8B,QAAQ;AAE/D,cAAM,QAAQ,QAAQ,cAA8B,mBAAmB;AACvE,cAAM,QAAQ,QAAQ,cAAgC,mBAAmB;AACzE,cAAM,QAAQ,QAAQ,cAAgC,mBAAmB;AAEzE,YAAI,SAAS,KAAK,OAAO;AACvB,gBAAM,MAAM,kBAAkB,OAAO,KAAK,KAAK;AAAA,QACjD;AAEA,cAAM,QAAQ,KAAK,SAAS;AAC5B,cAAM,QAAQ,KAAK,SAAS;AAE5B,cAAM,cAAc,IAAI,YAAY,QAAQ,CAAC;AAE7C,kBAA8B,aAAa,GAAG,MAAA;AAE9C,kBAAU,KAAK;AAAA,MACjB;AAAA,EAAA;AAEN;AAUA,MAAM,+BAA+B,YAAY;AAAA,EAC/C,OAAO,KAAK;AAAA,EAEZ;AAAA,EACA;AAAA,EAEA,IAAI,gBAAgB;AAClB,WAAO,KAAK,cAA8B,4BAA4B;AAAA,EACxE;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,SAAS,cAAkC,KAAK,QAAQ,aAAa;AAAA,EAC9E;AAAA,EAEA,IAAI,QAAmB;AACrB,WAAO,MAAM,KAAK,KAAK,cAAc,QAAQ;AAAA,EAC/C;AAAA,EAEA,oBAAoB;AAClB,SAAK,UAAU,KAAK,MAAM,KAAK,aAAa,SAAS,KAAK,IAAI;AAC9D,SAAK,eAAe,SAAS,SAAS,cAAc,KAAK,QAAQ,YAAY,EAAG,SAAS;AAEzF,UAAM,aAAa,KAAK,cAAgC,mBAAmB;AAE3E,QAAI,YAAY;AACd,iBAAW,OAAO,WAAW,QAAQ,QAAQ;AAAA,IAC/C;AAEA,QAAI,KAAK,QAAQ,UAAU;AACzB,aAAO,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,eAAe;AACnD,YAAI,SAAS,KAAK,eAAe,EAAE,QAAQ,kBAAkB,WAAW,KAAK;AAAA,MAC/E,CAAC;AAAA,IACH;AAEA,UAAM,eAAe,KAAK,cAAiC,oBAAoB;AAC/E,iBAAa,iBAAiB,SAAS,CAAC,MAAM;AAC5C,WAAK,KAAK,CAAC;AAAA,IACb,CAAC;AAED,SAAK,cAAc,mBAAmB,GAAG,iBAAiB,SAAS,MAAM;AACvE,WAAK,MAAM,QAAQ,CAAC,SAAS;AAC3B,aAAK,cAAiC,oBAAoB,GAAG,MAAA;AAAA,MAC/D,CAAC;AAAA,IACH,CAAC;AAED,iBAAa,MAAM,gBAAgB;AAEnC,SAAK,OAAA;AAAA,EACP;AAAA,EAEA,SAAS;AACP,UAAM,QAA+B,KAAK,qBAAqB,EAAE,KAAK,QAAQ,OAAO,KAAK,CAAA;AAE1F,UAAM,QAAQ,CAAC,SAAS;AACtB,WAAK,WAAW,IAAI;AAAA,IACtB,CAAC;AAAA,EACH;AAAA,EAEA,WAAW,MAA2B,aAAa,OAAO;AACxD,UAAM,WAAW,KAAK,KAAK,aAAa,EAAE,KAAA,CAAM,CAAC;AAEjD,aAAS,QAAQ,QAAQ,KAAK;AAC9B,aAAS,cAAiC,oBAAoB,GAAG,iBAAiB,SAAS,MAAM;AAC/F,cAAQ,QAAQ,EAAE,KAAK,MAAM;AAC3B,iBAAS,OAAA;AACT,aAAK,eAAA;AAAA,MACP,CAAC;AAAA,IACH,CAAC;AAED,SAAK,cAAc,YAAY,QAAQ;AACvC,SAAK,eAAA;AAEL,QAAI,YAAY;AACd,gBAAU,QAAQ;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,iBAAiB;AACf,UAAM,cAAc,KAAK,cAAgC,oCAAoC;AAE7F,QAAI,aAAa;AACf,kBAAY,WAAW,KAAK,cAAc,SAAS,WAAW;AAAA,IAChE;AAAA,EACF;AAAA,EAEA,KAAK,OAAc;AACjB,UAAM,eAAA;AACN,UAAM,gBAAA;AAEN,UAAM,MAAM,KAAK,QAAQ;AAEzB,UAAM,SAAS,MAAM;AAErB,QAAI,CAAC,KAAK;AACR,WAAK,OAAO,KAAK,OAAO,MAAM,EAAE,MAAM,YAAY;AAClD;AAAA,IACF;AAEA,QAAI,KAAK,cAAc,SAAS,UAAU,KAAK;AAC7C;AAAA,QACE,GAAG,oCAAoC,GAAG;AAAA,MAAA;AAG5C;AAAA,IACF;AAEA,SAAK,OAAO,KAAK,OAAO,MAAM,EAAE,MAAM,YAAY;AAAA,EACpD;AACF;AAEA,+BAAe,OAAA,uBAAO,uBAAuB,IAAA,GAAI,sBAAsB;","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]}