PageSourceSearch

https://web.girona.cat/o/frontend-js-web/liferay/global.bundle.js

js girona.cat collected 2026-09-24 09:05:59 UTC 250,263 bytes, 7,113 lines download raw bytes

vendor: 1,702 bytes, lines 1-34
1"use strict";
2(() => {
3  var __create = Object.create;
4  var __defProp = Object.defineProperty;
5  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6  var __getOwnPropNames = Object.getOwnPropertyNames;
7  var __getProtoOf = Object.getPrototypeOf;
8  var __hasOwnProp = Object.prototype.hasOwnProperty;
9  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10  var __commonJS = (cb, mod) => function __require() {
11    return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
12  };
13  var __copyProps = (to, from, except, desc) => {
14    if (from && typeof from === "object" || typeof from === "function") {
15      for (let key of __getOwnPropNames(from))
16        if (!__hasOwnProp.call(to, key) && key !== except)
17          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18    }
19    return to;
20  };
21  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22    // If the importer is in node compatibility mode or this is not an ESM
23    // file that has been converted to a CommonJS file using a Babel-
24    // compatible transform (i.e. "__esModule" has not been set), then set
25    // "default" to the CommonJS "module.exports" for node compatibility.
26    isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27    mod
28  ));
29  var __publicField = (obj, key, value) => {
30    __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
31    return value;
32  };
33
34  
vendor: 34,172 bytes, lines 34-904
34// ../../../node_modules/lodash.groupby/index.js
35  var require_lodash = __commonJS({
36    "../../../node_modules/lodash.groupby/index.js"(exports, module) {
37      var LARGE_ARRAY_SIZE = 200;
38      var FUNC_ERROR_TEXT = "Expected a function";
39      var HASH_UNDEFINED = "__lodash_hash_undefined__";
40      var UNORDERED_COMPARE_FLAG = 1;
41      var PARTIAL_COMPARE_FLAG = 2;
42      var INFINITY = 1 / 0;
43      var MAX_SAFE_INTEGER = 9007199254740991;
44      var argsTag = "[object Arguments]";
45      var arrayTag = "[object Array]";
46      var boolTag = "[object Boolean]";
47      var dateTag = "[object Date]";
48      var errorTag = "[object Error]";
49      var funcTag = "[object Function]";
50      var genTag = "[object GeneratorFunction]";
51      var mapTag = "[object Map]";
52      var numberTag = "[object Number]";
53      var objectTag = "[object Object]";
54      var promiseTag = "[object Promise]";
55      var regexpTag = "[object RegExp]";
56      var setTag = "[object Set]";
57      var stringTag = "[object String]";
58      var symbolTag = "[object Symbol]";
59      var weakMapTag = "[object WeakMap]";
60      var arrayBufferTag = "[object ArrayBuffer]";
61      var dataViewTag = "[object DataView]";
62      var float32Tag = "[object Float32Array]";
63      var float64Tag = "[object Float64Array]";
64      var int8Tag = "[object Int8Array]";
65      var int16Tag = "[object Int16Array]";
66      var int32Tag = "[object Int32Array]";
67      var uint8Tag = "[object Uint8Array]";
68      var uint8ClampedTag = "[object Uint8ClampedArray]";
69      var uint16Tag = "[object Uint16Array]";
70      var uint32Tag = "[object Uint32Array]";
71      var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/;
72      var reIsPlainProp = /^\w*$/;
73      var reLeadingDot = /^\./;
74      var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
75      var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
76      var reEscapeChar = /\\(\\)?/g;
77      var reIsHostCtor = /^\[object .+?Constructor\]$/;
78      var reIsUint = /^(?:0|[1-9]\d*)$/;
79      var typedArrayTags = {};
80      typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
81      typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
82      var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
83      var freeSelf = typeof self == "object" && self && self.Object === Object && self;
84      var root = freeGlobal || freeSelf || Function("return this")();
85      var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports;
86      var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module;
87      var moduleExports = freeModule && freeModule.exports === freeExports;
88      var freeProcess = moduleExports && freeGlobal.process;
89      var nodeUtil = function() {
90        try {
91          return freeProcess && freeProcess.binding("util");
92        } catch (e) {
93        }
94      }();
95      var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
96      function arrayAggregator(array, setter, iteratee, accumulator) {
97        var index = -1, length = array ? array.length : 0;
98        while (++index < length) {
99          var value = array[index];
100          setter(accumulator, value, iteratee(value), array);
101        }
102        return accumulator;
103      }
104      function arraySome(array, predicate) {
105        var index = -1, length = array ? array.length : 0;
106        while (++index < length) {
107          if (predicate(array[index], index, array)) {
108            return true;
109          }
110        }
111        return false;
112      }
113      function baseProperty(key) {
114        return function(object) {
115          return object == null ? void 0 : object[key];
116        };
117      }
118      function baseTimes(n, iteratee) {
119        var index = -1, result = Array(n);
120        while (++index < n) {
121          result[index] = iteratee(index);
122        }
123        return result;
124      }
125      function baseUnary(func) {
126        return function(value) {
127          return func(value);
128        };
129      }
130      function getValue(object, key) {
131        return object == null ? void 0 : object[key];
132      }
133      function isHostObject(value) {
134        var result = false;
135        if (value != null && typeof value.toString != "function") {
136          try {
137            result = !!(value + "");
138          } catch (e) {
139          }
140        }
141        return result;
142      }
143      function mapToArray(map) {
144        var index = -1, result = Array(map.size);
145        map.forEach(function(value, key) {
146          result[++index] = [key, value];
147        });
148        return result;
149      }
150      function overArg(func, transform) {
151        return function(arg) {
152          return func(transform(arg));
153        };
154      }
155      function setToArray(set) {
156        var index = -1, result = Array(set.size);
157        set.forEach(function(value) {
158          result[++index] = value;
159        });
160        return result;
161      }
162      var arrayProto = Array.prototype;
163      var funcProto = Function.prototype;
164      var objectProto = Object.prototype;
165      var coreJsData = root["__core-js_shared__"];
166      var maskSrcKey = function() {
167        var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
168        return uid ? "Symbol(src)_1." + uid : "";
169      }();
170      var funcToString = funcProto.toString;
171      var hasOwnProperty = objectProto.hasOwnProperty;
172      var objectToString = objectProto.toString;
173      var reIsNative = RegExp(
174        "^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
175      );
176      var Symbol2 = root.Symbol;
177      var Uint8Array2 = root.Uint8Array;
178      var propertyIsEnumerable = objectProto.propertyIsEnumerable;
179      var splice = arrayProto.splice;
180      var nativeKeys = overArg(Object.keys, Object);
181      var DataView = getNative(root, "DataView");
182      var Map2 = getNative(root, "Map");
183      var Promise2 = getNative(root, "Promise");
184      var Set2 = getNative(root, "Set");
185      var WeakMap2 = getNative(root, "WeakMap");
186      var nativeCreate = getNative(Object, "create");
187      var dataViewCtorString = toSource(DataView);
188      var mapCtorString = toSource(Map2);
189      var promiseCtorString = toSource(Promise2);
190      var setCtorString = toSource(Set2);
191      var weakMapCtorString = toSource(WeakMap2);
192      var symbolProto = Symbol2 ? Symbol2.prototype : void 0;
193      var symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;
194      var symbolToString = symbolProto ? symbolProto.toString : void 0;
195      function Hash(entries) {
196        var index = -1, length = entries ? entries.length : 0;
197        this.clear();
198        while (++index < length) {
199          var entry = entries[index];
200          this.set(entry[0], entry[1]);
201        }
202      }
203      function hashClear() {
204        this.__data__ = nativeCreate ? nativeCreate(null) : {};
205      }
206      function hashDelete(key) {
207        return this.has(key) && delete this.__data__[key];
208      }
209      function hashGet(key) {
210        var data = this.__data__;
211        if (nativeCreate) {
212          var result = data[key];
213          return result === HASH_UNDEFINED ? void 0 : result;
214        }
215        return hasOwnProperty.call(data, key) ? data[key] : void 0;
216      }
217      function hashHas(key) {
218        var data = this.__data__;
219        return nativeCreate ? data[key] !== void 0 : hasOwnProperty.call(data, key);
220      }
221      function hashSet(key, value) {
222        var data = this.__data__;
223        data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
224        return this;
225      }
226      Hash.prototype.clear = hashClear;
227      Hash.prototype["delete"] = hashDelete;
228      Hash.prototype.get = hashGet;
229      Hash.prototype.has = hashHas;
230      Hash.prototype.set = hashSet;
231      function ListCache(entries) {
232        var index = -1, length = entries ? entries.length : 0;
233        this.clear();
234        while (++index < length) {
235          var entry = entries[index];
236          this.set(entry[0], entry[1]);
237        }
238      }
239      function listCacheClear() {
240        this.__data__ = [];
241      }
242      function listCacheDelete(key) {
243        var data = this.__data__, index = assocIndexOf(data, key);
244        if (index < 0) {
245          return false;
246        }
247        var lastIndex = data.length - 1;
248        if (index == lastIndex) {
249          data.pop();
250        } else {
251          splice.call(data, index, 1);
252        }
253        return true;
254      }
255      function listCacheGet(key) {
256        var data = this.__data__, index = assocIndexOf(data, key);
257        return index < 0 ? void 0 : data[index][1];
258      }
259      function listCacheHas(key) {
260        return assocIndexOf(this.__data__, key) > -1;
261      }
262      function listCacheSet(key, value) {
263        var data = this.__data__, index = assocIndexOf(data, key);
264        if (index < 0) {
265          data.push([key, value]);
266        } else {
267          data[index][1] = value;
268        }
269        return this;
270      }
271      ListCache.prototype.clear = listCacheClear;
272      ListCache.prototype["delete"] = listCacheDelete;
273      ListCache.prototype.get = listCacheGet;
274      ListCache.prototype.has = listCacheHas;
275      ListCache.prototype.set = listCacheSet;
276      function MapCache(entries) {
277        var index = -1, length = entries ? entries.length : 0;
278        this.clear();
279        while (++index < length) {
280          var entry = entries[index];
281          this.set(entry[0], entry[1]);
282        }
283      }
284      function mapCacheClear() {
285        this.__data__ = {
286          "hash": new Hash(),
287          "map": new (Map2 || ListCache)(),
288          "string": new Hash()
289        };
290      }
291      function mapCacheDelete(key) {
292        return getMapData(this, key)["delete"](key);
293      }
294      function mapCacheGet(key) {
295        return getMapData(this, key).get(key);
296      }
297      function mapCacheHas(key) {
298        return getMapData(this, key).has(key);
299      }
300      function mapCacheSet(key, value) {
301        getMapData(this, key).set(key, value);
302        return this;
303      }
304      MapCache.prototype.clear = mapCacheClear;
305      MapCache.prototype["delete"] = mapCacheDelete;
306      MapCache.prototype.get = mapCacheGet;
307      MapCache.prototype.has = mapCacheHas;
308      MapCache.prototype.set = mapCacheSet;
309      function SetCache(values) {
310        var index = -1, length = values ? values.length : 0;
311        this.__data__ = new MapCache();
312        while (++index < length) {
313          this.add(values[index]);
314        }
315      }
316      function setCacheAdd(value) {
317        this.__data__.set(value, HASH_UNDEFINED);
318        return this;
319      }
320      function setCacheHas(value) {
321        return this.__data__.has(value);
322      }
323      SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
324      SetCache.prototype.has = setCacheHas;
325      function Stack(entries) {
326        this.__data__ = new ListCache(entries);
327      }
328      function stackClear() {
329        this.__data__ = new ListCache();
330      }
331      function stackDelete(key) {
332        return this.__data__["delete"](key);
333      }
334      function stackGet(key) {
335        return this.__data__.get(key);
336      }
337      function stackHas(key) {
338        return this.__data__.has(key);
339      }
340      function stackSet(key, value) {
341        var cache = this.__data__;
342        if (cache instanceof ListCache) {
343          var pairs = cache.__data__;
344          if (!Map2 || pairs.length < LARGE_ARRAY_SIZE - 1) {
345            pairs.push([key, value]);
346            return this;
347          }
348          cache = this.__data__ = new MapCache(pairs);
349        }
350        cache.set(key, value);
351        return this;
352      }
353      Stack.prototype.clear = stackClear;
354      Stack.prototype["delete"] = stackDelete;
355      Stack.prototype.get = stackGet;
356      Stack.prototype.has = stackHas;
357      Stack.prototype.set = stackSet;
358      function arrayLikeKeys(value, inherited) {
359        var result = isArray(value) || isArguments(value) ? baseTimes(value.length, String) : [];
360        var length = result.length, skipIndexes = !!length;
361        for (var key in value) {
362          if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && (key == "length" || isIndex(key, length)))) {
363            result.push(key);
364          }
365        }
366        return result;
367      }
368      function assocIndexOf(array, key) {
369        var length = array.length;
370        while (length--) {
371          if (eq(array[length][0], key)) {
372            return length;
373          }
374        }
375        return -1;
376      }
377      function baseAggregator(collection, setter, iteratee, accumulator) {
378        baseEach(collection, function(value, key, collection2) {
379          setter(accumulator, value, iteratee(value), collection2);
380        });
381        return accumulator;
382      }
383      var baseEach = createBaseEach(baseForOwn);
384      var baseFor = createBaseFor();
385      function baseForOwn(object, iteratee) {
386        return object && baseFor(object, iteratee, keys);
387      }
388      function baseGet(object, path) {
389        path = isKey(path, object) ? [path] : castPath(path);
390        var index = 0, length = path.length;
391        while (object != null && index < length) {
392          object = object[toKey(path[index++])];
393        }
394        return index && index == length ? object : void 0;
395      }
396      function baseGetTag(value) {
397        return objectToString.call(value);
398      }
399      function baseHasIn(object, key) {
400        return object != null && key in Object(object);
401      }
402      function baseIsEqual(value, other, customizer, bitmask, stack) {
403        if (value === other) {
404          return true;
405        }
406        if (value == null || other == null || !isObject2(value) && !isObjectLike(other)) {
407          return value !== value && other !== other;
408        }
409        return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
410      }
411      function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
412        var objIsArr = isArray(object), othIsArr = isArray(other), objTag = arrayTag, othTag = arrayTag;
413        if (!objIsArr) {
414          objTag = getTag(object);
415          objTag = objTag == argsTag ? objectTag : objTag;
416        }
417        if (!othIsArr) {
418          othTag = getTag(other);
419          othTag = othTag == argsTag ? objectTag : othTag;
420        }
421        var objIsObj = objTag == objectTag && !isHostObject(object), othIsObj = othTag == objectTag && !isHostObject(other), isSameTag = objTag == othTag;
422        if (isSameTag && !objIsObj) {
423          stack || (stack = new Stack());
424          return objIsArr || isTypedArray(object) ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
425        }
426        if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
427          var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__");
428          if (objIsWrapped || othIsWrapped) {
429            var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
430            stack || (stack = new Stack());
431            return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
432          }
433        }
434        if (!isSameTag) {
435          return false;
436        }
437        stack || (stack = new Stack());
438        return equalObjects(object, other, equalFunc, customizer, bitmask, stack);
439      }
440      function baseIsMatch(object, source, matchData, customizer) {
441        var index = matchData.length, length = index, noCustomizer = !customizer;
442        if (object == null) {
443          return !length;
444        }
445        object = Object(object);
446        while (index--) {
447          var data = matchData[index];
448          if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {
449            return false;
450          }
451        }
452        while (++index < length) {
453          data = matchData[index];
454          var key = data[0], objValue = object[key], srcValue = data[1];
455          if (noCustomizer && data[2]) {
456            if (objValue === void 0 && !(key in object)) {
457              return false;
458            }
459          } else {
460            var stack = new Stack();
461            if (customizer) {
462              var result = customizer(objValue, srcValue, key, object, source, stack);
463            }
464            if (!(result === void 0 ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) : result)) {
465              return false;
466            }
467          }
468        }
469        return true;
470      }
471      function baseIsNative(value) {
472        if (!isObject2(value) || isMasked(value)) {
473          return false;
474        }
475        var pattern = isFunction(value) || isHostObject(value) ? reIsNative : reIsHostCtor;
476        return pattern.test(toSource(value));
477      }
478      function baseIsTypedArray(value) {
479        return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objectToString.call(value)];
480      }
481      function baseIteratee(value) {
482        if (typeof value == "function") {
483          return value;
484        }
485        if (value == null) {
486          return identity;
487        }
488        if (typeof value == "object") {
489          return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);
490        }
491        return property(value);
492      }
493      function baseKeys(object) {
494        if (!isPrototype(object)) {
495          return nativeKeys(object);
496        }
497        var result = [];
498        for (var key in Object(object)) {
499          if (hasOwnProperty.call(object, key) && key != "constructor") {
500            result.push(key);
501          }
502        }
503        return result;
504      }
505      function baseMatches(source) {
506        var matchData = getMatchData(source);
507        if (matchData.length == 1 && matchData[0][2]) {
508          return matchesStrictComparable(matchData[0][0], matchData[0][1]);
509        }
510        return function(object) {
511          return object === source || baseIsMatch(object, source, matchData);
512        };
513      }
514      function baseMatchesProperty(path, srcValue) {
515        if (isKey(path) && isStrictComparable(srcValue)) {
516          return matchesStrictComparable(toKey(path), srcValue);
517        }
518        return function(object) {
519          var objValue = get(object, path);
520          return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, void 0, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);
521        };
522      }
523      function basePropertyDeep(path) {
524        return function(object) {
525          return baseGet(object, path);
526        };
527      }
528      function baseToString(value) {
529        if (typeof value == "string") {
530          return value;
531        }
532        if (isSymbol(value)) {
533          return symbolToString ? symbolToString.call(value) : "";
534        }
535        var result = value + "";
536        return result == "0" && 1 / value == -INFINITY ? "-0" : result;
537      }
538      function castPath(value) {
539        return isArray(value) ? value : stringToPath(value);
540      }
541      function createAggregator(setter, initializer) {
542        return function(collection, iteratee) {
543          var func = isArray(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {};
544          return func(collection, setter, baseIteratee(iteratee, 2), accumulator);
545        };
546      }
547      function createBaseEach(eachFunc, fromRight) {
548        return function(collection, iteratee) {
549          if (collection == null) {
550            return collection;
551          }
552          if (!isArrayLike2(collection)) {
553            return eachFunc(collection, iteratee);
554          }
555          var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection);
556          while (fromRight ? index-- : ++index < length) {
557            if (iteratee(iterable[index], index, iterable) === false) {
558              break;
559            }
560          }
561          return collection;
562        };
563      }
564      function createBaseFor(fromRight) {
565        return function(object, iteratee, keysFunc) {
566          var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length;
567          while (length--) {
568            var key = props[fromRight ? length : ++index];
569            if (iteratee(iterable[key], key, iterable) === false) {
570              break;
571            }
572          }
573          return object;
574        };
575      }
576      function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
577        var isPartial = bitmask & PARTIAL_COMPARE_FLAG, arrLength = array.length, othLength = other.length;
578        if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
579          return false;
580        }
581        var stacked = stack.get(array);
582        if (stacked && stack.get(other)) {
583          return stacked == other;
584        }
585        var index = -1, result = true, seen = bitmask & UNORDERED_COMPARE_FLAG ? new SetCache() : void 0;
586        stack.set(array, other);
587        stack.set(other, array);
588        while (++index < arrLength) {
589          var arrValue = array[index], othValue = other[index];
590          if (customizer) {
591            var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
592          }
593          if (compared !== void 0) {
594            if (compared) {
595              continue;
596            }
597            result = false;
598            break;
599          }
600          if (seen) {
601            if (!arraySome(other, function(othValue2, othIndex) {
602              if (!seen.has(othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, customizer, bitmask, stack))) {
603                return seen.add(othIndex);
604              }
605            })) {
606              result = false;
607              break;
608            }
609          } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
610            result = false;
611            break;
612          }
613        }
614        stack["delete"](array);
615        stack["delete"](other);
616        return result;
617      }
618      function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
619        switch (tag) {
620          case dataViewTag:
621            if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
622              return false;
623            }
624            object = object.buffer;
625            other = other.buffer;
626          case arrayBufferTag:
627            if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other))) {
628              return false;
629            }
630            return true;
631          case boolTag:
632          case dateTag:
633          case numberTag:
634            return eq(+object, +other);
635          case errorTag:
636            return object.name == other.name && object.message == other.message;
637          case regexpTag:
638          case stringTag:
639            return object == other + "";
640          case mapTag:
641            var convert = mapToArray;
642          case setTag:
643            var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
644            convert || (convert = setToArray);
645            if (object.size != other.size && !isPartial) {
646              return false;
647            }
648            var stacked = stack.get(object);
649            if (stacked) {
650              return stacked == other;
651            }
652            bitmask |= UNORDERED_COMPARE_FLAG;
653            stack.set(object, other);
654            var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);
655            stack["delete"](object);
656            return result;
657          case symbolTag:
658            if (symbolValueOf) {
659              return symbolValueOf.call(object) == symbolValueOf.call(other);
660            }
661        }
662        return false;
663      }
664      function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
665        var isPartial = bitmask & PARTIAL_COMPARE_FLAG, objProps = keys(object), objLength = objProps.length, othProps = keys(other), othLength = othProps.length;
666        if (objLength != othLength && !isPartial) {
667          return false;
668        }
669        var index = objLength;
670        while (index--) {
671          var key = objProps[index];
672          if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
673            return false;
674          }
675        }
676        var stacked = stack.get(object);
677        if (stacked && stack.get(other)) {
678          return stacked == other;
679        }
680        var result = true;
681        stack.set(object, other);
682        stack.set(other, object);
683        var skipCtor = isPartial;
684        while (++index < objLength) {
685          key = objProps[index];
686          var objValue = object[key], othValue = other[key];
687          if (customizer) {
688            var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
689          }
690          if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack) : compared)) {
691            result = false;
692            break;
693          }
694          skipCtor || (skipCtor = key == "constructor");
695        }
696        if (result && !skipCtor) {
697          var objCtor = object.constructor, othCtor = other.constructor;
698          if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
699            result = false;
700          }
701        }
702        stack["delete"](object);
703        stack["delete"](other);
704        return result;
705      }
706      function getMapData(map, key) {
707        var data = map.__data__;
708        return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
709      }
710      function getMatchData(object) {
711        var result = keys(object), length = result.length;
712        while (length--) {
713          var key = result[length], value = object[key];
714          result[length] = [key, value, isStrictComparable(value)];
715        }
716        return result;
717      }
718      function getNative(object, key) {
719        var value = getValue(object, key);
720        return baseIsNative(value) ? value : void 0;
721      }
722      var getTag = baseGetTag;
723      if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag(new Map2()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag || WeakMap2 && getTag(new WeakMap2()) != weakMapTag) {
724        getTag = function(value) {
725          var result = objectToString.call(value), Ctor = result == objectTag ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : void 0;
726          if (ctorString) {
727            switch (ctorString) {
728              case dataViewCtorString:
729                return dataViewTag;
730              case mapCtorString:
731                return mapTag;
732              case promiseCtorString:
733                return promiseTag;
734              case setCtorString:
735                return setTag;
736              case weakMapCtorString:
737                return weakMapTag;
738            }
739          }
740          return result;
741        };
742      }
743      function hasPath(object, path, hasFunc) {
744        path = isKey(path, object) ? [path] : castPath(path);
745        var result, index = -1, length = path.length;
746        while (++index < length) {
747          var key = toKey(path[index]);
748          if (!(result = object != null && hasFunc(object, key))) {
749            break;
750          }
751          object = object[key];
752        }
753        if (result) {
754          return result;
755        }
756        var length = object ? object.length : 0;
757        return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object));
758      }
759      function isIndex(value, length) {
760        length = length == null ? MAX_SAFE_INTEGER : length;
761        return !!length && (typeof value == "number" || reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
762      }
763      function isKey(value, object) {
764        if (isArray(value)) {
765          return false;
766        }
767        var type = typeof value;
768        if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) {
769          return true;
770        }
771        return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
772      }
773      function isKeyable(value) {
774        var type = typeof value;
775        return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
776      }
777      function isMasked(func) {
778        return !!maskSrcKey && maskSrcKey in func;
779      }
780      function isPrototype(value) {
781        var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto;
782        return value === proto;
783      }
784      function isStrictComparable(value) {
785        return value === value && !isObject2(value);
786      }
787      function matchesStrictComparable(key, srcValue) {
788        return function(object) {
789          if (object == null) {
790            return false;
791          }
792          return object[key] === srcValue && (srcValue !== void 0 || key in Object(object));
793        };
794      }
795      var stringToPath = memoize2(function(string) {
796        string = toString(string);
797        var result = [];
798        if (reLeadingDot.test(string)) {
799          result.push("");
800        }
801        string.replace(rePropName, function(match, number, quote, string2) {
802          result.push(quote ? string2.replace(reEscapeChar, "$1") : number || match);
803        });
804        return result;
805      });
806      function toKey(value) {
807        if (typeof value == "string" || isSymbol(value)) {
808          return value;
809        }
810        var result = value + "";
811        return result == "0" && 1 / value == -INFINITY ? "-0" : result;
812      }
813      function toSource(func) {
814        if (func != null) {
815          try {
816            return funcToString.call(func);
817          } catch (e) {
818          }
819          try {
820            return func + "";
821          } catch (e) {
822          }
823        }
824        return "";
825      }
826      var groupBy2 = createAggregator(function(result, value, key) {
827        if (hasOwnProperty.call(result, key)) {
828          result[key].push(value);
829        } else {
830          result[key] = [value];
831        }
832      });
833      function memoize2(func, resolver) {
834        if (typeof func != "function" || resolver && typeof resolver != "function") {
835          throw new TypeError(FUNC_ERROR_TEXT);
836        }
837        var memoized = function() {
838          var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;
839          if (cache.has(key)) {
840            return cache.get(key);
841          }
842          var result = func.apply(this, args);
843          memoized.cache = cache.set(key, result);
844          return result;
845        };
846        memoized.cache = new (memoize2.Cache || MapCache)();
847        return memoized;
848      }
849      memoize2.Cache = MapCache;
850      function eq(value, other) {
851        return value === other || value !== value && other !== other;
852      }
853      function isArguments(value) {
854        return isArrayLikeObject(value) && hasOwnProperty.call(value, "callee") && (!propertyIsEnumerable.call(value, "callee") || objectToString.call(value) == argsTag);
855      }
856      var isArray = Array.isArray;
857      function isArrayLike2(value) {
858        return value != null && isLength(value.length) && !isFunction(value);
859      }
860      function isArrayLikeObject(value) {
861        return isObjectLike(value) && isArrayLike2(value);
862      }
863      function isFunction(value) {
864        var tag = isObject2(value) ? objectToString.call(value) : "";
865        return tag == funcTag || tag == genTag;
866      }
867      function isLength(value) {
868        return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
869      }
870      function isObject2(value) {
871        var type = typeof value;
872        return !!value && (type == "object" || type == "function");
873      }
874      function isObjectLike(value) {
875        return !!value && typeof value == "object";
876      }
877      function isSymbol(value) {
878        return typeof value == "symbol" || isObjectLike(value) && objectToString.call(value) == symbolTag;
879      }
880      var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
881      function toString(value) {
882        return value == null ? "" : baseToString(value);
883      }
884      function get(object, path, defaultValue) {
885        var result = object == null ? void 0 : baseGet(object, path);
886        return result === void 0 ? defaultValue : result;
887      }
888      function hasIn(object, path) {
889        return object != null && hasPath(object, path, baseHasIn);
890      }
891      function keys(object) {
892        return isArrayLike2(object) ? arrayLikeKeys(object) : baseKeys(object);
893      }
894      function identity(value) {
895        return value;
896      }
897      function property(path) {
898        return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
899      }
900      module.exports = groupBy2;
901    }
902  });
903
904  
vendor: 27,968 bytes, lines 904-1605
904// ../../../node_modules/lodash.isequal/index.js
905  var require_lodash2 = __commonJS({
906    "../../../node_modules/lodash.isequal/index.js"(exports, module) {
907      var LARGE_ARRAY_SIZE = 200;
908      var HASH_UNDEFINED = "__lodash_hash_undefined__";
909      var COMPARE_PARTIAL_FLAG = 1;
910      var COMPARE_UNORDERED_FLAG = 2;
911      var MAX_SAFE_INTEGER = 9007199254740991;
912      var argsTag = "[object Arguments]";
913      var arrayTag = "[object Array]";
914      var asyncTag = "[object AsyncFunction]";
915      var boolTag = "[object Boolean]";
916      var dateTag = "[object Date]";
917      var errorTag = "[object Error]";
918      var funcTag = "[object Function]";
919      var genTag = "[object GeneratorFunction]";
920      var mapTag = "[object Map]";
921      var numberTag = "[object Number]";
922      var nullTag = "[object Null]";
923      var objectTag = "[object Object]";
924      var promiseTag = "[object Promise]";
925      var proxyTag = "[object Proxy]";
926      var regexpTag = "[object RegExp]";
927      var setTag = "[object Set]";
928      var stringTag = "[object String]";
929      var symbolTag = "[object Symbol]";
930      var undefinedTag = "[object Undefined]";
931      var weakMapTag = "[object WeakMap]";
932      var arrayBufferTag = "[object ArrayBuffer]";
933      var dataViewTag = "[object DataView]";
934      var float32Tag = "[object Float32Array]";
935      var float64Tag = "[object Float64Array]";
936      var int8Tag = "[object Int8Array]";
937      var int16Tag = "[object Int16Array]";
938      var int32Tag = "[object Int32Array]";
939      var uint8Tag = "[object Uint8Array]";
940      var uint8ClampedTag = "[object Uint8ClampedArray]";
941      var uint16Tag = "[object Uint16Array]";
942      var uint32Tag = "[object Uint32Array]";
943      var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
944      var reIsHostCtor = /^\[object .+?Constructor\]$/;
945      var reIsUint = /^(?:0|[1-9]\d*)$/;
946      var typedArrayTags = {};
947      typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
948      typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
949      var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
950      var freeSelf = typeof self == "object" && self && self.Object === Object && self;
951      var root = freeGlobal || freeSelf || Function("return this")();
952      var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports;
953      var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module;
954      var moduleExports = freeModule && freeModule.exports === freeExports;
955      var freeProcess = moduleExports && freeGlobal.process;
956      var nodeUtil = function() {
957        try {
958          return freeProcess && freeProcess.binding && freeProcess.binding("util");
959        } catch (e) {
960        }
961      }();
962      var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
963      function arrayFilter(array, predicate) {
964        var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];
965        while (++index < length) {
966          var value = array[index];
967          if (predicate(value, index, array)) {
968            result[resIndex++] = value;
969          }
970        }
971        return result;
972      }
973      function arrayPush(array, values) {
974        var index = -1, length = values.length, offset = array.length;
975        while (++index < length) {
976          array[offset + index] = values[index];
977        }
978        return array;
979      }
980      function arraySome(array, predicate) {
981        var index = -1, length = array == null ? 0 : array.length;
982        while (++index < length) {
983          if (predicate(array[index], index, array)) {
984            return true;
985          }
986        }
987        return false;
988      }
989      function baseTimes(n, iteratee) {
990        var index = -1, result = Array(n);
991        while (++index < n) {
992          result[index] = iteratee(index);
993        }
994        return result;
995      }
996      function baseUnary(func) {
997        return function(value) {
998          return func(value);
999        };
1000      }
1001      function cacheHas(cache, key) {
1002        return cache.has(key);
1003      }
1004      function getValue(object, key) {
1005        return object == null ? void 0 : object[key];
1006      }
1007      function mapToArray(map) {
1008        var index = -1, result = Array(map.size);
1009        map.forEach(function(value, key) {
1010          result[++index] = [key, value];
1011        });
1012        return result;
1013      }
1014      function overArg(func, transform) {
1015        return function(arg) {
1016          return func(transform(arg));
1017        };
1018      }
1019      function setToArray(set) {
1020        var index = -1, result = Array(set.size);
1021        set.forEach(function(value) {
1022          result[++index] = value;
1023        });
1024        return result;
1025      }
1026      var arrayProto = Array.prototype;
1027      var funcProto = Function.prototype;
1028      var objectProto = Object.prototype;
1029      var coreJsData = root["__core-js_shared__"];
1030      var funcToString = funcProto.toString;
1031      var hasOwnProperty = objectProto.hasOwnProperty;
1032      var maskSrcKey = function() {
1033        var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
1034        return uid ? "Symbol(src)_1." + uid : "";
1035      }();
1036      var nativeObjectToString = objectProto.toString;
1037      var reIsNative = RegExp(
1038        "^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
1039      );
1040      var Buffer2 = moduleExports ? root.Buffer : void 0;
1041      var Symbol2 = root.Symbol;
1042      var Uint8Array2 = root.Uint8Array;
1043      var propertyIsEnumerable = objectProto.propertyIsEnumerable;
1044      var splice = arrayProto.splice;
1045      var symToStringTag = Symbol2 ? Symbol2.toStringTag : void 0;
1046      var nativeGetSymbols = Object.getOwnPropertySymbols;
1047      var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0;
1048      var nativeKeys = overArg(Object.keys, Object);
1049      var DataView = getNative(root, "DataView");
1050      var Map2 = getNative(root, "Map");
1051      var Promise2 = getNative(root, "Promise");
1052      var Set2 = getNative(root, "Set");
1053      var WeakMap2 = getNative(root, "WeakMap");
1054      var nativeCreate = getNative(Object, "create");
1055      var dataViewCtorString = toSource(DataView);
1056      var mapCtorString = toSource(Map2);
1057      var promiseCtorString = toSource(Promise2);
1058      var setCtorString = toSource(Set2);
1059      var weakMapCtorString = toSource(WeakMap2);
1060      var symbolProto = Symbol2 ? Symbol2.prototype : void 0;
1061      var symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;
1062      function Hash(entries) {
1063        var index = -1, length = entries == null ? 0 : entries.length;
1064        this.clear();
1065        while (++index < length) {
1066          var entry = entries[index];
1067          this.set(entry[0], entry[1]);
1068        }
1069      }
1070      function hashClear() {
1071        this.__data__ = nativeCreate ? nativeCreate(null) : {};
1072        this.size = 0;
1073      }
1074      function hashDelete(key) {
1075        var result = this.has(key) && delete this.__data__[key];
1076        this.size -= result ? 1 : 0;
1077        return result;
1078      }
1079      function hashGet(key) {
1080        var data = this.__data__;
1081        if (nativeCreate) {
1082          var result = data[key];
1083          return result === HASH_UNDEFINED ? void 0 : result;
1084        }
1085        return hasOwnProperty.call(data, key) ? data[key] : void 0;
1086      }
1087      function hashHas(key) {
1088        var data = this.__data__;
1089        return nativeCreate ? data[key] !== void 0 : hasOwnProperty.call(data, key);
1090      }
1091      function hashSet(key, value) {
1092        var data = this.__data__;
1093        this.size += this.has(key) ? 0 : 1;
1094        data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
1095        return this;
1096      }
1097      Hash.prototype.clear = hashClear;
1098      Hash.prototype["delete"] = hashDelete;
1099      Hash.prototype.get = hashGet;
1100      Hash.prototype.has = hashHas;
1101      Hash.prototype.set = hashSet;
1102      function ListCache(entries) {
1103        var index = -1, length = entries == null ? 0 : entries.length;
1104        this.clear();
1105        while (++index < length) {
1106          var entry = entries[index];
1107          this.set(entry[0], entry[1]);
1108        }
1109      }
1110      function listCacheClear() {
1111        this.__data__ = [];
1112        this.size = 0;
1113      }
1114      function listCacheDelete(key) {
1115        var data = this.__data__, index = assocIndexOf(data, key);
1116        if (index < 0) {
1117          return false;
1118        }
1119        var lastIndex = data.length - 1;
1120        if (index == lastIndex) {
1121          data.pop();
1122        } else {
1123          splice.call(data, index, 1);
1124        }
1125        --this.size;
1126        return true;
1127      }
1128      function listCacheGet(key) {
1129        var data = this.__data__, index = assocIndexOf(data, key);
1130        return index < 0 ? void 0 : data[index][1];
1131      }
1132      function listCacheHas(key) {
1133        return assocIndexOf(this.__data__, key) > -1;
1134      }
1135      function listCacheSet(key, value) {
1136        var data = this.__data__, index = assocIndexOf(data, key);
1137        if (index < 0) {
1138          ++this.size;
1139          data.push([key, value]);
1140        } else {
1141          data[index][1] = value;
1142        }
1143        return this;
1144      }
1145      ListCache.prototype.clear = listCacheClear;
1146      ListCache.prototype["delete"] = listCacheDelete;
1147      ListCache.prototype.get = listCacheGet;
1148      ListCache.prototype.has = listCacheHas;
1149      ListCache.prototype.set = listCacheSet;
1150      function MapCache(entries) {
1151        var index = -1, length = entries == null ? 0 : entries.length;
1152        this.clear();
1153        while (++index < length) {
1154          var entry = entries[index];
1155          this.set(entry[0], entry[1]);
1156        }
1157      }
1158      function mapCacheClear() {
1159        this.size = 0;
1160        this.__data__ = {
1161          "hash": new Hash(),
1162          "map": new (Map2 || ListCache)(),
1163          "string": new Hash()
1164        };
1165      }
1166      function mapCacheDelete(key) {
1167        var result = getMapData(this, key)["delete"](key);
1168        this.size -= result ? 1 : 0;
1169        return result;
1170      }
1171      function mapCacheGet(key) {
1172        return getMapData(this, key).get(key);
1173      }
1174      function mapCacheHas(key) {
1175        return getMapData(this, key).has(key);
1176      }
1177      function mapCacheSet(key, value) {
1178        var data = getMapData(this, key), size = data.size;
1179        data.set(key, value);
1180        this.size += data.size == size ? 0 : 1;
1181        return this;
1182      }
1183      MapCache.prototype.clear = mapCacheClear;
1184      MapCache.prototype["delete"] = mapCacheDelete;
1185      MapCache.prototype.get = mapCacheGet;
1186      MapCache.prototype.has = mapCacheHas;
1187      MapCache.prototype.set = mapCacheSet;
1188      function SetCache(values) {
1189        var index = -1, length = values == null ? 0 : values.length;
1190        this.__data__ = new MapCache();
1191        while (++index < length) {
1192          this.add(values[index]);
1193        }
1194      }
1195      function setCacheAdd(value) {
1196        this.__data__.set(value, HASH_UNDEFINED);
1197        return this;
1198      }
1199      function setCacheHas(value) {
1200        return this.__data__.has(value);
1201      }
1202      SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
1203      SetCache.prototype.has = setCacheHas;
1204      function Stack(entries) {
1205        var data = this.__data__ = new ListCache(entries);
1206        this.size = data.size;
1207      }
1208      function stackClear() {
1209        this.__data__ = new ListCache();
1210        this.size = 0;
1211      }
1212      function stackDelete(key) {
1213        var data = this.__data__, result = data["delete"](key);
1214        this.size = data.size;
1215        return result;
1216      }
1217      function stackGet(key) {
1218        return this.__data__.get(key);
1219      }
1220      function stackHas(key) {
1221        return this.__data__.has(key);
1222      }
1223      function stackSet(key, value) {
1224        var data = this.__data__;
1225        if (data instanceof ListCache) {
1226          var pairs = data.__data__;
1227          if (!Map2 || pairs.length < LARGE_ARRAY_SIZE - 1) {
1228            pairs.push([key, value]);
1229            this.size = ++data.size;
1230            return this;
1231          }
1232          data = this.__data__ = new MapCache(pairs);
1233        }
1234        data.set(key, value);
1235        this.size = data.size;
1236        return this;
1237      }
1238      Stack.prototype.clear = stackClear;
1239      Stack.prototype["delete"] = stackDelete;
1240      Stack.prototype.get = stackGet;
1241      Stack.prototype.has = stackHas;
1242      Stack.prototype.set = stackSet;
1243      function arrayLikeKeys(value, inherited) {
1244        var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;
1245        for (var key in value) {
1246          if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
1247          (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
1248          isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
1249          isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
1250          isIndex(key, length)))) {
1251            result.push(key);
1252          }
1253        }
1254        return result;
1255      }
1256      function assocIndexOf(array, key) {
1257        var length = array.length;
1258        while (length--) {
1259          if (eq(array[length][0], key)) {
1260            return length;
1261          }
1262        }
1263        return -1;
1264      }
1265      function baseGetAllKeys(object, keysFunc, symbolsFunc) {
1266        var result = keysFunc(object);
1267        return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
1268      }
1269      function baseGetTag(value) {
1270        if (value == null) {
1271          return value === void 0 ? undefinedTag : nullTag;
1272        }
1273        return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
1274      }
1275      function baseIsArguments(value) {
1276        return isObjectLike(value) && baseGetTag(value) == argsTag;
1277      }
1278      function baseIsEqual(value, other, bitmask, customizer, stack) {
1279        if (value === other) {
1280          return true;
1281        }
1282        if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {
1283          return value !== value && other !== other;
1284        }
1285        return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
1286      }
1287      function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
1288        var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other);
1289        objTag = objTag == argsTag ? objectTag : objTag;
1290        othTag = othTag == argsTag ? objectTag : othTag;
1291        var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;
1292        if (isSameTag && isBuffer(object)) {
1293          if (!isBuffer(other)) {
1294            return false;
1295          }
1296          objIsArr = true;
1297          objIsObj = false;
1298        }
1299        if (isSameTag && !objIsObj) {
1300          stack || (stack = new Stack());
1301          return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
1302        }
1303        if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
1304          var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other, "__wrapped__");
1305          if (objIsWrapped || othIsWrapped) {
1306            var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
1307            stack || (stack = new Stack());
1308            return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
1309          }
1310        }
1311        if (!isSameTag) {
1312          return false;
1313        }
1314        stack || (stack = new Stack());
1315        return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
1316      }
1317      function baseIsNative(value) {
1318        if (!isObject2(value) || isMasked(value)) {
1319          return false;
1320        }
1321        var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
1322        return pattern.test(toSource(value));
1323      }
1324      function baseIsTypedArray(value) {
1325        return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
1326      }
1327      function baseKeys(object) {
1328        if (!isPrototype(object)) {
1329          return nativeKeys(object);
1330        }
1331        var result = [];
1332        for (var key in Object(object)) {
1333          if (hasOwnProperty.call(object, key) && key != "constructor") {
1334            result.push(key);
1335          }
1336        }
1337        return result;
1338      }
1339      function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
1340        var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length;
1341        if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
1342          return false;
1343        }
1344        var stacked = stack.get(array);
1345        if (stacked && stack.get(other)) {
1346          return stacked == other;
1347        }
1348        var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : void 0;
1349        stack.set(array, other);
1350        stack.set(other, array);
1351        while (++index < arrLength) {
1352          var arrValue = array[index], othValue = other[index];
1353          if (customizer) {
1354            var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
1355          }
1356          if (compared !== void 0) {
1357            if (compared) {
1358              continue;
1359            }
1360            result = false;
1361            break;
1362          }
1363          if (seen) {
1364            if (!arraySome(other, function(othValue2, othIndex) {
1365              if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {
1366                return seen.push(othIndex);
1367              }
1368            })) {
1369              result = false;
1370              break;
1371            }
1372          } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
1373            result = false;
1374            break;
1375          }
1376        }
1377        stack["delete"](array);
1378        stack["delete"](other);
1379        return result;
1380      }
1381      function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
1382        switch (tag) {
1383          case dataViewTag:
1384            if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
1385              return false;
1386            }
1387            object = object.buffer;
1388            other = other.buffer;
1389          case arrayBufferTag:
1390            if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other))) {
1391              return false;
1392            }
1393            return true;
1394          case boolTag:
1395          case dateTag:
1396          case numberTag:
1397            return eq(+object, +other);
1398          case errorTag:
1399            return object.name == other.name && object.message == other.message;
1400          case regexpTag:
1401          case stringTag:
1402            return object == other + "";
1403          case mapTag:
1404            var convert = mapToArray;
1405          case setTag:
1406            var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
1407            convert || (convert = setToArray);
1408            if (object.size != other.size && !isPartial) {
1409              return false;
1410            }
1411            var stacked = stack.get(object);
1412            if (stacked) {
1413              return stacked == other;
1414            }
1415            bitmask |= COMPARE_UNORDERED_FLAG;
1416            stack.set(object, other);
1417            var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
1418            stack["delete"](object);
1419            return result;
1420          case symbolTag:
1421            if (symbolValueOf) {
1422              return symbolValueOf.call(object) == symbolValueOf.call(other);
1423            }
1424        }
1425        return false;
1426      }
1427      function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
1428        var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length;
1429        if (objLength != othLength && !isPartial) {
1430          return false;
1431        }
1432        var index = objLength;
1433        while (index--) {
1434          var key = objProps[index];
1435          if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
1436            return false;
1437          }
1438        }
1439        var stacked = stack.get(object);
1440        if (stacked && stack.get(other)) {
1441          return stacked == other;
1442        }
1443        var result = true;
1444        stack.set(object, other);
1445        stack.set(other, object);
1446        var skipCtor = isPartial;
1447        while (++index < objLength) {
1448          key = objProps[index];
1449          var objValue = object[key], othValue = other[key];
1450          if (customizer) {
1451            var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
1452          }
1453          if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
1454            result = false;
1455            break;
1456          }
1457          skipCtor || (skipCtor = key == "constructor");
1458        }
1459        if (result && !skipCtor) {
1460          var objCtor = object.constructor, othCtor = other.constructor;
1461          if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
1462            result = false;
1463          }
1464        }
1465        stack["delete"](object);
1466        stack["delete"](other);
1467        return result;
1468      }
1469      function getAllKeys(object) {
1470        return baseGetAllKeys(object, keys, getSymbols);
1471      }
1472      function getMapData(map, key) {
1473        var data = map.__data__;
1474        return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
1475      }
1476      function getNative(object, key) {
1477        var value = getValue(object, key);
1478        return baseIsNative(value) ? value : void 0;
1479      }
1480      function getRawTag(value) {
1481        var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];
1482        try {
1483          value[symToStringTag] = void 0;
1484          var unmasked = true;
1485        } catch (e) {
1486        }
1487        var result = nativeObjectToString.call(value);
1488        if (unmasked) {
1489          if (isOwn) {
1490            value[symToStringTag] = tag;
1491          } else {
1492            delete value[symToStringTag];
1493          }
1494        }
1495        return result;
1496      }
1497      var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
1498        if (object == null) {
1499          return [];
1500        }
1501        object = Object(object);
1502        return arrayFilter(nativeGetSymbols(object), function(symbol) {
1503          return propertyIsEnumerable.call(object, symbol);
1504        });
1505      };
1506      var getTag = baseGetTag;
1507      if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag(new Map2()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag || WeakMap2 && getTag(new WeakMap2()) != weakMapTag) {
1508        getTag = function(value) {
1509          var result = baseGetTag(value), Ctor = result == objectTag ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : "";
1510          if (ctorString) {
1511            switch (ctorString) {
1512              case dataViewCtorString:
1513                return dataViewTag;
1514              case mapCtorString:
1515                return mapTag;
1516              case promiseCtorString:
1517                return promiseTag;
1518              case setCtorString:
1519                return setTag;
1520              case weakMapCtorString:
1521                return weakMapTag;
1522            }
1523          }
1524          return result;
1525        };
1526      }
1527      function isIndex(value, length) {
1528        length = length == null ? MAX_SAFE_INTEGER : length;
1529        return !!length && (typeof value == "number" || reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
1530      }
1531      function isKeyable(value) {
1532        var type = typeof value;
1533        return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
1534      }
1535      function isMasked(func) {
1536        return !!maskSrcKey && maskSrcKey in func;
1537      }
1538      function isPrototype(value) {
1539        var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto;
1540        return value === proto;
1541      }
1542      function objectToString(value) {
1543        return nativeObjectToString.call(value);
1544      }
1545      function toSource(func) {
1546        if (func != null) {
1547          try {
1548            return funcToString.call(func);
1549          } catch (e) {
1550          }
1551          try {
1552            return func + "";
1553          } catch (e) {
1554          }
1555        }
1556        return "";
1557      }
1558      function eq(value, other) {
1559        return value === other || value !== value && other !== other;
1560      }
1561      var isArguments = baseIsArguments(/* @__PURE__ */ function() {
1562        return arguments;
1563      }()) ? baseIsArguments : function(value) {
1564        return isObjectLike(value) && hasOwnProperty.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
1565      };
1566      var isArray = Array.isArray;
1567      function isArrayLike2(value) {
1568        return value != null && isLength(value.length) && !isFunction(value);
1569      }
1570      var isBuffer = nativeIsBuffer || stubFalse;
1571      function isEqual2(value, other) {
1572        return baseIsEqual(value, other);
1573      }
1574      function isFunction(value) {
1575        if (!isObject2(value)) {
1576          return false;
1577        }
1578        var tag = baseGetTag(value);
1579        return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
1580      }
1581      function isLength(value) {
1582        return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
1583      }
1584      function isObject2(value) {
1585        var type = typeof value;
1586        return value != null && (type == "object" || type == "function");
1587      }
1588      function isObjectLike(value) {
1589        return value != null && typeof value == "object";
1590      }
1591      var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
1592      function keys(object) {
1593        return isArrayLike2(object) ? arrayLikeKeys(object) : baseKeys(object);
1594      }
1595      function stubArray() {
1596        return [];
1597      }
1598      function stubFalse() {
1599        return false;
1600      }
1601      module.exports = isEqual2;
1602    }
1603  });
1604
1605  
1605// src/main/resources/META-INF/resources/liferay/global.es.js
1606  var import_lodash = __toESM(require_lodash());
1607  var import_lodash2 = __toESM(require_lodash2());
1608
1609  
1609// src/main/resources/META-INF/resources/utils/client_extensions/loadModule.ts
1610  async function loadModule(importDeclarationOrAMDModule) {
1611    if (importDeclarationOrAMDModule.includes(" from ")) {
1612      const [moduleName, symbolName] = getModuleAndSymbolNames(
1613        importDeclarationOrAMDModule
1614      );
1615      const module = await import(
1616        /* webpackIgnore: true */
1617        moduleName
1618      );
1619      return module[symbolName];
1620    } else {
1621      return new Promise((resolve, reject) => {
1622        Liferay.Loader.require(
1623          importDeclarationOrAMDModule,
1624          (jsModule) => resolve(jsModule.default || jsModule),
1625          (error) => reject(error)
1626        );
1627      });
1628    }
1629  }
1630  function getModuleAndSymbolNames(importDeclaration) {
1631    const parts = importDeclaration.split(" from ");
1632    const moduleName = parts[1].trim();
1633    let symbolName = parts[0].trim();
1634    if (symbolName.startsWith("{") && symbolName.endsWith("}")) {
1635      symbolName = symbolName.substring(1, symbolName.length - 1).trim();
1636    }
1637    return [moduleName, symbolName];
1638  }
1639
1640  
1640// src/main/resources/META-INF/resources/utils/client_extensions/loadClientExtensions.ts
1641  function loadClientExtensions(clientExtensionDefinitionsHandlers) {
1642    for (const {
1643      clientExtensionDefinitions,
1644      onLoad
1645    } of clientExtensionDefinitionsHandlers) {
1646      if (!clientExtensionDefinitions.length) {
1647        continue;
1648      }
1649      const promises = clientExtensionDefinitions.map(
1650        ({ context, importDeclaration }) => {
1651          return loadModule(importDeclaration).then((binding) => ({
1652            binding,
1653            context
1654          })).catch((error) => ({
1655            context,
1656            error
1657          }));
1658        }
1659      );
1660      Promise.all(promises).then(onLoad);
1661    }
1662  }
1663
1664  
1664// src/main/resources/META-INF/resources/utils/client_extensions/loadEditorClientExtensions.ts
1665  function loadEditorClientExtensions({
1666    config,
1667    onLoad
1668  }) {
1669    loadClientExtensions([
1670      {
1671        clientExtensionDefinitions: config.editorTransformerURLs.map(
1672          (url) => ({
1673            importDeclaration: `default from ${url}`
1674          })
1675        ),
1676        onLoad: (bindingContexts) => {
1677          let transformedConfig = config;
1678          bindingContexts.forEach(
1679            ({ binding: editorTransformer, error }) => {
1680              if (error) {
1681                console.error(error);
1682              }
1683              const editorConfigTransformer = editorTransformer?.editorConfigTransformer;
1684              if (editorConfigTransformer) {
1685                transformedConfig = editorConfigTransformer(transformedConfig);
1686              }
1687            }
1688          );
1689          onLoad({ transformedConfig });
1690        }
1691      }
1692    ]);
1693  }
1694
1695  
1695// src/main/resources/META-INF/resources/liferay/util/is_object.js
1696  function isObject(val) {
1697    const type = typeof val;
1698    return type === "object" && val !== null || type === "function";
1699  }
1700
1701  
1701// src/main/resources/META-INF/resources/liferay/util/form/object_to_form_data.es.js
1702  function objectToFormData(object = {}, formData = new FormData(), namespace) {
1703    Object.entries(object).forEach(([key, value]) => {
1704      const formKey = namespace ? `${namespace}[${key}]` : key;
1705      if (Array.isArray(value)) {
1706        value.forEach((item) => {
1707          objectToFormData(
1708            {
1709              [formKey]: item
1710            },
1711            formData
1712          );
1713        });
1714      } else if (isObject(value) && !(value instanceof File)) {
1715        objectToFormData(value, formData, formKey);
1716      } else {
1717        formData.append(formKey, value);
1718      }
1719    });
1720    return formData;
1721  }
1722
1723  
1723// src/main/resources/META-INF/resources/liferay/PortletBase.es.js
1724  function toElementHelper(elementOrSelector) {
1725    if (typeof elementOrSelector === "string") {
1726      elementOrSelector = document.querySelector(elementOrSelector);
1727    }
1728    return elementOrSelector;
1729  }
1730  var LifeCycles = class {
1731    get namespace() {
1732      return this._STATE_.namespace;
1733    }
1734    get portletNamespace() {
1735      return this._STATE_.portletNamespace;
1736    }
1737    get rootNode() {
1738      return this._STATE_.rootNode;
1739    }
1740    set portletNamespace(portletNamespace) {
1741      this.rootNode = `#p_p_id${portletNamespace}`;
1742      this._STATE_.portletNamespace = portletNamespace;
1743    }
1744    set namespace(namespace) {
1745      this.rootNode = `#p_p_id${namespace}`;
1746      this._STATE_.namespace = namespace;
1747    }
1748    set rootNode(rootNode) {
1749      if (typeof rootNode === "string") {
1750        rootNode = document.getElementById(
1751          rootNode[0] === "#" ? rootNode.slice(1) : rootNode
1752        );
1753      }
1754      this._STATE_.rootNode = rootNode;
1755    }
1756    constructor(props) {
1757      this._EVENTS_ = {};
1758      this._STATE_ = {
1759        namespace: null,
1760        portletNamespace: null,
1761        rootNode: null
1762      };
1763      const { namespace, portletNamespace, rootNode } = props;
1764      if (namespace) {
1765        this.namespace = namespace;
1766      }
1767      if (portletNamespace) {
1768        this.portletNamespace = portletNamespace;
1769      }
1770      if (rootNode) {
1771        this.rootNode = rootNode;
1772      }
1773      this.created(props);
1774      this.attached(props);
1775    }
1776    dispose() {
1777      this.disposeInternal();
1778      this.detached();
1779      this.disposed();
1780    }
1781    attached() {
1782    }
1783    created() {
1784    }
1785    detached() {
1786    }
1787    disposed() {
1788    }
1789    disposeInternal() {
1790    }
1791    emit(eventName, data) {
1792      const callbacks = this._EVENTS_[eventName];
1793      if (callbacks && callbacks.length) {
1794        for (let i = 0; i < callbacks.length; i++) {
1795          callbacks[i](data);
1796        }
1797      }
1798    }
1799    on(eventName, callback) {
1800      if (!this._EVENTS_[eventName]) {
1801        this._EVENTS_[eventName] = [];
1802      }
1803      this._EVENTS_[eventName].push(callback);
1804    }
1805  };
1806  var PortletBase = class extends LifeCycles {
1807    /**
1808     * Returns a Node List containing all the matching element nodes within the
1809     * subtrees of the root object, in tree order. If there are no matching
1810     * nodes, the method returns an empty Node List.
1811     *
1812     * @param  {string} selectors A list of one or more CSS relative selectors.
1813     * @param  {(string|Element|Document)=} root The root node of the search. If
1814     *         not specified, the element search will start in the portlet's
1815     *         root node or in the document.
1816     * @return {NodeList<Element>} A list of elements matching the selectors, in
1817     *         tree order.
1818     */
1819    all(selectors, root) {
1820      root = toElementHelper(root) || this.rootNode || document;
1821      return root.querySelectorAll(
1822        this.namespaceSelectors_(
1823          this.portletNamespace || this.namespace,
1824          selectors
1825        )
1826      );
1827    }
1828    /**
1829     * Performs an HTTP POST request to the given URL with the given body.
1830     *
1831     * @deprecated As of Athanasius (7.3.x), replaced by `Liferay.Util.fetch`.
1832     * @param      {!string} url The URL to send the post request to.
1833     * @param      {!Object|!FormData} body The request body.
1834     * @return     {Promise} A promise.
1835     */
1836    fetch(url, body) {
1837      const requestBody = this.getRequestBody_(body);
1838      return fetch(url, {
1839        body: requestBody,
1840        credentials: "include",
1841        method: "POST"
1842      });
1843    }
1844    /**
1845     * Transforms the given body into a valid <code>FormData</code> element.
1846     *
1847     * @param  {!FormData|!HTMLFormElement|!Object} body The original data.
1848     * @return {FormData} The transformed form data.
1849     */
1850    getRequestBody_(body) {
1851      let requestBody;
1852      if (body instanceof FormData) {
1853        requestBody = body;
1854      } else if (body instanceof HTMLFormElement) {
1855        requestBody = new FormData(body);
1856      } else if (typeof body === "object") {
1857        requestBody = objectToFormData(this.ns(body));
1858      } else {
1859        requestBody = body;
1860      }
1861      return requestBody;
1862    }
1863    /**
1864     * Namespaces the list of selectors, appending the portlet namespace to the
1865     * selectors of type ID. Selectors of other types remain unaltered.
1866     *
1867     * @param {string} namespace The portlet's namespace.
1868     * @param {string} selectors A list of one or more CSS relative selectors.
1869     * @protected
1870     * @return {string} The namespaced ID selectors.
1871     */
1872    namespaceSelectors_(namespace, selectors) {
1873      return selectors.replace(
1874        new RegExp(`(#|\\[id=(\\"|\\'))(?!` + namespace + ")", "g"),
1875        "$1" + namespace
1876      );
1877    }
1878    /**
1879     * Appends the portlet's namespace to the given string or object properties.
1880     *
1881     * @param  {!Object|string} obj The object or string to namespace.
1882     * @return {Object|string} An object with its properties namespaced, using
1883     *         the portlet namespace or a namespaced string.
1884     */
1885    ns(object) {
1886      return Liferay.Util.ns(this.portletNamespace || this.namespace, object);
1887    }
1888    /**
1889     * Returns the first matching Element node within the subtrees of the
1890     * root object. If there is no matching Element, the method returns null.
1891     *
1892     * @param  {string} selectors A list of one or more CSS relative selectors.
1893     * @param  {(string|Element|Document)=} root The root node of the search. If
1894     *         not specified, the element search will start in the portlet's
1895     *         root node or in the document.
1896     * @return {Element|null} A list of the first element matching the selectors
1897     *         or <code>null</code>.
1898     */
1899    one(selectors, root) {
1900      root = toElementHelper(root) || this.rootNode || document;
1901      return root.querySelector(
1902        this.namespaceSelectors_(
1903          this.portletNamespace || this.namespace,
1904          selectors
1905        )
1906      );
1907    }
1908  };
1909  var PortletBase_es_default = PortletBase;
1910
1911  
1911// src/main/resources/META-INF/resources/liferay/delegate/delegate.es.js
1912  var USE_CAPTURE = {
1913    blur: true,
1914    error: true,
1915    focus: true,
1916    invalid: true,
1917    load: true,
1918    scroll: true
1919  };
1920  function isDisabled(node) {
1921    return !!(node.disabled || node.closest("[disabled]"));
1922  }
1923  function delegate(element, eventName, selector, callback) {
1924    const eventHandler = (event) => {
1925      const { defaultPrevented, target } = event;
1926      if (defaultPrevented || eventName === "click" && isDisabled(target)) {
1927        return;
1928      }
1929      const delegateTarget = target.closest(selector);
1930      if (delegateTarget) {
1931        event.delegateTarget = delegateTarget;
1932        callback(event);
1933      }
1934    };
1935    element.addEventListener(eventName, eventHandler, !!USE_CAPTURE[eventName]);
1936    return {
1937      dispose() {
1938        element.removeEventListener(eventName, eventHandler);
1939      }
1940    };
1941  }
1942  var delegate_es_default = delegate;
1943
1944  
1944// src/main/resources/META-INF/resources/liferay/DynamicInlineScroll.es.js
1945  var DynamicInlineScroll = class extends PortletBase_es_default {
1946    /**
1947     * @inheritDoc
1948     */
1949    attached() {
1950      let { rootNode } = this;
1951      rootNode = rootNode || document.body;
1952      this.inlineScrollEventHandler_ = delegate_es_default(
1953        rootNode,
1954        "scroll",
1955        "ul.pagination ul.inline-scroller",
1956        this.onScroll_.bind(this)
1957      );
1958    }
1959    /**
1960     * @inheritDoc
1961     */
1962    created(props) {
1963      this.cur = Number(props.cur);
1964      this.curParam = props.curParam;
1965      this.forcePost = props.forcePost;
1966      this.formName = props.formName;
1967      this.initialPages = Number(props.initialPages);
1968      this.jsCall = props.jsCall;
1969      this.namespace = props.namespace;
1970      this.pages = Number(props.pages);
1971      this.randomNamespace = props.randomNamespace;
1972      this.url = props.url;
1973      this.urlAnchor = props.urlAnchor;
1974      this.handleListItemClick_ = this.handleListItemClick_.bind(this);
1975    }
1976    /**
1977     * @inheritDoc
1978     */
1979    detached() {
1980      super.detached();
1981      this.inlineScrollEventHandler_.dispose();
1982      const listItem = document.createElement("li");
1983      listItem.removeEventListener("click", this.handleListItemClick_);
1984    }
1985    /**
1986     * Dynamically adds list item elements to the dropdown menu.
1987     *
1988     * @param {element} listElement The list element's DOM node.
1989     * @param {number} pageIndex The Index of the page with an inline-scroller.
1990     * @protected
1991     */
1992    addListItem_(listElement, pageIndex) {
1993      const listItem = document.createElement("li");
1994      listItem.innerHTML = `<a class="dropdown-item" href="${this.getHREF_(
1995        pageIndex
1996      )}"><span class="sr-only">${'Pàgina'}&nbsp;</span>${pageIndex}</a>`;
1997      pageIndex++;
1998      listElement.appendChild(listItem);
1999      listElement.setAttribute("data-page-index", pageIndex);
2000      listItem.addEventListener("click", this.handleListItemClick_);
2001    }
2002    /**
2003     * Returns the <code>href</code> attribute value for each page.
2004     *
2005     * @param {number} pageIndex The Index of the page.
2006     * @protected
2007     * @return {string} The <code>href</code> value as a string.
2008     */
2009    getHREF_(pageIndex) {
2010      const { curParam, formName, jsCall, namespace, url, urlAnchor } = this;
2011      let href = `javascript:document.${formName}.${namespace}${curParam}.value = "${pageIndex}; ${jsCall}`;
2012      if (this.url !== null) {
2013        href = `${url}&${namespace}${curParam}=${pageIndex}${urlAnchor}`;
2014      }
2015      return href;
2016    }
2017    /**
2018     * Returns the numerical value of the parameter passed in.
2019     *
2020     * @param {string|!Object} val The string or object to be converted to a number.
2021     * @protected
2022     * @return {number} The parameter's numberical value.
2023     */
2024    getNumber_(val) {
2025      return Number(val ?? 0);
2026    }
2027    /**
2028     * Handles the click event of the dynmaically added list item, preventing
2029     * the default behavior and submitting the search container form.
2030     *
2031     * @param {Event} event The click event of the dynamically added list item.
2032     * @protected
2033     */
2034    handleListItemClick_(event) {
2035      if (this.forcePost) {
2036        event.preventDefault();
2037        const { curParam, namespace, randomNamespace } = this;
2038        const form = document.getElementById(
2039          randomNamespace + namespace + "pageIteratorFm"
2040        );
2041        form.elements[namespace + curParam].value = event.currentTarget.textContent;
2042        form.submit();
2043      }
2044    }
2045    /**
2046     * An event triggered when a dropdown menu with an inline-scroller is
2047     * scrolled. This dynamically adds list item elements to the dropdown menu
2048     * as it is scrolled down.
2049     *
2050     * @param {Event} event The scroll event triggered by scrolling a dropdown
2051     *        menu with an inline-scroller.
2052     * @protected
2053     */
2054    onScroll_(event) {
2055      const { cur, initialPages, pages } = this;
2056      const { target } = event;
2057      if (target.nodeName !== "UL") {
2058        return;
2059      }
2060      let pageIndex = this.getNumber_(target.dataset.pageIndex);
2061      let pageIndexMax = this.getNumber_(target.dataset.maxIndex);
2062      if (pageIndex === 0) {
2063        const pageIndexCurrent = this.getNumber_(
2064          target.dataset.currentIndex
2065        );
2066        if (pageIndexCurrent === 0) {
2067          pageIndex = initialPages;
2068        } else {
2069          pageIndex = pageIndexCurrent + initialPages;
2070        }
2071      }
2072      if (pageIndexMax === 0) {
2073        pageIndexMax = pages;
2074      }
2075      if (cur <= pages && pageIndex < pageIndexMax && target.scrollTop >= target.scrollHeight - 300) {
2076        this.addListItem_(target, pageIndex);
2077      }
2078    }
2079  };
2080  var DynamicInlineScroll_es_default = DynamicInlineScroll;
2081
2082  
2082// src/main/resources/META-INF/resources/liferay/util/html_util.js
2083  var MAP_HTML_CHARS_ESCAPED = {
2084    '"': "&#034;",
2085    "&": "&amp;",
2086    "'": "&#039;",
2087    "/": "&#047;",
2088    "<": "&lt;",
2089    ">": "&gt;",
2090    "`": "&#096;"
2091  };
2092  var MAP_HTML_CHARS_UNESCAPED = {};
2093  Object.entries(MAP_HTML_CHARS_ESCAPED).forEach(([char, escapedChar]) => {
2094    MAP_HTML_CHARS_UNESCAPED[escapedChar] = char;
2095  });
2096  var HTML_UNESCAPED_VALUES = Object.keys(MAP_HTML_CHARS_ESCAPED);
2097  var HTML_ESCAPE = new RegExp(`[${HTML_UNESCAPED_VALUES.join("")}]`, "g");
2098  var HTML_UNESCAPE = /&([^\s;]+);/g;
2099  function escapeHTML(string) {
2100    return string.replace(
2101      HTML_ESCAPE,
2102      (match) => MAP_HTML_CHARS_ESCAPED[match]
2103    );
2104  }
2105  function unescapeHTML(string) {
2106    return string.replace(HTML_UNESCAPE, (match) => {
2107      return new DOMParser().parseFromString(match, "text/html").documentElement.textContent;
2108    });
2109  }
2110
2111  
2111// src/main/resources/META-INF/resources/liferay/util/toggle_disabled.js
2112  function toggleDisabled(nodes, state) {
2113    if (typeof nodes === "string") {
2114      nodes = document.querySelectorAll(nodes);
2115    } else if (nodes._node) {
2116      nodes = [nodes._node];
2117    } else if (nodes._nodes) {
2118      nodes = nodes._nodes;
2119    } else if (nodes.nodeType === Node.ELEMENT_NODE) {
2120      nodes = [nodes];
2121    }
2122    nodes.forEach((node) => {
2123      node.disabled = state;
2124      if (state) {
2125        node.classList.add("disabled");
2126      } else {
2127        node.classList.remove("disabled");
2128      }
2129    });
2130  }
2131
2132  
2132// src/main/resources/META-INF/resources/liferay/DynamicSelect.js
2133  function sortByValue(a, b) {
2134    let position = a.indexOf('">');
2135    const nameA = a.substring(position);
2136    position = b.indexOf('">');
2137    const nameB = b.substring(position);
2138    if (nameA < nameB) {
2139      return -1;
2140    } else if (nameA > nameB) {
2141      return 1;
2142    } else {
2143      return 0;
2144    }
2145  }
2146  function isArrayLike(value) {
2147    if (Array.isArray(value)) {
2148      return true;
2149    }
2150    return !!(value && typeof value === "object" && typeof value.length === "number" && !value.tagName && !value.scrollTo && !value.document);
2151  }
2152  function toArray(value) {
2153    return isArrayLike(value) ? Array.from(value) : [value];
2154  }
2155  function updateSelect(array, index, list) {
2156    const options = array[index];
2157    const select = document.getElementById(options.select);
2158    if (!select) {
2159      return;
2160    }
2161    const selectVal = toArray(options.selectVal);
2162    const selectOptions = [];
2163    if (options.selectNullable !== false) {
2164      selectOptions.push('<option selected value="0"></option>');
2165    }
2166    list.forEach((item) => {
2167      const key = escapeHTML(item[options.selectId]);
2168      const value = escapeHTML(item[options.selectDesc]);
2169      let selected = "";
2170      if (selectVal.indexOf(key) > -1) {
2171        selected = 'selected="selected"';
2172      }
2173      selectOptions.push(
2174        `<option ${selected} value="${key}">${value}</option>`
2175      );
2176    });
2177    if (options.selectSort) {
2178      selectOptions.sort(sortByValue);
2179    }
2180    while (select.lastChild) {
2181      select.removeChild(select.lastChild);
2182    }
2183    select.innerHTML = selectOptions.join("");
2184    if (options.selectDisableOnEmpty) {
2185      toggleDisabled(select, !list.length);
2186    }
2187  }
2188  function callSelectData(array, index) {
2189    if (index + 1 < array.length) {
2190      const currentSelect = document.getElementById(array[index].select);
2191      const nextSelectData = array[index + 1].selectData;
2192      nextSelectData((list) => {
2193        updateSelect(array, index + 1, list);
2194      }, currentSelect && currentSelect.value);
2195    }
2196  }
2197  function process2(array) {
2198    array.forEach((item, index) => {
2199      const id = item.select;
2200      const select = document.getElementById(id);
2201      const selectData = item.selectData;
2202      if (select) {
2203        select.setAttribute("data-componentType", "dynamic_select");
2204        let prevSelectVal;
2205        if (index > 0) {
2206          prevSelectVal = array[index - 1].selectVal;
2207        }
2208        selectData((list) => {
2209          updateSelect(array, index, list);
2210        }, prevSelectVal);
2211        if (!select.getAttribute("name")) {
2212          select.setAttribute("name", id);
2213        }
2214        select.addEventListener("change", () => {
2215          callSelectData(array, index);
2216        });
2217      }
2218    });
2219  }
2220  var DynamicSelect = class {
2221    constructor(array) {
2222      process2(array);
2223    }
2224  };
2225
2226  
2226// src/main/resources/META-INF/resources/liferay/autosize/autosize.es.js
2227  var DEFAULT_APPEND_CONTENT = "&nbsp;&nbsp;";
2228  var AutoSize = class {
2229    constructor(inputElement) {
2230      __publicField(this, "handleInput", (event) => {
2231        requestAnimationFrame(() => {
2232          this._resizeInput(event.target);
2233        });
2234      });
2235      this.inputElement = inputElement;
2236      this.computedStyle = getComputedStyle(this.inputElement);
2237      this.minHeight = parseInt(
2238        this.computedStyle.height.replace("px", ""),
2239        10
2240      );
2241      this.paddingHeight = parseInt(this.computedStyle.paddingTop.replace("px", ""), 10) + parseInt(this.computedStyle.paddingBottom.replace("px", ""), 10);
2242      this.template = this.createTemplate(this.computedStyle);
2243      document.body.appendChild(this.template);
2244      this.inputElement.addEventListener("input", this.handleInput);
2245      this._resizeInput(this.inputElement);
2246    }
2247    createTemplate(computedStyle) {
2248      const template = document.createElement("pre");
2249      template.style.clip = "rect(0, 0, 0, 0) !important";
2250      template.style.left = "0";
2251      template.style.overflowWrap = "break-word";
2252      template.style.position = "absolute";
2253      template.style.top = "0";
2254      template.style.transform = "scale(0)";
2255      template.style.whiteSpace = "pre-wrap";
2256      template.style.wordBreak = "break-word";
2257      template.style.fontFamily = computedStyle.fontFamily;
2258      template.style.fontSize = computedStyle.fontSize;
2259      template.style.fontStyle = computedStyle.fontStyle;
2260      template.style.fontWeight = computedStyle.fontWeight;
2261      template.style.lineHeight = computedStyle.lineHeight;
2262      template.style.letterSpacing = computedStyle.letterSpacing;
2263      template.style.textTransform = computedStyle.textTransform;
2264      template.style.width = computedStyle.width;
2265      template.textContent = DEFAULT_APPEND_CONTENT;
2266      return template;
2267    }
2268    _resizeInput(inputElement) {
2269      if (this.template.style.width !== this.computedStyle.width) {
2270        this.template.style.width = this.computedStyle.width;
2271      }
2272      this.template.innerHTML = escapeHTML(inputElement.value) + DEFAULT_APPEND_CONTENT;
2273      inputElement.style.height = `${this.template.scrollHeight + this.paddingHeight < this.minHeight ? this.minHeight : this.template.scrollHeight + this.paddingHeight}px`;
2274    }
2275  };
2276  var autosize_es_default = AutoSize;
2277
2278  
2278// src/main/resources/META-INF/resources/liferay/breakpoints.js
2279  var breakpoints_default = {
2280    PHONE: 768,
2281    TABLET: 980
2282  };
2283
2284  
2284// src/main/resources/META-INF/resources/liferay/component.es.js
2285  var componentConfigs = {};
2286  var componentPromiseWrappers = {};
2287  var components = {};
2288  var componentsCache = {};
2289  var componentsFn = {};
2290  var DEFAULT_CACHE_VALIDATION_PARAMS = ["p_p_id", "p_p_lifecycle"];
2291  var DEFAULT_CACHE_VALIDATION_PORTLET_PARAMS = [
2292    "ddmStructureKey",
2293    "fileEntryTypeId",
2294    "folderId",
2295    "navigation",
2296    "status"
2297  ];
2298  var LIFERAY_COMPONENT = "liferay.component";
2299  var _createPromiseWrapper = function(value) {
2300    let promiseWrapper;
2301    if (value) {
2302      promiseWrapper = {
2303        promise: Promise.resolve(value),
2304        resolve() {
2305        }
2306      };
2307    } else {
2308      let promiseResolve;
2309      const promise = new Promise((resolve) => {
2310        promiseResolve = resolve;
2311      });
2312      promiseWrapper = {
2313        promise,
2314        resolve: promiseResolve
2315      };
2316    }
2317    return promiseWrapper;
2318  };
2319  var _restoreTask = function(state, params, node) {
2320    const cache = state.data;
2321    const componentIds = Object.keys(cache);
2322    componentIds.forEach((componentId) => {
2323      const container = node.querySelector(`#${componentId}`);
2324      if (container) {
2325        container.innerHTML = cache[componentId].html;
2326      }
2327    });
2328  };
2329  var _onStartNavigate = function(event) {
2330    const currentUri = new URL(window.location.href);
2331    const uri = new URL(event.path, window.location.href);
2332    const cacheableUri = DEFAULT_CACHE_VALIDATION_PARAMS.every((param) => {
2333      return uri.searchParams.get(param) === currentUri.searchParams.get(param);
2334    });
2335    if (cacheableUri) {
2336      let componentIds = Object.keys(components);
2337      componentIds = componentIds.filter((componentId) => {
2338        const component2 = components[componentId];
2339        if (!component2) {
2340          return false;
2341        }
2342        const componentConfig = componentConfigs[componentId];
2343        const cacheablePortletUri = DEFAULT_CACHE_VALIDATION_PORTLET_PARAMS.every((param) => {
2344          let cacheable = false;
2345          if (componentConfig) {
2346            const namespacedParam = `_${componentConfig.portletId}_${param}`;
2347            cacheable = uri.searchParams.get(namespacedParam) === currentUri.searchParams.get(namespacedParam);
2348          }
2349          return cacheable;
2350        });
2351        const cacheableComponent = typeof component2.isCacheable === "function" ? component2.isCacheable(uri) : false;
2352        return cacheableComponent && cacheablePortletUri && componentConfig && componentConfig.cacheState && component2.element && component2.getState;
2353      });
2354      componentsCache = componentIds.reduce((cache, componentId) => {
2355        const component2 = components[componentId];
2356        const componentConfig = componentConfigs[componentId];
2357        const componentState = component2.getState();
2358        const componentCache = componentConfig.cacheState.reduce(
2359          (cache2, stateKey) => {
2360            cache2[stateKey] = componentState[stateKey];
2361            return cache2;
2362          },
2363          {}
2364        );
2365        cache[componentId] = {
2366          html: component2.element.innerHTML,
2367          state: componentCache
2368        };
2369        return cache;
2370      }, []);
2371      Liferay.DOMTaskRunner.addTask({
2372        action: _restoreTask,
2373        condition: (state) => state.owner === LIFERAY_COMPONENT
2374      });
2375      Liferay.DOMTaskRunner.addTaskState({
2376        data: componentsCache,
2377        owner: LIFERAY_COMPONENT
2378      });
2379    } else {
2380      componentsCache = {};
2381    }
2382  };
2383  var component = function(id, value, componentConfig) {
2384    let retVal;
2385    if (arguments.length === 1) {
2386      let component2 = components[id];
2387      if (component2 && typeof component2 === "function") {
2388        componentsFn[id] = component2;
2389        component2 = component2();
2390        components[id] = component2;
2391      }
2392      retVal = component2;
2393    } else {
2394      if (components[id] && value !== null) {
2395        delete componentConfigs[id];
2396        delete componentPromiseWrappers[id];
2397        console.warn(
2398          'Component with id "' + id + '" is being registered twice. This can lead to unexpected behaviour in the "Liferay.component" and "Liferay.componentReady" APIs, as well as in the "*:registered" events.'
2399        );
2400      }
2401      retVal = components[id] = value;
2402      if (value === null) {
2403        delete componentConfigs[id];
2404        delete componentPromiseWrappers[id];
2405      } else {
2406        componentConfigs[id] = componentConfig;
2407        Liferay.fire(id + ":registered");
2408        const componentPromiseWrapper = componentPromiseWrappers[id];
2409        if (componentPromiseWrapper) {
2410          componentPromiseWrapper.resolve(value);
2411        } else {
2412          componentPromiseWrappers[id] = _createPromiseWrapper(value);
2413        }
2414      }
2415    }
2416    return retVal;
2417  };
2418  var componentReady = function() {
2419    let component2;
2420    let componentPromise;
2421    if (arguments.length === 1) {
2422      component2 = arguments[0];
2423    } else {
2424      component2 = [];
2425      for (let i = 0; i < arguments.length; i++) {
2426        component2[i] = arguments[i];
2427      }
2428    }
2429    if (Array.isArray(component2)) {
2430      componentPromise = Promise.all(
2431        component2.map((id) => componentReady(id))
2432      );
2433    } else {
2434      let componentPromiseWrapper = componentPromiseWrappers[component2];
2435      if (!componentPromiseWrapper) {
2436        componentPromiseWrappers[component2] = componentPromiseWrapper = _createPromiseWrapper();
2437      }
2438      componentPromise = componentPromiseWrapper.promise;
2439    }
2440    return componentPromise;
2441  };
2442  var destroyComponent = function(componentId) {
2443    const component2 = components[componentId];
2444    if (component2) {
2445      const destroyFn = component2.destroy || component2.dispose;
2446      if (destroyFn) {
2447        destroyFn.call(component2);
2448      }
2449      delete componentConfigs[componentId];
2450      delete componentPromiseWrappers[componentId];
2451      delete componentsFn[componentId];
2452      delete components[componentId];
2453    }
2454  };
2455  var destroyComponents = function(filterFn) {
2456    let componentIds = Object.keys(components);
2457    if (filterFn) {
2458      componentIds = componentIds.filter((componentId) => {
2459        return filterFn(
2460          components[componentId],
2461          componentConfigs[componentId] || {}
2462        );
2463      });
2464    }
2465    componentIds.forEach(destroyComponent);
2466  };
2467  var destroyUnfulfilledPromises = function() {
2468    componentPromiseWrappers = {};
2469  };
2470  var getComponentCache = function(componentId) {
2471    const componentCache = componentsCache[componentId];
2472    return componentCache ? componentCache.state : {};
2473  };
2474  var initComponentCache = function() {
2475    Liferay.on("startNavigate", _onStartNavigate);
2476  };
2477
2478  
2478// src/main/resources/META-INF/resources/liferay/debounce/debounce.es.js
2479  function debounce(fn, delay) {
2480    return function debounced() {
2481      const args = arguments;
2482      cancelDebounce(debounced);
2483      debounced.id = setTimeout(() => {
2484        fn(...args);
2485      }, delay);
2486    };
2487  }
2488  function cancelDebounce(debounced) {
2489    clearTimeout(debounced.id);
2490  }
2491  var debounce_es_default = debounce;
2492
2493  
2493// src/main/resources/META-INF/resources/liferay/util/get_top.js
2494  var SIMULATION_DEVICE_IFRAME = "simulationDeviceIframe";
2495  var _topWindow;
2496  function getTop() {
2497    let topWindow = _topWindow;
2498    if (!topWindow) {
2499      let parentWindow = window.parent;
2500      let parentThemeDisplay;
2501      while (parentWindow !== window) {
2502        try {
2503          if (typeof parentWindow.location.href === "undefined") {
2504            break;
2505          }
2506          parentThemeDisplay = parentWindow.themeDisplay;
2507        } catch (error) {
2508          break;
2509        }
2510        if (!parentThemeDisplay || window.name === SIMULATION_DEVICE_IFRAME) {
2511          break;
2512        } else if (!parentThemeDisplay.isStatePopUp() || parentWindow === parentWindow.parent) {
2513          topWindow = parentWindow;
2514          break;
2515        }
2516        parentWindow = parentWindow.parent;
2517      }
2518      if (!topWindow) {
2519        topWindow = window;
2520      }
2521      _topWindow = topWindow;
2522    }
2523    return topWindow;
2524  }
2525
2526  
2526// src/main/resources/META-INF/resources/liferay/util/open_window.js
2527  function openWindow(config, callback) {
2528    const topUtil = getTop();
2529    config.openingWindow = window;
2530    topUtil.Liferay.Util._openWindowProvider(config, callback);
2531  }
2532
2533  
2533// src/main/resources/META-INF/resources/liferay/layout_exporter.es.js
2534  function hideLayoutPane(options) {
2535    options = options || {};
2536    const object = options.obj;
2537    let pane = options.pane;
2538    if (object && object.checked) {
2539      pane = document.querySelector(pane);
2540      if (pane) {
2541        pane.classList.add("hide");
2542      }
2543    }
2544  }
2545  function getLayoutIcons() {
2546    return {
2547      minus: themeDisplay.getPathThemeImages() + "/arrows/01_minus.png",
2548      plus: themeDisplay.getPathThemeImages() + "/arrows/01_plus.png"
2549    };
2550  }
2551  function proposeLayout(options) {
2552    options = options || {};
2553    const namespace = options.namespace;
2554    const reviewers = options.reviewers;
2555    let contents = '<div><form action="' + options.url + '" method="post">';
2556    if (reviewers.length) {
2557      contents += '<textarea name="' + namespace + 'description" style="height: 100px; width: 284px;"></textarea><br /><br />' + 'Revisor' + ' <select name="' + namespace + 'reviewUserId">';
2558      for (let i = 0; i < reviewers.length; i++) {
2559        contents += '<option value="' + reviewers[i].userId + '">' + reviewers[i].fullName + "</option>";
2560      }
2561      contents += '</select><br /><br /><input type="submit" value="' + 'Continua' + '" />';
2562    } else {
2563      contents += 'No\x20s\x27ha\x20trobat\x20cap\x20revisor\x2e' + "<br />" + 'Contacteu\x20amb\x20l\x27administrador\x20per\x20assignar\x20revisors\x2e' + "<br /><br />";
2564    }
2565    contents += "</form></div>";
2566    openWindow({
2567      dialog: {
2568        destroyOnHide: true
2569      },
2570      title: contents
2571    });
2572  }
2573  function publishToLive(options) {
2574    options = options || {};
2575    openWindow({
2576      dialog: {
2577        constrain: true,
2578        modal: true,
2579        on: {
2580          visibleChange(event) {
2581            const instance = this;
2582            if (!event.newVal) {
2583              instance.destroy();
2584            }
2585          }
2586        }
2587      },
2588      title: options.title,
2589      uri: options.url
2590    });
2591  }
2592  function showLayoutPane(options) {
2593    options = options || {};
2594    const object = options.obj;
2595    let pane = options.pane;
2596    if (object && object.checked) {
2597      pane = document.querySelector(pane);
2598      if (pane) {
2599        pane.classList.remove("hide");
2600      }
2601    }
2602  }
2603  function toggleLayoutDetails(options) {
2604    options = options || {};
2605    const detail = document.querySelector(options.detail);
2606    const image = document.querySelector(options.toggle);
2607    if (detail && image) {
2608      let icon = themeDisplay.getPathThemeImages() + "/arrows/01_plus.png";
2609      if (detail.classList.contains("hide")) {
2610        detail.classList.remove("hide");
2611        icon = themeDisplay.getPathThemeImages() + "/arrows/01_minus.png";
2612      } else {
2613        detail.classList.add("hide");
2614      }
2615      image.setAttribute("src", icon);
2616    }
2617  }
2618
2619  
2619// src/main/resources/META-INF/resources/liferay/util/memoize.js
2620  function memoize(fn) {
2621    if (typeof fn !== "function") {
2622      throw new TypeError(`Parameter fn must be a function`);
2623    }
2624    const cache = /* @__PURE__ */ new Map();
2625    const memoized = (...args) => {
2626      let key;
2627      if (args.find((arg) => typeof arg === "object")) {
2628        const objectArguments = args.filter(
2629          (arg) => typeof arg === "object"
2630        );
2631        key = objectArguments.map((objArg) => JSON.stringify(objArg));
2632        if (args.length > 1 && objectArguments.length < args.length) {
2633          args.forEach((arg) => typeof arg !== "object" && key.push(arg));
2634        }
2635        key = key.join(",");
2636      } else {
2637        key = args.length > 1 ? args.join(",") : args[0];
2638      }
2639      if (cache.has(key)) {
2640        return cache.get(key);
2641      } else {
2642        const result = fn.apply(null, args);
2643        cache.set(key, result);
2644        return result;
2645      }
2646    };
2647    memoized.getCache = () => cache;
2648    return memoized;
2649  }
2650
2651  
2651// src/main/resources/META-INF/resources/liferay/util/to_char_code.es.js
2652  var toCharCode = memoize(
2653    (name) => name.split("").map((val) => val.charCodeAt()).join("")
2654  );
2655  var to_char_code_es_default = toCharCode;
2656
2657  
2657// src/main/resources/META-INF/resources/liferay/portal/tabs.es.js
2658  var EVENT_SHOW_TAB = "showTab";
2659  function showTab(namespace, names, id, callback) {
2660    const namespacedId = namespace + to_char_code_es_default(id);
2661    const selectedTab = document.getElementById(namespacedId + "TabsId");
2662    const selectedTabSection = document.getElementById(
2663      namespacedId + "TabsSection"
2664    );
2665    if (selectedTab && selectedTabSection) {
2666      const details = {
2667        id,
2668        names,
2669        namespace,
2670        selectedTab,
2671        selectedTabSection
2672      };
2673      if (callback && typeof callback === "function") {
2674        callback.call(this, namespace, names, id, details);
2675      }
2676      try {
2677        Liferay.on(EVENT_SHOW_TAB, applyTabSelectionDOMChanges);
2678        Liferay.fire(EVENT_SHOW_TAB, details);
2679      } finally {
2680        Liferay.detach(EVENT_SHOW_TAB, applyTabSelectionDOMChanges);
2681      }
2682    }
2683  }
2684  function applyTabSelectionDOMChanges({
2685    id,
2686    names,
2687    namespace,
2688    selectedTab,
2689    selectedTabSection
2690  }) {
2691    const selectedTabLink = selectedTab.querySelector("a");
2692    if (selectedTab && selectedTabLink) {
2693      const activeTab = selectedTab.parentElement.querySelector(".active");
2694      if (activeTab) {
2695        activeTab.classList.remove("active");
2696      }
2697      selectedTabLink.classList.add("active");
2698    }
2699    if (selectedTabSection) {
2700      selectedTabSection.classList.remove("hide");
2701    }
2702    const tabTitle = document.getElementById(namespace + "dropdownTitle");
2703    if (tabTitle && selectedTabLink) {
2704      tabTitle.innerHTML = selectedTabLink.textContent;
2705    }
2706    names.splice(names.indexOf(id), 1);
2707    let tabSection;
2708    for (let i = 0; i < names.length; i++) {
2709      tabSection = document.getElementById(
2710        namespace + to_char_code_es_default(names[i]) + "TabsSection"
2711      );
2712      if (tabSection) {
2713        tabSection.classList.add("hide");
2714      }
2715    }
2716  }
2717
2718  
2718// src/main/resources/META-INF/resources/liferay/portal/tooltip.es.js
2719  function showTooltip(element, text) {
2720    element.setAttribute("title", text);
2721    element.classList.add("lfr-portal-tooltip");
2722  }
2723
2724  
2724// src/main/resources/META-INF/resources/liferay/util/fetch.es.js
2725  function setNewLocation(resource, newLocation) {
2726    if (typeof resource === "string") {
2727      resource = newLocation;
2728    } else if (resource instanceof URL) {
2729      resource = new URL(newLocation);
2730    } else if (resource instanceof Request) {
2731      resource = new Request(newLocation, resource);
2732    } else {
2733      console.warn(
2734        "Resource passed to `fetch()` must either be a string, Request, or URL."
2735      );
2736    }
2737    return resource;
2738  }
2739  function defaultFetch(resource, init = {}) {
2740    if (!resource) {
2741      resource = "/o/";
2742    }
2743    let resourceLocation = resource.url ? resource.url : resource.toString();
2744    if (resourceLocation.startsWith("/")) {
2745      const pathContext = Liferay.ThemeDisplay.getPathContext();
2746      if (pathContext && !resourceLocation.startsWith(pathContext)) {
2747        resourceLocation = pathContext + resourceLocation;
2748        resource = setNewLocation(resource, resourceLocation);
2749      }
2750      resourceLocation = window.location.origin + resourceLocation;
2751    }
2752    const resourceURL = new URL(resourceLocation);
2753    const headers = new Headers({});
2754    const config = {};
2755    if (resourceURL.origin === window.location.origin) {
2756      headers.set("x-csrf-token", Liferay.authToken);
2757      config.credentials = "include";
2758      const doAsUserIdEncoded = Liferay.ThemeDisplay.getDoAsUserIdEncoded();
2759      if (doAsUserIdEncoded) {
2760        resourceURL.searchParams.set("doAsUserId", doAsUserIdEncoded);
2761        resourceLocation = resourceURL.toString();
2762        resource = setNewLocation(resource, resourceLocation);
2763      }
2764    }
2765    new Headers(init.headers || {}).forEach((value, key) => {
2766      headers.set(key, value);
2767    });
2768    return fetch(resource, { ...config, ...init, headers });
2769  }
2770
2771  
2771// src/main/resources/META-INF/resources/liferay/util/get_portlet_id.js
2772  var REGEX_PORTLET_ID = /^(?:p_p_id)?_(.*)_.*$/;
2773  function getPortletId(portletId) {
2774    return portletId.replace(REGEX_PORTLET_ID, "$1");
2775  }
2776
2777  
2777// src/main/resources/META-INF/resources/liferay/util/get_portlet_namespace.es.js
2778  function getPortletNamespace(portletId) {
2779    if (typeof portletId !== "string") {
2780      throw new TypeError("portletId must be a string");
2781    }
2782    return `_${portletId}_`;
2783  }
2784
2785  
2785// src/main/resources/META-INF/resources/liferay/util/portlet_url/create_portlet_url.es.js
2786  var SCHEME_REGEXP = /^[a-z][a-z0-9+.-]*:/i;
2787  function isAbsolute_(urlString) {
2788    return SCHEME_REGEXP.test(urlString);
2789  }
2790  function createPortletURL(basePortletURL, parameters = {}) {
2791    if (typeof basePortletURL !== "string") {
2792      throw new TypeError("basePortletURL parameter must be a string");
2793    }
2794    if (!parameters || typeof parameters !== "object") {
2795      throw new TypeError("parameters argument must be an object");
2796    }
2797    const reservedParameters = /* @__PURE__ */ new Set([
2798      "doAsGroupId",
2799      "doAsUserId",
2800      "doAsUserLanguageId",
2801      "p_auth",
2802      "p_auth_secret",
2803      "p_f_id",
2804      "p_j_a_id",
2805      "p_l_id",
2806      "p_l_reset",
2807      "p_p_auth",
2808      "p_p_cacheability",
2809      "p_p_i_id",
2810      "p_p_id",
2811      "p_p_isolated",
2812      "p_p_lifecycle",
2813      "p_p_mode",
2814      "p_p_resource_id",
2815      "p_p_state",
2816      "p_p_state_rcv",
2817      "p_p_static",
2818      "p_p_url_type",
2819      "p_p_width",
2820      "p_t_lifecycle",
2821      "p_v_l_s_g_id",
2822      "refererGroupId",
2823      "refererPlid",
2824      "saveLastPath",
2825      "scroll"
2826    ]);
2827    if (basePortletURL.indexOf(Liferay.ThemeDisplay.getPortalURL()) !== 0 && !isAbsolute_(basePortletURL)) {
2828      if (basePortletURL.indexOf("/") !== 0) {
2829        basePortletURL = `${Liferay.ThemeDisplay.getPortalURL()}/${basePortletURL}`;
2830      } else {
2831        basePortletURL = Liferay.ThemeDisplay.getPortalURL() + basePortletURL;
2832      }
2833    }
2834    const portletURL = new URL(basePortletURL);
2835    const urlSearchParams = new URLSearchParams(portletURL.search);
2836    const portletID = parameters.p_p_id || urlSearchParams.get("p_p_id");
2837    if (Object.entries(parameters).length && !portletID) {
2838      throw new TypeError(
2839        "Portlet ID must not be null if parameters are provided"
2840      );
2841    }
2842    let namespace = "";
2843    if (Object.entries(parameters).length) {
2844      namespace = getPortletNamespace(portletID);
2845    }
2846    Object.keys(parameters).forEach((key) => {
2847      let param;
2848      if (reservedParameters.has(key)) {
2849        param = key;
2850      } else {
2851        param = `${namespace}${key}`;
2852      }
2853      urlSearchParams.set(param, parameters[key]);
2854    });
2855    portletURL.search = urlSearchParams.toString();
2856    return portletURL;
2857  }
2858
2859  
vendor: 497 bytes, lines 2859-2872
2859// ../../../node_modules/uuid/dist/esm-browser/rng.js
2860  var getRandomValues;
2861  var rnds8 = new Uint8Array(16);
2862  function rng() {
2863    if (!getRandomValues) {
2864      getRandomValues = typeof crypto !== "undefined" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);
2865      if (!getRandomValues) {
2866        throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
2867      }
2868    }
2869    return getRandomValues(rnds8);
2870  }
2871
2872  
vendor: 746 bytes, lines 2872-2881
2872// ../../../node_modules/uuid/dist/esm-browser/stringify.js
2873  var byteToHex = [];
2874  for (let i = 0; i < 256; ++i) {
2875    byteToHex.push((i + 256).toString(16).slice(1));
2876  }
2877  function unsafeStringify(arr, offset = 0) {
2878    return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
2879  }
2880
2881  
vendor: 210 bytes, lines 2881-2887
2881// ../../../node_modules/uuid/dist/esm-browser/native.js
2882  var randomUUID = typeof crypto !== "undefined" && crypto.randomUUID && crypto.randomUUID.bind(crypto);
2883  var native_default = {
2884    randomUUID
2885  };
2886
2887  
vendor: 562 bytes, lines 2887-2907
2887// ../../../node_modules/uuid/dist/esm-browser/v4.js
2888  function v4(options, buf, offset) {
2889    if (native_default.randomUUID && !buf && !options) {
2890      return native_default.randomUUID();
2891    }
2892    options = options || {};
2893    const rnds = options.random || (options.rng || rng)();
2894    rnds[6] = rnds[6] & 15 | 64;
2895    rnds[8] = rnds[8] & 63 | 128;
2896    if (buf) {
2897      offset = offset || 0;
2898      for (let i = 0; i < 16; ++i) {
2899        buf[offset + i] = rnds[i];
2900      }
2901      return buf;
2902    }
2903    return unsafeStringify(rnds);
2904  }
2905  var v4_default = v4;
2906
2907  
2907// src/main/resources/META-INF/resources/liferay/portlet/portlet_constants.es.js
2908  var PortletConstants = {
2909    // Portlet mode
2910    EDIT: "edit",
2911    HELP: "help",
2912    VIEW: "view",
2913    // Window state
2914    MAXIMIZED: "maximized",
2915    MINIMIZED: "minimized",
2916    NORMAL: "normal",
2917    // Resource URL cacheability
2918    FULL: "cacheLevelFull",
2919    PAGE: "cacheLevelPage",
2920    PORTLET: "cacheLevelPortlet"
2921  };
2922  var portlet_constants_es_default = PortletConstants;
2923
2924  
2924// src/main/resources/META-INF/resources/liferay/portlet/RenderState.es.js
2925  var RenderState = class _RenderState {
2926    constructor(state) {
2927      if (isObject(state)) {
2928        this.from(state);
2929      } else {
2930        this.parameters = {};
2931        this.portletMode = portlet_constants_es_default.VIEW;
2932        this.windowState = portlet_constants_es_default.NORMAL;
2933      }
2934    }
2935    /**
2936     * Clone returns a copy of this RenderState instance.
2937     * @memberof RenderState
2938     * @return {RenderState} A RenderState instance with same properties.
2939     * @review
2940     */
2941    clone() {
2942      return new _RenderState(this);
2943    }
2944    /**
2945     * Set the properties of a RenderState instance based on another RenderState
2946     * @memberof RenderState
2947     * @review
2948     */
2949    from(renderState) {
2950      this.parameters = {};
2951      Object.keys(renderState.parameters).forEach((name) => {
2952        if (Array.isArray(renderState.parameters[name])) {
2953          this.parameters[name] = renderState.parameters[name].slice(0);
2954        }
2955      });
2956      this.setPortletMode(renderState.portletMode);
2957      this.setWindowState(renderState.windowState);
2958    }
2959    /**
2960     * Returns the portletMode for this RenderState.
2961     * @memberof RenderState
2962     * @return {String} The portletMode for this render state
2963     * @review
2964     */
2965    getPortletMode() {
2966      return this.portletMode;
2967    }
2968    /**
2969     * Returns the string parameter value for the given name.
2970     * If name designates a multi-valued parameter this function returns
2971     * the first value in the values array. If the parameter is undefined
2972     * this function returns the optional default parameter <code>defaultValue</code>.
2973     * @memberof RenderState
2974     * @param {String} name The name of the parameter to retreive.
2975     * @param {?String} defaultValue  The default value of the parameter in case it is undefined.
2976     * @return {String} The value of the parameter
2977     * @review
2978     */
2979    getValue(name, defaultValue) {
2980      if (typeof name !== "string") {
2981        throw new TypeError("Parameter name must be a string");
2982      }
2983      let value = this.parameters[name];
2984      if (Array.isArray(value)) {
2985        value = value[0];
2986      }
2987      if (value === void 0 && defaultValue !== void 0) {
2988        value = defaultValue;
2989      }
2990      return value;
2991    }
2992    /**
2993     * Gets the string array parameter value for the given <code>name</code>.
2994     * If the parameter for the given name is undefined, this function
2995     * returns the optional default value array <code>def</code>.
2996     * @memberof RenderState
2997     * @param {String} name  The name of the parameter to retrieve.
2998     * @param {?Array} defaultValue   The default value for the parameter if it is undefined.
2999     * @return {Array}
3000     * @review
3001     */
3002    getValues(name, defaultValue) {
3003      if (typeof name !== "string") {
3004        throw new TypeError("Parameter name must be a string");
3005      }
3006      const value = this.parameters[name];
3007      return value ? value : defaultValue;
3008    }
3009    /**
3010     * Returns the windowState for this RenderState.
3011     * @memberof RenderState
3012     * @return {String} the window state for this render state
3013     * @review
3014     */
3015    getWindowState() {
3016      return this.windowState;
3017    }
3018    /**
3019     * Removes the parameter with the given name.
3020     * @memberof RenderState
3021     * @param {String} name The name of the parameter to be removed.
3022     * @review
3023     */
3024    remove(name) {
3025      if (typeof name !== "string") {
3026        throw new TypeError("Parameter name must be a string");
3027      }
3028      if (this.parameters[name] !== void 0) {
3029        delete this.parameters[name];
3030      }
3031    }
3032    /**
3033     * Sets the portletMode to the specified value.
3034     * @memberof RenderState
3035     * @param {String} portletMode The portlet mode to be set.
3036     * @review
3037     * @see {PortletConstants}
3038     */
3039    setPortletMode(portletMode) {
3040      if (typeof portletMode !== "string") {
3041        throw new TypeError("Portlet Mode must be a string");
3042      }
3043      if (portletMode === portlet_constants_es_default.EDIT || portletMode === portlet_constants_es_default.HELP || portletMode === portlet_constants_es_default.VIEW) {
3044        this.portletMode = portletMode;
3045      }
3046    }
3047    /**
3048     * Sets a parameter with a given name and value.
3049     * The value may be a string or an array.
3050     * @memberof RenderState
3051     * @param {String} name	The name of the parameter.
3052     * @param {Array|String} value  The value of the parameter.
3053     * @review
3054     */
3055    setValue(name, value) {
3056      if (typeof name !== "string") {
3057        throw new TypeError("Parameter name must be a string");
3058      }
3059      if (typeof value !== "string" && value !== null && !Array.isArray(value)) {
3060        throw new TypeError(
3061          "Parameter value must be a string, an array or null"
3062        );
3063      }
3064      if (!Array.isArray(value)) {
3065        value = [value];
3066      }
3067      this.parameters[name] = value;
3068    }
3069    /**
3070     * Sets a parameter with a given name and value.
3071     * The value may be a string or an array.
3072     * @memberof RenderState
3073     * @param {String} name	The name of the parameter.
3074     * @param {Array|String} value  The value of the parameter.
3075     * @review
3076     */
3077    setValues(name, value) {
3078      this.setValue(name, value);
3079    }
3080    /**
3081     * Sets the windowState to the specified value.
3082     * @memberof RenderState
3083     * @param {String} windowSstate The window state to be set.
3084     * @return {String}
3085     * @review
3086     * @see {PortletConstants}
3087     */
3088    setWindowState(windowState) {
3089      if (typeof windowState !== "string") {
3090        throw new TypeError("Window State must be a string");
3091      }
3092      if (windowState === portlet_constants_es_default.MAXIMIZED || windowState === portlet_constants_es_default.MINIMIZED || windowState === portlet_constants_es_default.NORMAL) {
3093        this.windowState = windowState;
3094      }
3095    }
3096  };
3097  var RenderState_es_default = RenderState;
3098
3099  
3099// src/main/resources/META-INF/resources/liferay/portlet/portlet_util.es.js
3100  var AJAX_ACTION_VALUE = "0";
3101  var CACHE_LEVEL_KEY = "p_p_cacheability";
3102  var HUB_ACTION_KEY = "p_p_hub";
3103  var PARTIAL_ACTION_VALUE = "1";
3104  var PORTLET_MODE_KEY = "p_p_mode";
3105  var PUBLIC_RENDER_PARAM_KEY = "p_r_p_";
3106  var RENDER_PARAM_KEY = "priv_r_p_";
3107  var RESOURCE_ID_KEY = "p_p_resource_id";
3108  var TOKEN_DELIM = "&";
3109  var VALUE_ARRAY_EMPTY = "";
3110  var VALUE_DELIM = "=";
3111  var VALUE_NULL = "";
3112  var WINDOW_STATE_KEY = "p_p_state";
3113  var isParameterEqual = function(parameter1, parameter2) {
3114    let result = false;
3115    if (parameter1 === void 0 && parameter2 === void 0) {
3116      result = true;
3117    }
3118    if (parameter1 === void 0 || parameter2 === void 0) {
3119      result = false;
3120    }
3121    if (parameter1.length !== parameter2.length) {
3122      result = false;
3123    }
3124    for (let i = parameter1.length - 1; i >= 0; i--) {
3125      if (parameter1[i] !== parameter2[i]) {
3126        result = false;
3127      }
3128    }
3129    return result;
3130  };
3131  var stateChanged = function(pageRenderState2, newState, portletId) {
3132    let result = false;
3133    if (pageRenderState2 && pageRenderState2.portlets) {
3134      const portletData = pageRenderState2.portlets[portletId];
3135      if (portletData) {
3136        const oldState = pageRenderState2.portlets[portletId].state;
3137        if (!newState.portletMode || !newState.windowState || !newState.parameters) {
3138          throw new Error(`Error decoding state: ${newState}`);
3139        }
3140        if (newState.porletMode !== oldState.portletMode || newState.windowState !== oldState.windowState) {
3141          result = true;
3142        } else {
3143          const newKeys = Object.keys(newState.parameters);
3144          newKeys.forEach((key) => {
3145            const newParameter = newState.parameters[key];
3146            const oldParameter = oldState.parameters[key];
3147            if (!isParameterEqual(newParameter, oldParameter)) {
3148              result = true;
3149            }
3150          });
3151          const oldKeys = Object.keys(oldState.parameters);
3152          oldKeys.forEach((key) => {
3153            if (!newState.parameters[key]) {
3154              result = true;
3155            }
3156          });
3157        }
3158      }
3159    }
3160    return result;
3161  };
3162  var decodeUpdateString = function(pageRenderState2, updateString) {
3163    const portlets = pageRenderState2 && pageRenderState2.portlets ? pageRenderState2.portlets : {};
3164    try {
3165      const newRenderState = JSON.parse(updateString);
3166      if (newRenderState.portlets) {
3167        const keys = Object.keys(portlets);
3168        keys.forEach((key) => {
3169          const newState = newRenderState.portlets[key].state;
3170          const oldState = portlets[key].state;
3171          if (!newState || !oldState) {
3172            throw new Error(
3173              `Invalid update string.
3174old state=${oldState}
3175new state=${newState}`
3176            );
3177          }
3178          if (stateChanged(pageRenderState2, newState, key)) {
3179            portlets[key] = newRenderState.portlets[key];
3180          }
3181        });
3182      }
3183    } catch (error) {
3184    }
3185    return portlets;
3186  };
3187  var encodeFormAsString = function(portletId, form) {
3188    const parameters = [];
3189    for (let i = 0; i < form.elements.length; i++) {
3190      const element = form.elements[i];
3191      const name = element.name;
3192      const tag = element.nodeName.toUpperCase();
3193      const type = tag === "INPUT" ? element.type.toUpperCase() : "";
3194      const value = element.value;
3195      if (name && !element.disabled && type !== "FILE") {
3196        if (tag === "SELECT" && element.multiple) {
3197          const options = [...element.options];
3198          options.forEach((opt) => {
3199            if (opt.checked) {
3200              const value2 = opt.value;
3201              const parameter = encodeURIComponent(portletId + name) + "=" + encodeURIComponent(value2);
3202              parameters.push(parameter);
3203            }
3204          });
3205        } else if (type !== "CHECKBOX" && type !== "RADIO" || element.checked) {
3206          const param = encodeURIComponent(portletId + name) + "=" + encodeURIComponent(value);
3207          parameters.push(param);
3208        }
3209      }
3210    }
3211    return parameters.join("&");
3212  };
3213  var encodeParameter = function(name, values) {
3214    let str = "";
3215    if (Array.isArray(values)) {
3216      if (!values.length) {
3217        str += TOKEN_DELIM + encodeURIComponent(name) + VALUE_DELIM + VALUE_ARRAY_EMPTY;
3218      } else {
3219        values.forEach((value) => {
3220          str += TOKEN_DELIM + encodeURIComponent(name);
3221          if (value === null) {
3222            str += VALUE_DELIM + VALUE_NULL;
3223          } else {
3224            str += VALUE_DELIM + encodeURIComponent(value);
3225          }
3226        });
3227      }
3228    }
3229    return str;
3230  };
3231  var generateActionUrl = function(portletId, url, form) {
3232    const request = {
3233      credentials: "same-origin",
3234      method: "POST",
3235      url
3236    };
3237    if (form) {
3238      const enctype = form.enctype;
3239      if (enctype === "multipart/form-data") {
3240        const formData = new FormData(form);
3241        request.body = formData;
3242      } else {
3243        const formAsString = encodeFormAsString(portletId, form);
3244        const method = form.method ? form.method.toUpperCase() : "GET";
3245        if (method === "GET") {
3246          if (url.indexOf("?") >= 0) {
3247            url += `&${formAsString}`;
3248          } else {
3249            url += `?${formAsString}`;
3250          }
3251          request.url = url;
3252        } else {
3253          request.body = formAsString;
3254          request.headers = {
3255            "Content-Type": "application/x-www-form-urlencoded"
3256          };
3257        }
3258      }
3259    }
3260    return request;
3261  };
3262  var generateParameterString = function(pageRenderState2, portletId, name, type, group) {
3263    let str = "";
3264    if (pageRenderState2.portlets && pageRenderState2.portlets[portletId]) {
3265      const portletData = pageRenderState2.portlets[portletId];
3266      if (portletData && portletData.state && portletData.state.parameters) {
3267        const values = portletData.state.parameters[name];
3268        if (values !== void 0) {
3269          if (type === PUBLIC_RENDER_PARAM_KEY) {
3270            str += encodeParameter(group, values);
3271          } else if (type === RENDER_PARAM_KEY) {
3272            str += encodeParameter(
3273              portletId + RENDER_PARAM_KEY + name,
3274              values
3275            );
3276          } else {
3277            str += encodeParameter(portletId + name, values);
3278          }
3279        }
3280      }
3281    }
3282    return str;
3283  };
3284  var generatePortletModeAndWindowStateString = function(pageRenderState2, portletId) {
3285    let str = "";
3286    if (pageRenderState2.portlets) {
3287      const portletData = pageRenderState2.portlets[portletId];
3288      if (portletData.state) {
3289        const state = portletData.state;
3290        str += TOKEN_DELIM + PORTLET_MODE_KEY + VALUE_DELIM + encodeURIComponent(state.portletMode);
3291        str += TOKEN_DELIM + WINDOW_STATE_KEY + VALUE_DELIM + encodeURIComponent(state.windowState);
3292      }
3293    }
3294    return str;
3295  };
3296  var isParameterInStateEqual = function(pageRenderState2, portletId, state, name) {
3297    let result = false;
3298    if (pageRenderState2 && pageRenderState2.portlets) {
3299      const portletData = pageRenderState2.portlets[portletId];
3300      if (state.parameters[name] && portletData.state.parameters[name]) {
3301        const newParameter = state.parameters[name];
3302        const oldParameter = portletData.state.parameters[name];
3303        result = isParameterEqual(newParameter, oldParameter);
3304      }
3305    }
3306    return result;
3307  };
3308  var getUpdatedPublicRenderParameters = function(pageRenderState2, portletId, state) {
3309    const publicRenderParameters = {};
3310    if (pageRenderState2 && pageRenderState2.portlets) {
3311      const portletData = pageRenderState2.portlets[portletId];
3312      if (portletData && portletData.pubParms) {
3313        const portletPublicParameters = portletData.pubParms;
3314        const keys = Object.keys(portletPublicParameters);
3315        keys.forEach((key) => {
3316          if (!isParameterInStateEqual(
3317            pageRenderState2,
3318            portletId,
3319            state,
3320            key
3321          )) {
3322            const group = portletPublicParameters[key];
3323            publicRenderParameters[group] = state.parameters[key];
3324          }
3325        });
3326      }
3327    }
3328    return publicRenderParameters;
3329  };
3330  var isPublicParameter = function(pageRenderState2, portletId, name) {
3331    let result = false;
3332    if (pageRenderState2 && pageRenderState2.portlets) {
3333      const portletData = pageRenderState2.portlets[portletId];
3334      if (portletData && portletData.pubParms) {
3335        const keys = Object.keys(portletData.pubParms);
3336        result = keys.includes(name);
3337      }
3338    }
3339    return result;
3340  };
3341  var getUrl = function(pageRenderState2, type, portletId, parameters, cache, resourceId) {
3342    let cacheability = "cacheLevelPage";
3343    let str = "";
3344    let url = "";
3345    if (pageRenderState2 && pageRenderState2.portlets) {
3346      if (type === "RENDER" && portletId === void 0) {
3347        portletId = null;
3348      }
3349      const portletData = pageRenderState2.portlets[portletId];
3350      if (portletData) {
3351        if (type === "RESOURCE") {
3352          url = decodeURIComponent(portletData.encodedResourceURL);
3353          if (cache) {
3354            cacheability = cache;
3355          }
3356          url += TOKEN_DELIM + CACHE_LEVEL_KEY + VALUE_DELIM + encodeURIComponent(cacheability);
3357          if (resourceId) {
3358            url += TOKEN_DELIM + RESOURCE_ID_KEY + VALUE_DELIM + encodeURIComponent(resourceId);
3359          }
3360        } else if (type === "RENDER" && portletId !== null) {
3361          url = decodeURIComponent(portletData.encodedRenderURL);
3362        } else if (type === "RENDER") {
3363          url = decodeURIComponent(pageRenderState2.encodedCurrentURL);
3364        } else if (type === "ACTION") {
3365          url = decodeURIComponent(portletData.encodedActionURL);
3366          url += TOKEN_DELIM + HUB_ACTION_KEY + VALUE_DELIM + encodeURIComponent(AJAX_ACTION_VALUE);
3367        } else if (type === "PARTIAL_ACTION") {
3368          url = decodeURIComponent(portletData.encodedActionURL);
3369          url += TOKEN_DELIM + HUB_ACTION_KEY + VALUE_DELIM + encodeURIComponent(PARTIAL_ACTION_VALUE);
3370        }
3371        if (type !== "RESOURCE" || cacheability !== "cacheLevelFull") {
3372          if (portletId) {
3373            url += generatePortletModeAndWindowStateString(
3374              pageRenderState2,
3375              portletId
3376            );
3377          }
3378          if (portletId) {
3379            str = "";
3380            if (portletData.state && portletData.state.parameters) {
3381              const stateParameters = portletData.state.parameters;
3382              const keys = Object.keys(stateParameters);
3383              keys.forEach((key) => {
3384                if (!isPublicParameter(
3385                  pageRenderState2,
3386                  portletId,
3387                  key
3388                )) {
3389                  str += generateParameterString(
3390                    pageRenderState2,
3391                    portletId,
3392                    key,
3393                    RENDER_PARAM_KEY
3394                  );
3395                }
3396              });
3397              url += str;
3398            }
3399          }
3400          if (pageRenderState2.prpMap) {
3401            str = "";
3402            const publicRenderParameters = {};
3403            const mapKeys = Object.keys(pageRenderState2.prpMap);
3404            mapKeys.forEach((mapKey) => {
3405              const groupKeys = Object.keys(
3406                pageRenderState2.prpMap[mapKey]
3407              );
3408              groupKeys.forEach((groupKey) => {
3409                const groupName = pageRenderState2.prpMap[mapKey][groupKey];
3410                const parts = groupName.split("|");
3411                if (!Object.hasOwnProperty.call(
3412                  publicRenderParameters,
3413                  mapKey
3414                )) {
3415                  publicRenderParameters[mapKey] = generateParameterString(
3416                    pageRenderState2,
3417                    parts[0],
3418                    parts[1],
3419                    PUBLIC_RENDER_PARAM_KEY,
3420                    mapKey
3421                  );
3422                  str += publicRenderParameters[mapKey];
3423                }
3424              });
3425            });
3426            url += str;
3427          }
3428        }
3429      }
3430    }
3431    if (parameters) {
3432      str = "";
3433      const parameterKeys = Object.keys(parameters);
3434      parameterKeys.forEach((parameterKey) => {
3435        str += encodeParameter(
3436          portletId + parameterKey,
3437          parameters[parameterKey]
3438        );
3439      });
3440      url += str;
3441    }
3442    return Promise.resolve(url);
3443  };
3444  var validateArguments = function(args = [], min = 0, max = 1, types = []) {
3445    if (args.length < min) {
3446      throw new TypeError(
3447        `Too few arguments provided: Number of arguments: ${args.length}`
3448      );
3449    } else if (args.length > max) {
3450      throw new TypeError(
3451        `Too many arguments provided: ${[].join.call(args, ", ")}`
3452      );
3453    } else if (Array.isArray(types)) {
3454      let i = Math.min(args.length, types.length) - 1;
3455      for (i; i >= 0; i--) {
3456        if (typeof args[i] !== types[i]) {
3457          throw new TypeError(
3458            `Parameter ${i} is of type ${typeof args[i]} rather than the expected type ${types[i]}`
3459          );
3460        }
3461        if (args[i] === null || args[i] === void 0) {
3462          throw new TypeError(`Argument is ${typeof args[i]}`);
3463        }
3464      }
3465    }
3466  };
3467  var validateForm = function(form) {
3468    if (!(form instanceof HTMLFormElement)) {
3469      throw new TypeError("Element must be an HTMLFormElement");
3470    }
3471    const method = form.method ? form.method.toUpperCase() : void 0;
3472    if (method && method !== "GET" && method !== "POST") {
3473      throw new TypeError(
3474        `Invalid form method ${method}. Allowed methods are GET & POST`
3475      );
3476    }
3477    const enctype = form.enctype;
3478    if (enctype && enctype !== "application/x-www-form-urlencoded" && enctype !== "multipart/form-data") {
3479      throw new TypeError(
3480        `Invalid form enctype ${enctype}. Allowed: 'application/x-www-form-urlencoded' & 'multipart/form-data'`
3481      );
3482    }
3483    if (enctype && enctype === "multipart/form-data" && method !== "POST") {
3484      throw new TypeError(
3485        "Invalid method with multipart/form-data. Must be POST"
3486      );
3487    }
3488    if (!enctype || enctype === "application/x-www-form-urlencoded") {
3489      const l = form.elements.length;
3490      for (let i = 0; i < l; i++) {
3491        if (form.elements[i].nodeName.toUpperCase() === "INPUT" && form.elements[i].type.toUpperCase() === "FILE") {
3492          throw new TypeError(
3493            "Must use enctype = 'multipart/form-data' with input type FILE."
3494          );
3495        }
3496      }
3497    }
3498  };
3499  var validateParameters = function(parameters) {
3500    if (!(parameters !== void 0 && parameters !== null)) {
3501      throw new TypeError(`The parameter object is: ${typeof parameters}`);
3502    }
3503    const keys = Object.keys(parameters);
3504    keys.forEach((key) => {
3505      if (!Array.isArray(parameters[key])) {
3506        throw new TypeError(`${key} parameter is not an array`);
3507      }
3508      if (!parameters[key].length) {
3509        throw new TypeError(`${key} parameter is an empty array`);
3510      }
3511    });
3512  };
3513  var validatePortletId = function(pageRenderState2 = {}, portletId = "") {
3514    return pageRenderState2.portlets && Object.keys(pageRenderState2.portlets).includes(portletId);
3515  };
3516  var validateState = function(state = {}, portletData = {}) {
3517    validateParameters(state.parameters);
3518    const portletMode = state.portletMode;
3519    if (typeof portletMode !== "string") {
3520      throw new TypeError(
3521        `Invalid parameters. portletMode is ${typeof portletMode}`
3522      );
3523    } else {
3524      const allowedPortletModes = portletData.allowedPM;
3525      if (!allowedPortletModes.includes(portletMode.toLowerCase())) {
3526        throw new TypeError(
3527          `Invalid portletMode=${portletMode} is not in ${allowedPortletModes}`
3528        );
3529      }
3530    }
3531    const windowState = state.windowState;
3532    if (typeof windowState !== "string") {
3533      throw new TypeError(
3534        `Invalid parameters. windowState is ${typeof windowState}`
3535      );
3536    } else {
3537      const allowedWindowStates = portletData.allowedWS;
3538      if (!allowedWindowStates.includes(windowState.toLowerCase())) {
3539        throw new TypeError(
3540          `Invalid windowState=${windowState} is not in ${allowedWindowStates}`
3541        );
3542      }
3543    }
3544  };
3545
3546  
3546// src/main/resources/META-INF/resources/liferay/portlet/PortletInit.es.js
3547  var doHistory = window.history && window.history.pushState;
3548  var portletRegex = "^portlet[.].*";
3549  var busy = false;
3550  var eventListeners = {};
3551  var eventListenersQueue = [];
3552  var pageRenderState;
3553  var PortletInit = class {
3554    constructor(portletId) {
3555      this._portletId = portletId;
3556      this.constants = { ...portlet_constants_es_default };
3557      if (!pageRenderState) {
3558        pageRenderState = global.portlet.data.pageRenderState;
3559        this._updateHistory(true);
3560      }
3561      this.portletModes = pageRenderState.portlets[this._portletId].allowedPM.slice(0);
3562      this.windowStates = pageRenderState.portlets[this._portletId].allowedWS.slice(0);
3563    }
3564    /**
3565     * Performs the actual action.
3566     * @param {Object} parameters Additional parameters to be set.
3567     * @param {HTMLFormElement} element Form to be submitted. May be <code>null</code>.
3568     * @protected
3569     * @review
3570     */
3571    _executeAction(parameters, element) {
3572      return new Promise((resolve, reject) => {
3573        getUrl(pageRenderState, "ACTION", this._portletId, parameters).then(
3574          (url) => {
3575            const options = generateActionUrl(
3576              this._portletId,
3577              url,
3578              element
3579            );
3580            defaultFetch(options.url, options).then((res) => res.text()).then((text) => {
3581              const updatedIds = this._updatePageStateFromString(
3582                text,
3583                this._portletId
3584              );
3585              resolve(updatedIds);
3586            }).catch((error) => {
3587              reject(error);
3588            });
3589          }
3590        );
3591      });
3592    }
3593    /**
3594     * Returns true if an onStateChange listener is registered for the portlet.
3595     * @memberof PortletInit
3596     * @param {string} portletId The portlet ID.
3597     * @return {boolean} Returns true if a listener is registered.
3598     * @protected
3599     * @review
3600     */
3601    _hasListener(portletId) {
3602      const eventListenerPortletIds = Object.keys(eventListeners).map(
3603        (key) => eventListeners[key].id
3604      );
3605      return eventListenerPortletIds.includes(portletId);
3606    }
3607    /**
3608     * Sends an onError event to all registered error event handlers for a given
3609     * portlet.
3610     * @memberof PortletInit
3611     * @param {string} portletId The portlet ID.
3612     * @param {string} err The error message.
3613     * @protected
3614     * @review
3615     */
3616    _reportError(portletId, error) {
3617      Object.keys(eventListeners).map((key) => {
3618        const listener = eventListeners[key];
3619        if (listener.id === portletId && listener.type === "portlet.onError") {
3620          setTimeout(() => {
3621            listener.handler("portlet.onError", error);
3622          });
3623        }
3624        return false;
3625      });
3626    }
3627    /**
3628     * Callback function that must be called after a partial action has been
3629     * started.
3630     *
3631     * The page state is generated by the portal and transmitted to the client by
3632     * the portlet. The portlet client that initiated the partial action must
3633     * pass the page state string to this function.
3634     *
3635     * The callback should only be called once to conclude a partial action sequence.
3636     * @memberof PortletInit
3637     * @param {string} portletId The portlet ID.
3638     * @param {string} updateString The new page state in string form.
3639     * @throws {TypeError} Thrown if the parameter is not a string.
3640     * @protected
3641     * @review
3642     */
3643    _setPageState(portletId, updateString) {
3644      if (typeof updateString !== "string") {
3645        throw new TypeError(`Invalid update string: ${updateString}`);
3646      }
3647      this._updatePageState(updateString, portletId).then(
3648        (updatedIds) => {
3649          this._updatePortletStates(updatedIds);
3650        },
3651        (error) => {
3652          busy = false;
3653          this._reportError(portletId, error);
3654        }
3655      );
3656    }
3657    /**
3658     * Sets state for the portlet.
3659     * returns array of IDs for portlets that were affected by the change,
3660     * taking into account the public render parameters.
3661     * @memberof PortletInit
3662     * @param {Object} state The state to be set.
3663     * @return {Array}
3664     * @protected
3665     * @review
3666     */
3667    _setState(state) {
3668      const publicRenderParameters = getUpdatedPublicRenderParameters(
3669        pageRenderState,
3670        this._portletId,
3671        state
3672      );
3673      const updatedIds = [];
3674      const parameterKeys = Object.keys(publicRenderParameters);
3675      parameterKeys.forEach((parameterKey) => {
3676        const newValue = publicRenderParameters[parameterKey];
3677        const groupMap = pageRenderState.prpMap[parameterKey];
3678        const groupKeys = Object.keys(groupMap);
3679        groupKeys.forEach((groupKey) => {
3680          if (groupKey !== this._portletId) {
3681            const parts = groupMap[groupKey].split("|");
3682            const portletId2 = parts[0];
3683            const parameterName = parts[1];
3684            if (newValue === void 0) {
3685              delete pageRenderState.portlets[portletId2].state.parameters[parameterName];
3686            } else {
3687              pageRenderState.portlets[portletId2].state.parameters[parameterName] = [...newValue];
3688            }
3689            updatedIds.push(portletId2);
3690          }
3691        });
3692      });
3693      const portletId = this._portletId;
3694      pageRenderState.portlets[portletId].state = state;
3695      updatedIds.push(portletId);
3696      updatedIds.forEach((updatedId) => {
3697        pageRenderState.portlets[updatedId].renderData.content = null;
3698      });
3699      this._updateHistory();
3700      return Promise.resolve(updatedIds);
3701    }
3702    /**
3703     * Sets up for the action.
3704     * @memberof PortletInit
3705     * @param {Object} parameters Additional parameters. May be <code>null</code>.
3706     * @param {HTMLFormElement} element Form to be submitted May be <code>null</code>.
3707     * @throws {AccessDeniedException} Thrown if a blocking operation is already in progress.
3708     * @throws {NotInitializedException} Thrown if a portlet ID is provided, but no onStateChange
3709     * listener has been registered.
3710     * @protected
3711     * @review
3712     */
3713    _setupAction(parameters, element) {
3714      if (this.isInProgress()) {
3715        throw {
3716          message: "Operation is already in progress",
3717          name: "AccessDeniedException"
3718        };
3719      }
3720      if (!this._hasListener(this._portletId)) {
3721        throw {
3722          message: `No onStateChange listener registered for portlet: ${this._portletId}`,
3723          name: "NotInitializedException"
3724        };
3725      }
3726      busy = true;
3727      return this._executeAction(parameters, element).then(
3728        (updatedIds) => {
3729          return this._updatePortletStates(updatedIds).then(
3730            (updatedIds2) => {
3731              busy = false;
3732              return updatedIds2;
3733            }
3734          );
3735        },
3736        (error) => {
3737          busy = false;
3738          this._reportError(this._portletId, error);
3739        }
3740      );
3741    }
3742    /**
3743     * Called when the page state has been updated to allow
3744     * the browser history to be taken care of.
3745     * @memberof PortletInit
3746     * @param {boolean} replace Replace the state rather than pushing.
3747     * @protected
3748     * @review
3749     */
3750    _updateHistory(replace) {
3751      if (doHistory) {
3752        getUrl(pageRenderState, "RENDER", null, {}).then((url) => {
3753          const token = JSON.stringify(pageRenderState);
3754          if (replace) {
3755            history.replaceState(token, "");
3756          } else {
3757            try {
3758              history.pushState(token, "", url);
3759            } catch (error) {
3760            }
3761          }
3762        });
3763      }
3764    }
3765    /**
3766     * Update page state passed in after partial action. The list of
3767     * ID's of updated portlets is passed back through a promise in order
3768     * to decouple the layers.
3769     *
3770     * @memberof PortletInit
3771     * @param {string} updateString The updated render state string.
3772     * @review
3773     */
3774    _updatePageState(updateString) {
3775      return new Promise((resolve, reject) => {
3776        try {
3777          const updatedIds = this._updatePageStateFromString(
3778            updateString,
3779            this._portletId
3780          );
3781          resolve(updatedIds);
3782        } catch (error) {
3783          reject(
3784            new Error(`Partial Action decode status: ${error.message}`)
3785          );
3786        }
3787      });
3788    }
3789    /**
3790     * Updates page state from string and returns array of portlet IDs
3791     * to be updated.
3792     *
3793     * @memberof PortletInit
3794     * @param {string} updateString The update string.
3795     * @param {string} portletId The portlet ID.
3796     * @protected
3797     * @review
3798     */
3799    _updatePageStateFromString(updateString, portletId) {
3800      const portlets = decodeUpdateString(pageRenderState, updateString);
3801      const updatedIds = [];
3802      let stateUpdated = false;
3803      const entries = Object.entries(portlets);
3804      entries.forEach(([key, portletData]) => {
3805        pageRenderState.portlets[key] = portletData;
3806        updatedIds.push(key);
3807        stateUpdated = true;
3808      });
3809      if (stateUpdated && portletId) {
3810        this._updateHistory();
3811      }
3812      return updatedIds;
3813    }
3814    /**
3815     *
3816     * Accepts an object containing changed render states.
3817     * Updates the state for each portlet present.
3818     *
3819     * @memberof PortletInit
3820     * @param {Array} updatedIds Array of portlet IDs to be updated.
3821     * @return {Promsise.<string>}
3822     * @protected
3823     * @review
3824     */
3825    _updatePortletStates(updatedIds) {
3826      return new Promise((resolve) => {
3827        if (!updatedIds.length) {
3828          busy = false;
3829        } else {
3830          updatedIds.forEach((updatedId) => {
3831            this._updateStateForPortlet(updatedId);
3832          });
3833        }
3834        resolve(updatedIds);
3835      });
3836    }
3837    /**
3838     * Updates the page render state
3839     *
3840     * @memberof PortletInit
3841     * @param {Object} state The new state to be set.
3842     * @protected
3843     * @review
3844     */
3845    _updateState(state) {
3846      if (busy) {
3847        throw {
3848          message: "Operation in progress",
3849          name: "AccessDeniedException"
3850        };
3851      } else if (!this._hasListener(this._portletId)) {
3852        throw {
3853          message: `No onStateChange listener registered for portlet: ${this._portletId}`,
3854          name: "NotInitializedException"
3855        };
3856      }
3857      busy = true;
3858      this._setState(state).then((updatedIds) => {
3859        this._updatePortletStates(updatedIds);
3860      }).catch((error) => {
3861        busy = false;
3862        this._reportError(this._portletId, error);
3863      });
3864    }
3865    /**
3866     * Calls the portlet onStateChange method in an asynchronous manner in order
3867     * to decouple the public API. This method is intended for use after
3868     * portlet client registers an onStateChange listener.
3869     *
3870     * @memberof PortletInit
3871     * @param {string} portletId The portlet ID.
3872     * @protected
3873     * @review
3874     */
3875    _updateStateForPortlet(portletId) {
3876      const updateQueueIds = eventListenersQueue.map((item) => item.handle);
3877      const entries = Object.entries(eventListeners);
3878      entries.forEach(([key, eventData]) => {
3879        if (eventData.type !== "portlet.onStateChange") {
3880          return;
3881        }
3882        if (eventData.id === portletId && !updateQueueIds.includes(key)) {
3883          eventListenersQueue.push(eventData);
3884        }
3885      });
3886      if (eventListenersQueue.length) {
3887        setTimeout(() => {
3888          busy = true;
3889          while (eventListenersQueue.length) {
3890            const eventData = eventListenersQueue.shift();
3891            const handler = eventData.handler;
3892            const id = eventData.id;
3893            if (!pageRenderState.portlets[id]) {
3894              continue;
3895            }
3896            const renderData = pageRenderState.portlets[id].renderData;
3897            const renderState = new RenderState_es_default(
3898              pageRenderState.portlets[id].state
3899            );
3900            if (renderData && renderData.content) {
3901              handler(
3902                "portlet.onStateChange",
3903                renderState,
3904                renderData
3905              );
3906            } else {
3907              handler("portlet.onStateChange", renderState);
3908            }
3909          }
3910          busy = false;
3911        });
3912      }
3913    }
3914    /**
3915     * Initiates a portlet action using the specified action parameters and
3916     * element arguments.
3917     *
3918     * @memberof PortletInit
3919     * @param {PortletParameters} parameters Action parameters to be added to the URL
3920     * @param {HTMLFormElement} element DOM element of form to be submitted
3921     * @return {Promise} A Promise object that is resolved with no argument when the action request has completed.
3922     * @throws {TypeError} Thrown if the input parameters are invalid
3923     * @throws {AccessDeniedException} Thrown if a blocking operation is already in progress.
3924     * @throws {NotInitializedException} Thrown if a portlet ID is provided, but no onStateChange listener has been registered.
3925     * @review
3926     */
3927    action(...args) {
3928      let actionParameters = null;
3929      let argCount = 0;
3930      let element = null;
3931      args.forEach((arg) => {
3932        if (arg instanceof HTMLFormElement) {
3933          if (element !== null) {
3934            throw new TypeError(
3935              `Too many [object HTMLFormElement] arguments: ${arg}, ${element}`
3936            );
3937          }
3938          element = arg;
3939        } else if (isObject(arg)) {
3940          validateParameters(arg);
3941          if (actionParameters !== null) {
3942            throw new TypeError("Too many parameters arguments");
3943          }
3944          actionParameters = arg;
3945        } else if (arg !== void 0) {
3946          const type = Object.prototype.toString.call(arg);
3947          throw new TypeError(
3948            `Invalid argument type. Argument ${argCount + 1} is of type ${type}`
3949          );
3950        }
3951        argCount++;
3952      });
3953      if (element) {
3954        validateForm(element);
3955      }
3956      return this._setupAction(actionParameters, element).then((val) => {
3957        Promise.resolve(val);
3958      }).catch((error) => {
3959        Promise.reject(error);
3960      });
3961    }
3962    /**
3963     * Adds a listener function for specified event type.
3964     *
3965     * @memberof PortletInit
3966     * @param {string} type The type of listener
3967     * @param {function} handler Function called when event occurs
3968     * @return {Object} A handle that can be used to remove the event listener
3969     * @throws {TypeError} Thrown if the input parameters are invalid
3970     * @review
3971     */
3972    addEventListener(type, handler) {
3973      if (arguments.length > 2) {
3974        throw new TypeError(
3975          "Too many arguments passed to addEventListener"
3976        );
3977      }
3978      if (typeof type !== "string" || typeof handler !== "function") {
3979        throw new TypeError("Invalid arguments passed to addEventListener");
3980      }
3981      const id = this._portletId;
3982      if (type.startsWith("portlet.")) {
3983        if (type !== "portlet.onStateChange" && type !== "portlet.onError") {
3984          throw new TypeError(
3985            `The system event type is invalid: ${type}`
3986          );
3987        }
3988      }
3989      const handle = v4_default();
3990      const listener = {
3991        handle,
3992        handler,
3993        id,
3994        type
3995      };
3996      eventListeners[handle] = listener;
3997      if (type === "portlet.onStateChange") {
3998        this._updateStateForPortlet(this._portletId);
3999      }
4000      return handle;
4001    }
4002    /**
4003     * Returns a promise for a resource URL with parameters set appropriately
4004     * for the page state according to the resource parameters, cacheability
4005     * option, and resource ID provided.
4006     * @memberof PortletInit
4007     * @param {Object} parameters Resource parameters to be added to the URL
4008     * @param {string} cache Cacheability option. The strings defined under
4009     * {@link PortletConstants} should be used to specifiy cacheability.
4010     * @param {string} resourceId Resource ID.
4011     * @return {Promise} A Promise object. Returns a string representing the
4012     * resource URL on successful resolution. Returns an Error object containing
4013     * a descriptive message on failure.
4014     * @throws {TypeError} Thrown if the input parameters are invalid
4015     * @review
4016     */
4017    createResourceUrl(parameters, cache, resourceId) {
4018      if (arguments.length > 3) {
4019        throw new TypeError("Too many arguments. 3 arguments are allowed.");
4020      }
4021      if (parameters) {
4022        if (isObject(parameters)) {
4023          validateParameters(parameters);
4024        } else {
4025          throw new TypeError(
4026            "Invalid argument type. Resource parameters must be a parameters object."
4027          );
4028        }
4029      }
4030      let cacheability = null;
4031      if (cache) {
4032        if (typeof cache === "string") {
4033          if (cache === "cacheLevelPage" || cache === "cacheLevelPortlet" || cache === "cacheLevelFull") {
4034            cacheability = cache;
4035          } else {
4036            throw new TypeError(
4037              `Invalid cacheability argument: ${cache}`
4038            );
4039          }
4040        } else {
4041          throw new TypeError(
4042            "Invalid argument type. Cacheability argument must be a string."
4043          );
4044        }
4045      }
4046      if (!cacheability) {
4047        cacheability = "cacheLevelPage";
4048      }
4049      if (resourceId && typeof resourceId !== "string") {
4050        throw new TypeError(
4051          "Invalid argument type. Resource ID argument must be a string."
4052        );
4053      }
4054      return getUrl(
4055        pageRenderState,
4056        "RESOURCE",
4057        this._portletId,
4058        parameters,
4059        cacheability,
4060        resourceId
4061      );
4062    }
4063    /**
4064     * Dispatches a client event.
4065     * @memberof PortletInit
4066     * @param {string} type The type of listener.
4067     * @param {any} payload The payload to be delivered.
4068     * @return {number} The number of events queued for delivery.
4069     * @throws {TypeError} Thrown if the type is a system event type.
4070     * @review
4071     */
4072    dispatchClientEvent(type, payload) {
4073      validateArguments(arguments, 2, 2, ["string"]);
4074      if (type.match(new RegExp(portletRegex))) {
4075        throw new TypeError("The event type is invalid: " + type);
4076      }
4077      return Object.keys(eventListeners).reduce((amount, key) => {
4078        const listener = eventListeners[key];
4079        if (type.match(listener.type)) {
4080          listener.handler(type, payload);
4081          amount++;
4082        }
4083        return amount;
4084      }, 0);
4085    }
4086    /**
4087     * Tests whether a blocking operation is in progress.
4088     * @memberof PortletInit
4089     * @return {boolean}
4090     * @review
4091     */
4092    isInProgress() {
4093      return busy;
4094    }
4095    /**
4096     * Creates and returns a new PortletParameters object.
4097     * @memberof PortletInit
4098     * @param {?Object} optParameters The optional parameters to be copied.
4099     * @return {Object} The new parameters object.
4100     * @review
4101     */
4102    newParameters(optParameters = {}) {
4103      const newParameters = {};
4104      Object.keys(optParameters).forEach((key) => {
4105        if (Array.isArray(optParameters[key])) {
4106          newParameters[key] = [...optParameters[key]];
4107        }
4108      });
4109      return newParameters;
4110    }
4111    /**
4112     * Creates and returns a new RenderState object.
4113     * @memberof PortletInit
4114     * @param {?RenderState} optState An optional RenderState object to be copied.
4115     * @return {RenderState} The new RenderState object.
4116     * @review
4117     */
4118    newState(optState) {
4119      return new RenderState_es_default(optState);
4120    }
4121    /**
4122     * Removes a previously added listener function designated by the handle.
4123     * The handle must be the same object previously returned by the
4124     * addEventListener function.
4125     * @memberof PortletInit
4126     * @param {Object} handle The handle of the listener to be removed.
4127     * @throws {TypeError} Thrown if the input parameters are invalid.
4128     * @throws {AccessDeniedException} Thrown if the event listener associated
4129     * with this handle was registered by a different portlet.
4130     * @review
4131     */
4132    removeEventListener(handle) {
4133      if (arguments.length > 1) {
4134        throw new TypeError(
4135          "Too many arguments passed to removeEventListener"
4136        );
4137      }
4138      if (handle === void 0 || handle === null) {
4139        throw new TypeError(
4140          `The event handle provided is ${typeof handle}`
4141        );
4142      }
4143      let found = false;
4144      if (isObject(eventListeners[handle])) {
4145        if (eventListeners[handle].id === this._portletId) {
4146          delete eventListeners[handle];
4147          const l = eventListenersQueue.length;
4148          for (let i = 0; i < l; i++) {
4149            const eventData = eventListenersQueue[i];
4150            if (eventData && eventData.handle === handle) {
4151              eventListenersQueue.splice(i, 1);
4152            }
4153          }
4154          found = true;
4155        }
4156      }
4157      if (!found) {
4158        throw new TypeError(
4159          "The event listener handle doesn't match any listeners."
4160        );
4161      }
4162    }
4163    /**
4164     * Sets the render state, which consists of the public and private render
4165     * parameters, the portlet mode, and the window state.
4166     * @memberof PortletInit
4167     * @param {RenderState} state The new state to be set.
4168     * @throws {TypeError} Thrown if the input parameters are invalid.
4169     * @throws {AccessDeniedException} Thrown if a blocking operation is already in progress.
4170     * @throws {NotInitializedException} Thrown if a portlet ID is provided, but no onStateChange
4171     * listener has been registered.
4172     * @review
4173     */
4174    setRenderState(state) {
4175      validateArguments(arguments, 1, 1, ["object"]);
4176      if (pageRenderState.portlets && pageRenderState.portlets[this._portletId]) {
4177        const portletData = pageRenderState.portlets[this._portletId];
4178        validateState(state, portletData);
4179        this._updateState(state);
4180      }
4181    }
4182    /**
4183     * Starts partial action processing and returns a {@link PartialActionInit} object to the caller.
4184     * @memberof PortletInit
4185     * @param {PortletParameters} actionParameters Action parameters to be added to the URL.
4186     * @return {Promise} A Promise. Returns a {@link PortletActionInit} object
4187     * containing a partial action URL and the _setPageState callback function
4188     * on successful resolution. Returns an Error object containing a
4189     * descriptive message on failure.
4190     * @throws {TypeError} Thrown if the input parameters are invalid.
4191     * @throws {AccessDeniedException} Thrown if a blocking operation is already in progress.
4192     * @throws {NotInitializedException} Thrown if a portlet ID is provided, but
4193     * no onStateChange listener has been registered.
4194     * @review
4195     */
4196    startPartialAction(actionParameters) {
4197      const instance = this;
4198      let parameters = null;
4199      if (arguments.length > 1) {
4200        throw new TypeError("Too many arguments. 1 arguments are allowed");
4201      } else if (actionParameters !== void 0) {
4202        if (isObject(actionParameters)) {
4203          validateParameters(actionParameters);
4204          parameters = actionParameters;
4205        } else {
4206          throw new TypeError(
4207            `Invalid argument type. Argument is of type ${typeof actionParameters}`
4208          );
4209        }
4210      }
4211      if (busy === true) {
4212        throw {
4213          message: "Operation in progress",
4214          name: "AccessDeniedException"
4215        };
4216      } else if (!this._hasListener(this._portletId)) {
4217        throw {
4218          message: `No onStateChange listener registered for portlet: ${this._portletId}`,
4219          name: "NotInitializedException"
4220        };
4221      }
4222      busy = true;
4223      const partialActionInitObject = {
4224        setPageState(updateString) {
4225          instance._setPageState(instance._portletId, updateString);
4226        },
4227        url: ""
4228      };
4229      return getUrl(
4230        pageRenderState,
4231        "PARTIAL_ACTION",
4232        this._portletId,
4233        parameters
4234      ).then((url) => {
4235        partialActionInitObject.url = url;
4236        return partialActionInitObject;
4237      });
4238    }
4239  };
4240  var PortletInit_es_default = PortletInit;
4241
4242  
4242// src/main/resources/META-INF/resources/liferay/portlet/register.es.js
4243  var register = function(portletId) {
4244    validateArguments(arguments, 1, 1, ["string"]);
4245    const pageRenderState2 = global.portlet.data.pageRenderState;
4246    return new Promise((resolve, reject) => {
4247      if (validatePortletId(pageRenderState2, portletId)) {
4248        resolve(new PortletInit_es_default(portletId));
4249      } else {
4250        reject(new Error("Invalid portlet ID"));
4251      }
4252    });
4253  };
4254  var register_es_default = register;
4255
4256  
4256// src/main/resources/META-INF/resources/liferay/portlet/portlet.es.js
4257  function minimizePortlet(portletSelector, trigger, options) {
4258    options = {
4259      doAsUserId: themeDisplay.getDoAsUserIdEncoded(),
4260      plid: themeDisplay.getPlid(),
4261      ...options
4262    };
4263    const portlet = document.querySelector(portletSelector);
4264    if (portlet) {
4265      const content = portlet.querySelector(".portlet-content-container");
4266      if (content) {
4267        const minimized = content.classList.contains("d-none");
4268        if (minimized) {
4269          content.classList.remove("d-none");
4270          portlet.classList.remove("portlet-minimized");
4271        } else {
4272          content.classList.add("d-none");
4273          portlet.classList.add("portlet-minimized");
4274        }
4275        if (trigger) {
4276          const title = minimized ? 'Minimitza' : 'Restaura';
4277          trigger.setAttribute("alt", title);
4278          trigger.setAttribute("title", title);
4279          trigger.innerHTML = title;
4280          const icon = trigger.querySelector("i");
4281          if (icon) {
4282            icon.classList.remove("icon-minus", "icon-resize-vertical");
4283            if (minimized) {
4284              icon.classList.add("icon-minus");
4285              icon.classList.remove("icon-resize-vertical");
4286            } else {
4287              icon.classList.add("icon-resize-vertical");
4288              icon.classList.remove("icon-minus");
4289            }
4290          }
4291        }
4292        const portletId = getPortletId(portlet.id);
4293        const formData = objectToFormData({
4294          cmd: "minimize",
4295          doAsUserId: options.doAsUserId,
4296          p_auth: Liferay.authToken,
4297          p_l_id: options.plid,
4298          p_p_id: portletId,
4299          p_p_restore: minimized,
4300          p_v_l_s_g_id: themeDisplay.getSiteGroupId()
4301        });
4302        defaultFetch(themeDisplay.getPathMain() + "/portal/update_layout", {
4303          body: formData,
4304          method: "POST"
4305        }).then((response) => {
4306          if (response.ok && minimized) {
4307            const params = {
4308              doAsUserId: options.doAsUserId,
4309              p_l_id: options.plid,
4310              p_p_boundary: false,
4311              p_p_id: portletId,
4312              p_p_isolated: true
4313            };
4314            defaultFetch(
4315              createPortletURL(
4316                themeDisplay.getPathMain() + "/portal/render_portlet",
4317                params
4318              )
4319            ).then((response2) => response2.text()).then((response2) => {
4320              const range = document.createRange();
4321              range.selectNode(portlet);
4322              portlet.innerHTML = "";
4323              const fragment = range.createContextualFragment(response2);
4324              portlet.appendChild(fragment);
4325            }).catch((error) => {
4326              if (true) {
4327                console.error(error);
4328              }
4329            });
4330          }
4331        }).catch((error) => {
4332          if (true) {
4333            console.error(error);
4334          }
4335        });
4336      }
4337    }
4338  }
4339  var portlet_es_default = {
4340    register: register_es_default
4341  };
4342
4343  
4343// src/main/resources/META-INF/resources/liferay/events/Disposable.js
4344  var Disposable = class {
4345    /**
4346     * Disposable constructor
4347     */
4348    constructor() {
4349      this._disposed = false;
4350    }
4351    /**
4352     * Disposes of this instance's object references. Calls `disposeInternal`.
4353     */
4354    dispose() {
4355      if (!this._disposed) {
4356        this.disposeInternal();
4357        this._disposed = true;
4358      }
4359    }
4360    /**
4361     * Subclasses should override this method to implement any specific
4362     * disposing logic (like clearing references and calling `dispose` on other
4363     * disposables).
4364     */
4365    disposeInternal() {
4366    }
4367    /**
4368     * Checks if this instance has already been disposed.
4369     * @return {boolean}
4370     */
4371    isDisposed() {
4372      return this._disposed;
4373    }
4374  };
4375  var Disposable_default = Disposable;
4376
4377  
4377// src/main/resources/META-INF/resources/liferay/events/EventHandle.js
4378  var EventHandle = class extends Disposable_default {
4379    /**
4380     * EventHandle constructor
4381     * @param {!EventEmitter} emitter Emitter the event was subscribed to.
4382     * @param {string} event The name of the event that was subscribed to.
4383     * @param {!Function} listener The listener subscribed to the event.
4384     */
4385    constructor(emitter, event, listener) {
4386      super();
4387      this._emitter = emitter;
4388      this._event = event;
4389      this._listener = listener;
4390    }
4391    /**
4392     * Disposes of this instance's object references.
4393     * @override
4394     */
4395    disposeInternal() {
4396      this.removeListener();
4397      this._emitter = null;
4398      this._listener = null;
4399    }
4400    /**
4401     * Removes the listener subscription from the emitter.
4402     */
4403    removeListener() {
4404      if (!this._emitter.isDisposed()) {
4405        this._emitter.removeListener(this._event, this._listener);
4406      }
4407    }
4408  };
4409  var EventHandle_default = EventHandle;
4410
4411  
4411// src/main/resources/META-INF/resources/liferay/events/EventEmitter.js
4412  var singleArray = [0];
4413  var EventEmitter = class extends Disposable_default {
4414    /**
4415     * EventEmitter constructor
4416     */
4417    constructor() {
4418      super();
4419      this._events = null;
4420      this._listenerHandlers = null;
4421      this._shouldUseFacade = false;
4422    }
4423    /**
4424     * Adds a handler to given holder variable. If the holder doesn't have a
4425     * value yet, it will receive the handler directly. If the holder is an array,
4426     * the value will just be added to it. Otherwise, the holder will be set to a
4427     * new array containing its previous value plus the new handler.
4428     * @param {*} holder
4429     * @param {!function()|Object} handler
4430     * @return {*} The holder's new value.
4431     * @protected
4432     */
4433    _addHandler(holder, handler) {
4434      if (!holder) {
4435        holder = handler;
4436      } else {
4437        if (!Array.isArray(holder)) {
4438          holder = [holder];
4439        }
4440        holder.push(handler);
4441      }
4442      return holder;
4443    }
4444    /**
4445     * Adds a listener to the end of the listeners array for the specified events.
4446     * @param {!(Array|string)} event
4447     * @param {!Function} listener
4448     * @param {boolean} defaultListener Flag indicating if this listener is a default
4449     *   action for this event. Default actions are run last, and only if no previous
4450     *   listener call `preventDefault()` on the received event facade.
4451     * @return {!EventHandle} Can be used to remove the listener.
4452     */
4453    addListener(event, listener, defaultListener) {
4454      this._validateListener(listener);
4455      const events = this._toEventsArray(event);
4456      for (let i = 0; i < events.length; i++) {
4457        this._addSingleListener(events[i], listener, defaultListener);
4458      }
4459      return new EventHandle_default(this, event, listener);
4460    }
4461    /**
4462     * Adds a listener to the end of the listeners array for a single event.
4463     * @param {string} event
4464     * @param {!Function} listener
4465     * @param {boolean} defaultListener Flag indicating if this listener is a default
4466     *   action for this event. Default actions are run last, and only if no previous
4467     *   listener call `preventDefault()` on the received event facade.
4468     * @param {Function=} origin The original function that was added as a
4469     *   listener, if there is any.
4470     * @protected
4471     */
4472    _addSingleListener(event, listener, defaultListener, origin) {
4473      this._runListenerHandlers(event);
4474      if (defaultListener || origin) {
4475        listener = {
4476          default: defaultListener,
4477          fn: listener,
4478          origin
4479        };
4480      }
4481      this._events = this._events || {};
4482      this._events[event] = this._addHandler(this._events[event], listener);
4483    }
4484    /**
4485     * Builds facade for the given event.
4486     * @param {string} event
4487     * @return {Object}
4488     * @protected
4489     */
4490    _buildFacade(event) {
4491      if (this.getShouldUseFacade()) {
4492        const facade = {
4493          preventDefault() {
4494            facade.preventedDefault = true;
4495          },
4496          target: this,
4497          type: event
4498        };
4499        return facade;
4500      }
4501    }
4502    /**
4503     * Disposes of this instance's object references.
4504     * @override
4505     */
4506    disposeInternal() {
4507      this._events = null;
4508    }
4509    /**
4510     * Execute each of the listeners in order with the supplied arguments.
4511     * @param {string} event
4512     * @param {*} opt_args [arg1], [arg2], [...]
4513     * @return {boolean} Returns true if event had listeners, false otherwise.
4514     */
4515    emit(event) {
4516      const listeners = this._getRawListeners(event);
4517      if (!listeners.length) {
4518        return false;
4519      }
4520      const args = Array.prototype.slice.call(arguments, 1);
4521      this._runListeners(listeners, args, this._buildFacade(event));
4522      return true;
4523    }
4524    /**
4525     * Gets the listener objects for the given event, if there are any.
4526     * @param {string} event
4527     * @return {!Array}
4528     * @protected
4529     */
4530    _getRawListeners(event) {
4531      const directListeners = toArray2(this._events && this._events[event]);
4532      return directListeners.concat(
4533        toArray2(this._events && this._events["*"])
4534      );
4535    }
4536    /**
4537     * Gets the configuration option which determines if an event facade should
4538     * be sent as a param of listeners when emitting events. If set to true, the
4539     * facade will be passed as the first argument of the listener.
4540     * @return {boolean}
4541     */
4542    getShouldUseFacade() {
4543      return this._shouldUseFacade;
4544    }
4545    /**
4546     * Returns an array of listeners for the specified event.
4547     * @param {string} event
4548     * @return {Array} Array of listeners.
4549     */
4550    listeners(event) {
4551      return this._getRawListeners(event).map(
4552        (listener) => listener.fn ? listener.fn : listener
4553      );
4554    }
4555    /**
4556     * Adds a listener that will be invoked a fixed number of times for the
4557     * events. After each event is triggered the specified amount of times, the
4558     * listener is removed for it.
4559     * @param {!(Array|string)} event
4560     * @param {number} amount The amount of times this event should be listened
4561     * to.
4562     * @param {!Function} listener
4563     * @return {!EventHandle} Can be used to remove the listener.
4564     */
4565    many(event, amount, listener) {
4566      const events = this._toEventsArray(event);
4567      for (let i = 0; i < events.length; i++) {
4568        this._many(events[i], amount, listener);
4569      }
4570      return new EventHandle_default(this, event, listener);
4571    }
4572    /**
4573     * Adds a listener that will be invoked a fixed number of times for a single
4574     * event. After the event is triggered the specified amount of times, the
4575     * listener is removed.
4576     * @param {string} event
4577     * @param {number} amount The amount of times this event should be listened
4578     * to.
4579     * @param {!Function} listener
4580     * @protected
4581     */
4582    _many(event, amount, listener) {
4583      const self2 = this;
4584      if (amount <= 0) {
4585        return;
4586      }
4587      function handlerInternal() {
4588        if (--amount === 0) {
4589          self2.removeListener(event, handlerInternal);
4590        }
4591        listener.apply(self2, arguments);
4592      }
4593      self2._addSingleListener(event, handlerInternal, false, listener);
4594    }
4595    /**
4596     * Checks if a listener object matches the given listener function. To match,
4597     * it needs to either point to that listener or have it as its origin.
4598     * @param {!Object} listenerObj
4599     * @param {!Function} listener
4600     * @return {boolean}
4601     * @protected
4602     */
4603    _matchesListener(listenerObj, listener) {
4604      const fn = listenerObj.fn || listenerObj;
4605      return fn === listener || listenerObj.origin && listenerObj.origin === listener;
4606    }
4607    /**
4608     * Removes a listener for the specified events.
4609     * Caution: changes array indices in the listener array behind the listener.
4610     * @param {!(Array|string)} event
4611     * @param {!Function} listener
4612     * @return {!Object} Returns emitter, so calls can be chained.
4613     */
4614    off(event, listener) {
4615      this._validateListener(listener);
4616      if (!this._events) {
4617        return this;
4618      }
4619      const events = this._toEventsArray(event);
4620      for (let i = 0; i < events.length; i++) {
4621        this._events[events[i]] = this._removeMatchingListenerObjs(
4622          toArray2(this._events[events[i]]),
4623          listener
4624        );
4625      }
4626      return this;
4627    }
4628    /**
4629     * Adds a listener to the end of the listeners array for the specified events.
4630     * @param {!(Array|string)} events
4631     * @param {!Function} listener
4632     * @return {!EventHandle} Can be used to remove the listener.
4633     */
4634    on() {
4635      return this.addListener.apply(this, arguments);
4636    }
4637    /**
4638     * Adds handler that gets triggered when an event is listened to on this
4639     * instance.
4640     * @param {!function()} handler
4641     */
4642    onListener(handler) {
4643      this._listenerHandlers = this._addHandler(
4644        this._listenerHandlers,
4645        handler
4646      );
4647    }
4648    /**
4649     * Adds a one time listener for the events. This listener is invoked only the
4650     * next time each event is fired, after which it is removed.
4651     * @param {!(Array|string)} events
4652     * @param {!Function} listener
4653     * @return {!EventHandle} Can be used to remove the listener.
4654     */
4655    once(events, listener) {
4656      return this.many(events, 1, listener);
4657    }
4658    /**
4659     * Removes all listeners, or those of the specified events. It's not a good
4660     * idea to remove listeners that were added elsewhere in the code,
4661     * especially when it's on an emitter that you didn't create.
4662     * @param {(Array|string)=} event
4663     * @return {!Object} Returns emitter, so calls can be chained.
4664     */
4665    removeAllListeners(event) {
4666      if (this._events) {
4667        if (event) {
4668          const events = this._toEventsArray(event);
4669          for (let i = 0; i < events.length; i++) {
4670            this._events[events[i]] = null;
4671          }
4672        } else {
4673          this._events = null;
4674        }
4675      }
4676      return this;
4677    }
4678    /**
4679     * Removes all listener objects from the given array that match the given
4680     * listener function.
4681     * @param {Array.<Object>} listenerObjs
4682     * @param {!Function} listener
4683     * @return {Array.<Object>|Object} The new listeners array for this event.
4684     * @protected
4685     */
4686    _removeMatchingListenerObjs(listenerObjs, listener) {
4687      const finalListeners = [];
4688      for (let i = 0; i < listenerObjs.length; i++) {
4689        if (!this._matchesListener(listenerObjs[i], listener)) {
4690          finalListeners.push(listenerObjs[i]);
4691        }
4692      }
4693      return finalListeners.length ? finalListeners : null;
4694    }
4695    /**
4696     * Removes a listener for the specified events.
4697     * Caution: changes array indices in the listener array behind the listener.
4698     * @param {!(Array|string)} events
4699     * @param {!Function} listener
4700     * @return {!Object} Returns emitter, so calls can be chained.
4701     */
4702    removeListener() {
4703      return this.off.apply(this, arguments);
4704    }
4705    /**
4706     * Runs the handlers when an event is listened to.
4707     * @param {string} event
4708     * @protected
4709     */
4710    _runListenerHandlers(event) {
4711      let handlers = this._listenerHandlers;
4712      if (handlers) {
4713        handlers = toArray2(handlers);
4714        for (let i = 0; i < handlers.length; i++) {
4715          handlers[i](event);
4716        }
4717      }
4718    }
4719    /**
4720     * Runs the given listeners.
4721     * @param {!Array} listeners
4722     * @param {!Array} args
4723     * @param {Object} facade
4724     * @protected
4725     */
4726    _runListeners(listeners, args, facade) {
4727      if (facade) {
4728        args.push(facade);
4729      }
4730      const defaultListeners = [];
4731      for (let i = 0; i < listeners.length; i++) {
4732        const listener = listeners[i].fn || listeners[i];
4733        if (listeners[i].default) {
4734          defaultListeners.push(listener);
4735        } else {
4736          listener.apply(this, args);
4737        }
4738      }
4739      if (!facade || !facade.preventedDefault) {
4740        for (let j = 0; j < defaultListeners.length; j++) {
4741          defaultListeners[j].apply(this, args);
4742        }
4743      }
4744    }
4745    /**
4746     * Sets the configuration option which determines if an event facade should
4747     * be sent as a param of listeners when emitting events. If set to true, the
4748     * facade will be passed as the first argument of the listener.
4749     * @param {boolean} shouldUseFacade
4750     * @return {!Object} Returns emitter, so calls can be chained.
4751     */
4752    setShouldUseFacade(shouldUseFacade) {
4753      this._shouldUseFacade = shouldUseFacade;
4754      return this;
4755    }
4756    /**
4757     * Converts the parameter to an array if only one event is given. Reuses the
4758     * same array each time this conversion is done, to avoid using more memory
4759     * than necessary.
4760     * @param  {!(Array|string)} events
4761     * @return {!Array}
4762     * @protected
4763     */
4764    _toEventsArray(events) {
4765      if (typeof events === "string") {
4766        singleArray[0] = events;
4767        events = singleArray;
4768      }
4769      return events;
4770    }
4771    /**
4772     * Checks if the given listener is valid, throwing an exception when it's not.
4773     * @param  {*} listener
4774     * @protected
4775     */
4776    _validateListener(listener) {
4777      if (typeof listener !== "function") {
4778        throw new TypeError("Listener must be a function");
4779      }
4780    }
4781  };
4782  function toArray2(val) {
4783    val = val || [];
4784    return Array.isArray(val) ? val : [val];
4785  }
4786  var EventEmitter_default = EventEmitter;
4787
4788  
4788// src/main/resources/META-INF/resources/liferay/throttle.es.js
4789  function throttle(fn, interval) {
4790    let timeout = null;
4791    let last;
4792    return function(...args) {
4793      const context = this;
4794      const now = Date.now();
4795      const schedule = () => {
4796        timeout = setTimeout(() => {
4797          timeout = null;
4798        }, interval);
4799        last = now;
4800        fn.apply(context, args);
4801      };
4802      if (timeout === null) {
4803        schedule();
4804      } else {
4805        const remaining = Math.max(last + interval - now, 0);
4806        clearTimeout(timeout);
4807        timeout = setTimeout(schedule, remaining);
4808      }
4809    };
4810  }
4811
4812  
4812// src/main/resources/META-INF/resources/liferay/side_navigation.es.js
4813  var DEFAULTS = {
4814    breakpoint: 576,
4815    content: ".sidenav-content",
4816    gutter: "12px",
4817    loadingIndicatorTPL: '<div class="loading-animation loading-animation-md"></div>',
4818    navigation: ".sidenav-menu-slider",
4819    position: "left",
4820    type: "relative",
4821    typeMobile: "relative",
4822    url: null,
4823    width: "225px"
4824  };
4825  var INSTANCE_MAP = /* @__PURE__ */ new WeakMap();
4826  function getElement(element) {
4827    if (element && element.jquery) {
4828      if (element.length > 1) {
4829        throw new Error(
4830          `getElement(): Expected at most one element, got ${element.length}`
4831        );
4832      }
4833      element = element.get(0);
4834    }
4835    if (element && !(element instanceof HTMLElement)) {
4836      element = element.element;
4837    }
4838    return element;
4839  }
4840  function getInstance(element) {
4841    element = getElement(element);
4842    const instance = INSTANCE_MAP.get(element);
4843    return instance;
4844  }
4845  var IDENTITY_ATTRIBUTES = [/^aria-/, /^data-/, /^type$/];
4846  function getUniqueSelector(element) {
4847    element = getElement(element);
4848    if (element.id) {
4849      return `#${element.id}`;
4850    }
4851    let ancestorWithId = element.parentNode;
4852    while (ancestorWithId) {
4853      if (ancestorWithId.id) {
4854        break;
4855      }
4856      ancestorWithId = ancestorWithId.parentNode;
4857    }
4858    const attributes = Array.from(element.attributes).map(({ name, value }) => {
4859      const isIdentifying = IDENTITY_ATTRIBUTES.some((regExp) => {
4860        return regExp.test(name);
4861      });
4862      return isIdentifying ? `[${name}=${JSON.stringify(value)}]` : null;
4863    }).filter(Boolean).sort();
4864    return [
4865      ancestorWithId ? `#${ancestorWithId.id} ` : "",
4866      element.tagName.toLowerCase(),
4867      ...attributes
4868    ].join("");
4869  }
4870  function dispatchCustomEvent(element, eventName, detail = null) {
4871    const customEvent = new CustomEvent(eventName, { detail });
4872    element.dispatchEvent(customEvent);
4873  }
4874  function addClass(element, className) {
4875    setClasses(element, {
4876      [className]: true
4877    });
4878  }
4879  function removeClass(element, className) {
4880    setClasses(element, {
4881      [className]: false
4882    });
4883  }
4884  function setClasses(element, classes) {
4885    element = getElement(element);
4886    if (element) {
4887      Object.entries(classes).forEach(([className, present]) => {
4888        className.split(/\s+/).forEach((name) => {
4889          if (present) {
4890            element.classList.add(name);
4891          } else {
4892            element.classList.remove(name);
4893          }
4894        });
4895      });
4896    }
4897  }
4898  function hasClass(element, className) {
4899    element = getElement(element);
4900    return className.split(/\s+/).every((name) => {
4901      return element.classList.contains(name);
4902    });
4903  }
4904  function setStyles(element, styles) {
4905    element = getElement(element);
4906    if (element) {
4907      Object.entries(styles).forEach(([property, value]) => {
4908        element.style[property] = value;
4909      });
4910    }
4911  }
4912  function px(dimension) {
4913    if (typeof dimension === "number") {
4914      return dimension + "px";
4915    } else if (typeof dimension === "string" && dimension.match(/^\s*\d+\s*$/)) {
4916      return dimension.trim() + "px";
4917    } else {
4918      return dimension;
4919    }
4920  }
4921  function offsetLeft(element) {
4922    const elementLeft = element.getBoundingClientRect().left;
4923    const documentOffset = element.ownerDocument.defaultView.pageOffsetX || 0;
4924    return elementLeft + documentOffset;
4925  }
4926  var eventNamesToSelectors = {};
4927  function handleEvent(eventName, event) {
4928    Object.keys(eventNamesToSelectors[eventName]).forEach((selector) => {
4929      let matches = false;
4930      let target = event.target;
4931      while (target) {
4932        matches = target.matches && target.matches(selector);
4933        if (matches) {
4934          break;
4935        }
4936        target = target.parentNode;
4937      }
4938      if (matches) {
4939        const emitter = eventNamesToSelectors[eventName][selector];
4940        emitter.emit("click", event);
4941      }
4942    });
4943  }
4944  var handleWindowResize;
4945  function setupResizeListener() {
4946    if (!handleWindowResize) {
4947      handleWindowResize = throttle(() => {
4948        dispatchCustomEvent(document, "screenChange.lexicon.sidenav");
4949      }, 150);
4950      window.addEventListener("resize", handleWindowResize);
4951    }
4952  }
4953  function subscribe(elementOrSelector, eventName, handler) {
4954    if (elementOrSelector) {
4955      if (!eventNamesToSelectors[eventName]) {
4956        eventNamesToSelectors[eventName] = {};
4957        document.addEventListener(
4958          eventName,
4959          (event) => handleEvent(eventName, event)
4960        );
4961      }
4962      const emitters = eventNamesToSelectors[eventName];
4963      const selector = typeof elementOrSelector === "string" ? elementOrSelector : getUniqueSelector(elementOrSelector);
4964      if (!emitters[selector]) {
4965        emitters[selector] = new EventEmitter_default();
4966      }
4967      const emitter = emitters[selector];
4968      const subscription = emitter.on(eventName, (event) => {
4969        if (!event.defaultPrevented) {
4970          handler(event);
4971        }
4972      });
4973      return {
4974        dispose() {
4975          subscription.dispose();
4976        }
4977      };
4978    }
4979    return null;
4980  }
4981  function toInt(str) {
4982    return parseInt(str, 10) || 0;
4983  }
4984  function SideNavigation(toggler, options) {
4985    toggler = getElement(toggler);
4986    this.init(toggler, options);
4987  }
4988  SideNavigation.TRANSITION_DURATION = 500;
4989  SideNavigation.prototype = {
4990    _bindUI() {
4991      this._subscribeClickTrigger();
4992      this._subscribeReducedMotion();
4993      this._subscribeClickSidenavClose();
4994    },
4995    _emit(event) {
4996      this._emitter.emit(event, this);
4997    },
4998    _focusNavigation() {
4999      const container = document.querySelector(this.options.container);
5000      if (!container) {
5001        return;
5002      }
5003      const navigation = container.querySelector(this.options.navigation);
5004      if (!navigation) {
5005        container.focus();
5006        return;
5007      }
5008      navigation.focus();
5009    },
5010    _focusTrigger() {
5011      const toggler = this.toggler;
5012      if (!toggler || !document.activeElement.classList.contains("sidenav-close")) {
5013        return;
5014      }
5015      toggler.focus();
5016    },
5017    _getSidenavWidth() {
5018      const options = this.options;
5019      const widthOriginal = options.widthOriginal;
5020      let width = widthOriginal;
5021      const winWidth = window.innerWidth;
5022      if (winWidth < widthOriginal + 40) {
5023        width = winWidth - 40;
5024      }
5025      return width;
5026    },
5027    _getSimpleSidenavType() {
5028      const type = this._getType();
5029      if (this._isDesktop() && type === "fixed-push") {
5030        return "desktop-fixed-push";
5031      } else if (!this._isDesktop() && type === "fixed-push") {
5032        return "mobile-fixed-push";
5033      }
5034      return "fixed";
5035    },
5036    _getType() {
5037      return this._isDesktop() ? this.options.type : this.options.typeMobile;
5038    },
5039    _isDesktop() {
5040      return window.innerWidth >= this.options.breakpoint;
5041    },
5042    _isSidenavRight() {
5043      const options = this.options;
5044      const container = document.querySelector(options.container);
5045      if (!container) {
5046        return;
5047      }
5048      const isSidenavRight = hasClass(container, "sidenav-right");
5049      return isSidenavRight;
5050    },
5051    _isSimpleSidenavClosed() {
5052      const options = this.options;
5053      const openClass = options.openClass;
5054      const container = document.querySelector(options.container);
5055      if (!container) {
5056        return;
5057      }
5058      return !hasClass(container, openClass);
5059    },
5060    _loadUrl(element, url) {
5061      const instance = this;
5062      const sidebar = element.querySelector(".sidebar-body");
5063      if (!instance._fetchPromise && sidebar) {
5064        while (sidebar.firstChild) {
5065          sidebar.removeChild(sidebar.firstChild);
5066        }
5067        const loading = document.createElement("div");
5068        addClass(loading, "sidenav-loading");
5069        loading.innerHTML = instance.options.loadingIndicatorTPL;
5070        sidebar.appendChild(loading);
5071        instance._fetchPromise = defaultFetch(url);
5072        instance._fetchPromise.then((response) => {
5073          if (!response.ok) {
5074            throw new Error(`Failed to fetch ${url}`);
5075          }
5076          return response.text();
5077        }).then((text) => {
5078          const range = document.createRange();
5079          range.selectNode(sidebar);
5080          const fragment = range.createContextualFragment(text);
5081          sidebar.removeChild(loading);
5082          sidebar.appendChild(fragment);
5083          instance.setHeight();
5084        }).catch((error) => {
5085          console.error(error);
5086        });
5087      }
5088    },
5089    _onClosed() {
5090      const options = this.options;
5091      const container = document.querySelector(options.container);
5092      if (!container) {
5093        return;
5094      }
5095      if (!this._handleClosed) {
5096        this._handleClosed = () => {
5097          const type = this._getType();
5098          if (type === "relative" && hasClass(container, "open")) {
5099            removeClass(container, "sidenav-transition");
5100          }
5101        };
5102        document.addEventListener(
5103          "closed.lexicon.sidenav",
5104          this._handleClosed
5105        );
5106      }
5107    },
5108    _onClosedStart() {
5109      const options = this.options;
5110      const container = document.querySelector(options.container);
5111      const content = document.querySelector(options.content);
5112      if (!container || !content) {
5113        return;
5114      }
5115      if (!this._handleClosedStart) {
5116        this._handleClosedStart = () => {
5117          const type = this._getType();
5118          if (type === "relative" && hasClass(container, "open") && content.closest(".page-maximized")) {
5119            let contentMargin = document.body.scrollWidth - content.getBoundingClientRect().right;
5120            let paddingRight = options.gutter + options.width;
5121            const contentMaxWidth = getComputedStyle(content).maxWidth || getComputedStyle(content).width;
5122            if (/px$/.test(contentMaxWidth)) {
5123              contentMargin = (document.body.scrollWidth - toInt(contentMaxWidth)) / 2;
5124              if (contentMargin > options.width) {
5125                paddingRight = "";
5126              } else if (contentMargin > 0 && contentMargin < options.width) {
5127                paddingRight = options.gutter + options.width - contentMargin;
5128              }
5129            }
5130            if (!this.isReducedMotion()) {
5131              addClass(container, "sidenav-transition");
5132            }
5133            setStyles(content, {
5134              "padding-right": px(paddingRight)
5135            });
5136          }
5137        };
5138        document.addEventListener(
5139          "closedStart.lexicon.sidenav",
5140          this._handleClosedStart
5141        );
5142      }
5143    },
5144    _onOpen() {
5145      const options = this.options;
5146      const container = document.querySelector(options.container);
5147      if (!container) {
5148        return;
5149      }
5150      if (!this._handleOpen) {
5151        this._handleOpen = () => {
5152          const type = this._getType();
5153          if (type === "relative" && hasClass(container, "open")) {
5154            removeClass(container, "sidenav-transition");
5155          }
5156        };
5157        document.addEventListener("open.lexicon.sidenav", this._handleOpen);
5158      }
5159    },
5160    _onOpenStart() {
5161      const options = this.options;
5162      const container = document.querySelector(options.container);
5163      const content = document.querySelector(options.content);
5164      if (!container || !content) {
5165        return;
5166      }
5167      if (!this._handleOpenStart) {
5168        this._handleOpenStart = (event) => {
5169          const type = this._getType();
5170          if (type === "relative" && hasClass(container, "open") && content.closest(".page-maximized")) {
5171            const otherMenu = document.querySelector(
5172              event.detail.options.container + " .sidenav-menu"
5173            );
5174            if (!otherMenu) {
5175              return;
5176            }
5177            const otherMenuWidth = otherMenu.getBoundingClientRect().width;
5178            const contentMargin = document.body.scrollWidth - content.getBoundingClientRect().right - otherMenuWidth / 2;
5179            const paddingRight = contentMargin > 0 ? options.width + options.gutter - contentMargin : options.width + options.gutter;
5180            if (!this.isReducedMotion()) {
5181              addClass(container, "sidenav-transition");
5182            }
5183            setStyles(content, {
5184              "padding-right": px(paddingRight)
5185            });
5186          }
5187        };
5188        document.addEventListener(
5189          "openStart.lexicon.sidenav",
5190          this._handleOpenStart
5191        );
5192      }
5193    },
5194    _onScreenChange() {
5195      const options = this.options;
5196      const container = document.querySelector(options.container);
5197      const content = document.querySelector(options.content);
5198      if (!container || !content) {
5199        return;
5200      }
5201      let originalIsDesktop = this._isDesktop();
5202      if (!this._handleOnScreenChange) {
5203        this._handleOnScreenChange = () => {
5204          const type = this._getType();
5205          if (type === "relative" && hasClass(container, "open")) {
5206            this.setHeight();
5207            this.setWidth();
5208          }
5209          if (this._isDesktop() !== originalIsDesktop) {
5210            if (type !== "relative") {
5211              addClass(container, "sidenav-fixed");
5212              content.style.paddingRight = "";
5213              content.style.minHeight = "";
5214            } else {
5215              removeClass(container, "sidenav-fixed");
5216            }
5217            originalIsDesktop = this._isDesktop();
5218          }
5219        };
5220        document.addEventListener(
5221          "screenChange.lexicon.sidenav",
5222          this._handleOnScreenChange
5223        );
5224      }
5225    },
5226    _renderNav() {
5227      const options = this.options;
5228      const container = document.querySelector(options.container);
5229      const navigation = container.querySelector(options.navigation);
5230      if (!container || !navigation) {
5231        return;
5232      }
5233      const menu = navigation.querySelector(".sidenav-menu");
5234      const closed = hasClass(container, "closed");
5235      const sidenavRight = this._isSidenavRight();
5236      const width = this._getSidenavWidth();
5237      if (closed) {
5238        setStyles(menu, {
5239          width: px(width)
5240        });
5241        if (sidenavRight) {
5242          const positionDirection = options.rtl ? "left" : "right";
5243          setStyles(menu, {
5244            [positionDirection]: px(width)
5245          });
5246        }
5247      } else {
5248        this.showSidenav();
5249        this.setHeight();
5250      }
5251    },
5252    _renderUI() {
5253      const options = this.options;
5254      const container = document.querySelector(options.container);
5255      if (!container) {
5256        return;
5257      }
5258      const toggler = this.toggler;
5259      const type = this._getType();
5260      if (!this.useDataAttribute) {
5261        setupResizeListener();
5262        this._onClosedStart();
5263        this._onClosed();
5264        this._onOpenStart();
5265        this._onOpen();
5266        this._onScreenChange();
5267        if (!this._isDesktop()) {
5268          setClasses(container, {
5269            closed: true,
5270            open: false
5271          });
5272          setClasses(toggler, {
5273            active: false,
5274            open: false
5275          });
5276        }
5277        if (options.position === "right") {
5278          addClass(container, "sidenav-right");
5279        }
5280        if (type !== "relative") {
5281          addClass(container, "sidenav-fixed");
5282        }
5283        this._renderNav();
5284      }
5285      setStyles(container, {
5286        display: ""
5287      });
5288    },
5289    _subscribeClickSidenavClose() {
5290      const instance = this;
5291      const options = instance.options;
5292      const containerSelector = options.container;
5293      if (!instance._sidenavCloseSubscription) {
5294        const closeButtonSelector = `${containerSelector} .sidenav-close`;
5295        instance._sidenavCloseSubscription = subscribe(
5296          closeButtonSelector,
5297          "click",
5298          function handleSidenavClose(event) {
5299            event.preventDefault();
5300            instance.toggle();
5301          }
5302        );
5303      }
5304    },
5305    _subscribeClickTrigger() {
5306      const instance = this;
5307      if (!instance._togglerSubscription) {
5308        const toggler = instance.toggler;
5309        instance._togglerSubscription = subscribe(
5310          toggler,
5311          "click",
5312          function handleTogglerClick(event) {
5313            instance.toggle();
5314            event.preventDefault();
5315          }
5316        );
5317      }
5318    },
5319    _subscribeReducedMotion() {
5320      const instance = this;
5321      import(
5322        // eslint-disable-next-line lines-around-comment
5323        /* webpackIgnore: true */
5324        themeDisplay.getPathContext() + "/o/frontend-js-web/__liferay__/index.js"
5325      ).then(({ isReducedMotion }) => {
5326        instance.isReducedMotion = isReducedMotion;
5327      });
5328    },
5329    _subscribeSidenavTransitionEnd(element, fn) {
5330      if (this.isReducedMotion()) {
5331        removeClass(element, "sidenav-transition");
5332        fn();
5333      } else {
5334        setTimeout(() => {
5335          removeClass(element, "sidenav-transition");
5336          fn();
5337        }, SideNavigation.TRANSITION_DURATION);
5338      }
5339    },
5340    clearHeight() {
5341      const options = this.options;
5342      const container = document.querySelector(options.container);
5343      if (container) {
5344        const content = container.querySelector(options.content);
5345        const navigation = container.querySelector(options.navigation);
5346        const menu = container.querySelector(".sidenav-menu");
5347        [content, navigation, menu].forEach((element) => {
5348          setStyles(element, {
5349            "height": "",
5350            "min-height": ""
5351          });
5352        });
5353      }
5354    },
5355    destroy() {
5356      const instance = this;
5357      if (instance._sidenavCloseSubscription) {
5358        instance._sidenavCloseSubscription.dispose();
5359        instance._sidenavCloseSubscription = null;
5360      }
5361      if (instance._togglerSubscription) {
5362        instance._togglerSubscription.dispose();
5363        instance._togglerSubscription = null;
5364      }
5365      INSTANCE_MAP.delete(instance.toggler);
5366      document.removeEventListener(
5367        "closedStart.lexicon.sidenav",
5368        instance._handleClosedStart
5369      );
5370      document.removeEventListener(
5371        "closed.lexicon.sidenav",
5372        instance._handleClosed
5373      );
5374      document.removeEventListener(
5375        "openStart.lexicon.sidenav",
5376        instance._handleOpenStart
5377      );
5378      document.removeEventListener(
5379        "open.lexicon.sidenav",
5380        instance._handleOpen
5381      );
5382      document.removeEventListener(
5383        "screenChange.lexicon.sidenav",
5384        instance._handleOnScreenChange
5385      );
5386      if (handleWindowResize) {
5387        window.removeEventListener("resize", handleWindowResize);
5388        handleWindowResize = null;
5389      }
5390    },
5391    hide() {
5392      if (this.useDataAttribute) {
5393        this.hideSimpleSidenav();
5394      } else {
5395        this.toggleNavigation(false);
5396      }
5397    },
5398    hideSidenav() {
5399      const instance = this;
5400      const options = instance.options;
5401      const container = document.querySelector(options.container);
5402      if (container) {
5403        const content = container.querySelector(options.content);
5404        const navigation = container.querySelector(options.navigation);
5405        const menu = navigation.querySelector(".sidenav-menu");
5406        const sidenavRight = instance._isSidenavRight();
5407        let positionDirection = options.rtl ? "right" : "left";
5408        if (sidenavRight) {
5409          positionDirection = options.rtl ? "left" : "right";
5410        }
5411        const paddingDirection = "padding-" + positionDirection;
5412        setStyles(content, {
5413          [paddingDirection]: "",
5414          [positionDirection]: ""
5415        });
5416        setStyles(navigation, {
5417          width: ""
5418        });
5419        if (sidenavRight) {
5420          setStyles(menu, {
5421            [positionDirection]: px(instance._getSidenavWidth())
5422          });
5423        }
5424        instance._subscribeSidenavTransitionEnd(menu, () => {
5425          instance._focusTrigger();
5426        });
5427      }
5428    },
5429    hideSimpleSidenav() {
5430      const instance = this;
5431      const options = instance.options;
5432      const simpleSidenavClosed = instance._isSimpleSidenavClosed();
5433      if (!simpleSidenavClosed) {
5434        const container = document.querySelector(options.container);
5435        const content = document.querySelector(options.content);
5436        if (!container || !content) {
5437          return;
5438        }
5439        const closedClass = options.closedClass;
5440        const openClass = options.openClass;
5441        const toggler = instance.toggler;
5442        const target = toggler.dataset.target || toggler.getAttribute("href");
5443        instance._emit("closedStart.lexicon.sidenav");
5444        dispatchCustomEvent(
5445          document,
5446          "closedStart.lexicon.sidenav",
5447          instance
5448        );
5449        instance._subscribeSidenavTransitionEnd(content, () => {
5450          removeClass(container, "sidenav-transition");
5451          removeClass(toggler, "sidenav-transition");
5452          instance._emit("closed.lexicon.sidenav");
5453          dispatchCustomEvent(
5454            document,
5455            "closed.lexicon.sidenav",
5456            instance
5457          );
5458          instance._focusTrigger();
5459        });
5460        const isReducedMotion = instance.isReducedMotion();
5461        if (hasClass(content, openClass)) {
5462          setClasses(content, {
5463            [closedClass]: true,
5464            [openClass]: false,
5465            "sidenav-transition": !isReducedMotion
5466          });
5467        }
5468        if (!isReducedMotion) {
5469          addClass(container, "sidenav-transition");
5470          addClass(toggler, "sidenav-transition");
5471        }
5472        setClasses(container, {
5473          [closedClass]: true,
5474          [openClass]: false
5475        });
5476        const nodes = document.querySelectorAll(
5477          `[data-target="${target}"], [href="${target}"]`
5478        );
5479        Array.from(nodes).forEach((node) => {
5480          setClasses(node, {
5481            active: false,
5482            [openClass]: false
5483          });
5484          setClasses(node, {
5485            active: false,
5486            [openClass]: false
5487          });
5488        });
5489      }
5490    },
5491    init(toggler, options) {
5492      const useDataAttribute = toggler.dataset.toggle === "liferay-sidenav";
5493      options = { ...DEFAULTS, ...options };
5494      options.breakpoint = toInt(options.breakpoint);
5495      options.container = options.container || toggler.dataset.target || toggler.getAttribute("href");
5496      options.gutter = toInt(options.gutter);
5497      options.rtl = document.dir === "rtl";
5498      options.width = toInt(options.width);
5499      options.widthOriginal = options.width;
5500      if (useDataAttribute) {
5501        options.closedClass = toggler.dataset.closedClass || "closed";
5502        options.content = toggler.dataset.content;
5503        options.loadingIndicatorTPL = toggler.dataset.loadingIndicatorTpl || options.loadingIndicatorTPL;
5504        options.openClass = toggler.dataset.openClass || "open";
5505        options.type = toggler.dataset.type;
5506        options.typeMobile = toggler.dataset.typeMobile;
5507        options.url = toggler.dataset.url;
5508        options.width = "";
5509      }
5510      this.toggler = toggler;
5511      this.options = options;
5512      this.useDataAttribute = useDataAttribute;
5513      this._emitter = new EventEmitter_default();
5514      this._bindUI();
5515      this._renderUI();
5516    },
5517    on(event, listener) {
5518      return this._emitter.on(event, listener);
5519    },
5520    setHeight() {
5521      const options = this.options;
5522      const container = document.querySelector(options.container);
5523      if (!container) {
5524        return;
5525      }
5526      const type = this._getType();
5527      if (type !== "fixed" && type !== "fixed-push") {
5528        const content = container.querySelector(options.content);
5529        const navigation = container.querySelector(options.navigation);
5530        const menu = container.querySelector(".sidenav-menu");
5531        const contentHeight = content.closest(".page-maximized") ? window.innerHeight - menu.getBoundingClientRect().top : content.getBoundingClientRect().height;
5532        const navigationHeight = navigation.getBoundingClientRect().height;
5533        const tallest = px(Math.max(contentHeight, navigationHeight));
5534        setStyles(content, {
5535          "min-height": tallest
5536        });
5537        setStyles(navigation, {
5538          "height": "100%",
5539          "min-height": tallest
5540        });
5541        setStyles(menu, {
5542          "height": "100%",
5543          "min-height": tallest
5544        });
5545      }
5546    },
5547    setWidth() {
5548      const options = this.options;
5549      const container = document.querySelector(options.container);
5550      const content = container.querySelector(options.content);
5551      const navigation = container.querySelector(options.navigation);
5552      if (!container || !content || !navigation) {
5553        return;
5554      }
5555      const menu = navigation.querySelector(".sidenav-menu");
5556      const sidenavRight = this._isSidenavRight();
5557      const width = this._getSidenavWidth();
5558      const offset = width + options.gutter;
5559      const url = options.url;
5560      if (url) {
5561        this._loadUrl(menu, url);
5562      }
5563      setStyles(navigation, {
5564        width: px(width)
5565      });
5566      setStyles(menu, {
5567        width: px(width)
5568      });
5569      let positionDirection = options.rtl ? "right" : "left";
5570      if (sidenavRight) {
5571        positionDirection = options.rtl ? "left" : "right";
5572      }
5573      const paddingDirection = "padding-" + positionDirection;
5574      const pushContentCssProperty = this._isDesktop() ? paddingDirection : positionDirection;
5575      const type = this._getType();
5576      if (type !== "relative") {
5577        addClass(container, "sidenav-fixed");
5578      }
5579      if (type !== "fixed") {
5580        let navigationStartX = hasClass(container, "open") ? offsetLeft(navigation) - options.gutter : offsetLeft(navigation) - offset;
5581        const contentStartX = offsetLeft(content);
5582        const contentWidth = toInt(getComputedStyle(content).width);
5583        let padding = "";
5584        if (options.rtl && sidenavRight || !options.rtl && options.position === "left") {
5585          navigationStartX = offsetLeft(navigation) + offset;
5586          if (navigationStartX > contentStartX) {
5587            padding = navigationStartX - contentStartX;
5588          }
5589        } else if (options.rtl && options.position === "left" || !options.rtl && sidenavRight) {
5590          if (navigationStartX < contentStartX + contentWidth) {
5591            padding = contentStartX + contentWidth - navigationStartX;
5592            if (padding >= offset) {
5593              padding = offset;
5594            }
5595          }
5596        }
5597        setStyles(content, {
5598          [pushContentCssProperty]: px(padding)
5599        });
5600      }
5601    },
5602    show() {
5603      if (this.useDataAttribute) {
5604        this.showSimpleSidenav();
5605      } else {
5606        this.toggleNavigation(true);
5607      }
5608    },
5609    showSidenav() {
5610      const instance = this;
5611      const options = instance.options;
5612      const container = document.querySelector(options.container);
5613      const navigation = container.querySelector(options.navigation);
5614      if (!container || !navigation) {
5615        return;
5616      }
5617      const menu = navigation.querySelector(".sidenav-menu");
5618      const url = options.url;
5619      if (url) {
5620        instance._loadUrl(menu, url);
5621      }
5622      instance.setWidth();
5623      instance._subscribeSidenavTransitionEnd(menu, () => {
5624        instance._focusNavigation();
5625      });
5626    },
5627    showSimpleSidenav() {
5628      const instance = this;
5629      const options = instance.options;
5630      const simpleSidenavClosed = instance._isSimpleSidenavClosed();
5631      if (simpleSidenavClosed) {
5632        const container = document.querySelector(options.container);
5633        const content = document.querySelector(options.content);
5634        if (!container || !content) {
5635          return;
5636        }
5637        const closedClass = options.closedClass;
5638        const openClass = options.openClass;
5639        const toggler = instance.toggler;
5640        const url = toggler.dataset.url;
5641        if (url) {
5642          instance._loadUrl(container, url);
5643        }
5644        instance._emit("openStart.lexicon.sidenav");
5645        dispatchCustomEvent(
5646          document,
5647          "openStart.lexicon.sidenav",
5648          instance
5649        );
5650        const isReducedMotion = instance.isReducedMotion();
5651        setClasses(content, {
5652          [closedClass]: false,
5653          [openClass]: true,
5654          "sidenav-transition": !isReducedMotion
5655        });
5656        setClasses(container, {
5657          [closedClass]: false,
5658          [openClass]: true,
5659          "sidenav-transition": !isReducedMotion
5660        });
5661        setClasses(toggler, {
5662          "active": true,
5663          [openClass]: true,
5664          "sidenav-transition": !isReducedMotion
5665        });
5666        instance._subscribeSidenavTransitionEnd(content, () => {
5667          if (!isReducedMotion) {
5668            removeClass(container, "sidenav-transition");
5669            removeClass(toggler, "sidenav-transition");
5670          }
5671          instance._emit("open.lexicon.sidenav");
5672          dispatchCustomEvent(document, "open.lexicon.sidenav", instance);
5673          this._focusNavigation();
5674        });
5675      }
5676    },
5677    toggle() {
5678      if (this.useDataAttribute) {
5679        this.toggleSimpleSidenav();
5680      } else {
5681        this.toggleNavigation();
5682      }
5683    },
5684    toggleNavigation(force) {
5685      const instance = this;
5686      const options = instance.options;
5687      const type = instance._getType();
5688      const container = document.querySelector(options.container);
5689      const menu = container.querySelector(".sidenav-menu");
5690      if (!container || !menu) {
5691        return;
5692      }
5693      const toggler = instance.toggler;
5694      const width = options.width;
5695      const closed = typeof force === "boolean" ? force : hasClass(container, "closed");
5696      const sidenavRight = instance._isSidenavRight();
5697      if (closed) {
5698        instance._emit("openStart.lexicon.sidenav");
5699        dispatchCustomEvent(
5700          document,
5701          "openStart.lexicon.sidenav",
5702          instance
5703        );
5704      } else {
5705        instance._emit("closedStart.lexicon.sidenav");
5706        dispatchCustomEvent(
5707          document,
5708          "closedStart.lexicon.sidenav",
5709          instance
5710        );
5711      }
5712      instance._subscribeSidenavTransitionEnd(container, () => {
5713        const menu2 = container.querySelector(".sidenav-menu");
5714        if (hasClass(container, "closed")) {
5715          instance.clearHeight();
5716          setClasses(toggler, {
5717            "open": false,
5718            "sidenav-transition": false
5719          });
5720          instance._emit("closed.lexicon.sidenav");
5721          dispatchCustomEvent(
5722            document,
5723            "closed.lexicon.sidenav",
5724            instance
5725          );
5726        } else {
5727          setClasses(toggler, {
5728            "open": true,
5729            "sidenav-transition": false
5730          });
5731          instance._emit("open.lexicon.sidenav");
5732          dispatchCustomEvent(document, "open.lexicon.sidenav", instance);
5733        }
5734        if (!instance._isDesktop()) {
5735          menu2.focus();
5736        }
5737      });
5738      if (closed) {
5739        if (type === "relative") {
5740          instance.setHeight();
5741        }
5742        setStyles(menu, {
5743          width: px(width)
5744        });
5745        const positionDirection = options.rtl ? "left" : "right";
5746        if (sidenavRight) {
5747          setStyles(menu, {
5748            [positionDirection]: ""
5749          });
5750        }
5751      }
5752      if (!instance.isReducedMotion()) {
5753        addClass(container, "sidenav-transition");
5754        addClass(toggler, "sidenav-transition");
5755      }
5756      if (closed) {
5757        instance.showSidenav();
5758      } else {
5759        instance.hideSidenav();
5760      }
5761      setClasses(container, {
5762        closed: !closed,
5763        open: closed
5764      });
5765      setClasses(toggler, {
5766        active: closed,
5767        open: closed
5768      });
5769    },
5770    toggleSimpleSidenav() {
5771      const simpleSidenavClosed = this._isSimpleSidenavClosed();
5772      if (simpleSidenavClosed) {
5773        this.showSimpleSidenav();
5774      } else {
5775        this.hideSimpleSidenav();
5776      }
5777    },
5778    visible() {
5779      let closed;
5780      if (this.useDataAttribute) {
5781        closed = this._isSimpleSidenavClosed();
5782      } else {
5783        const container = document.querySelector(this.options.container);
5784        if (!container) {
5785          return;
5786        }
5787        closed = hasClass(container, "sidenav-transition") ? !hasClass(container, "closed") : hasClass(container, "closed");
5788      }
5789      return !closed;
5790    }
5791  };
5792  SideNavigation.destroy = function destroy(element) {
5793    const instance = getInstance(element);
5794    if (instance) {
5795      instance.destroy();
5796    }
5797  };
5798  SideNavigation.hide = function hide(element) {
5799    const instance = getInstance(element);
5800    if (instance) {
5801      instance.hide();
5802    }
5803  };
5804  SideNavigation.initialize = function initialize(toggler, options = {}) {
5805    toggler = getElement(toggler);
5806    let instance = INSTANCE_MAP.get(toggler);
5807    if (!instance) {
5808      instance = new SideNavigation(toggler, options);
5809      INSTANCE_MAP.set(toggler, instance);
5810    }
5811    return instance;
5812  };
5813  SideNavigation.instance = getInstance;
5814  function onReady() {
5815    const togglers = document.querySelectorAll(
5816      '[data-toggle="liferay-sidenav"]'
5817    );
5818    Array.from(togglers).forEach(SideNavigation.initialize);
5819  }
5820  if (document.readyState !== "loading") {
5821    onReady();
5822  } else {
5823    document.addEventListener("DOMContentLoaded", () => {
5824      onReady();
5825    });
5826  }
5827  var side_navigation_es_default = SideNavigation;
5828
5829  
5829// src/main/resources/META-INF/resources/liferay/status_code.js
5830  var status_code_default = {
5831    BAD_REQUEST: 400,
5832    INTERNAL_SERVER_ERROR: 500,
5833    OK: 200,
5834    SC_DUPLICATE_FILE_EXCEPTION: 490,
5835    SC_FILE_ANTIVIRUS_EXCEPTION: 494,
5836    SC_FILE_CUSTOM_EXCEPTION: 499,
5837    SC_FILE_EXTENSION_EXCEPTION: 491,
5838    SC_FILE_NAME_EXCEPTION: 492,
5839    SC_FILE_SIZE_EXCEPTION: 493,
5840    SC_UPLOAD_REQUEST_SIZE_EXCEPTION: 495
5841  };
5842
5843  
5843// src/main/resources/META-INF/resources/liferay/util/add_params.js
5844  function addParams(params, baseUrl) {
5845    if (!params || typeof params !== "object" && typeof params !== "string") {
5846      throw new TypeError("Parameter params must be an object or string");
5847    }
5848    if (typeof baseUrl !== "string") {
5849      throw new TypeError("Parameter baseUrl must be a string");
5850    }
5851    const url = baseUrl.startsWith("/") ? new URL(baseUrl, location.href) : new URL(baseUrl);
5852    if (typeof params === "object") {
5853      Object.entries(params).forEach(([key, value]) => {
5854        url.searchParams.append(key, value);
5855      });
5856    } else {
5857      const searchParams = new URLSearchParams(params.trim());
5858      searchParams.forEach((value, key) => {
5859        if (value) {
5860          url.searchParams.append(key, value);
5861        } else {
5862          url.searchParams.append(key, "");
5863        }
5864      });
5865    }
5866    return url.toString();
5867  }
5868
5869  
5869// src/main/resources/META-INF/resources/liferay/util/address/get_countries.es.js
5870  function getCountries(callback) {
5871    if (typeof callback !== "function") {
5872      throw new TypeError("Parameter callback must be a function");
5873    }
5874    Liferay.Service(
5875      "/country/get-company-countries",
5876      {
5877        active: true,
5878        companyId: Liferay.ThemeDisplay.getCompanyId()
5879      },
5880      callback
5881    );
5882  }
5883
5884  
5884// src/main/resources/META-INF/resources/liferay/util/address/get_regions.es.js
5885  function getRegions(callback, selectKey) {
5886    if (typeof callback !== "function") {
5887      throw new TypeError("Parameter callback must be a function");
5888    }
5889    if (typeof selectKey !== "string") {
5890      throw new TypeError("Parameter selectKey must be a string");
5891    }
5892    Liferay.Service(
5893      "/region/get-regions",
5894      {
5895        active: true,
5896        countryId: parseInt(selectKey, 10)
5897      },
5898      callback
5899    );
5900  }
5901
5902  
5902// src/main/resources/META-INF/resources/liferay/util/consent.js
5903  var CONSENT_TYPES = {
5904    FUNCTIONAL: "CONSENT_TYPE_FUNCTIONAL",
5905    NECESSARY: "CONSENT_TYPE_NECESSARY",
5906    PERFORMANCE: "CONSENT_TYPE_PERFORMANCE",
5907    PERSONALIZATION: "CONSENT_TYPE_PERSONALIZATION"
5908  };
5909  function checkConsent(type) {
5910    return type === CONSENT_TYPES.NECESSARY || getCookie(type, CONSENT_TYPES.NECESSARY) !== "false";
5911  }
5912
5913  
5913// src/main/resources/META-INF/resources/liferay/util/cookie/cookie.js
5914  var generateCookie = (name, value, options = {}) => {
5915    let cookie = `${name}=${value}`;
5916    if (!options.path) {
5917      cookie += `; path=/`;
5918    }
5919    if (!options.expires && !("max-age" in options)) {
5920      cookie += `; max-age=${365 * 24 * 60 * 60}`;
5921    }
5922    for (const [key, value2] of Object.entries(options)) {
5923      if (value2 === false) {
5924        continue;
5925      } else if (value2 === true) {
5926        cookie += `; ${key}`;
5927      } else {
5928        cookie += `; ${key}=${value2}`;
5929      }
5930    }
5931    return cookie;
5932  };
5933  function getCookie(name, type) {
5934    if (!checkConsent(type)) {
5935      return void 0;
5936    }
5937    return document.cookie.split("; ").find((v) => v.startsWith(`${name}=`))?.split("=")[1];
5938  }
5939  function removeCookie(name) {
5940    document.cookie = generateCookie(name, "", { "max-age": 0 });
5941  }
5942  function setCookie(name, value, type, options) {
5943    if (checkConsent(type)) {
5944      document.cookie = generateCookie(name, value, options);
5945      return true;
5946    }
5947    return false;
5948  }
5949  var cookie_default = {
5950    TYPES: CONSENT_TYPES,
5951    get: getCookie,
5952    remove: removeCookie,
5953    set: setCookie
5954  };
5955
5956  
5956// src/main/resources/META-INF/resources/liferay/util/get_dom.js
5957  function getDOM(element) {
5958    if (element._node || element._nodes) {
5959      return element.nodeType ? element : element._node || null;
5960    }
5961    return element;
5962  }
5963
5964  
5964// src/main/resources/META-INF/resources/liferay/util/get_element.js
5965  function getElement2(element) {
5966    const currentElement = getDOM(element);
5967    return typeof currentElement === "string" ? document.querySelector(currentElement) : currentElement.jquery ? currentElement[0] : currentElement;
5968  }
5969
5970  
5970// src/main/resources/META-INF/resources/liferay/util/in_browser_view.js
5971  function inBrowserView(node, baseWindow, nodeRegion) {
5972    let viewable = false;
5973    node = getElement2(node);
5974    if (node) {
5975      if (!nodeRegion) {
5976        nodeRegion = node.getBoundingClientRect();
5977        nodeRegion = {
5978          left: nodeRegion.left + window.scrollX,
5979          top: nodeRegion.top + window.scrollY
5980        };
5981        nodeRegion.bottom = nodeRegion.top + node.offsetHeight;
5982        nodeRegion.right = nodeRegion.left + node.offsetWidth;
5983      }
5984      if (!baseWindow) {
5985        baseWindow = window;
5986      }
5987      baseWindow = getElement2(baseWindow);
5988      const winRegion = {};
5989      winRegion.left = baseWindow.scrollX;
5990      winRegion.right = winRegion.left + baseWindow.innerWidth;
5991      winRegion.top = baseWindow.scrollY;
5992      winRegion.bottom = winRegion.top + baseWindow.innerHeight;
5993      viewable = nodeRegion.bottom <= winRegion.bottom && nodeRegion.left >= winRegion.left && nodeRegion.right <= winRegion.right && nodeRegion.top >= winRegion.top;
5994      if (viewable) {
5995        const frameElement = baseWindow.frameElement;
5996        if (frameElement) {
5997          let frameOffset = frameElement.getBoundingClientRect();
5998          frameOffset = {
5999            left: frameOffset.left + window.scrollX,
6000            top: frameOffset.top + window.scrollY
6001          };
6002          const xOffset = frameOffset.left - winRegion.left;
6003          nodeRegion.left += xOffset;
6004          nodeRegion.right += xOffset;
6005          const yOffset = frameOffset.top - winRegion.top;
6006          nodeRegion.top += yOffset;
6007          nodeRegion.bottom += yOffset;
6008          viewable = inBrowserView(node, baseWindow.parent, nodeRegion);
6009        }
6010      }
6011    }
6012    return viewable;
6013  }
6014
6015  
6015// src/main/resources/META-INF/resources/liferay/util/focus_form_field.js
6016  function getDisabledParents(element) {
6017    const result = [];
6018    while (element.parentElement) {
6019      if (element.parentElement.getAttribute("disabled")) {
6020        result.push(element.parentElement);
6021      }
6022      element = element.parentElement;
6023    }
6024    return result;
6025  }
6026  function focusFormField(element) {
6027    element = getElement2(element);
6028    if (inBrowserView(element)) {
6029      const disabledParents = getDisabledParents(element);
6030      const focusable = !element.getAttribute("disabled") && element.offsetWidth > 0 && element.offsetHeight > 0 && !disabledParents.length;
6031      const form = element.closest("form");
6032      if (!form || focusable) {
6033        element.focus();
6034      } else if (form) {
6035        const portletName = form.dataset.fmNamespace;
6036        const formReadyEventName = portletName + "formReady";
6037        const formReadyHandler = (event) => {
6038          const elFormName = form.getAttribute("name");
6039          const formName = event.formName;
6040          if (elFormName === formName) {
6041            element.focus();
6042            Liferay.detach(formReadyEventName, formReadyHandler);
6043          }
6044        };
6045        Liferay.on(formReadyEventName, formReadyHandler);
6046      }
6047    }
6048  }
6049
6050  
6050// src/main/resources/META-INF/resources/liferay/util/form/get_form_element.es.js
6051  function getFormElement(form, elementName) {
6052    let formElement = null;
6053    if (form !== void 0 && form.nodeName === "FORM" && typeof elementName === "string") {
6054      const ns2 = form.dataset.fmNamespace || "";
6055      formElement = form.elements[ns2 + elementName] || null;
6056    }
6057    return formElement;
6058  }
6059
6060  
6060// src/main/resources/META-INF/resources/liferay/util/form/set_form_values.es.js
6061  function setFormValues(form, data) {
6062    if (form === void 0 || form.nodeName !== "FORM" || !isObject(data)) {
6063      return;
6064    }
6065    const entries = Object.entries(data);
6066    entries.forEach(([elementName, elementValue]) => {
6067      const element = getFormElement(form, elementName);
6068      if (element) {
6069        element.value = elementValue;
6070      }
6071    });
6072  }
6073
6074  
6074// src/main/resources/META-INF/resources/liferay/util/form/post_form.es.js
6075  function postForm(form, options) {
6076    if (typeof form === "string") {
6077      form = document.querySelector(form);
6078    }
6079    if (form && form.nodeName === "FORM") {
6080      form.setAttribute("method", "post");
6081      if (isObject(options)) {
6082        const { data, url } = options;
6083        if (isObject(data)) {
6084          setFormValues(form, data);
6085        } else {
6086          return;
6087        }
6088        if (url === void 0) {
6089          submitForm(form);
6090        } else if (typeof url === "string") {
6091          submitForm(form, url);
6092        }
6093      } else {
6094        submitForm(form);
6095      }
6096    }
6097  }
6098
6099  
6099// src/main/resources/META-INF/resources/liferay/util/format_storage.es.js
6100  var DEFAULT_OPTIONS = {
6101    addSpaceBeforeSuffix: false,
6102    decimalSeparator: ".",
6103    denominator: 1024,
6104    suffixGB: "GB",
6105    suffixKB: "KB",
6106    suffixMB: "MB"
6107  };
6108  function formatStorage(size, options = {}) {
6109    const {
6110      addSpaceBeforeSuffix,
6111      decimalSeparator,
6112      denominator,
6113      suffixGB,
6114      suffixKB,
6115      suffixMB
6116    } = {
6117      ...DEFAULT_OPTIONS,
6118      ...options
6119    };
6120    if (typeof size !== "number") {
6121      throw new TypeError("Parameter size must be a number");
6122    }
6123    let decimalPlaces = 0;
6124    let suffix = suffixKB;
6125    size /= denominator;
6126    if (size >= denominator) {
6127      suffix = suffixMB;
6128      size /= denominator;
6129      decimalPlaces = 1;
6130    }
6131    if (size >= denominator) {
6132      suffix = suffixGB;
6133      size /= denominator;
6134      decimalPlaces = 1;
6135    }
6136    let fixedSize = size.toFixed(decimalPlaces);
6137    if (decimalSeparator !== ".") {
6138      fixedSize = fixedSize.replace(/\./, decimalSeparator);
6139    }
6140    return fixedSize + (addSpaceBeforeSuffix ? " " : "") + suffix;
6141  }
6142
6143  
6143// src/main/resources/META-INF/resources/liferay/util/format_xml.es.js
6144  var NEW_LINE = "\r\n";
6145  var REGEX_CDATA = /<!\[CDATA\[.*?\]\]>/gs;
6146  var REGEX_DECLARATIVE_CLOSE = /-->|\]>/;
6147  var REGEX_DECLARATIVE_OPEN = /<!/;
6148  var REGEX_DIRECTIVE = /<\?/;
6149  var REGEX_DOCTYPE = /!DOCTYPE/;
6150  var REGEX_ELEMENT = /^<\w/;
6151  var REGEX_ELEMENT_CLOSE = /^<\/\w/;
6152  var REGEX_ELEMENT_NAMESPACED = /^<[\w:\-.,]+/;
6153  var REGEX_ELEMENT_NAMESPACED_CLOSE = /^<\/[\w:\-.,]+/;
6154  var REGEX_ELEMENT_OPEN = /<\w/;
6155  var REGEX_NAMESPACE_XML = /xmlns(?::|=)/g;
6156  var REGEX_NAMESPACE_XML_ATTR = /\s*(xmlns)(:|=)/g;
6157  var REGEX_TAG_CLOSE = /<\//;
6158  var REGEX_TAG_OPEN = /</g;
6159  var REGEX_TAG_SINGLE_CLOSE = /\/>/;
6160  var REGEX_WHITESPACE_BETWEEN_TAGS = />\s+</g;
6161  var STR_BLANK = "";
6162  var STR_TOKEN = "~::~";
6163  var STR_TOKEN_CDATA = "<" + STR_TOKEN + "CDATA" + STR_TOKEN + ">";
6164  var REGEX_TOKEN_CDATA = new RegExp(STR_TOKEN_CDATA, "g");
6165  var TAG_INDENT = "	";
6166  var DEFAULT_OPTIONS2 = {
6167    newLine: NEW_LINE,
6168    tagIndent: TAG_INDENT
6169  };
6170  function formatXML(content, options = {}) {
6171    const { newLine, tagIndent } = {
6172      ...DEFAULT_OPTIONS2,
6173      ...options
6174    };
6175    if (typeof content !== "string") {
6176      throw new TypeError("Parameter content must be a string");
6177    }
6178    const cdata = [];
6179    content = content.trim();
6180    content = content.replace(REGEX_CDATA, (match) => {
6181      cdata.push(match);
6182      return STR_TOKEN_CDATA;
6183    });
6184    content = content.replace(REGEX_WHITESPACE_BETWEEN_TAGS, "><");
6185    content = content.replace(REGEX_TAG_OPEN, STR_TOKEN + "<");
6186    content = content.replace(REGEX_NAMESPACE_XML_ATTR, STR_TOKEN + "$1$2");
6187    content = content.replace(REGEX_TOKEN_CDATA, () => cdata.shift());
6188    let commentCounter = 0;
6189    let inComment = false;
6190    const items = content.split(STR_TOKEN);
6191    let level = 0;
6192    let result = "";
6193    items.forEach((item, index) => {
6194      if (REGEX_CDATA.test(item)) {
6195        result += indent(level, newLine, tagIndent) + item;
6196      } else if (REGEX_DECLARATIVE_OPEN.test(item)) {
6197        result += indent(level, newLine, tagIndent) + item;
6198        commentCounter++;
6199        inComment = true;
6200        if (REGEX_DECLARATIVE_CLOSE.test(item) || REGEX_DOCTYPE.test(item)) {
6201          commentCounter--;
6202          inComment = commentCounter !== 0;
6203        }
6204      } else if (REGEX_DECLARATIVE_CLOSE.test(item)) {
6205        result += item;
6206        commentCounter--;
6207        inComment = commentCounter !== 0;
6208      } else if (REGEX_ELEMENT.exec(items[index - 1]) && REGEX_ELEMENT_CLOSE.exec(item) && REGEX_ELEMENT_NAMESPACED.exec(items[index - 1]).toString() === REGEX_ELEMENT_NAMESPACED_CLOSE.exec(item)[0].replace("/", STR_BLANK).toString()) {
6209        result += item;
6210        if (!inComment) {
6211          --level;
6212        }
6213      } else if (REGEX_ELEMENT_OPEN.test(item) && !REGEX_TAG_CLOSE.test(item) && !REGEX_TAG_SINGLE_CLOSE.test(item)) {
6214        if (inComment) {
6215          result += item;
6216        } else {
6217          result += indent(level++, newLine, tagIndent) + item;
6218        }
6219      } else if (REGEX_ELEMENT_OPEN.test(item) && REGEX_TAG_CLOSE.test(item)) {
6220        if (inComment) {
6221          result += item;
6222        } else {
6223          result += indent(level, newLine, tagIndent) + item;
6224        }
6225      } else if (REGEX_TAG_CLOSE.test(item)) {
6226        if (inComment) {
6227          result += item;
6228        } else {
6229          result += indent(--level, newLine, tagIndent) + item;
6230        }
6231      } else if (REGEX_TAG_SINGLE_CLOSE.test(item)) {
6232        if (inComment) {
6233          result += item;
6234        } else {
6235          result += indent(level, newLine, tagIndent) + item;
6236        }
6237      } else if (REGEX_DIRECTIVE.test(item)) {
6238        result += indent(level, newLine, tagIndent) + item;
6239      } else if (REGEX_NAMESPACE_XML) {
6240        result += indent(level, newLine, tagIndent) + item;
6241      } else {
6242        result += item;
6243      }
6244      if (new RegExp("^" + newLine).test(result)) {
6245        result = result.slice(newLine.length);
6246      }
6247    });
6248    return result;
6249  }
6250  function indent(level, newLine, tagIndent) {
6251    return newLine + new Array(level + 1).join(tagIndent);
6252  }
6253
6254  
6254// src/main/resources/META-INF/resources/liferay/util/get_checkboxes.js
6255  function getCheckboxes(form, except, name, state) {
6256    if (typeof form === "string") {
6257      form = document.querySelector(form);
6258    } else {
6259      form = form._node || form;
6260    }
6261    let selector = "input[type=checkbox]";
6262    if (name) {
6263      selector += `[name=${name}]`;
6264    }
6265    const checkboxes = Array.from(form.querySelectorAll(selector));
6266    if (!checkboxes.length) {
6267      return "";
6268    }
6269    return checkboxes.reduce((previous, item) => {
6270      const { checked, disabled, name: name2, value } = item;
6271      if (value && name2 !== except && checked === state && !disabled) {
6272        previous.push(value);
6273      }
6274      return previous;
6275    }, []).join();
6276  }
6277  function getCheckedCheckboxes(form, except, name) {
6278    return getCheckboxes(form, except, name, true);
6279  }
6280  function getUncheckedCheckboxes(form, except, name) {
6281    return getCheckboxes(form, except, name, false);
6282  }
6283
6284  
6284// src/main/resources/META-INF/resources/liferay/util/get_crop_region.es.js
6285  function getCropRegion(imagePreview, region) {
6286    if (!isObject(imagePreview) || isObject(imagePreview) && imagePreview.tagName !== "IMG") {
6287      throw new TypeError("Parameter imagePreview must be an image");
6288    }
6289    if (!isObject(region)) {
6290      throw new TypeError("Parameter region must be an object");
6291    }
6292    const scaleX = imagePreview.naturalWidth / imagePreview.offsetWidth;
6293    const scaleY = imagePreview.naturalHeight / imagePreview.offsetHeight;
6294    const height = region.height ? region.height * scaleY : imagePreview.naturalHeight;
6295    const width = region.width ? region.width * scaleX : imagePreview.naturalWidth;
6296    const x = region.x ? Math.max(region.x * scaleX, 0) : 0;
6297    const y = region.y ? Math.max(region.y * scaleY, 0) : 0;
6298    return {
6299      height,
6300      width,
6301      x,
6302      y
6303    };
6304  }
6305
6306  
6306// src/main/resources/META-INF/resources/liferay/util/get_geolocation.js
6307  function getGeolocation(success, fallback, options) {
6308    if (success && navigator.geolocation) {
6309      navigator.geolocation.getCurrentPosition(
6310        (position) => {
6311          success(
6312            position.coords.latitude,
6313            position.coords.longitude,
6314            position
6315          );
6316        },
6317        fallback,
6318        options
6319      );
6320    } else if (fallback) {
6321      fallback();
6322    }
6323  }
6324
6325  
6325// src/main/resources/META-INF/resources/liferay/util/get_lexicon_icon.js
6326  function getLexiconIcon(icon, cssClass = "") {
6327    if (!icon) {
6328      throw new TypeError("Parameter icon must be provided");
6329    }
6330    function getLexiconIconHTML(iconName, cssClass2) {
6331      return `<svg
6332				aria-hidden="true"
6333				class="lexicon-icon lexicon-icon-${iconName} ${cssClass2}"
6334				focusable="false"
6335				role="presentation"
6336			>
6337				<use href="${Liferay.Icons.spritemap}#${iconName}" />
6338			</svg>`;
6339    }
6340    const lexiconIconTemplate = getLexiconIconHTML(icon, cssClass);
6341    const tempElement = document.createElement("div");
6342    tempElement.innerHTML = lexiconIconTemplate;
6343    return tempElement.firstChild;
6344  }
6345
6346  
6346// src/main/resources/META-INF/resources/liferay/util/get_lexicon_icon_template.js
6347  function getLexiconIconTpl(icon, cssClass = "") {
6348    return `<svg aria-hidden="true" class="lexicon-icon lexicon-icon-${icon} ${cssClass}" focusable="false" role="presentation"><use href="${Liferay.Icons.spritemap}#${icon}" /></svg>`;
6349  }
6350
6351  
6351// src/main/resources/META-INF/resources/liferay/util/get_opener.js
6352  var _opener;
6353  function getOpener() {
6354    let openingWindow = _opener;
6355    if (!openingWindow) {
6356      const topUtil = getTop().Liferay.Util;
6357      const windowName = window.name;
6358      const dialog = topUtil.Window.getById(windowName);
6359      if (dialog) {
6360        openingWindow = dialog._opener;
6361        _opener = openingWindow;
6362      }
6363    }
6364    return openingWindow || window.opener || window.parent;
6365  }
6366
6367  
6367// src/main/resources/META-INF/resources/liferay/util/get_selected_option_values.js
6368  function getSelectedOptionValues(select, delimiter = ",") {
6369    const optionsArray = Array.from(select.getElementsByTagName("option"));
6370    return optionsArray.reduce((previous, item) => {
6371      const { value } = item;
6372      if (value) {
6373        previous.push(value);
6374      }
6375      return previous;
6376    }, []).join(delimiter);
6377  }
6378
6379  
6379// src/main/resources/META-INF/resources/liferay/util/get_url_with_session_id.js
6380  function getURLWithSessionId(url) {
6381    if (!themeDisplay.isAddSessionIdToURL()) {
6382      return url;
6383    }
6384    let separatorIndex = url.indexOf(";");
6385    if (separatorIndex > -1) {
6386      return url;
6387    }
6388    const sessionId = `;jsessionid=${themeDisplay.getSessionId()}`;
6389    separatorIndex = url.indexOf("?");
6390    if (separatorIndex > -1) {
6391      return `${url.substring(0, separatorIndex)}${sessionId}${url.substring(
6392        separatorIndex
6393      )}`;
6394    }
6395    separatorIndex = url.indexOf("//");
6396    if (separatorIndex > -1) {
6397      const lastSeparatorIndex = url.lastIndexOf("/");
6398      if (separatorIndex + 1 === lastSeparatorIndex) {
6399        return `${url}/${sessionId}`;
6400      }
6401    }
6402    return `${url}${sessionId}`;
6403  }
6404
6405  
6405// src/main/resources/META-INF/resources/liferay/util/get_window.js
6406  function getWindow(windowId = window.name) {
6407    const topWindow = getTop();
6408    return topWindow.Liferay.Util.Window.getById(windowId);
6409  }
6410
6411  
6411// src/main/resources/META-INF/resources/liferay/util/is_phone.js
6412  function isPhone() {
6413    return window.innerWidth < breakpoints_default.PHONE;
6414  }
6415
6416  
6416// src/main/resources/META-INF/resources/liferay/util/is_tablet.js
6417  function isTablet() {
6418    return window.innerWidth < breakpoints_default.TABLET;
6419  }
6420
6421  
6421// src/main/resources/META-INF/resources/liferay/util/storage.js
6422  var Storage = class {
6423    constructor(storage) {
6424      __publicField(this, "TYPES", CONSENT_TYPES);
6425      this.storage = storage;
6426    }
6427    clear() {
6428      return this.storage.clear();
6429    }
6430    getItem(key, type) {
6431      if (!checkConsent(type)) {
6432        return null;
6433      }
6434      return this.storage.getItem(key);
6435    }
6436    key(index, type) {
6437      if (!checkConsent(type)) {
6438        return null;
6439      }
6440      return this.storage.key(index);
6441    }
6442    removeItem(key) {
6443      return this.storage.removeItem(key);
6444    }
6445    setItem(key, value, type) {
6446      if (!checkConsent(type)) {
6447        return false;
6448      }
6449      this.storage.setItem(key, value);
6450      return true;
6451    }
6452    get length() {
6453      return this.storage.length;
6454    }
6455  };
6456
6457  
6457// src/main/resources/META-INF/resources/liferay/util/local_storage.js
6458  var local_storage_default = new Storage(localStorage);
6459
6460  
6460// src/main/resources/META-INF/resources/liferay/util/navigate.es.js
6461  function navigate_es_default(url, listeners) {
6462    let urlString = url;
6463    if (url?.constructor?.name === "URL") {
6464      urlString = String(url);
6465    }
6466    if (Liferay.SPA?.app?.canNavigate(urlString)) {
6467      Liferay.SPA.app.navigate(urlString);
6468      if (listeners) {
6469        Object.keys(listeners).forEach((key) => {
6470          Liferay.once(key, listeners[key]);
6471        });
6472      }
6473    } else if (isValidURL(urlString)) {
6474      window.location.href = urlString;
6475    }
6476  }
6477  function isValidURL(url) {
6478    let urlObject;
6479    try {
6480      if (url.startsWith("/")) {
6481        urlObject = new URL(url, window.location.origin);
6482      } else {
6483        urlObject = new URL(url);
6484      }
6485    } catch (error) {
6486      return false;
6487    }
6488    return urlObject.protocol === "http:" || urlObject.protocol === "https:";
6489  }
6490
6491  
6491// src/main/resources/META-INF/resources/liferay/util/normalize_friendly_url.js
6492  function normalizeFriendlyURL(text) {
6493    if (typeof text !== "string") {
6494      throw new TypeError("parameter text must be a string");
6495    }
6496    return text.replace(/[^a-z0-9_-]/gi, "-").replace(/^-+/, "").replace(/--+/, "-").toLowerCase();
6497  }
6498
6499  
6499// src/main/resources/META-INF/resources/liferay/util/ns.es.js
6500  var nsCached = memoize((namespace, str) => {
6501    if (typeof str !== "undefined" && !(str.lastIndexOf(namespace, 0) === 0)) {
6502      str = `${namespace}${str}`;
6503    }
6504    return str;
6505  });
6506  function ns(namespace, object) {
6507    let value;
6508    if (typeof object !== "object") {
6509      value = nsCached(namespace, object);
6510    } else {
6511      value = {};
6512      const keys = Object.keys(object);
6513      keys.forEach((item) => {
6514        const originalItem = item;
6515        item = nsCached(namespace, item);
6516        value[item] = object[originalItem];
6517      });
6518    }
6519    return value;
6520  }
6521
6522  
6522// src/main/resources/META-INF/resources/liferay/util/object_to_url_search_params.es.js
6523  function objectToURLSearchParams(object) {
6524    if (!isObject(object)) {
6525      throw new TypeError("Parameter obj must be an object");
6526    }
6527    const urlSearchParams = new URLSearchParams();
6528    Object.entries(object).forEach(([key, value]) => {
6529      if (Array.isArray(value)) {
6530        for (let i = 0; i < value.length; i++) {
6531          urlSearchParams.append(key, value[i]);
6532        }
6533      } else {
6534        urlSearchParams.append(key, value);
6535      }
6536    });
6537    return urlSearchParams;
6538  }
6539
6540  
6540// src/main/resources/META-INF/resources/liferay/util/portlet_configuration_icon_action.js
6541  var portletConfigurationIconActions = /* @__PURE__ */ new Map();
6542  function getPortletConfigurationIconAction(id) {
6543    return portletConfigurationIconActions.get(id);
6544  }
6545  function setPortletConfigurationIconAction(id, callback) {
6546    portletConfigurationIconActions.set(id, callback);
6547  }
6548
6549  
6549// src/main/resources/META-INF/resources/liferay/util/portlet_url/create_action_url.es.js
6550  function createActionURL(basePortletURL, parameters = {}) {
6551    return createPortletURL(basePortletURL, {
6552      ...parameters,
6553      p_p_lifecycle: "1"
6554    });
6555  }
6556
6557  
6557// src/main/resources/META-INF/resources/liferay/util/portlet_url/create_render_url.es.js
6558  function createRenderURL(basePortletURL, parameters = {}) {
6559    return createPortletURL(basePortletURL, {
6560      ...parameters,
6561      p_p_lifecycle: "0"
6562    });
6563  }
6564
6565  
6565// src/main/resources/META-INF/resources/liferay/util/portlet_url/create_resource_url.es.js
6566  function createResourceURL(basePortletURL, parameters = {}) {
6567    return createPortletURL(basePortletURL, {
6568      ...parameters,
6569      p_p_lifecycle: "2"
6570    });
6571  }
6572
6573  
6573// src/main/resources/META-INF/resources/liferay/util/remove_entity_selection.js
6574  function removeEntitySelection(entityIdString, entityNameString, removeEntityButton, namespace) {
6575    const elementByEntityId = document.getElementById(
6576      `${namespace}${entityIdString}`
6577    );
6578    if (elementByEntityId) {
6579      elementByEntityId.value = 0;
6580    }
6581    const elementByEntityName = document.getElementById(
6582      `${namespace}${entityNameString}`
6583    );
6584    if (elementByEntityName) {
6585      elementByEntityName.value = "";
6586    }
6587    toggleDisabled(removeEntityButton, true);
6588    Liferay.fire("entitySelectionRemoved");
6589  }
6590
6591  
6591// src/main/resources/META-INF/resources/liferay/util/run_scripts_in_element.es.js
6592  function runJSFromText(sourceScriptElement, next, appendFn) {
6593    const { text, type } = sourceScriptElement;
6594    const scriptElement = document.createElement("script");
6595    if (Liferay.CSP.nonce) {
6596      scriptElement.setAttribute("nonce", Liferay.CSP.nonce);
6597    }
6598    scriptElement.text = text;
6599    scriptElement.type = type;
6600    if (appendFn) {
6601      appendFn(scriptElement);
6602    } else {
6603      document.head.appendChild(scriptElement);
6604    }
6605    scriptElement.remove();
6606    next();
6607  }
6608  function runJSFromFile(sourceScriptElement, next, appendFn) {
6609    const { src, type } = sourceScriptElement;
6610    const scriptElement = document.createElement("script");
6611    if (Liferay.CSP.nonce) {
6612      scriptElement.setAttribute("nonce", Liferay.CSP.nonce);
6613    }
6614    scriptElement.src = src;
6615    scriptElement.type = type;
6616    const callback = function() {
6617      scriptElement.remove();
6618      next();
6619    };
6620    scriptElement.addEventListener("load", callback, { once: true });
6621    scriptElement.addEventListener("error", callback, { once: true });
6622    if (appendFn) {
6623      appendFn(scriptElement);
6624    } else {
6625      document.head.appendChild(scriptElement);
6626    }
6627  }
6628  function runScriptsInOrder(scripts, i, defaultFn, appendFn) {
6629    const scriptElement = scripts[i];
6630    const runNextScript = () => {
6631      if (i < scripts.length - 1) {
6632        runScriptsInOrder(scripts, i + 1, defaultFn, appendFn);
6633      } else if (defaultFn) {
6634        setTimeout(defaultFn);
6635      }
6636    };
6637    if (!scriptElement) {
6638      return;
6639    } else if (scriptElement.type && scriptElement.type !== "text/javascript" && scriptElement.type !== "module" && scriptElement.type !== "module-shim") {
6640      runNextScript();
6641    } else {
6642      scriptElement.remove();
6643      if (scriptElement.src) {
6644        runJSFromFile(scriptElement, runNextScript, appendFn);
6645      } else {
6646        runJSFromText(scriptElement, runNextScript, appendFn);
6647      }
6648    }
6649  }
6650  function run_scripts_in_element_es_default(element, defaultFn, appendFn) {
6651    const scripts = element.querySelectorAll("script");
6652    if (!scripts.length && defaultFn) {
6653      setTimeout(defaultFn);
6654      return;
6655    }
6656    runScriptsInOrder(scripts, 0, defaultFn, appendFn);
6657  }
6658
6659  
6659// src/main/resources/META-INF/resources/liferay/util/select_folder.js
6660  function selectFolder(folderData, namespace) {
6661    const folderDataElement = document.getElementById(
6662      `${namespace}${folderData.idString}`
6663    );
6664    if (folderDataElement) {
6665      folderDataElement.value = folderData.idValue;
6666    }
6667    const folderNameElement = document.getElementById(
6668      `${namespace}${folderData.nameString}`
6669    );
6670    if (folderNameElement) {
6671      folderNameElement.value = Liferay.Util.unescape(folderData.nameValue);
6672    }
6673    const removeFolderButton = document.getElementById(
6674      `${namespace}removeFolderButton`
6675    );
6676    if (removeFolderButton) {
6677      toggleDisabled(removeFolderButton, false);
6678    }
6679  }
6680
6681  
6681// src/main/resources/META-INF/resources/liferay/util/session.es.js
6682  var TOKEN_SERIALIZE = "serialize://";
6683  function getSessionClickFormData(cmd) {
6684    const doAsUserIdEncoded = Liferay.ThemeDisplay.getDoAsUserIdEncoded();
6685    const formData = new FormData();
6686    formData.append("cmd", cmd);
6687    formData.append("p_auth", Liferay.authToken);
6688    if (doAsUserIdEncoded) {
6689      formData.append("doAsUserId", doAsUserIdEncoded);
6690    }
6691    return formData;
6692  }
6693  function getSessionClickURL() {
6694    return `${Liferay.ThemeDisplay.getPortalURL()}${Liferay.ThemeDisplay.getPathMain()}/portal/session_click`;
6695  }
6696  function getSessionValue(key, options = {}) {
6697    const formData = getSessionClickFormData("get");
6698    formData.append("key", key);
6699    if (options.useHttpSession) {
6700      formData.append("useHttpSession", true);
6701    }
6702    return defaultFetch(getSessionClickURL(), {
6703      body: formData,
6704      method: "POST"
6705    }).then((response) => response.text()).then((responseText) => {
6706      if (responseText.startsWith(TOKEN_SERIALIZE)) {
6707        const value = responseText.substring(TOKEN_SERIALIZE.length);
6708        responseText = JSON.parse(value);
6709      }
6710      return responseText;
6711    });
6712  }
6713  function setSessionValue(key, value, options = {}) {
6714    const formData = getSessionClickFormData("set");
6715    if (value && typeof value === "object") {
6716      value = TOKEN_SERIALIZE + JSON.stringify(value);
6717    }
6718    formData.append(key, value);
6719    if (options.useHttpSession) {
6720      formData.append("useHttpSession", true);
6721    }
6722    return defaultFetch(getSessionClickURL(), {
6723      body: formData,
6724      method: "POST"
6725    });
6726  }
6727
6728  
6728// src/main/resources/META-INF/resources/liferay/util/session_storage.js
6729  var session_storage_default = new Storage(sessionStorage);
6730
6731  
6731// src/main/resources/META-INF/resources/liferay/util/show_caps_lock.js
6732  function showCapsLock(event, elementId) {
6733    const element = document.getElementById(elementId);
6734    if (element) {
6735      element.style.display = "none";
6736      if (event.getModifierState("CapsLock")) {
6737        element.style.display = "";
6738      }
6739    }
6740  }
6741
6742  
6742// src/main/resources/META-INF/resources/liferay/util/sub.ts
6743  var SPLIT_REGEX = /({\d+})/g;
6744  function sub(langKey, ...params) {
6745    const paramList = params.reduce(
6746      (paramList2, param) => Array.isArray(param) ? [...paramList2, ...param] : [...paramList2, param],
6747      []
6748    );
6749    const keyArray = langKey.split(SPLIT_REGEX).filter((val) => val.length !== 0);
6750    for (let i = 0; i < paramList.length; i++) {
6751      const param = paramList[i];
6752      const indexKey = `{${i}}`;
6753      let paramIndex = keyArray.indexOf(indexKey);
6754      while (paramIndex >= 0) {
6755        keyArray.splice(paramIndex, 1, param);
6756        paramIndex = keyArray.indexOf(indexKey);
6757      }
6758    }
6759    return keyArray.some((value) => value && typeof value === "object") ? keyArray : keyArray.join("");
6760  }
6761
6762  
6762// src/main/resources/META-INF/resources/liferay/util/toggle_boxes.js
6763  function toggleBoxes(checkBoxId, toggleBoxId, displayWhenUnchecked, toggleChildCheckboxes) {
6764    const checkBox = document.getElementById(checkBoxId);
6765    const toggleBox = document.getElementById(toggleBoxId);
6766    if (checkBox && toggleBox) {
6767      let checked = checkBox.checked;
6768      if (displayWhenUnchecked) {
6769        checked = !checked;
6770      }
6771      if (checked) {
6772        toggleBox.classList.remove("hide");
6773      } else {
6774        toggleBox.classList.add("hide");
6775      }
6776      checkBox.addEventListener("click", () => {
6777        toggleBox.classList.toggle("hide");
6778        if (toggleChildCheckboxes) {
6779          const childCheckboxes = toggleBox.querySelectorAll(
6780            "input[type=checkbox]"
6781          );
6782          childCheckboxes.forEach((childCheckbox) => {
6783            childCheckbox.checked = checkBox.checked;
6784          });
6785        }
6786      });
6787    }
6788  }
6789
6790  
6790// src/main/resources/META-INF/resources/liferay/util/toggle_controls.js
6791  var MAP_TOGGLE_STATE = {
6792    false: {
6793      cssClass: "controls-hidden",
6794      iconCssClass: "hidden",
6795      state: "hidden"
6796    },
6797    true: {
6798      cssClass: "controls-visible",
6799      iconCssClass: "view",
6800      state: "visible"
6801    }
6802  };
6803  function toggleControls(node) {
6804    const body = document.body;
6805    node = node._node || body;
6806    const trigger = node.querySelector(".toggle-controls");
6807    if (!trigger) {
6808      return;
6809    }
6810    let controlsVisible = Liferay._editControlsState === "visible";
6811    let currentState = MAP_TOGGLE_STATE[controlsVisible];
6812    let icon = trigger.querySelector(".lexicon-icon");
6813    if (icon) {
6814      currentState.icon = icon;
6815    }
6816    body.classList.add(currentState.cssClass);
6817    Liferay.fire("toggleControls", {
6818      enabled: controlsVisible
6819    });
6820    trigger.addEventListener("click", () => {
6821      controlsVisible = !controlsVisible;
6822      const previousState = currentState;
6823      currentState = MAP_TOGGLE_STATE[controlsVisible];
6824      body.classList.toggle(previousState.cssClass);
6825      body.classList.toggle(currentState.cssClass);
6826      const editControlsIconClass = currentState.iconCssClass;
6827      const editControlsState = currentState.state;
6828      const newIcon = getLexiconIcon(editControlsIconClass);
6829      currentState.icon = newIcon;
6830      icon.replaceWith(newIcon);
6831      icon = newIcon;
6832      Liferay._editControlsState = editControlsState;
6833      setSessionValue(
6834        "com.liferay.frontend.js.web_toggleControls",
6835        editControlsState
6836      );
6837      Liferay.fire("toggleControls", {
6838        enabled: controlsVisible,
6839        src: "ui"
6840      });
6841    });
6842  }
6843
6844  
6844// src/main/resources/META-INF/resources/liferay/util/toggle_radio.js
6845  function toggleRadio(radioId, showBoxIds, hideBoxIds) {
6846    const radioButton = document.getElementById(radioId);
6847    if (radioButton) {
6848      let showBoxes;
6849      if (showBoxIds) {
6850        if (Array.isArray(showBoxIds)) {
6851          showBoxIds = showBoxIds.join(",#");
6852        }
6853        showBoxes = document.querySelectorAll(`#${showBoxIds}`);
6854        showBoxes.forEach((showBox) => {
6855          if (radioButton.checked) {
6856            showBox.classList.remove("hide");
6857          } else {
6858            showBox.classList.add("hide");
6859          }
6860        });
6861      }
6862      radioButton.addEventListener("change", () => {
6863        if (showBoxes) {
6864          showBoxes.forEach((showBox) => {
6865            showBox.classList.remove("hide");
6866          });
6867        }
6868        if (hideBoxIds) {
6869          if (Array.isArray(hideBoxIds)) {
6870            hideBoxIds = hideBoxIds.join(",#");
6871          }
6872          const hideBoxes = document.querySelectorAll(`#${hideBoxIds}`);
6873          hideBoxes.forEach((hideBox) => {
6874            hideBox.classList.add("hide");
6875          });
6876        }
6877      });
6878    }
6879  }
6880
6881  
6881// src/main/resources/META-INF/resources/liferay/util/toggle_select_box.js
6882  var toggle = (selectBox, toggleBox, dynamicValue, value) => {
6883    const currentValue = selectBox.value;
6884    const visible = dynamicValue ? value(currentValue, value) : value === currentValue;
6885    toggleBox.classList.toggle("hide", !visible);
6886  };
6887  function toggleSelectBox(selectBoxId, value, toggleBoxId) {
6888    const selectBox = document.getElementById(selectBoxId);
6889    const toggleBox = document.getElementById(toggleBoxId);
6890    if (!selectBox || !toggleBox) {
6891      return;
6892    }
6893    const dynamicValue = typeof value === "function";
6894    toggle(selectBox, toggleBox, dynamicValue, value);
6895    selectBox.addEventListener(
6896      "change",
6897      () => toggle(selectBox, toggleBox, dynamicValue, value)
6898    );
6899  }
6900
6901  
6901// src/main/resources/META-INF/resources/liferay/zIndex.js
6902  var zIndex_default = {
6903    ALERT: 430,
6904    DOCK: 10,
6905    DOCK_PARENT: 20,
6906    DRAG_ITEM: 460,
6907    DROP_AREA: 440,
6908    DROP_POSITION: 450,
6909    MENU: 5e3,
6910    OVERLAY: 1e3,
6911    POPOVER: 1600,
6912    TOOLTIP: 1e4,
6913    WINDOW: 1200
6914  };
6915
6916  
6916// src/main/resources/META-INF/resources/liferay/global.es.js
6917  var PATH_CONTEXT = Liferay.ThemeDisplay.getPathContext();
6918  Liferay = window.Liferay || {};
6919  Liferay.BREAKPOINTS = breakpoints_default;
6920  Liferay.STATUS_CODE = status_code_default;
6921  Liferay.zIndex = zIndex_default;
6922  Liferay.component = component;
6923  Liferay.componentReady = componentReady;
6924  Liferay.destroyComponent = destroyComponent;
6925  Liferay.destroyComponents = destroyComponents;
6926  Liferay.destroyUnfulfilledPromises = destroyUnfulfilledPromises;
6927  Liferay.getComponentCache = getComponentCache;
6928  Liferay.initComponentCache = initComponentCache;
6929  Liferay.Address = {
6930    getCountries,
6931    getRegions
6932  };
6933  Liferay.DynamicSelect = DynamicSelect;
6934  Liferay.LayoutExporter = {
6935    all: hideLayoutPane,
6936    details: toggleLayoutDetails,
6937    icons: getLayoutIcons(),
6938    proposeLayout,
6939    publishToLive,
6940    selected: showLayoutPane
6941  };
6942  Liferay.Portal = {
6943    Tabs: {
6944      show: showTab
6945    },
6946    ToolTip: {
6947      show: showTooltip
6948    }
6949  };
6950  Liferay.Portlet = Liferay.Portlet || {};
6951  Liferay.Portlet.minimize = minimizePortlet;
6952  Liferay.Portlet.openModal = (...args) => {
6953    import(
6954      // eslint-disable-next-line lines-around-comment
6955      /* webpackIgnore: true */
6956      PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js"
6957    ).then(({ openPortletModal }) => openPortletModal(...args));
6958  };
6959  Liferay.Portlet.openWindow = (...args) => {
6960    import(
6961      // eslint-disable-next-line lines-around-comment
6962      /* webpackIgnore: true */
6963      PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js"
6964    ).then(({ openPortletWindow }) => openPortletWindow(...args));
6965  };
6966  Liferay.SideNavigation = side_navigation_es_default;
6967  Liferay.Util = Liferay.Util || {};
6968  Liferay.Util.MAP_HTML_CHARS_ESCAPED = MAP_HTML_CHARS_ESCAPED;
6969  Liferay.Util.addParams = addParams;
6970  Liferay.Util.openAlertModal = (...args) => {
6971    import(
6972      // eslint-disable-next-line lines-around-comment
6973      /* webpackIgnore: true */
6974      PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js"
6975    ).then(({ openAlertModal }) => openAlertModal(...args));
6976  };
6977  Liferay.Util.openSimpleInputModal = (...args) => {
6978    import(
6979      // eslint-disable-next-line lines-around-comment
6980      /* webpackIgnore: true */
6981      PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js"
6982    ).then(({ openSimpleInputModal }) => openSimpleInputModal(...args));
6983  };
6984  Liferay.Util.AutoSize = autosize_es_default;
6985  Liferay.Util.debounce = debounce_es_default;
6986  Liferay.Util.delegate = delegate_es_default;
6987  Liferay.Util.DynamicInlineScroll = DynamicInlineScroll_es_default;
6988  Liferay.Util.runScriptsInElement = run_scripts_in_element_es_default;
6989  Liferay.Util.disableEsc = () => {
6990    if (document.all && window.event.keyCode === 27) {
6991      window.event.returnValue = false;
6992    }
6993  };
6994  var htmlEscapes = {
6995    '"': "&quot;",
6996    "&": "&amp;",
6997    "'": "&#39;",
6998    "<": "&lt;",
6999    ">": "&gt;"
7000  };
7001  var reUnescapedHtml = /[&<>"']/g;
7002  var reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
7003  Liferay.Util.escape = (string) => {
7004    return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr]) : string || "";
7005  };
7006  Liferay.Util.escapeHTML = escapeHTML;
7007  Liferay.Util.fetch = defaultFetch;
7008  Liferay.Util.focusFormField = focusFormField;
7009  Liferay.Util.formatStorage = formatStorage;
7010  Liferay.Util.formatXML = formatXML;
7011  Liferay.Util.getCheckedCheckboxes = getCheckedCheckboxes;
7012  Liferay.Util.getUncheckedCheckboxes = getUncheckedCheckboxes;
7013  Liferay.Util.getCropRegion = getCropRegion;
7014  Liferay.Util.getDOM = getDOM;
7015  Liferay.Util.getElement = getElement2;
7016  Liferay.Util.getGeolocation = getGeolocation;
7017  Liferay.Util.getFormElement = getFormElement;
7018  Liferay.Util.getLexiconIcon = getLexiconIcon;
7019  Liferay.Util.getLexiconIconTpl = getLexiconIconTpl;
7020  Liferay.Util.getOpener = getOpener;
7021  Liferay.Util.getPortletConfigurationIconAction = getPortletConfigurationIconAction;
7022  Liferay.Util.getPortletId = getPortletId;
7023  Liferay.Util.getPortletNamespace = getPortletNamespace;
7024  Liferay.Util.getSelectedOptionValues = getSelectedOptionValues;
7025  Liferay.Util.getTop = getTop;
7026  Liferay.Util.getURLWithSessionId = getURLWithSessionId;
7027  Liferay.Util.getWindow = getWindow;
7028  Liferay.Util.groupBy = import_lodash.default;
7029  Liferay.Util.inBrowserView = inBrowserView;
7030  Liferay.Util.isEqual = import_lodash2.default;
7031  Liferay.Util.isPhone = isPhone;
7032  Liferay.Util.isTablet = isTablet;
7033  Liferay.Util.loadClientExtensions = loadClientExtensions;
7034  Liferay.Util.loadEditorClientExtensions = loadEditorClientExtensions;
7035  Liferay.Util.navigate = navigate_es_default;
7036  Liferay.Util.ns = ns;
7037  Liferay.Util.objectToFormData = objectToFormData;
7038  Liferay.Util.objectToURLSearchParams = objectToURLSearchParams;
7039  Liferay.Util.normalizeFriendlyURL = normalizeFriendlyURL;
7040  Liferay.Util.PortletURL = {
7041    createActionURL,
7042    createPortletURL,
7043    createRenderURL,
7044    createResourceURL
7045  };
7046  Liferay.Util.postForm = postForm;
7047  Liferay.Util.setFormValues = setFormValues;
7048  Liferay.Util.toCharCode = to_char_code_es_default;
7049  Liferay.Util.toggleDisabled = toggleDisabled;
7050  Liferay.Util.openConfirmModal = (...args) => {
7051    import(
7052      // eslint-disable-next-line lines-around-comment
7053      /* webpackIgnore: true */
7054      PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js"
7055    ).then(({ openConfirmModal }) => openConfirmModal(...args));
7056  };
7057  Liferay.Util.openModal = (...args) => {
7058    import(
7059      // eslint-disable-next-line lines-around-comment
7060      /* webpackIgnore: true */
7061      PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js"
7062    ).then(({ openModal }) => openModal(...args));
7063  };
7064  Liferay.Util.openSelectionModal = (...args) => {
7065    import(
7066      // eslint-disable-next-line lines-around-comment
7067      /* webpackIgnore: true */
7068      PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js"
7069    ).then(({ openSelectionModal }) => openSelectionModal(...args));
7070  };
7071  Liferay.Util.openToast = (...args) => {
7072    import(
7073      // eslint-disable-next-line lines-around-comment
7074      /* webpackIgnore: true */
7075      PATH_CONTEXT + "/o/frontend-js-web/__liferay__/index.js"
7076    ).then(({ openToast }) => openToast(...args));
7077  };
7078  Liferay.Util.openWindow = openWindow;
7079  Liferay.Util.removeEntitySelection = removeEntitySelection;
7080  Liferay.Util.selectFolder = selectFolder;
7081  Liferay.Util.setPortletConfigurationIconAction = setPortletConfigurationIconAction;
7082  Liferay.Util.showCapsLock = showCapsLock;
7083  Liferay.Util.sub = sub;
7084  Liferay.Util.Session = {
7085    get: getSessionValue,
7086    set: setSessionValue
7087  };
7088  Liferay.Util.toggleBoxes = toggleBoxes;
7089  Liferay.Util.toggleControls = toggleControls;
7090  Liferay.Util.toggleRadio = toggleRadio;
7091  Liferay.Util.toggleSelectBox = toggleSelectBox;
7092  var htmlUnescapes = {
7093    "&#39;": "'",
7094    "&amp;": "&",
7095    "&gt;": ">",
7096    "&lt;": "<",
7097    "&quot;": '"'
7098  };
7099  var reEscapedHtml = /&(?:amp|lt|gt|quot|#(0+)?39);/g;
7100  var reHasEscapedHtml = RegExp(reEscapedHtml.source);
7101  Liferay.Util.unescape = (string) => {
7102    return string && reHasEscapedHtml.test(string) ? string.replace(
7103      reEscapedHtml,
7104      (entity) => htmlUnescapes[entity] || "'"
7105    ) : string || "";
7106  };
7107  Liferay.Util.unescapeHTML = unescapeHTML;
7108  Liferay.Util.Cookie = cookie_default;
7109  Liferay.Util.LocalStorage = local_storage_default;
7110  Liferay.Util.SessionStorage = session_storage_default;
7111  window.portlet = portlet_es_default;
7112})();
7113//# sourceMappingURL=global.bundle.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.