@adartem/adlib-attributes 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/attributes.js +957 -1
  2. package/attributes.js.map +4 -4
  3. package/dist/chunk-IEGIKJKW.js +5776 -0
  4. package/dist/chunk-IEGIKJKW.js.map +7 -0
  5. package/dist/chunk-M2KO765Q.js +43 -0
  6. package/dist/chunk-M2KO765Q.js.map +7 -0
  7. package/dist/chunk-NS2GB4WB.js +63 -0
  8. package/dist/chunk-NS2GB4WB.js.map +7 -0
  9. package/dist/dist-46N2ZXQQ.js +80 -0
  10. package/dist/dist-46N2ZXQQ.js.map +7 -0
  11. package/dist/dist-4EIQOOMJ.js +331 -0
  12. package/dist/dist-4EIQOOMJ.js.map +7 -0
  13. package/dist/dist-6YSNCGWO.js +227 -0
  14. package/dist/dist-6YSNCGWO.js.map +7 -0
  15. package/dist/dist-7GSHUMRU.js +60 -0
  16. package/dist/dist-7GSHUMRU.js.map +7 -0
  17. package/dist/dist-ALT6N2V6.js +165 -0
  18. package/dist/dist-ALT6N2V6.js.map +7 -0
  19. package/dist/dist-BXD5YEF3.js +290 -0
  20. package/dist/dist-BXD5YEF3.js.map +7 -0
  21. package/dist/dist-D2J4YZM6.js +52 -0
  22. package/dist/dist-D2J4YZM6.js.map +7 -0
  23. package/dist/dist-D2X7FLMD.js +126 -0
  24. package/dist/dist-D2X7FLMD.js.map +7 -0
  25. package/dist/dist-DOOWCYTM.js +92 -0
  26. package/dist/dist-DOOWCYTM.js.map +7 -0
  27. package/dist/dist-GLBAV2CS.js +202 -0
  28. package/dist/dist-GLBAV2CS.js.map +7 -0
  29. package/dist/dist-GQHJZHTH.js +73 -0
  30. package/dist/dist-GQHJZHTH.js.map +7 -0
  31. package/dist/dist-H4ILPDRU.js +59 -0
  32. package/dist/dist-H4ILPDRU.js.map +7 -0
  33. package/dist/dist-IDJRFWAH.js +71 -0
  34. package/dist/dist-IDJRFWAH.js.map +7 -0
  35. package/dist/dist-KDCRSMGT.js +63 -0
  36. package/dist/dist-KDCRSMGT.js.map +7 -0
  37. package/dist/dist-KF5AKQ52.js +740 -0
  38. package/dist/dist-KF5AKQ52.js.map +7 -0
  39. package/dist/dist-KU26ZFEG.js +169 -0
  40. package/dist/dist-KU26ZFEG.js.map +7 -0
  41. package/dist/dist-M6QCD7TL.js +4281 -0
  42. package/dist/dist-M6QCD7TL.js.map +7 -0
  43. package/dist/dist-MBFKX56S.js +482 -0
  44. package/dist/dist-MBFKX56S.js.map +7 -0
  45. package/dist/dist-NOIPAOTU.js +131 -0
  46. package/dist/dist-NOIPAOTU.js.map +7 -0
  47. package/dist/dist-QPNIGMZA.js +33028 -0
  48. package/dist/dist-QPNIGMZA.js.map +7 -0
  49. package/dist/dist-RAOZ6VUA.js +14416 -0
  50. package/dist/dist-RAOZ6VUA.js.map +7 -0
  51. package/dist/dist-RQZGUXDL.js +102 -0
  52. package/dist/dist-RQZGUXDL.js.map +7 -0
  53. package/dist/dist-T4V65O5X.js +54 -0
  54. package/dist/dist-T4V65O5X.js.map +7 -0
  55. package/dist/dist-UFMW7V6T.js +317 -0
  56. package/dist/dist-UFMW7V6T.js.map +7 -0
  57. package/dist/dist-V7I3FQX7.js +1419 -0
  58. package/dist/dist-V7I3FQX7.js.map +7 -0
  59. package/dist/dist-XTGERRGU.js +160 -0
  60. package/dist/dist-XTGERRGU.js.map +7 -0
  61. package/dist/dist-YAVVMJ7W.js +72 -0
  62. package/dist/dist-YAVVMJ7W.js.map +7 -0
  63. package/dist/dist-YGJKGMK6.js +137 -0
  64. package/dist/dist-YGJKGMK6.js.map +7 -0
  65. package/package.json +11 -11
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../node_modules/fuzzysort/fuzzysort.js", "../../../node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js", "../../../node_modules/@vue/shared/dist/shared.esm-bundler.js", "inline-worker:__inline-worker", "../../list/src/utils/store.ts", "../../list/src/combine/index.ts", "../../list/src/utils/constants.ts", "../../list/src/utils/selectors.ts", "../../list/src/utils/dom.ts", "../../list/src/utils/pagination.ts", "../../list/src/components/ListItem.ts", "../../list/src/components/List.ts", "../../list/src/filter/elements.ts", "../../list/src/filter/utils.ts", "../../list/src/filter/dynamic/utils.ts", "../../list/src/filter/dynamic/conditions.ts", "../../list/src/filter/dynamic/groups.ts", "../../list/src/filter/dynamic/index.ts", "../../list/src/filter/filter.worker.ts", "../../list/src/filter/filter.ts", "../../list/src/filter/standard/conditions.ts", "../../list/src/filter/standard/facets.ts", "../../list/src/filter/standard/index.ts", "../../list/src/filter/standard/query.ts", "../../list/src/filter/tags.ts", "../../list/src/filter/index.ts", "../../list/src/load/load.ts", "../../list/src/load/all.ts", "../../list/src/load/elements.ts", "../../list/src/load/more.ts", "../../list/src/load/infinite.ts", "../../list/src/load/pagination.ts", "../../list/src/load/index.ts", "../../list/src/nest/index.ts", "../../list/src/prevnext/index.ts", "../../list/src/select/index.ts", "../../list/src/slider/index.ts", "../../list/src/sort/buttons.ts", "../../list/src/sort/dropdown.ts", "../../list/src/sort/query.ts", "../../list/src/sort/select.ts", "../../list/src/sort/sort.ts", "../../list/src/sort/index.ts", "../../list/src/static/index.ts", "../../list/src/tabs/index.ts", "../../list/src/factory.ts", "../../list/src/init.ts", "../../list/package.json", "../../list/src/index.ts"],
4
+ "sourcesContent": ["// https://github.com/farzher/fuzzysort v3.0.2\r\n\r\n// UMD (Universal Module Definition) for fuzzysort\r\n;((root, UMD) => {\r\n if(typeof define === 'function' && define.amd) define([], UMD)\r\n else if(typeof module === 'object' && module.exports) module.exports = UMD()\r\n else root['fuzzysort'] = UMD()\r\n})(this, _ => {\r\n 'use strict'\r\n\r\n var single = (search, target) => {\r\n if(!search || !target) return NULL\r\n\r\n var preparedSearch = getPreparedSearch(search)\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n var searchBitflags = preparedSearch.bitflags\r\n if((searchBitflags & target._bitflags) !== searchBitflags) return NULL\r\n\r\n return algorithm(preparedSearch, target)\r\n }\r\n\r\n var go = (search, targets, options) => {\r\n if(!search) return options?.all ? all(targets, options) : noResults\r\n\r\n var preparedSearch = getPreparedSearch(search)\r\n var searchBitflags = preparedSearch.bitflags\r\n var containsSpace = preparedSearch.containsSpace\r\n\r\n var threshold = denormalizeScore( options?.threshold || 0 )\r\n var limit = options?.limit || INFINITY\r\n\r\n var resultsLen = 0; var limitedCount = 0\r\n var targetsLen = targets.length\r\n\r\n function push_result(result) {\r\n if(resultsLen < limit) { q.add(result); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(result._score > q.peek()._score) q.replaceTop(result)\r\n }\r\n }\r\n\r\n // This code is copy/pasted 3 times for performance reasons [options.key, options.keys, no keys]\r\n\r\n // options.key\r\n if(options?.key) {\r\n var key = options.key\r\n for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]\r\n var target = getValue(obj, key)\r\n if(!target) continue\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n if((searchBitflags & target._bitflags) !== searchBitflags) continue\r\n var result = algorithm(preparedSearch, target)\r\n if(result === NULL) continue\r\n if(result._score < threshold) continue\r\n\r\n result.obj = obj\r\n push_result(result)\r\n }\r\n\r\n // options.keys\r\n } else if(options?.keys) {\r\n var keys = options.keys\r\n var keysLen = keys.length\r\n\r\n outer: for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]\r\n\r\n { // early out based on bitflags\r\n var keysBitflags = 0\r\n for (var keyI = 0; keyI < keysLen; ++keyI) {\r\n var key = keys[keyI]\r\n var target = getValue(obj, key)\r\n if(!target) { tmpTargets[keyI] = noTarget; continue }\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n tmpTargets[keyI] = target\r\n\r\n keysBitflags |= target._bitflags\r\n }\r\n\r\n if((searchBitflags & keysBitflags) !== searchBitflags) continue\r\n }\r\n\r\n if(containsSpace) for(let i=0; i<preparedSearch.spaceSearches.length; i++) keysSpacesBestScores[i] = NEGATIVE_INFINITY\r\n\r\n for (var keyI = 0; keyI < keysLen; ++keyI) {\r\n target = tmpTargets[keyI]\r\n if(target === noTarget) { tmpResults[keyI] = noTarget; continue }\r\n\r\n tmpResults[keyI] = algorithm(preparedSearch, target, /*allowSpaces=*/false, /*allowPartialMatch=*/containsSpace)\r\n if(tmpResults[keyI] === NULL) { tmpResults[keyI] = noTarget; continue }\r\n\r\n // todo: this seems weird and wrong. like what if our first match wasn't good. this should just replace it instead of averaging with it\r\n // if our second match isn't good we ignore it instead of averaging with it\r\n if(containsSpace) for(let i=0; i<preparedSearch.spaceSearches.length; i++) {\r\n if(allowPartialMatchScores[i] > -1000) {\r\n if(keysSpacesBestScores[i] > NEGATIVE_INFINITY) {\r\n var tmp = (keysSpacesBestScores[i] + allowPartialMatchScores[i]) / 4/*bonus score for having multiple matches*/\r\n if(tmp > keysSpacesBestScores[i]) keysSpacesBestScores[i] = tmp\r\n }\r\n }\r\n if(allowPartialMatchScores[i] > keysSpacesBestScores[i]) keysSpacesBestScores[i] = allowPartialMatchScores[i]\r\n }\r\n }\r\n\r\n if(containsSpace) {\r\n for(let i=0; i<preparedSearch.spaceSearches.length; i++) { if(keysSpacesBestScores[i] === NEGATIVE_INFINITY) continue outer }\r\n } else {\r\n var hasAtLeast1Match = false\r\n for(let i=0; i < keysLen; i++) { if(tmpResults[i]._score !== NEGATIVE_INFINITY) { hasAtLeast1Match = true; break } }\r\n if(!hasAtLeast1Match) continue\r\n }\r\n\r\n var objResults = new KeysResult(keysLen)\r\n for(let i=0; i < keysLen; i++) { objResults[i] = tmpResults[i] }\r\n\r\n if(containsSpace) {\r\n var score = 0\r\n for(let i=0; i<preparedSearch.spaceSearches.length; i++) score += keysSpacesBestScores[i]\r\n } else {\r\n // todo could rewrite this scoring to be more similar to when there's spaces\r\n // if we match multiple keys give us bonus points\r\n var score = NEGATIVE_INFINITY\r\n for(let i=0; i<keysLen; i++) {\r\n var result = objResults[i]\r\n if(result._score > -1000) {\r\n if(score > NEGATIVE_INFINITY) {\r\n var tmp = (score + result._score) / 4/*bonus score for having multiple matches*/\r\n if(tmp > score) score = tmp\r\n }\r\n }\r\n if(result._score > score) score = result._score\r\n }\r\n }\r\n\r\n objResults.obj = obj\r\n objResults._score = score\r\n if(options?.scoreFn) {\r\n score = options.scoreFn(objResults)\r\n if(!score) continue\r\n score = denormalizeScore(score)\r\n objResults._score = score\r\n }\r\n\r\n if(score < threshold) continue\r\n push_result(objResults)\r\n }\r\n\r\n // no keys\r\n } else {\r\n for(var i = 0; i < targetsLen; ++i) { var target = targets[i]\r\n if(!target) continue\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n if((searchBitflags & target._bitflags) !== searchBitflags) continue\r\n var result = algorithm(preparedSearch, target)\r\n if(result === NULL) continue\r\n if(result._score < threshold) continue\r\n\r\n push_result(result)\r\n }\r\n }\r\n\r\n if(resultsLen === 0) return noResults\r\n var results = new Array(resultsLen)\r\n for(var i = resultsLen - 1; i >= 0; --i) results[i] = q.poll()\r\n results.total = resultsLen + limitedCount\r\n return results\r\n }\r\n\r\n\r\n // this is written as 1 function instead of 2 for minification. perf seems fine ...\r\n // except when minified. the perf is very slow\r\n var highlight = (result, open='<b>', close='</b>') => {\r\n var callback = typeof open === 'function' ? open : undefined\r\n\r\n var target = result.target\r\n var targetLen = target.length\r\n var indexes = result.indexes\r\n var highlighted = ''\r\n var matchI = 0\r\n var indexesI = 0\r\n var opened = false\r\n var parts = []\r\n\r\n for(var i = 0; i < targetLen; ++i) { var char = target[i]\r\n if(indexes[indexesI] === i) {\r\n ++indexesI\r\n if(!opened) { opened = true\r\n if(callback) {\r\n parts.push(highlighted); highlighted = ''\r\n } else {\r\n highlighted += open\r\n }\r\n }\r\n\r\n if(indexesI === indexes.length) {\r\n if(callback) {\r\n highlighted += char\r\n parts.push(callback(highlighted, matchI++)); highlighted = ''\r\n parts.push(target.substr(i+1))\r\n } else {\r\n highlighted += char + close + target.substr(i+1)\r\n }\r\n break\r\n }\r\n } else {\r\n if(opened) { opened = false\r\n if(callback) {\r\n parts.push(callback(highlighted, matchI++)); highlighted = ''\r\n } else {\r\n highlighted += close\r\n }\r\n }\r\n }\r\n highlighted += char\r\n }\r\n\r\n return callback ? parts : highlighted\r\n }\r\n\r\n\r\n var prepare = (target) => {\r\n if(typeof target === 'number') target = ''+target\r\n else if(typeof target !== 'string') target = ''\r\n var info = prepareLowerInfo(target)\r\n return new_result(target, {_targetLower:info._lower, _targetLowerCodes:info.lowerCodes, _bitflags:info.bitflags})\r\n }\r\n\r\n var cleanup = () => { preparedCache.clear(); preparedSearchCache.clear() }\r\n\r\n\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n\r\n\r\n class Result {\r\n get ['indexes']() { return this._indexes.slice(0, this._indexes.len).sort((a,b)=>a-b) }\r\n set ['indexes'](indexes) { return this._indexes = indexes }\r\n ['highlight'](open, close) { return highlight(this, open, close) }\r\n get ['score']() { return normalizeScore(this._score) }\r\n set ['score'](score) { this._score = denormalizeScore(score) }\r\n }\r\n\r\n class KeysResult extends Array {\r\n get ['score']() { return normalizeScore(this._score) }\r\n set ['score'](score) { this._score = denormalizeScore(score) }\r\n }\r\n\r\n var new_result = (target, options) => {\r\n const result = new Result()\r\n result['target'] = target\r\n result['obj'] = options.obj ?? NULL\r\n result._score = options._score ?? NEGATIVE_INFINITY\r\n result._indexes = options._indexes ?? []\r\n result._targetLower = options._targetLower ?? ''\r\n result._targetLowerCodes = options._targetLowerCodes ?? NULL\r\n result._nextBeginningIndexes = options._nextBeginningIndexes ?? NULL\r\n result._bitflags = options._bitflags ?? 0\r\n return result\r\n }\r\n\r\n\r\n var normalizeScore = score => {\r\n if(score === NEGATIVE_INFINITY) return 0\r\n if(score > 1) return score\r\n return Math.E ** ( ((-score + 1)**.04307 - 1) * -2)\r\n }\r\n var denormalizeScore = normalizedScore => {\r\n if(normalizedScore === 0) return NEGATIVE_INFINITY\r\n if(normalizedScore > 1) return normalizedScore\r\n return 1 - Math.pow((Math.log(normalizedScore) / -2 + 1), 1 / 0.04307)\r\n }\r\n\r\n\r\n var prepareSearch = (search) => {\r\n if(typeof search === 'number') search = ''+search\r\n else if(typeof search !== 'string') search = ''\r\n search = search.trim()\r\n var info = prepareLowerInfo(search)\r\n\r\n var spaceSearches = []\r\n if(info.containsSpace) {\r\n var searches = search.split(/\\s+/)\r\n searches = [...new Set(searches)] // distinct\r\n for(var i=0; i<searches.length; i++) {\r\n if(searches[i] === '') continue\r\n var _info = prepareLowerInfo(searches[i])\r\n spaceSearches.push({lowerCodes:_info.lowerCodes, _lower:searches[i].toLowerCase(), containsSpace:false})\r\n }\r\n }\r\n\r\n return {lowerCodes: info.lowerCodes, _lower: info._lower, containsSpace: info.containsSpace, bitflags: info.bitflags, spaceSearches: spaceSearches}\r\n }\r\n\r\n\r\n\r\n var getPrepared = (target) => {\r\n if(target.length > 999) return prepare(target) // don't cache huge targets\r\n var targetPrepared = preparedCache.get(target)\r\n if(targetPrepared !== undefined) return targetPrepared\r\n targetPrepared = prepare(target)\r\n preparedCache.set(target, targetPrepared)\r\n return targetPrepared\r\n }\r\n var getPreparedSearch = (search) => {\r\n if(search.length > 999) return prepareSearch(search) // don't cache huge searches\r\n var searchPrepared = preparedSearchCache.get(search)\r\n if(searchPrepared !== undefined) return searchPrepared\r\n searchPrepared = prepareSearch(search)\r\n preparedSearchCache.set(search, searchPrepared)\r\n return searchPrepared\r\n }\r\n\r\n\r\n var all = (targets, options) => {\r\n var results = []; results.total = targets.length // this total can be wrong if some targets are skipped\r\n\r\n var limit = options?.limit || INFINITY\r\n\r\n if(options?.key) {\r\n for(var i=0;i<targets.length;i++) { var obj = targets[i]\r\n var target = getValue(obj, options.key)\r\n if(target == NULL) continue\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n var result = new_result(target.target, {_score: target._score, obj: obj})\r\n results.push(result); if(results.length >= limit) return results\r\n }\r\n } else if(options?.keys) {\r\n for(var i=0;i<targets.length;i++) { var obj = targets[i]\r\n var objResults = new KeysResult(options.keys.length)\r\n for (var keyI = options.keys.length - 1; keyI >= 0; --keyI) {\r\n var target = getValue(obj, options.keys[keyI])\r\n if(!target) { objResults[keyI] = noTarget; continue }\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n target._score = NEGATIVE_INFINITY\r\n target._indexes.len = 0\r\n objResults[keyI] = target\r\n }\r\n objResults.obj = obj\r\n objResults._score = NEGATIVE_INFINITY\r\n results.push(objResults); if(results.length >= limit) return results\r\n }\r\n } else {\r\n for(var i=0;i<targets.length;i++) { var target = targets[i]\r\n if(target == NULL) continue\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n target._score = NEGATIVE_INFINITY\r\n target._indexes.len = 0\r\n results.push(target); if(results.length >= limit) return results\r\n }\r\n }\r\n\r\n return results\r\n }\r\n\r\n\r\n var algorithm = (preparedSearch, prepared, allowSpaces=false, allowPartialMatch=false) => {\r\n if(allowSpaces===false && preparedSearch.containsSpace) return algorithmSpaces(preparedSearch, prepared, allowPartialMatch)\r\n\r\n var searchLower = preparedSearch._lower\r\n var searchLowerCodes = preparedSearch.lowerCodes\r\n var searchLowerCode = searchLowerCodes[0]\r\n var targetLowerCodes = prepared._targetLowerCodes\r\n var searchLen = searchLowerCodes.length\r\n var targetLen = targetLowerCodes.length\r\n var searchI = 0 // where we at\r\n var targetI = 0 // where you at\r\n var matchesSimpleLen = 0\r\n\r\n // very basic fuzzy match; to remove non-matching targets ASAP!\r\n // walk through target. find sequential matches.\r\n // if all chars aren't found then exit\r\n for(;;) {\r\n var isMatch = searchLowerCode === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesSimple[matchesSimpleLen++] = targetI\r\n ++searchI; if(searchI === searchLen) break\r\n searchLowerCode = searchLowerCodes[searchI]\r\n }\r\n ++targetI; if(targetI >= targetLen) return NULL // Failed to find searchI\r\n }\r\n\r\n var searchI = 0\r\n var successStrict = false\r\n var matchesStrictLen = 0\r\n\r\n var nextBeginningIndexes = prepared._nextBeginningIndexes\r\n if(nextBeginningIndexes === NULL) nextBeginningIndexes = prepared._nextBeginningIndexes = prepareNextBeginningIndexes(prepared.target)\r\n targetI = matchesSimple[0]===0 ? 0 : nextBeginningIndexes[matchesSimple[0]-1]\r\n\r\n // Our target string successfully matched all characters in sequence!\r\n // Let's try a more advanced and strict test to improve the score\r\n // only count it as a match if it's consecutive or a beginning character!\r\n var backtrackCount = 0\r\n if(targetI !== targetLen) for(;;) {\r\n if(targetI >= targetLen) {\r\n // We failed to find a good spot for this search char, go back to the previous search char and force it forward\r\n if(searchI <= 0) break // We failed to push chars forward for a better match\r\n\r\n ++backtrackCount; if(backtrackCount > 200) break // exponential backtracking is taking too long, just give up and return a bad match\r\n\r\n --searchI\r\n var lastMatch = matchesStrict[--matchesStrictLen]\r\n targetI = nextBeginningIndexes[lastMatch]\r\n\r\n } else {\r\n var isMatch = searchLowerCodes[searchI] === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesStrict[matchesStrictLen++] = targetI\r\n ++searchI; if(searchI === searchLen) { successStrict = true; break }\r\n ++targetI\r\n } else {\r\n targetI = nextBeginningIndexes[targetI]\r\n }\r\n }\r\n }\r\n\r\n // check if it's a substring match\r\n var substringIndex = searchLen <= 1 ? -1 : prepared._targetLower.indexOf(searchLower, matchesSimple[0]) // perf: this is slow\r\n var isSubstring = !!~substringIndex\r\n var isSubstringBeginning = !isSubstring ? false : substringIndex===0 || prepared._nextBeginningIndexes[substringIndex-1] === substringIndex\r\n\r\n // if it's a substring match but not at a beginning index, let's try to find a substring starting at a beginning index for a better score\r\n if(isSubstring && !isSubstringBeginning) {\r\n for(var i=0; i<nextBeginningIndexes.length; i=nextBeginningIndexes[i]) {\r\n if(i <= substringIndex) continue\r\n\r\n for(var s=0; s<searchLen; s++) if(searchLowerCodes[s] !== prepared._targetLowerCodes[i+s]) break\r\n if(s === searchLen) { substringIndex = i; isSubstringBeginning = true; break }\r\n }\r\n }\r\n\r\n // tally up the score & keep track of matches for highlighting later\r\n // if it's a simple match, we'll switch to a substring match if a substring exists\r\n // if it's a strict match, we'll switch to a substring match only if that's a better score\r\n\r\n var calculateScore = matches => {\r\n var score = 0\r\n\r\n var extraMatchGroupCount = 0\r\n for(var i = 1; i < searchLen; ++i) {\r\n if(matches[i] - matches[i-1] !== 1) {score -= matches[i]; ++extraMatchGroupCount}\r\n }\r\n var unmatchedDistance = matches[searchLen-1] - matches[0] - (searchLen-1)\r\n\r\n score -= (12+unmatchedDistance) * extraMatchGroupCount // penality for more groups\r\n\r\n if(matches[0] !== 0) score -= matches[0]*matches[0]*.2 // penality for not starting near the beginning\r\n\r\n if(!successStrict) {\r\n score *= 1000\r\n } else {\r\n // successStrict on a target with too many beginning indexes loses points for being a bad target\r\n var uniqueBeginningIndexes = 1\r\n for(var i = nextBeginningIndexes[0]; i < targetLen; i=nextBeginningIndexes[i]) ++uniqueBeginningIndexes\r\n\r\n if(uniqueBeginningIndexes > 24) score *= (uniqueBeginningIndexes-24)*10 // quite arbitrary numbers here ...\r\n }\r\n\r\n score -= (targetLen - searchLen)/2 // penality for longer targets\r\n\r\n if(isSubstring) score /= 1+searchLen*searchLen*1 // bonus for being a full substring\r\n if(isSubstringBeginning) score /= 1+searchLen*searchLen*1 // bonus for substring starting on a beginningIndex\r\n\r\n score -= (targetLen - searchLen)/2 // penality for longer targets\r\n\r\n return score\r\n }\r\n\r\n if(!successStrict) {\r\n if(isSubstring) for(var i=0; i<searchLen; ++i) matchesSimple[i] = substringIndex+i // at this point it's safe to overwrite matchehsSimple with substr matches\r\n var matchesBest = matchesSimple\r\n var score = calculateScore(matchesBest)\r\n } else {\r\n if(isSubstringBeginning) {\r\n for(var i=0; i<searchLen; ++i) matchesSimple[i] = substringIndex+i // at this point it's safe to overwrite matchehsSimple with substr matches\r\n var matchesBest = matchesSimple\r\n var score = calculateScore(matchesSimple)\r\n } else {\r\n var matchesBest = matchesStrict\r\n var score = calculateScore(matchesStrict)\r\n }\r\n }\r\n\r\n prepared._score = score\r\n\r\n for(var i = 0; i < searchLen; ++i) prepared._indexes[i] = matchesBest[i]\r\n prepared._indexes.len = searchLen\r\n\r\n const result = new Result()\r\n result.target = prepared.target\r\n result._score = prepared._score\r\n result._indexes = prepared._indexes\r\n return result\r\n }\r\n var algorithmSpaces = (preparedSearch, target, allowPartialMatch) => {\r\n var seen_indexes = new Set()\r\n var score = 0\r\n var result = NULL\r\n\r\n var first_seen_index_last_search = 0\r\n var searches = preparedSearch.spaceSearches\r\n var searchesLen = searches.length\r\n var changeslen = 0\r\n\r\n // Return _nextBeginningIndexes back to its normal state\r\n var resetNextBeginningIndexes = () => {\r\n for(let i=changeslen-1; i>=0; i--) target._nextBeginningIndexes[nextBeginningIndexesChanges[i*2 + 0]] = nextBeginningIndexesChanges[i*2 + 1]\r\n }\r\n\r\n var hasAtLeast1Match = false\r\n for(var i=0; i<searchesLen; ++i) {\r\n allowPartialMatchScores[i] = NEGATIVE_INFINITY\r\n var search = searches[i]\r\n\r\n result = algorithm(search, target)\r\n if(allowPartialMatch) {\r\n if(result === NULL) continue\r\n hasAtLeast1Match = true\r\n } else {\r\n if(result === NULL) {resetNextBeginningIndexes(); return NULL}\r\n }\r\n\r\n // if not the last search, we need to mutate _nextBeginningIndexes for the next search\r\n var isTheLastSearch = i === searchesLen - 1\r\n if(!isTheLastSearch) {\r\n var indexes = result._indexes\r\n\r\n var indexesIsConsecutiveSubstring = true\r\n for(let i=0; i<indexes.len-1; i++) {\r\n if(indexes[i+1] - indexes[i] !== 1) {\r\n indexesIsConsecutiveSubstring = false; break;\r\n }\r\n }\r\n\r\n if(indexesIsConsecutiveSubstring) {\r\n var newBeginningIndex = indexes[indexes.len-1] + 1\r\n var toReplace = target._nextBeginningIndexes[newBeginningIndex-1]\r\n for(let i=newBeginningIndex-1; i>=0; i--) {\r\n if(toReplace !== target._nextBeginningIndexes[i]) break\r\n target._nextBeginningIndexes[i] = newBeginningIndex\r\n nextBeginningIndexesChanges[changeslen*2 + 0] = i\r\n nextBeginningIndexesChanges[changeslen*2 + 1] = toReplace\r\n changeslen++\r\n }\r\n }\r\n }\r\n\r\n score += result._score / searchesLen\r\n allowPartialMatchScores[i] = result._score / searchesLen\r\n\r\n // dock points based on order otherwise \"c man\" returns Manifest.cpp instead of CheatManager.h\r\n if(result._indexes[0] < first_seen_index_last_search) {\r\n score -= (first_seen_index_last_search - result._indexes[0]) * 2\r\n }\r\n first_seen_index_last_search = result._indexes[0]\r\n\r\n for(var j=0; j<result._indexes.len; ++j) seen_indexes.add(result._indexes[j])\r\n }\r\n\r\n if(allowPartialMatch && !hasAtLeast1Match) return NULL\r\n\r\n resetNextBeginningIndexes()\r\n\r\n // allows a search with spaces that's an exact substring to score well\r\n var allowSpacesResult = algorithm(preparedSearch, target, /*allowSpaces=*/true)\r\n if(allowSpacesResult !== NULL && allowSpacesResult._score > score) {\r\n if(allowPartialMatch) {\r\n for(var i=0; i<searchesLen; ++i) {\r\n allowPartialMatchScores[i] = allowSpacesResult._score / searchesLen\r\n }\r\n }\r\n return allowSpacesResult\r\n }\r\n\r\n if(allowPartialMatch) result = target\r\n result._score = score\r\n\r\n var i = 0\r\n for (let index of seen_indexes) result._indexes[i++] = index\r\n result._indexes.len = i\r\n\r\n return result\r\n }\r\n\r\n // we use this instead of just .normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') because that screws with japanese characters\r\n var remove_accents = (str) => str.replace(/\\p{Script=Latin}+/gu, match => match.normalize('NFD')).replace(/[\\u0300-\\u036f]/g, '')\r\n\r\n var prepareLowerInfo = (str) => {\r\n str = remove_accents(str)\r\n var strLen = str.length\r\n var lower = str.toLowerCase()\r\n var lowerCodes = [] // new Array(strLen) sparse array is too slow\r\n var bitflags = 0\r\n var containsSpace = false // space isn't stored in bitflags because of how searching with a space works\r\n\r\n for(var i = 0; i < strLen; ++i) {\r\n var lowerCode = lowerCodes[i] = lower.charCodeAt(i)\r\n\r\n if(lowerCode === 32) {\r\n containsSpace = true\r\n continue // it's important that we don't set any bitflags for space\r\n }\r\n\r\n var bit = lowerCode>=97&&lowerCode<=122 ? lowerCode-97 // alphabet\r\n : lowerCode>=48&&lowerCode<=57 ? 26 // numbers\r\n // 3 bits available\r\n : lowerCode<=127 ? 30 // other ascii\r\n : 31 // other utf8\r\n bitflags |= 1<<bit\r\n }\r\n\r\n return {lowerCodes:lowerCodes, bitflags:bitflags, containsSpace:containsSpace, _lower:lower}\r\n }\r\n var prepareBeginningIndexes = (target) => {\r\n var targetLen = target.length\r\n var beginningIndexes = []; var beginningIndexesLen = 0\r\n var wasUpper = false\r\n var wasAlphanum = false\r\n for(var i = 0; i < targetLen; ++i) {\r\n var targetCode = target.charCodeAt(i)\r\n var isUpper = targetCode>=65&&targetCode<=90\r\n var isAlphanum = isUpper || targetCode>=97&&targetCode<=122 || targetCode>=48&&targetCode<=57\r\n var isBeginning = isUpper && !wasUpper || !wasAlphanum || !isAlphanum\r\n wasUpper = isUpper\r\n wasAlphanum = isAlphanum\r\n if(isBeginning) beginningIndexes[beginningIndexesLen++] = i\r\n }\r\n return beginningIndexes\r\n }\r\n var prepareNextBeginningIndexes = (target) => {\r\n target = remove_accents(target)\r\n var targetLen = target.length\r\n var beginningIndexes = prepareBeginningIndexes(target)\r\n var nextBeginningIndexes = [] // new Array(targetLen) sparse array is too slow\r\n var lastIsBeginning = beginningIndexes[0]\r\n var lastIsBeginningI = 0\r\n for(var i = 0; i < targetLen; ++i) {\r\n if(lastIsBeginning > i) {\r\n nextBeginningIndexes[i] = lastIsBeginning\r\n } else {\r\n lastIsBeginning = beginningIndexes[++lastIsBeginningI]\r\n nextBeginningIndexes[i] = lastIsBeginning===undefined ? targetLen : lastIsBeginning\r\n }\r\n }\r\n return nextBeginningIndexes\r\n }\r\n\r\n var preparedCache = new Map()\r\n var preparedSearchCache = new Map()\r\n\r\n // the theory behind these being globals is to reduce garbage collection by not making new arrays\r\n var matchesSimple = []; var matchesStrict = []\r\n var nextBeginningIndexesChanges = [] // allows straw berry to match strawberry well, by modifying the end of a substring to be considered a beginning index for the rest of the search\r\n var keysSpacesBestScores = []; var allowPartialMatchScores = []\r\n var tmpTargets = []; var tmpResults = []\r\n\r\n // prop = 'key' 2.5ms optimized for this case, seems to be about as fast as direct obj[prop]\r\n // prop = 'key1.key2' 10ms\r\n // prop = ['key1', 'key2'] 27ms\r\n // prop = obj => obj.tags.join() ??ms\r\n var getValue = (obj, prop) => {\r\n var tmp = obj[prop]; if(tmp !== undefined) return tmp\r\n if(typeof prop === 'function') return prop(obj) // this should run first. but that makes string props slower\r\n var segs = prop\r\n if(!Array.isArray(prop)) segs = prop.split('.')\r\n var len = segs.length\r\n var i = -1\r\n while (obj && (++i < len)) obj = obj[segs[i]]\r\n return obj\r\n }\r\n\r\n var isPrepared = (x) => { return typeof x === 'object' && typeof x._bitflags === 'number' }\r\n var INFINITY = Infinity; var NEGATIVE_INFINITY = -INFINITY\r\n var noResults = []; noResults.total = 0\r\n var NULL = null\r\n\r\n var noTarget = prepare('')\r\n\r\n // Hacked version of https://github.com/lemire/FastPriorityQueue.js\r\n var fastpriorityqueue=r=>{var e=[],o=0,a={},v=r=>{for(var a=0,v=e[a],c=1;c<o;){var s=c+1;a=c,s<o&&e[s]._score<e[c]._score&&(a=s),e[a-1>>1]=e[a],c=1+(a<<1)}for(var f=a-1>>1;a>0&&v._score<e[f]._score;f=(a=f)-1>>1)e[a]=e[f];e[a]=v};return a.add=(r=>{var a=o;e[o++]=r;for(var v=a-1>>1;a>0&&r._score<e[v]._score;v=(a=v)-1>>1)e[a]=e[v];e[a]=r}),a.poll=(r=>{if(0!==o){var a=e[0];return e[0]=e[--o],v(),a}}),a.peek=(r=>{if(0!==o)return e[0]}),a.replaceTop=(r=>{e[0]=r,v()}),a}\r\n var q = fastpriorityqueue() // reuse this\r\n\r\n // fuzzysort is written this way for minification. all names are mangeled unless quoted\r\n return {'single':single, 'go':go, 'prepare':prepare, 'cleanup':cleanup}\r\n}) // UMD\r\n", "/**\n* @vue/reactivity v3.5.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { extend, hasChanged, isArray, isIntegerKey, isSymbol, isMap, hasOwn, makeMap, isObject, capitalize, toRawType, def, isFunction, EMPTY_OBJ, isSet, isPlainObject, remove, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal track `on` calls, allow `on` call multiple times\n */\n this._on = 0;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this._isPaused = false;\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n this\n ) - 1;\n }\n }\n get active() {\n return this._active;\n }\n pause() {\n if (this._active) {\n this._isPaused = true;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].pause();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].pause();\n }\n }\n }\n /**\n * Resumes the effect scope, including all child scopes and effects.\n */\n resume() {\n if (this._active) {\n if (this._isPaused) {\n this._isPaused = false;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].resume();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].resume();\n }\n }\n }\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n if (++this._on === 1) {\n this.prevScope = activeEffectScope;\n activeEffectScope = this;\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n if (this._on > 0 && --this._on === 0) {\n activeEffectScope = this.prevScope;\n this.prevScope = void 0;\n }\n }\n stop(fromParent) {\n if (this._active) {\n this._active = false;\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n this.effects.length = 0;\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n this.cleanups.length = 0;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n this.scopes.length = 0;\n }\n if (!this.detached && this.parent && !fromParent) {\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = void 0;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn, failSilently = false) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onScopeDispose() is called when there is no active effect scope to be associated with.`\n );\n }\n}\n\nlet activeSub;\nconst EffectFlags = {\n \"ACTIVE\": 1,\n \"1\": \"ACTIVE\",\n \"RUNNING\": 2,\n \"2\": \"RUNNING\",\n \"TRACKING\": 4,\n \"4\": \"TRACKING\",\n \"NOTIFIED\": 8,\n \"8\": \"NOTIFIED\",\n \"DIRTY\": 16,\n \"16\": \"DIRTY\",\n \"ALLOW_RECURSE\": 32,\n \"32\": \"ALLOW_RECURSE\",\n \"PAUSED\": 64,\n \"64\": \"PAUSED\",\n \"EVALUATED\": 128,\n \"128\": \"EVALUATED\"\n};\nconst pausedQueueEffects = /* @__PURE__ */ new WeakSet();\nclass ReactiveEffect {\n constructor(fn) {\n this.fn = fn;\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 1 | 4;\n /**\n * @internal\n */\n this.next = void 0;\n /**\n * @internal\n */\n this.cleanup = void 0;\n this.scheduler = void 0;\n if (activeEffectScope && activeEffectScope.active) {\n activeEffectScope.effects.push(this);\n }\n }\n pause() {\n this.flags |= 64;\n }\n resume() {\n if (this.flags & 64) {\n this.flags &= -65;\n if (pausedQueueEffects.has(this)) {\n pausedQueueEffects.delete(this);\n this.trigger();\n }\n }\n }\n /**\n * @internal\n */\n notify() {\n if (this.flags & 2 && !(this.flags & 32)) {\n return;\n }\n if (!(this.flags & 8)) {\n batch(this);\n }\n }\n run() {\n if (!(this.flags & 1)) {\n return this.fn();\n }\n this.flags |= 2;\n cleanupEffect(this);\n prepareDeps(this);\n const prevEffect = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = this;\n shouldTrack = true;\n try {\n return this.fn();\n } finally {\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub !== this) {\n warn(\n \"Active effect was not restored correctly - this is likely a Vue internal bug.\"\n );\n }\n cleanupDeps(this);\n activeSub = prevEffect;\n shouldTrack = prevShouldTrack;\n this.flags &= -3;\n }\n }\n stop() {\n if (this.flags & 1) {\n for (let link = this.deps; link; link = link.nextDep) {\n removeSub(link);\n }\n this.deps = this.depsTail = void 0;\n cleanupEffect(this);\n this.onStop && this.onStop();\n this.flags &= -2;\n }\n }\n trigger() {\n if (this.flags & 64) {\n pausedQueueEffects.add(this);\n } else if (this.scheduler) {\n this.scheduler();\n } else {\n this.runIfDirty();\n }\n }\n /**\n * @internal\n */\n runIfDirty() {\n if (isDirty(this)) {\n this.run();\n }\n }\n get dirty() {\n return isDirty(this);\n }\n}\nlet batchDepth = 0;\nlet batchedSub;\nlet batchedComputed;\nfunction batch(sub, isComputed = false) {\n sub.flags |= 8;\n if (isComputed) {\n sub.next = batchedComputed;\n batchedComputed = sub;\n return;\n }\n sub.next = batchedSub;\n batchedSub = sub;\n}\nfunction startBatch() {\n batchDepth++;\n}\nfunction endBatch() {\n if (--batchDepth > 0) {\n return;\n }\n if (batchedComputed) {\n let e = batchedComputed;\n batchedComputed = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n e = next;\n }\n }\n let error;\n while (batchedSub) {\n let e = batchedSub;\n batchedSub = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n if (e.flags & 1) {\n try {\n ;\n e.trigger();\n } catch (err) {\n if (!error) error = err;\n }\n }\n e = next;\n }\n }\n if (error) throw error;\n}\nfunction prepareDeps(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n link.version = -1;\n link.prevActiveLink = link.dep.activeLink;\n link.dep.activeLink = link;\n }\n}\nfunction cleanupDeps(sub) {\n let head;\n let tail = sub.depsTail;\n let link = tail;\n while (link) {\n const prev = link.prevDep;\n if (link.version === -1) {\n if (link === tail) tail = prev;\n removeSub(link);\n removeDep(link);\n } else {\n head = link;\n }\n link.dep.activeLink = link.prevActiveLink;\n link.prevActiveLink = void 0;\n link = prev;\n }\n sub.deps = head;\n sub.depsTail = tail;\n}\nfunction isDirty(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {\n return true;\n }\n }\n if (sub._dirty) {\n return true;\n }\n return false;\n}\nfunction refreshComputed(computed) {\n if (computed.flags & 4 && !(computed.flags & 16)) {\n return;\n }\n computed.flags &= -17;\n if (computed.globalVersion === globalVersion) {\n return;\n }\n computed.globalVersion = globalVersion;\n if (!computed.isSSR && computed.flags & 128 && (!computed.deps && !computed._dirty || !isDirty(computed))) {\n return;\n }\n computed.flags |= 2;\n const dep = computed.dep;\n const prevSub = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = computed;\n shouldTrack = true;\n try {\n prepareDeps(computed);\n const value = computed.fn(computed._value);\n if (dep.version === 0 || hasChanged(value, computed._value)) {\n computed.flags |= 128;\n computed._value = value;\n dep.version++;\n }\n } catch (err) {\n dep.version++;\n throw err;\n } finally {\n activeSub = prevSub;\n shouldTrack = prevShouldTrack;\n cleanupDeps(computed);\n computed.flags &= -3;\n }\n}\nfunction removeSub(link, soft = false) {\n const { dep, prevSub, nextSub } = link;\n if (prevSub) {\n prevSub.nextSub = nextSub;\n link.prevSub = void 0;\n }\n if (nextSub) {\n nextSub.prevSub = prevSub;\n link.nextSub = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && dep.subsHead === link) {\n dep.subsHead = nextSub;\n }\n if (dep.subs === link) {\n dep.subs = prevSub;\n if (!prevSub && dep.computed) {\n dep.computed.flags &= -5;\n for (let l = dep.computed.deps; l; l = l.nextDep) {\n removeSub(l, true);\n }\n }\n }\n if (!soft && !--dep.sc && dep.map) {\n dep.map.delete(dep.key);\n }\n}\nfunction removeDep(link) {\n const { prevDep, nextDep } = link;\n if (prevDep) {\n prevDep.nextDep = nextDep;\n link.prevDep = void 0;\n }\n if (nextDep) {\n nextDep.prevDep = prevDep;\n link.nextDep = void 0;\n }\n}\nfunction effect(fn, options) {\n if (fn.effect instanceof ReactiveEffect) {\n fn = fn.effect.fn;\n }\n const e = new ReactiveEffect(fn);\n if (options) {\n extend(e, options);\n }\n try {\n e.run();\n } catch (err) {\n e.stop();\n throw err;\n }\n const runner = e.run.bind(e);\n runner.effect = e;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction onEffectCleanup(fn, failSilently = false) {\n if (activeSub instanceof ReactiveEffect) {\n activeSub.cleanup = fn;\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onEffectCleanup() was called when there was no active effect to associate with.`\n );\n }\n}\nfunction cleanupEffect(e) {\n const { cleanup } = e;\n e.cleanup = void 0;\n if (cleanup) {\n const prevSub = activeSub;\n activeSub = void 0;\n try {\n cleanup();\n } finally {\n activeSub = prevSub;\n }\n }\n}\n\nlet globalVersion = 0;\nclass Link {\n constructor(sub, dep) {\n this.sub = sub;\n this.dep = dep;\n this.version = dep.version;\n this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;\n }\n}\nclass Dep {\n // TODO isolatedDeclarations \"__v_skip\"\n constructor(computed) {\n this.computed = computed;\n this.version = 0;\n /**\n * Link between this dep and the current active effect\n */\n this.activeLink = void 0;\n /**\n * Doubly linked list representing the subscribing effects (tail)\n */\n this.subs = void 0;\n /**\n * For object property deps cleanup\n */\n this.map = void 0;\n this.key = void 0;\n /**\n * Subscriber counter\n */\n this.sc = 0;\n /**\n * @internal\n */\n this.__v_skip = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.subsHead = void 0;\n }\n }\n track(debugInfo) {\n if (!activeSub || !shouldTrack || activeSub === this.computed) {\n return;\n }\n let link = this.activeLink;\n if (link === void 0 || link.sub !== activeSub) {\n link = this.activeLink = new Link(activeSub, this);\n if (!activeSub.deps) {\n activeSub.deps = activeSub.depsTail = link;\n } else {\n link.prevDep = activeSub.depsTail;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n }\n addSub(link);\n } else if (link.version === -1) {\n link.version = this.version;\n if (link.nextDep) {\n const next = link.nextDep;\n next.prevDep = link.prevDep;\n if (link.prevDep) {\n link.prevDep.nextDep = next;\n }\n link.prevDep = activeSub.depsTail;\n link.nextDep = void 0;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n if (activeSub.deps === link) {\n activeSub.deps = next;\n }\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub.onTrack) {\n activeSub.onTrack(\n extend(\n {\n effect: activeSub\n },\n debugInfo\n )\n );\n }\n return link;\n }\n trigger(debugInfo) {\n this.version++;\n globalVersion++;\n this.notify(debugInfo);\n }\n notify(debugInfo) {\n startBatch();\n try {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (let head = this.subsHead; head; head = head.nextSub) {\n if (head.sub.onTrigger && !(head.sub.flags & 8)) {\n head.sub.onTrigger(\n extend(\n {\n effect: head.sub\n },\n debugInfo\n )\n );\n }\n }\n }\n for (let link = this.subs; link; link = link.prevSub) {\n if (link.sub.notify()) {\n ;\n link.sub.dep.notify();\n }\n }\n } finally {\n endBatch();\n }\n }\n}\nfunction addSub(link) {\n link.dep.sc++;\n if (link.sub.flags & 4) {\n const computed = link.dep.computed;\n if (computed && !link.dep.subs) {\n computed.flags |= 4 | 16;\n for (let l = computed.deps; l; l = l.nextDep) {\n addSub(l);\n }\n }\n const currentTail = link.dep.subs;\n if (currentTail !== link) {\n link.prevSub = currentTail;\n if (currentTail) currentTail.nextSub = link;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && link.dep.subsHead === void 0) {\n link.dep.subsHead = link;\n }\n link.dep.subs = link;\n }\n}\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Object iterate\" : \"\"\n);\nconst MAP_KEY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Map keys iterate\" : \"\"\n);\nconst ARRAY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Array iterate\" : \"\"\n);\nfunction track(target, type, key) {\n if (shouldTrack && activeSub) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = new Dep());\n dep.map = depsMap;\n dep.key = key;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.track({\n target,\n type,\n key\n });\n } else {\n dep.track();\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n globalVersion++;\n return;\n }\n const run = (dep) => {\n if (dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.trigger({\n target,\n type,\n key,\n newValue,\n oldValue,\n oldTarget\n });\n } else {\n dep.trigger();\n }\n }\n };\n startBatch();\n if (type === \"clear\") {\n depsMap.forEach(run);\n } else {\n const targetIsArray = isArray(target);\n const isArrayIndex = targetIsArray && isIntegerKey(key);\n if (targetIsArray && key === \"length\") {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) {\n run(dep);\n }\n });\n } else {\n if (key !== void 0 || depsMap.has(void 0)) {\n run(depsMap.get(key));\n }\n if (isArrayIndex) {\n run(depsMap.get(ARRAY_ITERATE_KEY));\n }\n switch (type) {\n case \"add\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isArrayIndex) {\n run(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n run(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n }\n endBatch();\n}\nfunction getDepFromReactive(object, key) {\n const depMap = targetMap.get(object);\n return depMap && depMap.get(key);\n}\n\nfunction reactiveReadArray(array) {\n const raw = toRaw(array);\n if (raw === array) return raw;\n track(raw, \"iterate\", ARRAY_ITERATE_KEY);\n return isShallow(array) ? raw : raw.map(toReactive);\n}\nfunction shallowReadArray(arr) {\n track(arr = toRaw(arr), \"iterate\", ARRAY_ITERATE_KEY);\n return arr;\n}\nfunction toWrapped(target, item) {\n if (isReadonly(target)) {\n return isReactive(target) ? toReadonly(toReactive(item)) : toReadonly(item);\n }\n return toReactive(item);\n}\nconst arrayInstrumentations = {\n __proto__: null,\n [Symbol.iterator]() {\n return iterator(this, Symbol.iterator, (item) => toWrapped(this, item));\n },\n concat(...args) {\n return reactiveReadArray(this).concat(\n ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x)\n );\n },\n entries() {\n return iterator(this, \"entries\", (value) => {\n value[1] = toWrapped(this, value[1]);\n return value;\n });\n },\n every(fn, thisArg) {\n return apply(this, \"every\", fn, thisArg, void 0, arguments);\n },\n filter(fn, thisArg) {\n return apply(\n this,\n \"filter\",\n fn,\n thisArg,\n (v) => v.map((item) => toWrapped(this, item)),\n arguments\n );\n },\n find(fn, thisArg) {\n return apply(\n this,\n \"find\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findIndex(fn, thisArg) {\n return apply(this, \"findIndex\", fn, thisArg, void 0, arguments);\n },\n findLast(fn, thisArg) {\n return apply(\n this,\n \"findLast\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findLastIndex(fn, thisArg) {\n return apply(this, \"findLastIndex\", fn, thisArg, void 0, arguments);\n },\n // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement\n forEach(fn, thisArg) {\n return apply(this, \"forEach\", fn, thisArg, void 0, arguments);\n },\n includes(...args) {\n return searchProxy(this, \"includes\", args);\n },\n indexOf(...args) {\n return searchProxy(this, \"indexOf\", args);\n },\n join(separator) {\n return reactiveReadArray(this).join(separator);\n },\n // keys() iterator only reads `length`, no optimization required\n lastIndexOf(...args) {\n return searchProxy(this, \"lastIndexOf\", args);\n },\n map(fn, thisArg) {\n return apply(this, \"map\", fn, thisArg, void 0, arguments);\n },\n pop() {\n return noTracking(this, \"pop\");\n },\n push(...args) {\n return noTracking(this, \"push\", args);\n },\n reduce(fn, ...args) {\n return reduce(this, \"reduce\", fn, args);\n },\n reduceRight(fn, ...args) {\n return reduce(this, \"reduceRight\", fn, args);\n },\n shift() {\n return noTracking(this, \"shift\");\n },\n // slice could use ARRAY_ITERATE but also seems to beg for range tracking\n some(fn, thisArg) {\n return apply(this, \"some\", fn, thisArg, void 0, arguments);\n },\n splice(...args) {\n return noTracking(this, \"splice\", args);\n },\n toReversed() {\n return reactiveReadArray(this).toReversed();\n },\n toSorted(comparer) {\n return reactiveReadArray(this).toSorted(comparer);\n },\n toSpliced(...args) {\n return reactiveReadArray(this).toSpliced(...args);\n },\n unshift(...args) {\n return noTracking(this, \"unshift\", args);\n },\n values() {\n return iterator(this, \"values\", (item) => toWrapped(this, item));\n }\n};\nfunction iterator(self, method, wrapValue) {\n const arr = shallowReadArray(self);\n const iter = arr[method]();\n if (arr !== self && !isShallow(self)) {\n iter._next = iter.next;\n iter.next = () => {\n const result = iter._next();\n if (!result.done) {\n result.value = wrapValue(result.value);\n }\n return result;\n };\n }\n return iter;\n}\nconst arrayProto = Array.prototype;\nfunction apply(self, method, fn, thisArg, wrappedRetFn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n const methodFn = arr[method];\n if (methodFn !== arrayProto[method]) {\n const result2 = methodFn.apply(self, args);\n return needsWrap ? toReactive(result2) : result2;\n }\n let wrappedFn = fn;\n if (arr !== self) {\n if (needsWrap) {\n wrappedFn = function(item, index) {\n return fn.call(this, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 2) {\n wrappedFn = function(item, index) {\n return fn.call(this, item, index, self);\n };\n }\n }\n const result = methodFn.call(arr, wrappedFn, thisArg);\n return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;\n}\nfunction reduce(self, method, fn, args) {\n const arr = shallowReadArray(self);\n let wrappedFn = fn;\n if (arr !== self) {\n if (!isShallow(self)) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 3) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, item, index, self);\n };\n }\n }\n return arr[method](wrappedFn, ...args);\n}\nfunction searchProxy(self, method, args) {\n const arr = toRaw(self);\n track(arr, \"iterate\", ARRAY_ITERATE_KEY);\n const res = arr[method](...args);\n if ((res === -1 || res === false) && isProxy(args[0])) {\n args[0] = toRaw(args[0]);\n return arr[method](...args);\n }\n return res;\n}\nfunction noTracking(self, method, args = []) {\n pauseTracking();\n startBatch();\n const res = toRaw(self)[method].apply(self, args);\n endBatch();\n resetTracking();\n return res;\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nfunction hasOwnProperty(key) {\n if (!isSymbol(key)) key = String(key);\n const obj = toRaw(this);\n track(obj, \"has\", key);\n return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n constructor(_isReadonly = false, _isShallow = false) {\n this._isReadonly = _isReadonly;\n this._isShallow = _isShallow;\n }\n get(target, key, receiver) {\n if (key === \"__v_skip\") return target[\"__v_skip\"];\n const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_isShallow\") {\n return isShallow2;\n } else if (key === \"__v_raw\") {\n if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n // this means the receiver is a user proxy of the reactive proxy\n Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n return target;\n }\n return;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly2) {\n let fn;\n if (targetIsArray && (fn = arrayInstrumentations[key])) {\n return fn;\n }\n if (key === \"hasOwnProperty\") {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(\n target,\n key,\n // if this is a proxy wrapping a ref, return methods using the raw ref\n // as receiver so that we don't have to call `toRaw` on the ref in all\n // its class methods\n isRef(target) ? target : receiver\n );\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (isShallow2) {\n return res;\n }\n if (isRef(res)) {\n const value = targetIsArray && isIntegerKey(key) ? res : res.value;\n return isReadonly2 && isObject(value) ? readonly(value) : value;\n }\n if (isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive(res);\n }\n return res;\n }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(false, isShallow2);\n }\n set(target, key, value, receiver) {\n let oldValue = target[key];\n const isArrayWithIntegerKey = isArray(target) && isIntegerKey(key);\n if (!this._isShallow) {\n const isOldValueReadonly = isReadonly(oldValue);\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArrayWithIntegerKey && isRef(oldValue) && !isRef(value)) {\n if (isOldValueReadonly) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target[key]\n );\n }\n return true;\n } else {\n oldValue.value = value;\n return true;\n }\n }\n }\n const hadKey = isArrayWithIntegerKey ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(\n target,\n key,\n value,\n isRef(target) ? target : receiver\n );\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n }\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n }\n ownKeys(target) {\n track(\n target,\n \"iterate\",\n isArray(target) ? \"length\" : ITERATE_KEY\n );\n return Reflect.ownKeys(target);\n }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(true, isShallow2);\n }\n set(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n deleteProperty(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction createIterableMethod(method, isReadonly2, isShallow2) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n !isReadonly2 && track(\n rawTarget,\n \"iterate\",\n isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n );\n return extend(\n // inheriting all iterator properties\n Object.create(innerIterator),\n {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n }\n }\n );\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n warn(\n `${capitalize(type)} operation ${key}failed: target is readonly.`,\n toRaw(this)\n );\n }\n return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n };\n}\nfunction createInstrumentations(readonly, shallow) {\n const instrumentations = {\n get(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"get\", key);\n }\n track(rawTarget, \"get\", rawKey);\n }\n const { has } = getProto(rawTarget);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n if (has.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n },\n get size() {\n const target = this[\"__v_raw\"];\n !readonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return target.size;\n },\n has(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"has\", key);\n }\n track(rawTarget, \"has\", rawKey);\n }\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n },\n forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n !readonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n }\n };\n extend(\n instrumentations,\n readonly ? {\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\")\n } : {\n add(value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const proto = getProto(target);\n const hadKey = proto.has.call(target, value);\n if (!hadKey) {\n target.add(value);\n trigger(target, \"add\", value, value);\n }\n return this;\n },\n set(key, value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n },\n delete(key) {\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get ? get.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n },\n clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(\n target,\n \"clear\",\n void 0,\n void 0,\n oldTarget\n );\n }\n return result;\n }\n }\n );\n const iteratorMethods = [\n \"keys\",\n \"values\",\n \"entries\",\n Symbol.iterator\n ];\n iteratorMethods.forEach((method) => {\n instrumentations[method] = createIterableMethod(method, readonly, shallow);\n });\n return instrumentations;\n}\nfunction createInstrumentationGetter(isReadonly2, shallow) {\n const instrumentations = createInstrumentations(isReadonly2, shallow);\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(\n hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n key,\n receiver\n );\n };\n}\nconst mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has.call(target, rawKey)) {\n const type = toRawType(target);\n warn(\n `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n );\n }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1 /* COMMON */;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2 /* COLLECTION */;\n default:\n return 0 /* INVALID */;\n }\n}\nfunction getTargetType(value) {\n return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));\n}\n// @__NO_SIDE_EFFECTS__\nfunction reactive(target) {\n if (/* @__PURE__ */ isReadonly(target)) {\n return target;\n }\n return createReactiveObject(\n target,\n false,\n mutableHandlers,\n mutableCollectionHandlers,\n reactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReactive(target) {\n return createReactiveObject(\n target,\n false,\n shallowReactiveHandlers,\n shallowCollectionHandlers,\n shallowReactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction readonly(target) {\n return createReactiveObject(\n target,\n true,\n readonlyHandlers,\n readonlyCollectionHandlers,\n readonlyMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReadonly(target) {\n return createReactiveObject(\n target,\n true,\n shallowReadonlyHandlers,\n shallowReadonlyCollectionHandlers,\n shallowReadonlyMap\n );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `value cannot be made ${isReadonly2 ? \"readonly\" : \"reactive\"}: ${String(\n target\n )}`\n );\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n const targetType = getTargetType(target);\n if (targetType === 0 /* INVALID */) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const proxy = new Proxy(\n target,\n targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n );\n proxyMap.set(target, proxy);\n return proxy;\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReactive(value) {\n if (/* @__PURE__ */ isReadonly(value)) {\n return /* @__PURE__ */ isReactive(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isProxy(value) {\n return value ? !!value[\"__v_raw\"] : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\"];\n return raw ? /* @__PURE__ */ toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (!hasOwn(value, \"__v_skip\") && Object.isExtensible(value)) {\n def(value, \"__v_skip\", true);\n }\n return value;\n}\nconst toReactive = (value) => isObject(value) ? /* @__PURE__ */ reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? /* @__PURE__ */ readonly(value) : value;\n\n// @__NO_SIDE_EFFECTS__\nfunction isRef(r) {\n return r ? r[\"__v_isRef\"] === true : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction ref(value) {\n return createRef(value, false);\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (/* @__PURE__ */ isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, isShallow2) {\n this.dep = new Dep();\n this[\"__v_isRef\"] = true;\n this[\"__v_isShallow\"] = false;\n this._rawValue = isShallow2 ? value : toRaw(value);\n this._value = isShallow2 ? value : toReactive(value);\n this[\"__v_isShallow\"] = isShallow2;\n }\n get value() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n });\n } else {\n this.dep.track();\n }\n return this._value;\n }\n set value(newValue) {\n const oldValue = this._rawValue;\n const useDirectValue = this[\"__v_isShallow\"] || isShallow(newValue) || isReadonly(newValue);\n newValue = useDirectValue ? newValue : toRaw(newValue);\n if (hasChanged(newValue, oldValue)) {\n this._rawValue = newValue;\n this._value = useDirectValue ? newValue : toReactive(newValue);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.trigger({\n target: this,\n type: \"set\",\n key: \"value\",\n newValue,\n oldValue\n });\n } else {\n this.dep.trigger();\n }\n }\n }\n}\nfunction triggerRef(ref2) {\n if (ref2.dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n ref2.dep.trigger({\n target: ref2,\n type: \"set\",\n key: \"value\",\n newValue: ref2._value\n });\n } else {\n ref2.dep.trigger();\n }\n }\n}\nfunction unref(ref2) {\n return /* @__PURE__ */ isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => key === \"__v_raw\" ? target : unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (/* @__PURE__ */ isRef(oldValue) && !/* @__PURE__ */ isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n const dep = this.dep = new Dep();\n const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._value = this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRefs(object) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = propertyToRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, _key, _defaultValue) {\n this._object = _object;\n this._key = _key;\n this._defaultValue = _defaultValue;\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n this._raw = toRaw(_object);\n let shallow = true;\n let obj = _object;\n if (!isArray(_object) || !isIntegerKey(String(_key))) {\n do {\n shallow = !isProxy(obj) || isShallow(obj);\n } while (shallow && (obj = obj[\"__v_raw\"]));\n }\n this._shallow = shallow;\n }\n get value() {\n let val = this._object[this._key];\n if (this._shallow) {\n val = unref(val);\n }\n return this._value = val === void 0 ? this._defaultValue : val;\n }\n set value(newVal) {\n if (this._shallow && /* @__PURE__ */ isRef(this._raw[this._key])) {\n const nestedRef = this._object[this._key];\n if (/* @__PURE__ */ isRef(nestedRef)) {\n nestedRef.value = newVal;\n return;\n }\n }\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(this._raw, this._key);\n }\n}\nclass GetterRefImpl {\n constructor(_getter) {\n this._getter = _getter;\n this[\"__v_isRef\"] = true;\n this[\"__v_isReadonly\"] = true;\n this._value = void 0;\n }\n get value() {\n return this._value = this._getter();\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRef(source, key, defaultValue) {\n if (/* @__PURE__ */ isRef(source)) {\n return source;\n } else if (isFunction(source)) {\n return new GetterRefImpl(source);\n } else if (isObject(source) && arguments.length > 1) {\n return propertyToRef(source, key, defaultValue);\n } else {\n return /* @__PURE__ */ ref(source);\n }\n}\nfunction propertyToRef(source, key, defaultValue) {\n return new ObjectRefImpl(source, key, defaultValue);\n}\n\nclass ComputedRefImpl {\n constructor(fn, setter, isSSR) {\n this.fn = fn;\n this.setter = setter;\n /**\n * @internal\n */\n this._value = void 0;\n /**\n * @internal\n */\n this.dep = new Dep(this);\n /**\n * @internal\n */\n this.__v_isRef = true;\n // TODO isolatedDeclarations \"__v_isReadonly\"\n // A computed is also a subscriber that tracks other deps\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 16;\n /**\n * @internal\n */\n this.globalVersion = globalVersion - 1;\n /**\n * @internal\n */\n this.next = void 0;\n // for backwards compat\n this.effect = this;\n this[\"__v_isReadonly\"] = !setter;\n this.isSSR = isSSR;\n }\n /**\n * @internal\n */\n notify() {\n this.flags |= 16;\n if (!(this.flags & 8) && // avoid infinite self recursion\n activeSub !== this) {\n batch(this, true);\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) ;\n }\n get value() {\n const link = !!(process.env.NODE_ENV !== \"production\") ? this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n }) : this.dep.track();\n refreshComputed(this);\n if (link) {\n link.version = this.dep.version;\n }\n return this._value;\n }\n set value(newValue) {\n if (this.setter) {\n this.setter(newValue);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\"Write operation failed: computed value is readonly\");\n }\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n if (isFunction(getterOrOptions)) {\n getter = getterOrOptions;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, isSSR);\n if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n cRef.onTrack = debugOptions.onTrack;\n cRef.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nconst TrackOpTypes = {\n \"GET\": \"get\",\n \"HAS\": \"has\",\n \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n \"SET\": \"set\",\n \"ADD\": \"add\",\n \"DELETE\": \"delete\",\n \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n \"SKIP\": \"__v_skip\",\n \"IS_REACTIVE\": \"__v_isReactive\",\n \"IS_READONLY\": \"__v_isReadonly\",\n \"IS_SHALLOW\": \"__v_isShallow\",\n \"RAW\": \"__v_raw\",\n \"IS_REF\": \"__v_isRef\"\n};\n\nconst WatchErrorCodes = {\n \"WATCH_GETTER\": 2,\n \"2\": \"WATCH_GETTER\",\n \"WATCH_CALLBACK\": 3,\n \"3\": \"WATCH_CALLBACK\",\n \"WATCH_CLEANUP\": 4,\n \"4\": \"WATCH_CLEANUP\"\n};\nconst INITIAL_WATCHER_VALUE = {};\nconst cleanupMap = /* @__PURE__ */ new WeakMap();\nlet activeWatcher = void 0;\nfunction getCurrentWatcher() {\n return activeWatcher;\n}\nfunction onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {\n if (owner) {\n let cleanups = cleanupMap.get(owner);\n if (!cleanups) cleanupMap.set(owner, cleanups = []);\n cleanups.push(cleanupFn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onWatcherCleanup() was called when there was no active watcher to associate with.`\n );\n }\n}\nfunction watch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, once, scheduler, augmentJob, call } = options;\n const warnInvalidSource = (s) => {\n (options.onWarn || warn)(\n `Invalid watch source: `,\n s,\n `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n );\n };\n const reactiveGetter = (source2) => {\n if (deep) return source2;\n if (isShallow(source2) || deep === false || deep === 0)\n return traverse(source2, 1);\n return traverse(source2);\n };\n let effect;\n let getter;\n let cleanup;\n let boundCleanup;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow(source);\n } else if (isReactive(source)) {\n getter = () => reactiveGetter(source);\n forceTrigger = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n getter = () => source.map((s) => {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n return reactiveGetter(s);\n } else if (isFunction(s)) {\n return call ? call(s, 2) : s();\n } else {\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n }\n });\n } else if (isFunction(source)) {\n if (cb) {\n getter = call ? () => call(source, 2) : source;\n } else {\n getter = () => {\n if (cleanup) {\n pauseTracking();\n try {\n cleanup();\n } finally {\n resetTracking();\n }\n }\n const currentEffect = activeWatcher;\n activeWatcher = effect;\n try {\n return call ? call(source, 3, [boundCleanup]) : source(boundCleanup);\n } finally {\n activeWatcher = currentEffect;\n }\n };\n }\n } else {\n getter = NOOP;\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n const depth = deep === true ? Infinity : deep;\n getter = () => traverse(baseGetter(), depth);\n }\n const scope = getCurrentScope();\n const watchHandle = () => {\n effect.stop();\n if (scope && scope.active) {\n remove(scope.effects, effect);\n }\n };\n if (once && cb) {\n const _cb = cb;\n cb = (...args) => {\n _cb(...args);\n watchHandle();\n };\n }\n let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n const job = (immediateFirstRun) => {\n if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) {\n return;\n }\n if (cb) {\n const newValue = effect.run();\n if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) {\n if (cleanup) {\n cleanup();\n }\n const currentWatcher = activeWatcher;\n activeWatcher = effect;\n try {\n const args = [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n boundCleanup\n ];\n oldValue = newValue;\n call ? call(cb, 3, args) : (\n // @ts-expect-error\n cb(...args)\n );\n } finally {\n activeWatcher = currentWatcher;\n }\n }\n } else {\n effect.run();\n }\n };\n if (augmentJob) {\n augmentJob(job);\n }\n effect = new ReactiveEffect(getter);\n effect.scheduler = scheduler ? () => scheduler(job, false) : job;\n boundCleanup = (fn) => onWatcherCleanup(fn, false, effect);\n cleanup = effect.onStop = () => {\n const cleanups = cleanupMap.get(effect);\n if (cleanups) {\n if (call) {\n call(cleanups, 4);\n } else {\n for (const cleanup2 of cleanups) cleanup2();\n }\n cleanupMap.delete(effect);\n }\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = options.onTrack;\n effect.onTrigger = options.onTrigger;\n }\n if (cb) {\n if (immediate) {\n job(true);\n } else {\n oldValue = effect.run();\n }\n } else if (scheduler) {\n scheduler(job.bind(null, true), true);\n } else {\n effect.run();\n }\n watchHandle.pause = effect.pause.bind(effect);\n watchHandle.resume = effect.resume.bind(effect);\n watchHandle.stop = watchHandle;\n return watchHandle;\n}\nfunction traverse(value, depth = Infinity, seen) {\n if (depth <= 0 || !isObject(value) || value[\"__v_skip\"]) {\n return value;\n }\n seen = seen || /* @__PURE__ */ new Map();\n if ((seen.get(value) || 0) >= depth) {\n return value;\n }\n seen.set(value, depth);\n depth--;\n if (isRef(value)) {\n traverse(value.value, depth, seen);\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], depth, seen);\n }\n } else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, depth, seen);\n });\n } else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], depth, seen);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n if (Object.prototype.propertyIsEnumerable.call(value, key)) {\n traverse(value[key], depth, seen);\n }\n }\n }\n return value;\n}\n\nexport { ARRAY_ITERATE_KEY, EffectFlags, EffectScope, ITERATE_KEY, MAP_KEY_ITERATE_KEY, ReactiveEffect, ReactiveFlags, TrackOpTypes, TriggerOpTypes, WatchErrorCodes, computed, customRef, effect, effectScope, enableTracking, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onEffectCleanup, onScopeDispose, onWatcherCleanup, pauseTracking, proxyRefs, reactive, reactiveReadArray, readonly, ref, resetTracking, shallowReactive, shallowReadArray, shallowReadonly, shallowRef, stop, toRaw, toReactive, toReadonly, toRef, toRefs, toValue, track, traverse, trigger, triggerRef, unref, watch };\n", "/**\n* @vue/shared v3.5.27\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n const map = /* @__PURE__ */ Object.create(null);\n for (const key of str.split(\",\")) map[key] = 1;\n return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return ((str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n });\n};\nconst camelizeRE = /-\\w/g;\nconst camelize = cacheStringFunction(\n (str) => {\n return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());\n }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n (str) => {\n const s = str ? `on${capitalize(str)}` : ``;\n return s;\n }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](...arg);\n }\n};\nconst def = (obj, key, value, writable = false) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n writable,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n return source + JSON.stringify(\n options,\n (_, val) => typeof val === \"function\" ? val.toString() : val\n );\n}\n\nconst PatchFlags = {\n \"TEXT\": 1,\n \"1\": \"TEXT\",\n \"CLASS\": 2,\n \"2\": \"CLASS\",\n \"STYLE\": 4,\n \"4\": \"STYLE\",\n \"PROPS\": 8,\n \"8\": \"PROPS\",\n \"FULL_PROPS\": 16,\n \"16\": \"FULL_PROPS\",\n \"NEED_HYDRATION\": 32,\n \"32\": \"NEED_HYDRATION\",\n \"STABLE_FRAGMENT\": 64,\n \"64\": \"STABLE_FRAGMENT\",\n \"KEYED_FRAGMENT\": 128,\n \"128\": \"KEYED_FRAGMENT\",\n \"UNKEYED_FRAGMENT\": 256,\n \"256\": \"UNKEYED_FRAGMENT\",\n \"NEED_PATCH\": 512,\n \"512\": \"NEED_PATCH\",\n \"DYNAMIC_SLOTS\": 1024,\n \"1024\": \"DYNAMIC_SLOTS\",\n \"DEV_ROOT_FRAGMENT\": 2048,\n \"2048\": \"DEV_ROOT_FRAGMENT\",\n \"CACHED\": -1,\n \"-1\": \"CACHED\",\n \"BAIL\": -2,\n \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `NEED_HYDRATION`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `CACHED`,\n [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"FUNCTIONAL_COMPONENT\": 2,\n \"2\": \"FUNCTIONAL_COMPONENT\",\n \"STATEFUL_COMPONENT\": 4,\n \"4\": \"STATEFUL_COMPONENT\",\n \"TEXT_CHILDREN\": 8,\n \"8\": \"TEXT_CHILDREN\",\n \"ARRAY_CHILDREN\": 16,\n \"16\": \"ARRAY_CHILDREN\",\n \"SLOTS_CHILDREN\": 32,\n \"32\": \"SLOTS_CHILDREN\",\n \"TELEPORT\": 64,\n \"64\": \"TELEPORT\",\n \"SUSPENSE\": 128,\n \"128\": \"SUSPENSE\",\n \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n \"COMPONENT_KEPT_ALIVE\": 512,\n \"512\": \"COMPONENT_KEPT_ALIVE\",\n \"COMPONENT\": 6,\n \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n \"STABLE\": 1,\n \"1\": \"STABLE\",\n \"DYNAMIC\": 2,\n \"2\": \"DYNAMIC\",\n \"FORWARDED\": 3,\n \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n start = Math.max(0, Math.min(start, source.length));\n end = Math.max(0, Math.min(end, source.length));\n if (start > end) return \"\";\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value) || isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n if (!styles) return \"\";\n if (isString(styles)) return styles;\n let ret = \"\";\n for (const key in styles) {\n const value = styles[key];\n if (isString(value) || typeof value === \"number\") {\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props) return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n if (value == null) {\n return false;\n }\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \"&quot;\";\n break;\n case 38:\n escaped = \"&amp;\";\n break;\n case 39:\n escaped = \"&#39;\";\n break;\n case 60:\n escaped = \"&lt;\";\n break;\n case 62:\n escaped = \"&gt;\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n return src.replace(commentStripRE, \"\");\n}\nconst cssVarNameEscapeSymbolsRE = /[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n return key.replace(\n cssVarNameEscapeSymbolsRE,\n (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n );\n}\n\nfunction looseCompareArrays(a, b) {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\nfunction looseEqual(a, b) {\n if (a === b) return true;\n let aValidType = isDate(a);\n let bValidType = isDate(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n aValidType = isSymbol(a);\n bValidType = isSymbol(b);\n if (aValidType || bValidType) {\n return a === b;\n }\n aValidType = isArray(a);\n bValidType = isArray(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n }\n aValidType = isObject(a);\n bValidType = isObject(b);\n if (aValidType || bValidType) {\n if (!aValidType || !bValidType) {\n return false;\n }\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n for (const key in a) {\n const aHasKey = a.hasOwnProperty(key);\n const bHasKey = b.hasOwnProperty(key);\n if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (isRef(val)) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce(\n (entries, [key, val2], i) => {\n entries[stringifySymbol(key, i) + \" =>\"] = val2;\n return entries;\n },\n {}\n )\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n };\n } else if (isSymbol(val)) {\n return stringifySymbol(val);\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n var _a;\n return (\n // Symbol.description in es2019+ so we need to cast here to pass\n // the lib: es2016 check\n isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n );\n};\n\nfunction normalizeCssVarValue(value) {\n if (value == null) {\n return \"initial\";\n }\n if (typeof value === \"string\") {\n return value === \"\" ? \" \" : value;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n console.warn(\n \"[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:\",\n value\n );\n }\n }\n return String(value);\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeCssVarValue, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n", "\nexport default function inlineWorker(scriptText) {\n let blob = new Blob([scriptText], {type: 'text/javascript'});\n let url = URL.createObjectURL(blob);\n let worker = new Worker(url);\n URL.revokeObjectURL(url);\n return worker;\n}\n", "import type { CollectionListWrapperElement } from '@adartem/adlib-utils';\n\nimport type { List } from '../components/List';\n\nexport const listInstancesStore = new Map<CollectionListWrapperElement, List>();\n", "import { extractCommaSeparatedValues } from '@adartem/adlib-utils';\nimport { effect } from '@vue/reactivity';\n\nimport type { List } from '../components';\nimport { listInstancesStore } from '../utils/store';\n\n/**\n * Initializes the list combine feature.\n * @param targetList The target list.\n * @param rawSourceInstances A comma-separated list of source instances.\n * @returns A cleanup function.\n */\nexport const initListCombine = (targetList: List, rawSourceInstances: string) => {\n const sourceInstances = extractCommaSeparatedValues(rawSourceInstances);\n\n const sourceLists = [...listInstancesStore.values()].filter(\n (list) => list !== targetList && list.instance && sourceInstances.includes(list.instance),\n );\n\n if (!sourceLists.length) return;\n\n const cleanups = sourceLists.map((sourceList) => {\n const runner = effect(() => {\n if (!sourceList.items.value.length) return;\n\n const elements = sourceList.items.value.map((item) => {\n item.currentIndex = undefined;\n\n return targetList.createItem(item.element);\n });\n\n sourceList.renderedItems.clear();\n\n sourceList.items.value = [];\n targetList.items.value = [...targetList.items.value, ...elements];\n });\n\n return () => runner.effect.stop();\n });\n\n return () => {\n cleanups.forEach((cleanup) => cleanup());\n };\n};\n", "import {\n type AttributeElements,\n type AttributeSettings,\n type FormFieldType,\n type OptionsSchema,\n type WebflowBreakpoint,\n} from '@adartem/adlib-utils';\n\nimport type { ListItemField } from '../components';\nimport type { FilterOperator } from '../filter/types';\n\nexport const MODULE_KEY = 'ad-list' as const;\n\nexport const OPTIONS = {\n /**\n * Defines if loaded Items can be cached using IndexedDB after fetching them.\n */\n cache: { type: 'boolean', default: true },\n\n /**\n * Defines if the pagination query params should be displayed on the URL.\n * Only works with pagination mode.\n */\n showquery: { type: 'boolean', default: false },\n\n /**\n * Defines if the matched fields when filtering should be highlighted.\n */\n highlight: { type: 'boolean', default: false },\n\n /**\n * Defines a custom amount of items to display per page.\n * By default, it will use the Webflow pagination settings.\n */\n itemsperpage: { type: 'number', default: 0 },\n\n /**\n * Defines the loading configuration.\n */\n load: { type: 'string', default: '' },\n\n /**\n * Defines a list instance where the list should be combined with.\n */\n combine: { type: 'string', default: '' },\n\n /**\n * Defines the CSS class to be added to the list when filtering.\n */\n filteringclass: { type: 'string', default: 'is-list-filtering' },\n\n /**\n * Defines the CSS class to be added to the list when sorting.\n */\n sortingclass: { type: 'string', default: 'is-list-sorting' },\n\n /**\n * Defines the CSS class to be added to the list when paginating.\n */\n loadingclass: { type: 'string', default: 'is-list-loading' },\n\n /**\n * Defines if Webflow's ix2 should be reset when rendering the list items.\n */\n resetix: { type: 'boolean', default: false },\n\n /**\n * Defines the scrolling threshold to trigger a new page load in `infinite` mode.\n */\n threshold: { type: 'number', default: -20 },\n\n /**\n * Defines the amount of items to load when clicking the load more button or scrolling in infinite mode.\n */\n loadcount: { type: 'string', default: '' },\n\n /**\n * Defines the amount of digits to display either side of the current page.\n * It can be a comma-separated string listing the values in a `Desktop, Tablet, Landscape, Portrait` order.\n */\n pagesiblings: { type: 'string', default: '1' },\n\n /**\n * Defines the amount of digits to display at the start and end of a page buttons list.\n * It can be a comma-separated string listing the values in a `Desktop, Tablet, Landscape, Portrait` order.\n */\n pageboundary: { type: 'string', default: '1' },\n\n /**\n * Enable or disable accessibility features (keyboard interaction, ARIA attributes).\n * Enabled by default, can be disabled by setting to \"false\".\n */\n a11y: { type: 'boolean', default: true },\n} as const satisfies OptionsSchema;\n\nexport const ELEMENTS = [\n /**\n * Defines a list wrapper element.\n */\n 'wrapper',\n\n /**\n * Defines a list element.\n */\n 'list',\n\n /**\n * Defines a list item element.\n */\n 'item',\n\n /**\n * Defines a link to an item's template page.\n */\n 'item-link',\n\n /**\n * Defines a button to clear a filter or all the filters.\n */\n 'clear',\n\n /**\n * Defines a pagination wrapper element.\n */\n 'pagination-wrapper',\n\n /**\n * Defines a pagination next element.\n */\n 'pagination-next',\n\n /**\n * Defines a pagination previous element.\n */\n 'pagination-previous',\n\n /**\n * Defines a page-count element.\n */\n 'page-count',\n\n /**\n * Defines a empty element.\n */\n 'empty',\n\n /**\n * Defines a sorting trigger.\n */\n 'sort-trigger',\n\n /**\n * Defines a dropdown label.\n */\n 'dropdown-label',\n\n /**\n * Loader\n */\n 'loader',\n\n /**\n * Items count\n */\n 'items-count',\n\n /**\n * Visible count\n */\n 'visible-count',\n\n /**\n * Visible count from\n */\n 'visible-count-from',\n\n /**\n * Visible count to\n */\n 'visible-count-to',\n\n /**\n * All filters results count\n */\n 'results-count',\n\n /**\n * A specific filter results count prediction.\n */\n 'facet-count',\n\n /**\n * Defines the template element to generate all page buttons for the `pagination` mode.\n */\n 'page-button',\n\n /**\n * Defines the template element to create the page dots separators.\n */\n 'page-dots',\n\n /**\n * Defines a filters form.\n */\n 'filters',\n\n /**\n * Defines an element that will be displayed instead of the list when there are no filters applied.\n */\n 'initial',\n\n /**\n * Defines the tag element.\n */\n 'tag',\n\n /**\n * Defines the element inside each tag that will display the field name.\n */\n 'tag-field',\n\n /**\n * Defines the element inside each tag that will display the filter value.\n */\n 'tag-value',\n\n /**\n * Defines the element inside each tag that will display the filter operator.\n * Tag operators can be overwritten by the `tag-operator-OPERATOR` attribute.\n */\n 'tag-operator',\n 'tag-operator-equal',\n 'tag-operator-not-equal',\n 'tag-operator-contain',\n 'tag-operator-not-contain',\n 'tag-operator-start',\n 'tag-operator-not-start',\n 'tag-operator-end',\n 'tag-operator-not-end',\n 'tag-operator-greater',\n 'tag-operator-greater-equal',\n 'tag-operator-less',\n 'tag-operator-less-equal',\n 'tag-operator-empty',\n 'tag-operator-not-empty',\n\n /**\n * Defines the element inside each Tag that should remove it.\n */\n 'tag-remove',\n\n /**\n * Defines the wrapper of the tags for a conditions group.\n */\n 'tag-group',\n\n /**\n * Defines a button that will remove an entire tag group (and the correspondent filters).\n */\n 'tag-group-remove',\n\n /**\n * Defines a Condition group wrapper that wraps all the conditions added to that group.\n */\n 'condition-group',\n\n /**\n * Defines a matching value for the conditions groups.\n */\n 'condition-group-match',\n 'condition-groups-match',\n\n /**\n * Defines an element that when clicked will add a new condition group.\n */\n 'condition-group-add',\n 'condition-groups-add',\n\n /**\n * Defines an element that when clicked will remove a condition group.\n */\n 'condition-group-remove',\n\n /**\n * Defines a Condition template element that wraps the field, operator and value elements.\n */\n 'condition',\n\n /**\n * Defines a matching value for the condition in the group.\n */\n 'condition-match',\n\n /**\n * Defines a Condition field input.\n */\n 'condition-field',\n\n /**\n * Defines a Condition operator selector.\n */\n 'condition-operator',\n\n /**\n * Defines a Condition value input.\n */\n 'condition-value',\n\n /**\n * Defines an element that when clicked will add a new condition to the group.\n */\n 'condition-add',\n\n /**\n * Defines an element that when clicked will remove the condition.\n */\n 'condition-remove',\n\n /**\n * Defines a slider element.\n */\n 'slider',\n\n /**\n * Defines a tabs element.\n */\n 'tabs',\n\n /**\n * Defines a tab link element.\n */\n 'tab-link',\n\n /**\n * Defines a <select> element.\n */\n 'select',\n\n /**\n * Defines a select <option> value element.\n */\n 'select-value',\n\n /**\n * Defines a nesting target\n */\n 'nest-target',\n\n /**\n * Defines an element that has a comma-separated list of slugs of elements to nest into a specific target.\n */\n 'nest-slugs',\n\n /**\n * Defines an element to scroll to when any list actions are performed.\n */\n 'scroll-anchor',\n\n /**\n * Defines an element to scroll to when filter actions are performed.\n * If defined, it overrides the `scroll-anchor` element.\n */\n 'scroll-anchor-filter',\n\n /**\n * Defines an element to scroll to when sort actions are performed.\n * If defined, it overrides the `scroll-anchor` element.\n */\n 'scroll-anchor-sort',\n\n /**\n * Defines an element to scroll to when pagination actions are performed.\n * If defined, it overrides the `scroll-anchor` element.\n */\n 'scroll-anchor-pagination',\n\n /**\n * Defines the place where to put the previous item of a collection template page.\n */\n 'previous-item',\n\n /**\n * Defines the place where to put the next item of a collection template page.\n */\n 'next-item',\n\n /**\n * Defines an item to be displayed when the previous item is empty.\n */\n 'previous-empty',\n\n /**\n * Defines an item to be displayed when the next item is empty.\n */\n 'next-empty',\n] as const satisfies AttributeElements;\n\nconst TEXT = 'text';\nconst NUMBER = 'number';\nconst DATE = 'date';\nconst SELECT_ONE = 'select-one';\nconst SELECT_MULTIPLE = 'select-multiple';\nconst OP_CONTAIN = 'contain';\nconst OP_NOT_CONTAIN = 'not-contain';\nconst OP_START = 'start';\nconst OP_NOT_START = 'not-start';\nconst OP_END = 'end';\nconst OP_NOT_END = 'not-end';\nconst OP_EQUAL = 'equal';\nconst OP_NOT_EQUAL = 'not-equal';\nconst OP_GREATER = 'greater';\nconst OP_GREATER_EQUAL = 'greater-equal';\nconst OP_LESS = 'less';\nconst OP_LESS_EQUAL = 'less-equal';\nconst OP_EMPTY = 'empty';\nconst OP_NOT_EMPTY = 'not-empty';\n\nexport const SETTINGS = {\n /**\n * Defines an item field.\n */\n field: {\n key: 'field',\n },\n\n /**\n * Defines the matching logic for an array of field values.\n */\n fieldmatch: {\n key: 'fieldmatch',\n values: ['and', 'or'],\n defaultValue: 'or',\n },\n\n /**\n * Defines the matching logic for an array of filter values.\n */\n filtermatch: {\n key: 'filtermatch',\n values: ['and', 'or'],\n defaultValue: 'or',\n },\n\n /**\n * Defines the matching logic for multiple conditions.\n */\n conditionsmatch: {\n key: 'conditionsmatch',\n values: ['and', 'or'],\n defaultValue: 'and',\n },\n\n /**\n * Defines the matching logic for multiple condition groups.\n */\n groupsmatch: {\n key: 'groupsmatch',\n values: ['and', 'or'],\n defaultValue: 'and',\n },\n\n /**\n * Defines an item field type.\n */\n fieldtype: {\n key: 'fieldtype',\n values: ['number', 'date'],\n },\n\n /**\n * Defines if sorting should start reversed.\n */\n reverse: {\n key: 'reverse',\n values: ['true'],\n },\n\n /**\n * Debouncing delay for filter.\n */\n debounce: {\n key: 'debounce',\n isNumeric: true,\n },\n\n /**\n * Defines the ascending CSS class.\n */\n ascclass: {\n key: 'ascclass',\n defaultValue: `is-list-asc`,\n },\n\n /**\n * Defines the descending CSS class.\n */\n descclass: {\n key: 'descclass',\n defaultValue: `is-list-desc`,\n },\n\n /**\n * Defines the active filter CSS class.\n */\n activeclass: {\n key: 'activeclass',\n defaultValue: `is-list-active`,\n },\n\n /**\n * Defines the disabled filter CSS class.\n */\n dynamicdisabledclass: {\n key: 'dynamicdisabledclass',\n defaultValue: `is-list-dynamic-disabled`,\n },\n\n /**\n * Defines the loading configuration.\n */\n load: {\n key: 'load',\n values: ['more', 'infinite', 'pagination', 'all'],\n },\n\n /**\n * Defines the amount of items to load when clicking the load more button or scrolling in infinite mode.\n */\n loadcount: {\n key: 'loadcount',\n values: ['all'],\n },\n\n /**\n * Defines the scrolling threshold to trigger a new page load in `infinite` mode.\n */\n threshold: { key: 'threshold', defaultValue: '-20', isNumeric: true },\n\n /**\n * Defines the amount of digits to display either side of the current page.\n * It can be a comma-separated string listing the values in a `Desktop, Tablet, Landscape, Portrait` order.\n */\n pagesiblings: { key: 'pagesiblings', defaultValue: '1' },\n\n /**\n * Defines the amount of digits to display at the start and end of a page buttons list.\n * It can be a comma-separated string listing the values in a `Desktop, Tablet, Landscape, Portrait` order.\n */\n pageboundary: { key: 'pageboundary', defaultValue: '1' },\n\n /**\n * Defines the disabled CSS class.\n */\n paginationdisabledclass: {\n key: 'paginationdisabledclass',\n defaultValue: `is-list-pagination-disabled`,\n },\n\n /**\n * Defines an easing animation for any action in the list (sorting, page navigation, filtering).\n */\n easing: { key: 'easing' },\n\n /**\n * Defines an animation duration for any action in the list (sorting, page navigation, filtering).\n */\n duration: { key: 'duration', defaultValue: '1000', isNumeric: true },\n\n /**\n * Defines if the pagination query params should be displayed on the URL.\n * Only works with {@link SETTINGS.load.values.pagination} mode.\n */\n showquery: { key: 'showquery', values: ['true'] },\n\n /**\n * Defines if the matched fields when filtering should be highlighted.\n */\n highlight: { key: 'highlight', values: ['true'] },\n\n /**\n * Defines the highlight CSS class.\n */\n highlightclass: { key: 'highlightclass', defaultValue: `is-list-highlight` },\n\n /**\n * Defines the behavior of filter elements when there are no results.\n */\n emptyfacet: { key: 'emptyfacet', values: ['hide', 'add-class'] },\n\n /**\n * Defines the empty CSS class.\n */\n emptyfacetclass: { key: 'emptyfacetclass', defaultValue: `is-list-emptyfacet` },\n\n /**\n * Defines a filter operator.\n */\n operator: {\n key: 'operator',\n values: [\n OP_EQUAL,\n OP_NOT_EQUAL,\n OP_CONTAIN,\n OP_NOT_CONTAIN,\n OP_START,\n OP_NOT_START,\n OP_END,\n OP_NOT_END,\n OP_GREATER_EQUAL,\n OP_GREATER,\n OP_LESS_EQUAL,\n OP_LESS,\n OP_EMPTY,\n OP_NOT_EMPTY,\n ],\n },\n\n /**\n * Defines a fuzzy ratio for a filter.\n */\n fuzzy: { key: 'fuzzy', isNumeric: true },\n\n /**\n * Defines when the lists should be filtered.\n */\n filteron: { key: 'filteron', values: ['input', 'change', 'submit'], defaultValue: 'input' },\n\n /**\n * Defines if the form's default submissions shouldn't be prevented.\n * By default, ad-list prevents the form's default submission to handle the filtering.\n */\n allowsubmit: { key: 'allowsubmit', values: ['true'] },\n\n /**\n * Defines a filter value.\n * Only used for checkboxes and radios to work around Webflow now allowing to define CMS based values for them.\n */\n value: { key: 'value' },\n\n /**\n * Defines a split separator for a filter value.\n * If set to `true`, it will use a space as a separator.\n */\n split: { key: 'split' },\n\n /**\n * Defines a list instance where the list should be combined with.\n */\n combine: { key: 'combine' },\n\n /**\n * Defines the instance of a list to be nested into a nest-target.\n */\n nest: { key: 'nest' },\n\n /**\n * Defines if loaded Items can be cached using IndexedDB after fetching them.\n */\n cache: { key: `cache`, values: ['true'], defaultValue: 'true' },\n\n /**\n * Defines a custom display value for a field in a tag.\n */\n tagfield: { key: 'tagfield' },\n\n /**\n * Defines how to render tag values.\n */\n tagvalues: { key: 'tagvalues', values: ['combined', 'separate'], defaultValue: 'combined' },\n\n /**\n * Defines if the tag for a specific filter should be displayed.\n */\n showtag: { key: 'showtag', values: ['false'] },\n\n /**\n * If added to a tag, numeric and date numbers will be formatted when displaying them in the tags.\n * If \"true\" the format will default to the user’s locale.\n * A specific locale can be forced using IETF BCP 47 language tags like \"en-US\".\n */\n formatdisplay: { key: 'formatdisplay', values: ['true'] },\n\n /**\n * Defines the position for a static list item.\n */\n position: { key: 'position', isNumeric: true, defaultValue: '1' },\n\n /**\n * If added to a static list item, the item will be repeated every X items.\n */\n repeat: { key: 'repeat', isNumeric: true },\n\n /**\n * If defined on a static item, the item will be filtered, sorted, etc…\n */\n interactive: { key: 'interactive', values: ['true'] },\n\n /**\n * Defines a custom amount of items to display per page.\n * By default, it will use the Webflow pagination settings.\n */\n itemsperpage: { key: 'itemsperpage', isNumeric: true },\n\n /**\n * Defines the CSS class to be added to the list when filtering.\n */\n filteringclass: { key: 'filteringclass', defaultValue: `is-list-filtering` },\n\n /**\n * Defines the CSS class to be added to the list when paginating.\n */\n loadingclass: { key: 'loadingclass', defaultValue: `is-list-loading` },\n\n /**\n * Defines the CSS class to be added to the list when sorting.\n */\n sortingclass: { key: 'sortingclass', defaultValue: `is-list-sorting` },\n\n /**\n * Defines the CSS class to be added to items before rendering them.\n */\n startingclass: { key: 'startingclass', defaultValue: `is-list-starting` },\n\n /**\n * Defines a stagger delay for the items when filtering.\n * If applied, the items will receive a `transition-delay` CSS property.\n */\n stagger: { key: 'stagger', isNumeric: true },\n\n /**\n * Defines if Webflow's ix2 should be reset when rendering the list items.\n */\n resetix: { key: 'resetix', values: ['true'] },\n\n /**\n * Alternative to `ad-list-element=\"facet-count\"`\n * for those elements that already have an `ad-list-element` attribute.\n */\n facetcount: { key: 'facetcount' },\n\n /**\n * Disables the list instance.\n */\n disabled: { key: 'disabled', values: ['true'] },\n\n /**\n * Enable or disable accessibility features (keyboard interaction, ARIA attributes).\n * Enabled by default, can be disabled by setting to \"false\".\n */\n a11y: { key: 'a11y', values: ['false'] },\n} as const satisfies AttributeSettings;\n\nexport const BREAKPOINTS_INDEX: { [key in WebflowBreakpoint]: number } = {\n main: 0,\n medium: 1,\n small: 2,\n tiny: 3,\n} as const;\n\nexport const ALLOWED_DYNAMIC_FIELD_TYPES: Record<\n ListItemField['type'],\n Record<'single' | 'multiple', Partial<Record<FilterOperator, FormFieldType[]>>>\n> = {\n text: {\n single: {\n [OP_CONTAIN]: [TEXT],\n [OP_NOT_CONTAIN]: [TEXT],\n [OP_START]: [TEXT],\n [OP_NOT_START]: [TEXT],\n [OP_END]: [TEXT],\n [OP_NOT_END]: [TEXT],\n [OP_EQUAL]: [SELECT_MULTIPLE, SELECT_ONE, TEXT],\n [OP_NOT_EQUAL]: [SELECT_MULTIPLE, SELECT_ONE, TEXT],\n [OP_EMPTY]: [],\n [OP_NOT_EMPTY]: [],\n },\n multiple: {\n [OP_CONTAIN]: [TEXT],\n [OP_NOT_CONTAIN]: [TEXT],\n [OP_START]: [TEXT],\n [OP_NOT_START]: [TEXT],\n [OP_END]: [TEXT],\n [OP_NOT_END]: [TEXT],\n [OP_EQUAL]: [SELECT_MULTIPLE, SELECT_ONE, TEXT],\n [OP_NOT_EQUAL]: [SELECT_MULTIPLE, SELECT_ONE, TEXT],\n [OP_EMPTY]: [],\n [OP_NOT_EMPTY]: [],\n },\n },\n number: {\n single: {\n [OP_EQUAL]: [NUMBER, TEXT],\n [OP_NOT_EQUAL]: [NUMBER, TEXT],\n [OP_LESS]: [NUMBER, TEXT],\n [OP_LESS_EQUAL]: [NUMBER, TEXT],\n [OP_GREATER]: [NUMBER, TEXT],\n [OP_GREATER_EQUAL]: [NUMBER, TEXT],\n [OP_EMPTY]: [],\n [OP_NOT_EMPTY]: [],\n },\n multiple: {\n [OP_EQUAL]: [NUMBER, TEXT],\n [OP_NOT_EQUAL]: [NUMBER, TEXT],\n [OP_LESS]: [NUMBER, TEXT],\n [OP_LESS_EQUAL]: [NUMBER, TEXT],\n [OP_GREATER]: [NUMBER, TEXT],\n [OP_GREATER_EQUAL]: [NUMBER, TEXT],\n [OP_EMPTY]: [],\n [OP_NOT_EMPTY]: [],\n },\n },\n date: {\n single: {\n [OP_EQUAL]: [DATE, TEXT],\n [OP_NOT_EQUAL]: [DATE, TEXT],\n [OP_LESS]: [DATE, TEXT],\n [OP_LESS_EQUAL]: [DATE, TEXT],\n [OP_GREATER]: [DATE, TEXT],\n [OP_GREATER_EQUAL]: [DATE, TEXT],\n [OP_EMPTY]: [],\n [OP_NOT_EMPTY]: [],\n },\n multiple: {\n [OP_EQUAL]: [DATE, TEXT],\n [OP_NOT_EQUAL]: [DATE, TEXT],\n [OP_LESS]: [DATE, TEXT],\n [OP_LESS_EQUAL]: [DATE, TEXT],\n [OP_GREATER]: [DATE, TEXT],\n [OP_GREATER_EQUAL]: [DATE, TEXT],\n [OP_EMPTY]: [],\n [OP_NOT_EMPTY]: [],\n },\n },\n};\n\nexport const RENDER_INDEX_CSS_VARIABLE = `--ad-list-renderindex`;\n\nwindow.CSS?.registerProperty?.({\n name: RENDER_INDEX_CSS_VARIABLE,\n syntax: '<number>',\n inherits: false,\n initialValue: '0',\n});\n", "import { generateSelectors } from '@adartem/adlib-utils';\n\nimport { ELEMENTS, MODULE_KEY, SETTINGS } from './constants';\n\nexport const {\n getElementSelector,\n queryElement,\n queryAllElements,\n getSettingSelector,\n getSettingAttributeName,\n getClosestElement,\n getAttribute,\n hasAttributeValue,\n getInstance,\n getInstanceSelector,\n getPresenceSelector,\n} = generateSelectors(MODULE_KEY, ELEMENTS, SETTINGS);\n\nexport const CUSTOM_VALUE_ATTRIBUTE = getSettingAttributeName('value');\n\n/**\n * @returns The split separator for the element.\n * @param element\n */\nexport const getSplitSeparator = (element: Element) => {\n const rawSplitSeparator = getAttribute(element, 'split');\n\n const splitSeparator = rawSplitSeparator === 'true' ? ' ' : rawSplitSeparator;\n return splitSeparator;\n};\n", "import {\n CMS_CSS_CLASSES,\n type CollectionEmptyElement,\n type CollectionItemElement,\n type CollectionListElement,\n type CollectionListWrapperElement,\n type PageCountElement,\n type PaginationButtonElement,\n type PaginationWrapperElement,\n} from '@adartem/adlib-utils';\n\nimport type { ELEMENTS } from './constants';\nimport { getElementSelector } from './selectors';\n\nexport const CMS_CSS_SELECTORS = {\n wrapper: `.${CMS_CSS_CLASSES.wrapper}`,\n list: `.${CMS_CSS_CLASSES.list}`,\n item: `.${CMS_CSS_CLASSES.item}`,\n 'pagination-wrapper': `.${CMS_CSS_CLASSES.paginationWrapper}`,\n 'pagination-next': `.${CMS_CSS_CLASSES.paginationNext}`,\n 'pagination-previous': `.${CMS_CSS_CLASSES.paginationPrevious}`,\n 'page-count': `.${CMS_CSS_CLASSES.pageCount}`,\n empty: `.${CMS_CSS_CLASSES.emptyState}`,\n} satisfies Partial<Record<(typeof ELEMENTS)[number], string>>;\n\n/**\n * @returns A CSS selector for a CMS element.\n * @param key\n * @param options\n */\nexport const getCMSElementSelector = (\n key: keyof typeof CMS_CSS_SELECTORS,\n options?: Parameters<typeof getElementSelector>[1],\n) => {\n return `:is(${CMS_CSS_SELECTORS[key]}, ${getElementSelector(key, options)})`;\n};\n\n/**\n * This helper is intended to allow users setting the selectors to either the `Collection List Wrapper` or the `Collection List` elements.\n * This way there will never be any misunderstanding about the setup.\n * @param referenceElement The element or selector of the element.\n * @param target The requested element/elements. It can be either the `Collection List Wrapper`, the `Collection List` or all the `Collection Item` elements.\n * @param page The page document.\n * @returns The specified collection element/elements.\n */\nexport function getCollectionElements(\n referenceElement: Element,\n target: 'page-count',\n): PageCountElement | null;\nexport function getCollectionElements(\n referenceElement: Element,\n target: 'pagination-next' | 'pagination-previous',\n): PaginationButtonElement | null;\nexport function getCollectionElements(\n referenceElement: Element,\n target: 'pagination-wrapper',\n): PaginationWrapperElement | null;\nexport function getCollectionElements(\n referenceElement: Element,\n target: 'empty',\n): CollectionEmptyElement | null;\nexport function getCollectionElements(\n referenceElement: Element,\n target: 'item',\n): CollectionItemElement[];\nexport function getCollectionElements(\n referenceElement: Element,\n target: 'list',\n): CollectionListElement | null;\nexport function getCollectionElements(\n referenceElement: Element,\n target: 'wrapper',\n): CollectionListWrapperElement | null;\nexport function getCollectionElements(\n referenceElement: Element,\n target: keyof typeof CMS_CSS_SELECTORS,\n):\n | CollectionListWrapperElement\n | CollectionListElement\n | CollectionItemElement[]\n | PaginationButtonElement\n | PageCountElement\n | CollectionEmptyElement\n | null {\n const collectionListWrapper = referenceElement.closest<CollectionListWrapperElement>(\n getCMSElementSelector('wrapper'),\n );\n if (!collectionListWrapper) return null;\n\n const collectionList = collectionListWrapper.querySelector<CollectionListElement>(\n getCMSElementSelector('list'),\n );\n\n if (target === 'wrapper') {\n return collectionListWrapper;\n }\n if (target === 'list') {\n return collectionList;\n }\n if (target === 'item') {\n return [\n ...(collectionList?.querySelectorAll<CollectionItemElement>(\n `:scope > ${getCMSElementSelector(target)}`,\n ) || []),\n ];\n }\n if (target === 'page-count') {\n return collectionListWrapper.querySelector<PageCountElement>(getCMSElementSelector(target));\n }\n if (target === 'empty') {\n return collectionListWrapper.querySelector<CollectionListWrapperElement>(\n `:scope > ${getCMSElementSelector(target)}`,\n );\n }\n if (target === 'pagination-wrapper') {\n return collectionListWrapper.querySelector<PaginationWrapperElement>(\n getCMSElementSelector(target),\n );\n }\n\n return collectionListWrapper.querySelector<PaginationButtonElement>(\n getCMSElementSelector(target),\n );\n}\n\n/**\n * @returns All the `Collection List Wrapper` elements in the page.\n * @param page\n */\nexport const getAllCollectionListWrappers = (page: Document = document) => [\n ...page.querySelectorAll<CollectionListWrapperElement>(getCMSElementSelector('wrapper')),\n];\n", "/**\n * Extracts the {@link URLSearchParams} from a list's Pagination Button.\n * @param paginationButton A {@link PaginationButtonElement}.\n *\n * @returns The search params as {@link Object.entries}, if the button is valid.\n */\nexport const getPaginationSearchEntries = (paginationButton: HTMLAnchorElement) => {\n const { href } = paginationButton;\n\n const { searchParams } = new URL(href);\n\n const searchEntries = [...searchParams.entries()];\n return searchEntries;\n};\n", "import {\n type CollectionItemElement,\n isHTMLAnchorElement,\n normalizeDate,\n normalizeNumber,\n} from '@adartem/adlib-utils';\n\nimport type { FieldValue, FilterTaskMatchedFields } from '../filter/types';\nimport { getCMSElementSelector } from '../utils/dom';\nimport { getAttribute, getSettingSelector, queryElement } from '../utils/selectors';\nimport type { List } from './List';\n\ndeclare module '@vue/reactivity' {\n export interface RefUnwrapBailTypes {\n adListItem: ListItem;\n }\n}\n\nexport type ListItemField =\n | {\n type: 'text';\n rawValue: string | string[];\n value: string | string[];\n }\n | {\n type: 'date';\n rawValue: string | string[];\n value: Date | Date[];\n }\n | {\n type: 'number';\n rawValue: string | string[];\n value: number | number[];\n };\n\ntype ListItemFieldElements = {\n [fieldKey: string]: Array<{\n value: FieldValue;\n element: HTMLElement;\n originalHTML: string;\n }>;\n};\n\ntype ListItemFields = {\n [fieldKey: string]: ListItemField;\n};\n\n/**\n * An instance of a list item.\n */\nexport class ListItem {\n public readonly id = crypto.randomUUID();\n\n /**\n * The URL of the item's `Template Page`.\n */\n public readonly href?: string;\n\n /**\n * The URL of the item's `Template Page` as a `URL` object.\n */\n public readonly url?: URL;\n\n /**\n * Defines the class to apply before rendering the item.\n */\n public readonly startingClass: string;\n\n /**\n * Defines the class to apply when highlighting matched fields.\n */\n public readonly highlightClass: string;\n\n /**\n * Defines if the item's transitions should be staggered.\n */\n public readonly stagger?: number;\n\n /**\n * The item's properties.\n * Defined by {@link ListItemFields}.\n */\n public fields: ListItemFields = {};\n\n /**\n * The item's field elements.\n */\n public fieldElements: ListItemFieldElements = {};\n\n /**\n * Defines an awaitable Promise that resolves when the item's nesting is complete.\n */\n public nesting?: Promise<void>;\n\n /**\n * @param element The DOM element of the item.\n * @param listElement The parent Collection List.\n */\n constructor(\n /**\n * The `Collection Item` element.\n */\n public readonly element: CollectionItemElement,\n\n /**\n * The `Collection List` parent element.\n */\n public readonly list: List,\n\n /**\n * The element's current index in the rendered DOM.\n */\n public currentIndex?: number,\n ) {\n let link = queryElement<HTMLAnchorElement>('item-link', { scope: element });\n\n if (!isHTMLAnchorElement(link)) {\n link = element.querySelector('a');\n }\n\n this.href = link?.href;\n this.highlightClass = getAttribute(element, 'highlightclass');\n this.startingClass = getAttribute(element, 'startingclass');\n this.stagger = getAttribute(element, 'stagger');\n\n if (this.href) {\n try {\n this.url = new URL(this.href, window.location.origin);\n } catch {\n //\n }\n }\n\n this.collectFields();\n }\n\n /**\n * Collects the field values from child elements and stores them.\n */\n public collectFields() {\n this.fields = {};\n this.fieldElements = {};\n\n const fieldSelector = getSettingSelector('field');\n const fieldElements = [...this.element.querySelectorAll<HTMLElement>(fieldSelector)];\n\n for (const element of fieldElements) {\n const fieldKey = getAttribute(element, 'field')?.trim();\n if (!fieldKey) continue;\n\n const rawValue = element.textContent;\n if (!rawValue) continue;\n\n const type = (getAttribute(element, 'fieldtype', { filterInvalid: true }) ||\n 'text') as ListItemField['type'];\n const value =\n type === 'number'\n ? normalizeNumber(rawValue)\n : type === 'date'\n ? normalizeDate(rawValue)\n : rawValue.trim();\n\n if (value === undefined) continue;\n\n this.fieldElements[fieldKey] ||= [];\n this.fieldElements[fieldKey].push({ value, element, originalHTML: element.innerHTML });\n\n const listSelector = getCMSElementSelector('list');\n const parentList = element.closest(listSelector);\n const isInsideNestedList =\n this.list.listElement && parentList && parentList !== this.list.listElement;\n\n if (isInsideNestedList) {\n this.fields[fieldKey] ||= { type, rawValue: [], value: [] };\n\n const field = this.fields[fieldKey];\n\n if (field.type !== type) continue;\n if (!Array.isArray(field.value)) continue;\n if (!Array.isArray(field.rawValue)) continue;\n if (field.value.some((v) => v === value)) continue;\n if (field.rawValue.some((v) => v === rawValue)) continue;\n\n // @ts-expect-error - Value is guaranteed to be the right type\n field.value.push(value);\n field.rawValue.push(rawValue);\n } else {\n // @ts-expect-error - Value is guaranteed to be the right type\n this.fields[fieldKey] ||= { fieldKey, type, rawValue, value };\n }\n }\n }\n\n /**\n * Highlights the item's fields based on the matching values.\n * @param matchedFields\n */\n public highlight(matchedFields: FilterTaskMatchedFields) {\n if (!this.list.highlight) return;\n\n for (const fieldKey in this.fields) {\n const fieldElementsData = this.fieldElements[fieldKey];\n if (!fieldElementsData) continue;\n\n // If the field is not matched, reset the original HTML\n const matchedField = matchedFields[fieldKey];\n if (!matchedField) {\n for (const { element, originalHTML } of fieldElementsData) {\n element.innerHTML = originalHTML;\n }\n\n continue;\n }\n\n // If matched, highlight the corresponding elements\n for (const { value, element, originalHTML } of fieldElementsData) {\n element.innerHTML = originalHTML;\n\n const match = matchedField.find(({ fieldValue }) => fieldValue === value);\n if (!match) continue;\n\n const regex = new RegExp(match.filterValue, 'gi');\n\n const walkNodes = (parent: Node) => {\n for (const node of Array.from(parent.childNodes)) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n walkNodes(node);\n continue;\n }\n\n if (node.nodeType !== Node.TEXT_NODE) continue;\n\n const text = node.textContent || '';\n\n if (!regex.test(text)) continue;\n\n const template = document.createElement('template');\n template.innerHTML = text.replace(\n regex,\n `<span class=\"${this.highlightClass}\">$&</span>`,\n );\n\n node.replaceWith(template.content);\n }\n };\n\n walkNodes(element);\n }\n }\n }\n}\n", "import {\n CMS_CSS_CLASSES,\n fetchPage,\n isHTMLAnchorElement,\n isNumber,\n type OptionsValueMap,\n restartWebflow,\n type WebflowModule,\n} from '@adartem/adlib-utils';\nimport {\n computed,\n effect,\n type Ref,\n ref,\n type ShallowRef,\n shallowRef,\n watch,\n} from '@vue/reactivity';\n\nimport type { AllFieldsData, Filters } from '../filter/types';\nimport type { Sorting } from '../sort/types';\nimport { OPTIONS, RENDER_INDEX_CSS_VARIABLE } from '../utils/constants';\nimport {\n getAllCollectionListWrappers,\n getCMSElementSelector,\n getCollectionElements,\n} from '../utils/dom';\nimport { getPaginationSearchEntries } from '../utils/pagination';\nimport { getInstance, queryAllElements, queryElement } from '../utils/selectors';\nimport { listInstancesStore } from '../utils/store';\nimport { ListItem } from './ListItem';\n\ntype HookKey =\n | 'start'\n | 'filter'\n | 'sort'\n | 'static'\n | 'pagination'\n | 'beforeRender'\n | 'render'\n | 'afterRender';\ntype HookCallback = (items: ListItem[]) => ListItem[] | Promise<ListItem[]> | void | Promise<void>;\ntype Hooks = {\n [key in HookKey]: {\n previous?: HookKey;\n index: number;\n callbacks: HookCallback[];\n result: ShallowRef<ListItem[]>;\n };\n};\n\nexport class List {\n /**\n * A signal holding all {@link ListItem} instances of the list.\n */\n public readonly items = shallowRef<ListItem[]>([]);\n\n /**\n * Contains all lifecycle hooks with their callbacks and last result.\n */\n public readonly hooks: Hooks = {\n start: {\n index: 0,\n callbacks: [],\n result: shallowRef([]),\n },\n\n filter: {\n index: 1,\n previous: 'start',\n callbacks: [],\n result: shallowRef([]),\n },\n\n sort: {\n index: 2,\n previous: 'filter',\n callbacks: [],\n result: shallowRef([]),\n },\n\n static: {\n index: 3,\n previous: 'sort',\n callbacks: [],\n result: shallowRef([]),\n },\n\n pagination: {\n index: 4,\n previous: 'static',\n callbacks: [],\n result: shallowRef([]),\n },\n\n beforeRender: {\n index: 5,\n previous: 'pagination',\n callbacks: [],\n result: shallowRef([]),\n },\n\n render: {\n index: 6,\n previous: 'beforeRender',\n callbacks: [],\n result: shallowRef([]),\n },\n\n afterRender: {\n index: 7,\n previous: 'render',\n callbacks: [],\n result: shallowRef([]),\n },\n };\n\n /**\n * The current hook being executed.\n */\n public currentHook?: HookKey;\n\n /**\n * The hook that triggered the current lifecycle.\n */\n public triggeredHook?: HookKey;\n\n /**\n * A queued hook that will be executed after the current lifecycle.\n */\n public queuedHook?: HookKey;\n\n /**\n * A set holding all rendered {@link ListItem} instances.\n */\n public renderedItems: Set<ListItem> = new Set();\n\n /**\n * The instance.\n */\n public readonly instance: string | null;\n\n /**\n * The `Collection List` element.\n */\n public readonly listElement: HTMLElement | null;\n\n /**\n * The `Pagination` wrapper element.\n */\n public readonly paginationWrapperElement?: HTMLElement | null;\n\n /**\n * The `Page Count` element.\n */\n public readonly paginationCountElement?: HTMLElement | null;\n\n /**\n * All the `Previous` buttons defined by the user or native Webflow CMS.\n * TODO: the way we're assigning to this shallowRef property may not trigger reactivity\n */\n public readonly allPaginationPreviousElements = shallowRef<Set<HTMLElement>>(new Set());\n\n /**\n * The native Webflow CMS `Previous` button.\n */\n public readonly paginationPreviousCMSElement = computed(() =>\n [...this.allPaginationPreviousElements.value]\n .filter(isHTMLAnchorElement)\n .find((paginationPreviousElement) =>\n paginationPreviousElement.classList.contains(CMS_CSS_CLASSES['paginationPrevious']),\n ),\n );\n\n /**\n * The `Next` buttons defined by the user or native Webflow CMS.\n * TODO: the way we're assigning to this shallowRef property may not trigger reactivity\n */\n public readonly allPaginationNextElements = shallowRef<Set<HTMLElement>>(new Set());\n\n /**\n * The native Webflow CMS `Next` button.\n */\n public readonly paginationNextCMSElement = computed(() =>\n [...this.allPaginationNextElements.value]\n .filter(isHTMLAnchorElement)\n .find((paginationNextElement) =>\n paginationNextElement.classList.contains(CMS_CSS_CLASSES['paginationNext']),\n ),\n );\n\n /**\n * The `Empty State` element.\n */\n public readonly emptyElement = ref<HTMLElement | null | undefined>();\n\n /**\n * An initial element to display when there are no filters applied.\n */\n public readonly initialElement?: HTMLElement | null;\n\n /**\n * A custom loader element.\n */\n public readonly loaderElement?: HTMLElement | null;\n\n /**\n * An element that displays the total amount of items in the list.\n */\n public readonly itemsCountElement?: HTMLElement | null;\n\n /**\n * An element that displays the total amount of items in the list after filtering.\n */\n public readonly resultsCountElement?: HTMLElement | null;\n\n /**\n * An element that displays the amount of visible items.\n */\n public readonly visibleCountElement?: HTMLElement | null;\n\n /**\n * An element that displays the lower range of visible items.\n */\n public readonly visibleCountFromElement?: HTMLElement | null;\n\n /**\n * An element that displays the upper range of visible items.\n */\n public readonly visibleCountToElement?: HTMLElement | null;\n\n /**\n * The scroll anchor element.\n */\n public readonly scrollAnchorElement?: HTMLElement | null;\n\n /**\n * A custom scroll anchor element for filter actions.\n */\n public readonly scrollAnchorFilterElement?: HTMLElement | null;\n\n /**\n * A custom scroll anchor element for sort actions.\n */\n public readonly scrollAnchorSortElement?: HTMLElement | null;\n\n /**\n * A custom scroll anchor element for pagination actions.\n */\n public readonly scrollAnchorPaginationElement?: HTMLElement | null;\n\n /**\n * Defines the original amount of items per page.\n */\n public initialItemsPerPage: number;\n\n /**\n * Defines a custom amount of items per page.\n */\n public customItemsPerPage?: number;\n\n /**\n * Defines the amount of items per page.\n */\n public readonly itemsPerPage: Ref<number>;\n\n /**\n * Defines the total amount of pages in the list.\n */\n public readonly totalPages = computed(() =>\n Math.ceil(this.hooks.static.result.value.length / this.itemsPerPage.value),\n );\n\n /**\n * Defines the current page in `Pagination` mode.\n */\n public readonly currentPage = ref(1);\n\n /**\n * Defines the active filters.\n */\n public readonly filters = ref<Filters>({\n groups: [],\n });\n\n /**\n * Contains all the fields data of the list.\n */\n public readonly allFieldsData = computed(() =>\n this.items.value.reduce<AllFieldsData>((acc, item) => {\n for (const [key, field] of Object.entries(item.fields)) {\n acc[key] ||= {\n type: field.type,\n valueType: Array.isArray(field.value) ? 'multiple' : 'single',\n rawValues: new Set<string>(),\n };\n\n const fieldRawValues = Array.isArray(field.rawValue) ? field.rawValue : [field.rawValue];\n\n for (const rawValue of fieldRawValues) {\n acc[key].rawValues.add(rawValue);\n }\n }\n\n return acc;\n }, {}),\n );\n\n /**\n * Defines the active sorting.\n */\n public readonly sorting = ref<Sorting>({});\n\n /**\n * Defines if the list is currently loading items.\n */\n public readonly loading = ref(false);\n\n /**\n * Defines if the user has interacted with the filters.\n */\n public readonly hasInteracted = computed(\n () =>\n this.sorting.value.interacted ||\n this.filters.value.groups.some((group) =>\n group.conditions.some((condition) => condition.interacted),\n ),\n );\n\n /**\n * Defines if the list has any filters applied.\n */\n public readonly hasFilters = computed(() =>\n this.filters.value.groups.some((group) =>\n group.conditions.some((condition) => !!condition.value?.length),\n ),\n );\n\n /**\n * Defines if the pagination query param should be added to the URL when switching pages.\n * @example '?5f7457b3_page=1'\n */\n public readonly showQuery: boolean;\n\n /**\n * Defines if the matched fields when filtering should be highlighted.\n */\n public readonly highlight?: boolean;\n\n /**\n * Defines if loaded Items can be cached using IndexedDB after fetching them.\n */\n public readonly cache: boolean;\n\n /**\n * Defines the Webflow modules to restart after rendering.\n */\n public readonly webflowModules = new Set<WebflowModule>();\n\n /**\n * Defines the URL query key for the paginated pages.\n * @example '5f7457b3_page'\n */\n public paginationSearchParam?: string;\n\n /**\n * Defines the query prefix for all the list's query params.\n * If pagination query exists, it is used as the prefix: '5f7457b3_page' => '5f7457b3'\n * If not, it falls back to the list's instance or the list's index.\n */\n public searchParamsPrefix?: string;\n\n /**\n * Defines an awaitable Promise that resolves once the pagination data (`currentPage` + `paginationSearchParam`) has been retrieved.\n */\n public loadingSearchParamsData?: Promise<void>;\n\n /**\n * Defines an awaitable Promise that resolves once the pagination elements have been loaded.\n */\n public loadingPaginationElements?: Promise<void>;\n\n /**\n * Defines an awaitable Promise that resolves once all the Webflow CMS paginated items have been loaded.\n */\n public loadingPaginatedItems?: Promise<void>;\n\n /**\n * Defines if the filter field values are being collected from the DOM or event listeners are being set.\n */\n public readingFilters?: boolean;\n\n /**\n * Defines if the filter field values are being set to the DOM.\n */\n public settingFilters?: boolean;\n\n /**\n * A function to destroy the instance and clean up all resources.\n */\n public destroy = () => {};\n\n /**\n * `@vue/reactivity`: [watch](https://vuejs.org/api/reactivity-core.html#watch)\n */\n public watch = watch;\n\n /**\n * `@vue/reactivity`: [watch](https://vuejs.org/api/reactivity-core.html#watcheffect)\n */\n public effect = effect;\n\n constructor(\n /**\n * The `Collection List Wrapper` element.\n */\n public readonly wrapperElement: HTMLElement,\n\n /**\n * The index of the list in the page.\n */\n public readonly pageIndex: number,\n\n /**\n * Defines if the instance should be reactive.\n * If set to `false`, the instance will not load any CMS data nor will it trigger any hooks.\n */\n reactive = true,\n\n /**\n * The resolved options for this list instance.\n */\n public readonly options: OptionsValueMap<typeof OPTIONS> = {} as OptionsValueMap<\n typeof OPTIONS\n >,\n ) {\n // Collect elements\n const listElement = getCollectionElements(wrapperElement, 'list');\n this.listElement = listElement;\n\n const instance = getInstance(listElement || wrapperElement);\n this.instance = instance;\n\n this.paginationWrapperElement = getCollectionElements(wrapperElement, 'pagination-wrapper');\n this.paginationCountElement = getCollectionElements(wrapperElement, 'page-count');\n\n this.emptyElement.value =\n getCollectionElements(wrapperElement, 'empty') ||\n queryElement<HTMLElement>('empty', { instance });\n this.initialElement = queryElement('initial', { instance });\n this.loaderElement = queryElement('loader', { instance });\n this.itemsCountElement = queryElement('items-count', { instance });\n this.visibleCountElement = queryElement('visible-count', { instance });\n this.visibleCountFromElement = queryElement('visible-count-from', { instance });\n this.visibleCountToElement = queryElement('visible-count-to', { instance });\n this.resultsCountElement = queryElement('results-count', { instance });\n this.scrollAnchorElement = queryElement('scroll-anchor', { instance });\n this.scrollAnchorFilterElement = queryElement('scroll-anchor-filter', { instance });\n this.scrollAnchorSortElement = queryElement('scroll-anchor-sort', { instance });\n this.scrollAnchorPaginationElement = queryElement('scroll-anchor-pagination', { instance });\n this.cache = options.cache ?? true;\n this.showQuery = options.showquery ?? false;\n this.highlight = options.highlight ?? false;\n\n // Get pagination next elements\n const paginationNextElement = getCollectionElements(wrapperElement, 'pagination-next');\n if (paginationNextElement) {\n this.allPaginationNextElements.value.add(paginationNextElement);\n }\n\n queryAllElements<HTMLAnchorElement>('pagination-next', { instance }).forEach((element) =>\n this.allPaginationNextElements.value.add(element),\n );\n\n // Get pagination previous elements\n const paginationPreviousElement = getCollectionElements(wrapperElement, 'pagination-previous');\n if (paginationPreviousElement) {\n this.allPaginationPreviousElements.value.add(paginationPreviousElement);\n }\n\n queryAllElements<HTMLAnchorElement>('pagination-previous', { instance }).forEach((element) =>\n this.allPaginationPreviousElements.value.add(element),\n );\n\n // Collect items\n const collectionItemElements = getCollectionElements(wrapperElement, 'item');\n\n this.customItemsPerPage = options.itemsperpage || 0;\n this.initialItemsPerPage = this.customItemsPerPage || collectionItemElements.length;\n this.itemsPerPage = ref(this.initialItemsPerPage);\n\n if (listElement) {\n const items = collectionItemElements.map(\n (element, index) => new ListItem(element, this, index),\n );\n\n this.items.value = items;\n this.renderedItems = new Set(items);\n }\n\n // Init reactivity\n if (!reactive) return;\n\n // Extract pagination data\n this.loadingSearchParamsData = this.#getCMSPaginationData().then((paginationSearchParam) => {\n this.searchParamsPrefix = paginationSearchParam?.split('_')[0];\n });\n\n this.loadingPaginationElements = this.#getCMSPaginationElements();\n\n // Init hooks and element effects\n const elementsCleanup = this.#initElements();\n const hooksCleanup = this.#initHooks();\n\n // Define the destroy function\n this.destroy = () => {\n hooksCleanup();\n elementsCleanup();\n\n listInstancesStore.delete(this.wrapperElement);\n };\n }\n\n /**\n * Initializes the lifecycle hooks.\n */\n #initHooks() {\n const cleanups: (() => void)[] = [];\n\n // Add render hook\n this.addHook('render', async (items) => {\n let renderIndex = 0;\n\n const renderPromise = Promise.all(\n items.map((item, index) => {\n const previousItem = items[index - 1];\n\n const render = async () => {\n item.element.style.setProperty(RENDER_INDEX_CSS_VARIABLE, `${renderIndex}`);\n item.element.classList.add(item.startingClass);\n\n if (item.stagger) {\n item.element.style.transitionDelay = `${renderIndex * item.stagger}ms`;\n }\n\n if (previousItem) {\n previousItem.element.after(item.element);\n } else {\n this.listElement?.prepend(item.element);\n }\n\n item.currentIndex = index;\n renderIndex += 1;\n\n await new Promise(requestAnimationFrame);\n\n item.element.classList.remove(item.startingClass);\n\n const animations = item.element.getAnimations({ subtree: true });\n\n try {\n await Promise.all(animations.map((a) => a.finished));\n } catch {\n //\n }\n\n item.element.style.removeProperty(RENDER_INDEX_CSS_VARIABLE);\n\n if (item.stagger) {\n item.element.style.transitionDelay = '';\n }\n };\n\n // Is rendered\n if (isNumber(item.currentIndex)) {\n this.renderedItems.delete(item);\n\n if (item.currentIndex !== index) {\n return render();\n }\n }\n\n // Is not rendered\n else {\n return render();\n }\n }),\n );\n\n // Remove items that should not be rendered anymore\n this.renderedItems.forEach((renderedItem) => {\n renderedItem.element.remove();\n renderedItem.currentIndex = undefined;\n });\n\n this.renderedItems = new Set(items);\n\n await renderPromise;\n\n return items;\n });\n\n // Restart Webflow modules\n this.addHook('afterRender', async () => {\n restartWebflow([...this.webflowModules]);\n });\n\n // Start hooks chain\n const initHook = (key: HookKey) => {\n const { previous } = this.hooks[key];\n\n if (!previous) {\n const cleanup = watch(this.items, () => this.triggerHook(key), { immediate: true });\n\n cleanups.push(cleanup);\n return;\n }\n\n const cleanup = watch(this.hooks[previous].result, async () => {\n await this.#runHook(key);\n\n if (key !== 'afterRender') return;\n\n this.currentHook = undefined;\n this.triggeredHook = undefined;\n\n if (this.queuedHook) {\n const { queuedHook } = this;\n\n this.queuedHook = undefined;\n this.triggerHook(queuedHook);\n }\n });\n\n cleanups.push(cleanup);\n\n initHook(previous);\n };\n\n initHook('afterRender');\n\n return () => {\n cleanups.forEach((cleanup) => cleanup());\n cleanups.length = 0;\n };\n }\n\n /**\n * Initializes the elements side effects.\n */\n #initElements() {\n // items-count\n const itemsCountRunner = effect(() => {\n if (!this.itemsCountElement) return;\n\n this.itemsCountElement.textContent = `${this.items.value.length}`;\n });\n\n // initial\n const initialElementRunner = effect(() => {\n if (!this.initialElement) return;\n\n const showInitial = !this.hasInteracted.value || !this.hasFilters.value;\n\n this.wrapperElement.style.display = showInitial ? 'none' : '';\n this.initialElement.style.display = showInitial ? '' : 'none';\n });\n\n // loader\n const loaderElementRunner = effect(() => {\n if (!this.loaderElement) return;\n\n this.loaderElement.style.display = this.loading.value ? '' : 'none';\n });\n\n // empty\n const emptyElementCleanup = watch(\n [this.hooks.render.result, this.emptyElement],\n ([items, emptyElement]: [ListItem[], HTMLElement | null | undefined]) => {\n const hasItems = items.length > 0;\n\n if (this.listElement) {\n this.listElement.style.display = hasItems ? '' : 'none';\n }\n\n if (emptyElement) {\n emptyElement.style.display = hasItems ? 'none' : '';\n }\n },\n );\n\n return () => {\n itemsCountRunner.effect.stop();\n initialElementRunner.effect.stop();\n loaderElementRunner.effect.stop();\n emptyElementCleanup();\n };\n }\n\n /**\n * Collects the pagination query info.\n * @returns A Promise that resolves once the pagination query info has been collected.\n */\n async #getCMSPaginationData() {\n const paginationButton =\n this.paginationNextCMSElement.value || this.paginationPreviousCMSElement.value;\n if (!paginationButton) return;\n\n const searchEntries = getPaginationSearchEntries(paginationButton);\n if (!searchEntries.length) return;\n\n let paginationSearchParam: string | undefined;\n let rawTargetPage: string | undefined;\n\n if (searchEntries.length === 1) {\n const [pageEntry] = searchEntries;\n\n if (!pageEntry) return;\n\n [paginationSearchParam, rawTargetPage] = pageEntry;\n }\n\n // If there's more than one `searchParam` we need to fetch the original page to find the correspondent pageQuery.\n else {\n const { origin, pathname } = location;\n\n const initialPage = await fetchPage(origin + pathname);\n if (!initialPage) return;\n\n const initialCollectionListWrappers = initialPage.querySelectorAll(\n getCMSElementSelector('wrapper'),\n );\n\n const initialCollectionListWrapper = initialCollectionListWrappers[this.pageIndex];\n if (!initialCollectionListWrapper) return;\n\n const initialPaginationNext = getCollectionElements(\n initialCollectionListWrapper,\n 'pagination-next',\n );\n if (!initialPaginationNext) return;\n\n const [initialPageEntry] = getPaginationSearchEntries(initialPaginationNext) || [];\n if (!initialPageEntry) return;\n\n [paginationSearchParam] = initialPageEntry;\n\n [, rawTargetPage] = searchEntries.find(([query]) => query === paginationSearchParam) || [];\n }\n\n if (!paginationSearchParam || !rawTargetPage) return;\n\n const targetPage = parseInt(rawTargetPage);\n const currentPage = this.paginationNextCMSElement.value ? targetPage - 1 : targetPage + 1;\n\n this.paginationSearchParam = paginationSearchParam;\n this.currentPage.value = currentPage;\n\n return paginationSearchParam;\n }\n\n /**\n * Collects the missing pagination elements.\n * @returns A Promise that resolves once the missing pagination elements have been collected.\n */\n async #getCMSPaginationElements() {\n await this.loadingSearchParamsData;\n\n const { origin, pathname } = window.location;\n const {\n wrapperElement,\n listElement,\n paginationWrapperElement,\n paginationNextCMSElement,\n paginationPreviousCMSElement,\n emptyElement,\n currentPage,\n paginationSearchParam,\n pageIndex,\n } = this;\n\n await Promise.all([\n // Pagination next\n (async () => {\n if (paginationNextCMSElement.value) return;\n\n const $currentPage = currentPage.value;\n if (!$currentPage || $currentPage === 1) return;\n\n if (!paginationSearchParam) return;\n\n const page = await fetchPage(\n `${origin}${pathname}?${paginationSearchParam}=${$currentPage - 1}`,\n );\n if (!page) return;\n\n const allCollectionWrappers = getAllCollectionListWrappers(page);\n const collectionListWrapper = allCollectionWrappers[pageIndex];\n if (!collectionListWrapper) return;\n\n const paginationNext = getCollectionElements(collectionListWrapper, 'pagination-next');\n if (!paginationNext) return;\n\n const anchor =\n paginationPreviousCMSElement.value?.parentElement || paginationWrapperElement;\n if (!anchor) return;\n\n paginationNext.style.display = 'none';\n\n anchor.append(paginationNext);\n this.allPaginationNextElements.value.add(paginationNext);\n })(),\n\n // Pagination previous & Empty state\n (async () => {\n if (paginationPreviousCMSElement.value && emptyElement.value) return;\n if (!paginationSearchParam) return;\n\n const page = await fetchPage(`${origin}${pathname}?${paginationSearchParam}=9999`);\n if (!page) return;\n\n const allCollectionWrappers = getAllCollectionListWrappers(page);\n const collectionListWrapper = allCollectionWrappers[pageIndex];\n if (!collectionListWrapper) return;\n\n const paginationPrevious = getCollectionElements(\n collectionListWrapper,\n 'pagination-previous',\n );\n const empty = getCollectionElements(collectionListWrapper, 'empty');\n\n // Pagination previous\n if (paginationPrevious && !paginationPreviousCMSElement.value) {\n const anchor = paginationNextCMSElement.value?.parentElement || paginationWrapperElement;\n if (!anchor) return;\n\n paginationPrevious.style.display = 'none';\n\n anchor.prepend(paginationPrevious);\n this.allPaginationPreviousElements.value.add(paginationPrevious);\n }\n\n // Empty state\n if (empty && !emptyElement.value) {\n empty.style.display = 'none';\n\n wrapperElement.insertBefore(empty, listElement?.nextSibling || null);\n emptyElement.value = empty;\n }\n })(),\n ]);\n }\n\n /**\n * Adds a hook.\n * @param key\n * @param callback\n */\n addHook(key: HookKey, callback: HookCallback) {\n const hook = this.hooks[key];\n\n hook.callbacks.push(callback);\n\n return () => {\n hook.callbacks = hook.callbacks.filter((cb) => cb !== callback);\n };\n }\n\n /**\n * Runs a hook.\n * @param key\n * @param scrollToAnchor\n */\n async #runHook(key: HookKey) {\n this.currentHook = key;\n\n const hook = this.hooks[key];\n\n const { previous } = hook;\n\n const previousHookResult = previous ? this.hooks[previous].result : undefined;\n\n let result = previousHookResult?.value || this.items.value;\n\n for (const callback of hook.callbacks) {\n result = (await callback(result)) || result;\n }\n\n hook.result.value = [...result];\n }\n\n /**\n * Triggers a hook.\n * @param key\n * @param options.scrollToAnchor\n */\n triggerHook(\n key: HookKey,\n {\n scrollToAnchor,\n resetCurrentPage,\n }: { scrollToAnchor?: boolean; resetCurrentPage?: boolean } = {},\n ) {\n if (this.currentHook) {\n const triggeredHookIndex = this.hooks[key].index;\n const currentHookIndex = this.hooks[this.currentHook].index;\n\n if (currentHookIndex >= triggeredHookIndex) {\n if (this.queuedHook) {\n const queuedHookIndex = this.hooks[this.queuedHook].index;\n this.queuedHook = triggeredHookIndex < queuedHookIndex ? key : this.queuedHook;\n } else {\n this.queuedHook = key;\n }\n }\n\n return;\n }\n\n this.triggeredHook = key;\n this.currentHook = key;\n\n if (scrollToAnchor) {\n this.scrollToAnchor(key);\n }\n\n if (resetCurrentPage) {\n this.currentPage.value = 1;\n }\n\n return this.#runHook(key);\n }\n\n /**\n * Creates a new {@link ListItem} instance.\n * @param itemElement The Collection Item element.\n * @returns The created {@link ListItem} instance.\n */\n createItem = (itemElement: HTMLElement) => new ListItem(itemElement, this);\n\n /**\n * Scrolls to the specified anchor based on the action provided.\n * @param key\n */\n scrollToAnchor(key?: HookKey) {\n const {\n scrollAnchorFilterElement,\n scrollAnchorSortElement,\n scrollAnchorPaginationElement,\n scrollAnchorElement,\n } = this;\n\n const anchor =\n (key === 'filter'\n ? scrollAnchorFilterElement\n : key === 'sort'\n ? scrollAnchorSortElement\n : key === 'pagination'\n ? scrollAnchorPaginationElement\n : scrollAnchorElement) || scrollAnchorElement;\n\n if (!anchor) return;\n\n anchor.scrollIntoView({ behavior: 'smooth' });\n }\n\n /**\n * Gets a search param from the URL using the list's search params prefix.\n * @param key\n * @param usePrefix Whether to use the list's search params prefix or not.\n * @returns The value of the search param or null if not found.\n */\n async getSearchParam(key: string, usePrefix = true) {\n await this.loadingSearchParamsData;\n\n const { searchParams } = new URL(location.href);\n\n if (!usePrefix) {\n return searchParams.get(key);\n }\n\n const prefixes = [this.instance, this.searchParamsPrefix, this.pageIndex.toString()];\n\n for (const prefix of prefixes) {\n if (!prefix) continue;\n\n const name = `${prefix}_${key}`;\n const value = searchParams.get(name);\n if (value) return value;\n }\n\n return null;\n }\n\n /**\n * @returns All search params from the URL using the list's search params prefix (if true).\n * @param usePrefix Whether to use the list's search params prefix or not.\n */\n async getAllSearchParams(usePrefix = true) {\n await this.loadingSearchParamsData;\n\n const { searchParams } = new URL(location.href);\n\n if (!usePrefix) {\n return [...searchParams.entries()];\n }\n\n const map = new Map<string, string>();\n const prefixes = [this.instance, this.searchParamsPrefix, this.pageIndex.toString()];\n\n for (const [key, value] of searchParams) {\n for (const prefix of prefixes) {\n if (!prefix) continue;\n if (!key.startsWith(`${prefix}_`)) continue;\n\n const unprefixedKey = key.replace(`${prefix}_`, '');\n map.set(unprefixedKey, value);\n break;\n }\n }\n\n return [...map.entries()];\n }\n\n /**\n * Sets a search param in the URL using the list's search params prefix.\n * @param key\n * @param value\n * @param options.usePrefix Whether to use a prefix to set the key.\n * @param options.useSearchParamsPrefix Whether to force the use of the search params as prefix over the instance name.\n */\n async setSearchParam(\n key: string,\n value: string | null | undefined,\n {\n usePrefix = true,\n useSearchParamsPrefix = false,\n }: { usePrefix?: boolean; useSearchParamsPrefix?: boolean } = {},\n ) {\n await this.loadingSearchParamsData;\n\n const url = new URL(location.href);\n\n let name = key;\n\n if (useSearchParamsPrefix) {\n name = `${this.searchParamsPrefix}_${key}`;\n } else if (usePrefix) {\n const prefix = this.instance || this.searchParamsPrefix || this.pageIndex.toString();\n name = `${prefix}_${key}`;\n }\n\n if (value) {\n url.searchParams.set(name, value);\n } else {\n url.searchParams.delete(name);\n }\n\n history.replaceState({}, '', url.toString());\n }\n\n /**\n * @returns The list element or wrapper element, whichever exists.\n */\n get listOrWrapper() {\n return this.listElement || this.wrapperElement;\n }\n}\n", "import {\n addListener,\n type FormField,\n getFormFieldWrapper,\n getRadioGroupInputs,\n isFormField,\n isHTMLInputElement,\n} from '@adartem/adlib-utils';\nimport { effect } from '@vue/reactivity';\n\nimport type { List } from '../components';\nimport { getAttribute, hasAttributeValue } from '../utils/selectors';\n\n/**\n * Handles the filter-specific elements like the list element, empty element, and results count element.\n * @param list\n * @returns A cleanup function.\n */\nexport const handleFilterElements = (list: List) => {\n const elementsRunner = effect(() => {\n const filteredItems = list.hooks.filter.result.value;\n\n // Results count\n if (list.resultsCountElement) {\n list.resultsCountElement.textContent = `${filteredItems.length}`;\n }\n });\n\n return () => elementsRunner.effect.stop();\n};\n\n/**\n * Handles submit events for filters form.\n * Handles the active class for form fields.\n * @param form\n * @returns A cleanup function.\n */\nexport const handleFiltersForm = (form: HTMLFormElement) => {\n const allowSubmit = hasAttributeValue(form, 'allowsubmit', 'true');\n\n const submitCleanup = addListener(form, 'submit', (e) => {\n if (allowSubmit) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n // Blur active input on mobile devices to close virtual keyboard\n const { activeElement } = document;\n\n const isTouch = matchMedia('(pointer: coarse)').matches;\n const isMobileUA = /Mobi|Android|iPhone|iPad/i.test(navigator.userAgent);\n\n const isVirtualKeyboardLikely = isTouch || isMobileUA;\n\n if (isVirtualKeyboardLikely && isHTMLInputElement(activeElement)) {\n activeElement.blur();\n }\n });\n\n const changeCleanup = addListener(form, 'change', (e) => {\n const { target } = e;\n\n if (!isFormField(target)) return;\n\n setActiveClass(target);\n });\n\n return () => {\n submitCleanup();\n changeCleanup();\n };\n};\n\n/**\n * Sets the active class to a form field.\n * @param formField\n */\nconst setActiveClass = (formField: FormField) => {\n const activeClass = getAttribute(formField, 'activeclass');\n\n switch (formField.type) {\n case 'checkbox': {\n const { checked } = formField as HTMLInputElement;\n const target = getFormFieldWrapper(formField);\n\n target.classList.toggle(activeClass, checked);\n break;\n }\n\n case 'radio': {\n const groupRadios = getRadioGroupInputs(formField);\n\n for (const radio of groupRadios) {\n const target = getFormFieldWrapper(radio);\n\n target.classList.toggle(activeClass, radio.checked);\n }\n\n break;\n }\n\n default: {\n formField.classList.toggle(activeClass, !!formField.value);\n }\n }\n};\n", "import {\n type FormFieldType,\n isDate,\n isString,\n isUndefined,\n normalizeDate,\n normalizeNumber,\n} from '@adartem/adlib-utils';\nimport * as fuzzysort from 'fuzzysort';\n\nimport type { ListItemField } from '../components';\nimport type { FieldValue } from './types';\n\n/**\n * Parses the filter value based on the field type.\n * @param filterValue\n * @param fieldData\n * @returns The parsed filter value, if it could be parsed. Otherwise, `null`.\n */\nexport const parseFilterValue = (\n filterValue: string,\n filterType: FormFieldType,\n fieldType?: ListItemField['type'],\n): FieldValue | null => {\n if (\n fieldType === 'date' ||\n filterType === 'date' ||\n filterType === 'time' ||\n filterType === 'datetime-local' ||\n filterType === 'month' ||\n filterType === 'week'\n ) {\n const parsedFilterValue = normalizeDate(filterValue);\n\n if (parsedFilterValue === undefined || isNaN(parsedFilterValue.getTime())) {\n return null;\n }\n\n return parsedFilterValue;\n }\n\n if (fieldType === 'number' || filterType === 'number' || filterType === 'range') {\n const parsedFilterValue = normalizeNumber(filterValue);\n\n if (parsedFilterValue === undefined || isNaN(parsedFilterValue)) {\n return null;\n }\n\n return parsedFilterValue;\n }\n\n return filterValue;\n};\n\n/**\n * Checks if two values are equal.\n * @param fieldValue\n * @param filterValue\n * @param fuzzyThreshold\n */\nexport const areEqual = (\n fieldValue: FieldValue,\n filterValue: FieldValue,\n fuzzyThreshold?: number,\n) => {\n // Ensure that dates are compared as dates\n if (typeof fieldValue !== typeof filterValue) {\n if (isDate(fieldValue)) {\n filterValue = normalizeDate(filterValue) || filterValue;\n } else if (isDate(filterValue)) {\n fieldValue = normalizeDate(fieldValue) || fieldValue;\n }\n }\n\n const normalizedFieldValue = isDate(fieldValue)\n ? fieldValue.getTime()\n : isString(fieldValue)\n ? fieldValue.toLowerCase()\n : fieldValue;\n const normalizedFilterValue = isDate(filterValue)\n ? filterValue.getTime()\n : isString(filterValue)\n ? filterValue.toLowerCase()\n : filterValue;\n\n if (fuzzyThreshold) {\n const normalizedFuzzyThreshold = fuzzyThreshold / 100;\n\n const score = fuzzysort.single(\n normalizedFilterValue.toString(),\n normalizedFieldValue.toString(),\n )?.score;\n return !!score && score >= normalizedFuzzyThreshold;\n }\n\n return normalizedFieldValue === normalizedFilterValue;\n};\n\n/**\n * Compares two numeric values.\n * @param rawA\n * @param rawB\n * @param op\n * @returns `true` if the comparison is successful.\n */\nexport const numericCompare = (\n rawA: FieldValue,\n rawB: FieldValue,\n op: 'greater' | 'greater-equal' | 'less' | 'less-equal',\n) => {\n let a: number | undefined;\n let b: number | undefined;\n\n if (isDate(rawA) || isDate(rawB)) {\n a = normalizeDate(rawA)?.getTime();\n b = normalizeDate(rawB)?.getTime();\n } else if (isString(rawA) || isString(rawB)) {\n a = normalizeNumber(rawA);\n b = normalizeNumber(rawB);\n } else {\n a = rawA;\n b = rawB;\n }\n\n if (isUndefined(a) || isUndefined(b)) return false;\n\n if (op === 'greater') return a > b;\n if (op === 'greater-equal') return a >= b;\n if (op === 'less') return a < b;\n if (op === 'less-equal') return a <= b;\n\n return false;\n};\n\n/**\n * Splits the value by the given separator and trims each part.\n * @param value\n * @param separator\n */\nexport const splitValue = (value: string, separator: string) =>\n value\n .split(separator)\n .map((v) => v.trim())\n .filter(Boolean);\n", "import { SETTINGS } from '../../utils/constants';\nimport type { FilterMatch, FilterOperator } from '../types';\n\nconst FIELD_REGEX = /\\[field=(?:\"([^\"]*)\"|([^\\]]+))\\]/;\nconst OPERATOR_REGEX = new RegExp(`^(${SETTINGS.operator.values.join('|')})`);\nconst FIELD_MATCH_VALUES = SETTINGS.fieldmatch.values.join('|');\nconst FIELD_MATCH_REGEX = new RegExp(\n `\\\\[fieldmatch=(${FIELD_MATCH_VALUES}|\"(${FIELD_MATCH_VALUES})\")\\\\]`,\n);\n\n/**\n * @returns The filter match value of a given select element.\n * @param selectElement\n */\nexport const getFilterMatchValue = (selectElement: HTMLSelectElement): FilterMatch =>\n selectElement.value === 'or' ? 'or' : 'and';\n\n/**\n * Parses the operator and field match value from a condition operator selection.\n * @param value\n * @returns The operator, field key, field match, and filter match, if found.\n */\nexport const parseOperatorValue = (\n value: string,\n): { op?: FilterOperator; fieldKey?: string; fieldMatch?: FilterMatch } => {\n let op: FilterOperator | undefined;\n let fieldKey: string | undefined;\n let fieldMatch: FilterMatch | undefined;\n\n const opMatch = value.match(OPERATOR_REGEX);\n if (opMatch) {\n op = opMatch[1] as FilterOperator;\n }\n\n const fieldKeyMatch = value.match(FIELD_REGEX);\n if (fieldKeyMatch) {\n fieldKey = fieldKeyMatch[1] || fieldKeyMatch[2];\n }\n\n const fieldMatchMatch = value.match(FIELD_MATCH_REGEX);\n if (fieldMatchMatch) {\n fieldMatch = (fieldMatchMatch[2] || fieldMatchMatch[1]) as FilterMatch;\n }\n\n return { op, fieldKey, fieldMatch };\n};\n", "import {\n addListener,\n cloneNode,\n extractCommaSeparatedValues,\n type FormField,\n type FormFieldType,\n isFormField,\n isHTMLSelectElement,\n isString,\n setFormFieldValue,\n simulateEvent,\n} from '@adartem/adlib-utils';\nimport { effect, watch } from '@vue/reactivity';\nimport debounce from 'just-debounce';\n\nimport type { List } from '../../components';\nimport { ALLOWED_DYNAMIC_FIELD_TYPES, SETTINGS } from '../../utils/constants';\nimport {\n CUSTOM_VALUE_ATTRIBUTE,\n getAttribute,\n getElementSelector,\n getSplitSeparator,\n queryAllElements,\n queryElement,\n} from '../../utils/selectors';\nimport type { AllFieldsData, FilterOperator, FiltersCondition } from '../types';\nimport { splitValue } from '../utils';\nimport { type ConditionGroup, getFiltersGroup } from './groups';\nimport { getFilterMatchValue, parseOperatorValue } from './utils';\n\nexport type Condition = {\n id: string;\n element: HTMLElement;\n conditionGroup: ConditionGroup;\n cleanup: () => void;\n};\n\n/**\n * Inits the conditions matching selector for a dynamic filters setup.\n * @param list\n * @param element\n * @param conditionGroup\n */\nexport const initConditionsMatch = (\n list: List,\n element: HTMLSelectElement,\n conditionGroup: ConditionGroup,\n) => {\n // TODO: support ad-list-filteron\n const inputCleanup = addListener(element, 'change', () => {\n const filtersGroup = getFiltersGroup(list, conditionGroup);\n if (!filtersGroup) return;\n\n const conditionsMatch = getFilterMatchValue(element);\n\n filtersGroup.conditionsMatch = conditionsMatch;\n });\n\n const disabledClass = getAttribute(element, 'dynamicdisabledclass');\n\n const runner = effect(() => {\n const disabled = conditionGroup.conditions.value.length <= 1;\n\n element.setAttribute('aria-disabled', disabled ? 'true' : 'false');\n element.classList.toggle(disabledClass, disabled);\n });\n\n return () => {\n inputCleanup();\n runner.effect.stop();\n };\n};\n\n/**\n * Inits the condition add button of a condition group.\n * @param list\n * @param element\n * @param conditionTemplate\n * @param conditionGroup\n * @returns A cleanup function\n */\nexport const initConditionAdd = (\n list: List,\n element: HTMLElement,\n conditionTemplate: HTMLElement,\n conditionGroup: ConditionGroup,\n) => {\n const cleanup = addListener(element, 'click', () => {\n const conditionClone = cloneNode(conditionTemplate);\n\n const condition = initCondition(list, conditionClone, conditionGroup);\n if (!condition) return;\n\n const $conditions = conditionGroup.conditions.value;\n const previousCondition = $conditions[$conditions.length - 2];\n\n if (previousCondition) {\n previousCondition.element.after(condition.element);\n } else {\n conditionGroup.element.append(condition.element);\n }\n });\n\n return cleanup;\n};\n\n/**\n * Inits the condition remove button of a condition.\n * @param element\n * @param condition\n * @param conditionGroup\n * @returns A cleanup function\n */\nconst initConditionRemove = (\n element: HTMLElement,\n condition: Condition,\n conditionGroup: ConditionGroup,\n) => {\n const clickCleanup = addListener(element, 'click', () => {\n if (conditionGroup.conditions.value.length <= 1) return;\n\n condition.cleanup();\n });\n\n const disabledClass = getAttribute(element, 'dynamicdisabledclass');\n\n const runner = effect(() => {\n const disabled = conditionGroup.conditions.value.length <= 1;\n\n element.setAttribute('aria-disabled', disabled ? 'true' : 'false');\n element.classList.toggle(disabledClass, disabled);\n });\n\n return () => {\n clickCleanup();\n runner.effect.stop();\n };\n};\n\n/**\n * Inits the condition field key select of a condition.\n * @param list\n * @param element\n * @param condition\n * @returns A cleanup function\n */\nconst initConditionFieldKeySelect = (\n list: List,\n element: HTMLSelectElement,\n condition: Condition,\n) => {\n const changeCleanup = addListener(element, 'change', () => {\n const filtersCondition = getFiltersCondition(list, condition);\n if (!filtersCondition) return;\n\n filtersCondition.fieldKey = element.value;\n });\n\n const fieldsRunner = effect(() => {\n let invalidSelectedOption = false;\n\n for (const option of element.options) {\n const isValid = !!list.allFieldsData.value[option.value];\n\n option.style.display = isValid ? '' : 'none';\n option.disabled = !isValid;\n\n if (!isValid && option.selected) {\n option.selected = false;\n invalidSelectedOption = true;\n }\n }\n\n if (invalidSelectedOption) {\n simulateEvent(element, ['input', 'change']);\n }\n });\n\n return () => {\n changeCleanup();\n fieldsRunner.effect.stop();\n };\n};\n\n/**\n * Inits the condition operator select of a condition.\n * The options are dynamically displayed depending on the selected field key.\n * The logic for displaying options is defined in {@link ALLOWED_DYNAMIC_FIELD_TYPES}.\n * @param list\n * @param element\n * @param condition\n * @returns A cleanup function\n */\nconst initConditionOperatorSelect = (\n list: List,\n element: HTMLSelectElement,\n condition: Condition,\n) => {\n // Change listener\n const changeCleanup = addListener(element, 'change', () => {\n const filtersCondition = getFiltersCondition(list, condition);\n if (!filtersCondition) return;\n\n const { op, fieldMatch = SETTINGS.fieldmatch.defaultValue } = parseOperatorValue(element.value);\n\n Object.assign(filtersCondition, { op, fieldMatch });\n });\n\n // Options display logic\n const optionsHandler = ([fieldKey, allFieldsData]: [\n FiltersCondition['fieldKey'] | undefined,\n AllFieldsData,\n ]) => {\n const fieldData = fieldKey ? allFieldsData[fieldKey] : undefined;\n const allFieldKeys = Object.keys(allFieldsData);\n\n let invalidSelectedOption = false;\n\n // Collect all options data\n type OptionData = { option: HTMLOptionElement } & ReturnType<typeof parseOperatorValue>;\n\n const { optionsData, optionsDataByOp, optionsToHide, optionsToDisplay } = [\n ...element.options,\n ].reduce<{\n optionsData: OptionData[];\n optionsDataByOp: Map<FilterOperator, OptionData[]>;\n optionsToHide: HTMLOptionElement[];\n optionsToDisplay: HTMLOptionElement[];\n }>(\n (acc, option) => {\n const invalid = () => {\n acc.optionsToHide.push(option);\n return acc;\n };\n\n if (!option.value) return invalid();\n if (!fieldData) return invalid();\n\n const operatorData = parseOperatorValue(option.value);\n if (!operatorData.op) return invalid();\n\n let isFieldKeyValid = !operatorData.fieldKey;\n\n if (operatorData.fieldKey) {\n const fieldKeys =\n operatorData.fieldKey === '*'\n ? allFieldKeys\n : extractCommaSeparatedValues(operatorData.fieldKey);\n\n isFieldKeyValid = fieldKeys.some((key) => key === fieldKey);\n }\n\n if (!isFieldKeyValid) return invalid();\n\n const isValid =\n !!ALLOWED_DYNAMIC_FIELD_TYPES[fieldData.type]?.[fieldData.valueType]?.[operatorData.op];\n if (!isValid) return invalid();\n\n const optionData: OptionData = { option, ...operatorData };\n\n acc.optionsData.push(optionData);\n acc.optionsDataByOp.set(operatorData.op, [\n ...(acc.optionsDataByOp.get(operatorData.op) || []),\n optionData,\n ]);\n\n return acc;\n },\n {\n optionsData: [],\n optionsDataByOp: new Map(),\n optionsToHide: [],\n optionsToDisplay: [],\n },\n );\n\n const isMultiFieldValue = fieldData?.valueType === 'multiple';\n\n for (const { op, option, fieldMatch = SETTINGS.fieldmatch.defaultValue } of optionsData) {\n const opOptionsData = optionsDataByOp.get(op!) || [];\n\n let optionWithPreference;\n\n if (isMultiFieldValue) {\n optionWithPreference =\n opOptionsData.find((other) => other.fieldMatch === fieldMatch) ||\n opOptionsData.find((other) => other.fieldMatch) ||\n opOptionsData.find((other) => !other.fieldMatch);\n } else {\n optionWithPreference = opOptionsData.find((other) => !other.fieldMatch);\n }\n\n const otherOptionHasPreference = optionWithPreference?.option !== option;\n if (otherOptionHasPreference) {\n optionsToHide.push(option);\n } else {\n optionsToDisplay.push(option);\n }\n }\n\n for (const option of optionsToDisplay) {\n option.style.display = '';\n option.disabled = false;\n }\n\n for (const option of optionsToHide) {\n option.style.display = 'none';\n option.disabled = true;\n\n if (option.selected) {\n option.selected = false;\n invalidSelectedOption = true;\n }\n }\n\n // If the selected option has changed, trigger an event\n if (invalidSelectedOption) {\n simulateEvent(element, ['input', 'change']);\n }\n };\n\n const optionsCleanup = watch(\n [() => getFiltersCondition(list, condition)?.fieldKey, list.allFieldsData],\n debounce(optionsHandler, 0),\n { immediate: true },\n );\n\n return () => {\n changeCleanup();\n optionsCleanup();\n };\n};\n\n/**\n * Initializes the condition value form fields.\n * @param list\n * @param initialFormField\n * @param conditionElement\n * @param condition\n * @returns A cleanup function\n */\nconst initConditionValueField = (\n list: List,\n initialFormField: FormField,\n conditionElement: HTMLElement,\n condition: Condition,\n) => {\n const conditionValueFieldAnchor = new Comment();\n initialFormField.after(conditionValueFieldAnchor);\n\n const { instance } = list;\n const conditionSelector = getElementSelector('condition', { instance });\n const conditionValueSelector = getElementSelector('condition-value', { instance });\n const externalConditionValueSelector = `:is(${conditionValueSelector}):not(:is(${conditionSelector}) :is(${conditionValueSelector}))`;\n\n const internalConditionValueFormFields = queryAllElements('condition-value', {\n scope: conditionElement,\n });\n const externalConditionValueFormFields = document.querySelectorAll<HTMLElement>(\n externalConditionValueSelector,\n );\n\n const allConditionValueFormFields = new Map<FormFieldType, FormField>();\n\n for (const internalConditionValueFormField of internalConditionValueFormFields) {\n if (!isFormField(internalConditionValueFormField)) continue;\n\n const type = internalConditionValueFormField.type as FormFieldType;\n if (allConditionValueFormFields.has(type)) continue;\n\n allConditionValueFormFields.set(type, internalConditionValueFormField);\n }\n\n for (const externalConditionValueFormField of externalConditionValueFormFields) {\n if (!isFormField(externalConditionValueFormField)) continue;\n\n const type = externalConditionValueFormField.type as FormFieldType;\n if (allConditionValueFormFields.has(type)) continue;\n\n const clone = cloneNode(externalConditionValueFormField);\n allConditionValueFormFields.set(type, clone);\n }\n\n let activeFormFieldType: FormFieldType | undefined;\n\n const changeHandler = () => {\n if (list.settingFilters) return;\n if (!activeFormFieldType) return;\n\n const filtersCondition = getFiltersCondition(list, condition);\n if (!filtersCondition) return;\n\n list.readingFilters = true;\n\n const activeFormField = allConditionValueFormFields.get(activeFormFieldType)!;\n\n const fuzzyThreshold = getAttribute(activeFormField, 'fuzzy');\n const splitSeparator = getSplitSeparator(activeFormField);\n\n let value = getConditionValue(activeFormField);\n\n if (isString(value) && splitSeparator) {\n value = splitValue(value, splitSeparator);\n }\n\n Object.assign(filtersCondition, {\n value,\n fuzzyThreshold,\n type: activeFormFieldType,\n });\n\n list.readingFilters = false;\n };\n\n const changeCleanups = [...allConditionValueFormFields].map(([, formField]) => {\n const event = getAttribute(formField, 'filteron', { filterInvalid: true });\n const debouncing = getAttribute(formField, 'debounce');\n\n const target = event === 'submit' ? formField.form : formField;\n const handler = debouncing ? debounce(changeHandler, debouncing) : changeHandler;\n\n return addListener(target, event, handler);\n });\n\n const formFieldsHandler = ([fieldKey, op, allFieldsData]: [\n FiltersCondition['fieldKey'] | undefined,\n FiltersCondition['op'] | undefined,\n AllFieldsData,\n ]) => {\n const fieldData = fieldKey ? allFieldsData[fieldKey] : undefined;\n\n let allowedFormFields: FormFieldType[] = [];\n\n if (fieldData && op) {\n allowedFormFields =\n ALLOWED_DYNAMIC_FIELD_TYPES[fieldData.type]?.[fieldData.valueType]?.[op] || [];\n }\n\n const previouslyActiveFormFieldType = activeFormFieldType;\n\n activeFormFieldType = allowedFormFields.find((type) => allConditionValueFormFields.has(type));\n\n for (const [type, formField] of allConditionValueFormFields) {\n if (type === activeFormFieldType) {\n conditionValueFieldAnchor.after(formField);\n } else {\n formField.remove();\n }\n }\n\n if (activeFormFieldType && previouslyActiveFormFieldType !== activeFormFieldType) {\n const activeFormField = allConditionValueFormFields.get(activeFormFieldType)!;\n\n if (isHTMLSelectElement(activeFormField)) {\n activeFormField.selectedIndex = 0;\n } else {\n activeFormField.value = '';\n }\n\n simulateEvent(activeFormField, ['input', 'change']);\n }\n };\n\n const optionsHandler = ([fieldKey, allFieldsData]: [\n FiltersCondition['fieldKey'] | undefined,\n AllFieldsData,\n ]) => {\n const selectElements = [...allConditionValueFormFields.values()].filter(isHTMLSelectElement);\n if (!selectElements.length) return;\n\n const activeSelect = activeFormFieldType\n ? allConditionValueFormFields.get(activeFormFieldType)\n : undefined;\n\n const fieldData = fieldKey ? allFieldsData[fieldKey] : undefined;\n const rawValues = fieldData?.rawValues || new Set<string>();\n\n const sortedValues = [...rawValues].sort((a, b) => a.localeCompare(b));\n\n for (const selectElement of selectElements) {\n const invalidSelectedOption =\n selectElement.value !== '' && !rawValues.has(selectElement.value);\n\n for (const option of [...selectElement.options]) {\n if (option.value !== '') {\n option.remove();\n }\n }\n\n for (const value of sortedValues) {\n const option = document.createElement('option');\n option.value = value;\n option.textContent = value;\n\n selectElement.append(option);\n }\n\n if (selectElement === activeSelect && invalidSelectedOption) {\n simulateEvent(selectElement, ['input', 'change']);\n }\n }\n };\n\n const formFieldsCleanup = watch(\n [\n () => getFiltersCondition(list, condition)?.fieldKey,\n () => getFiltersCondition(list, condition)?.op,\n list.allFieldsData,\n ],\n debounce(formFieldsHandler, 0),\n { immediate: true },\n );\n\n const optionsCleanup = watch(\n [() => getFiltersCondition(list, condition)?.fieldKey, list.allFieldsData],\n debounce(optionsHandler, 0),\n { immediate: true },\n );\n\n const twoWayBindingCleanup = watch(\n () => getFiltersCondition(list, condition)?.value,\n (value: FiltersCondition['value'] | undefined, oldValue: FiltersCondition['value']) => {\n if (list.readingFilters) return;\n\n value ??= Array.isArray(oldValue) ? [] : '';\n\n for (const formField of allConditionValueFormFields.values()) {\n setFormFieldValue(formField, value, CUSTOM_VALUE_ATTRIBUTE);\n }\n },\n );\n\n return () => {\n for (const cleanup of changeCleanups) {\n cleanup();\n }\n\n formFieldsCleanup();\n optionsCleanup();\n twoWayBindingCleanup();\n };\n};\n\n/**\n * Retrieves the value from a condition value field.\n * @param conditionValueField\n */\nconst getConditionValue = (conditionValueField: FormField) => {\n const type = conditionValueField.type as FormFieldType;\n\n let value: string | string[];\n\n switch (type) {\n // Select multiple\n case 'select-multiple': {\n value = [...(conditionValueField as HTMLSelectElement).selectedOptions]\n .map((option) => option.value)\n .filter(Boolean);\n break;\n }\n\n // Dates\n case 'date':\n case 'month':\n case 'week':\n case 'time': {\n const { valueAsDate, value: _value } = conditionValueField as HTMLInputElement;\n\n value = valueAsDate ? valueAsDate.toISOString() : _value;\n break;\n }\n\n // Default - Text\n default: {\n value = conditionValueField.value;\n }\n }\n\n return value;\n};\n\nconst getFiltersCondition = (list: List, condition: Condition) => {\n const group = getFiltersGroup(list, condition.conditionGroup);\n if (!group) return;\n\n return group.conditions.find((c) => c.id === condition.id);\n};\n\n/**\n * Inits a condition\n * @param list\n * @param element\n * @param conditionGroup\n * @returns A cleanup function\n */\nexport const initCondition = (list: List, element: HTMLElement, conditionGroup: ConditionGroup) => {\n const conditionFieldKeySelect = queryElement('condition-field', { scope: element });\n if (!isHTMLSelectElement(conditionFieldKeySelect)) return;\n\n const conditionOperatorSelect = queryElement('condition-operator', { scope: element });\n if (!isHTMLSelectElement(conditionOperatorSelect)) return;\n\n const initialConditionValueFormField = queryElement('condition-value', { scope: element });\n if (!isFormField(initialConditionValueFormField)) return;\n\n // Store the condition\n const id = crypto.randomUUID();\n const cleanups = new Set<() => void>();\n\n const condition: Condition = {\n id,\n element,\n conditionGroup,\n\n cleanup: () => {\n for (const cleanup of cleanups) {\n cleanup();\n }\n\n cleanups.clear();\n element.remove();\n\n conditionGroup.conditions.value = conditionGroup.conditions.value.filter(\n (condition) => condition.id !== id,\n );\n\n const filtersGroup = getFiltersGroup(list, conditionGroup);\n if (!filtersGroup) return;\n\n const conditionIndex = filtersGroup.conditions.findIndex((condition) => condition.id === id);\n if (conditionIndex === -1) return;\n\n filtersGroup.conditions.splice(conditionIndex, 1);\n },\n };\n\n // Store the condition\n const fieldKey = conditionFieldKeySelect.value;\n const type = initialConditionValueFormField.type as FormFieldType;\n\n const value = getConditionValue(initialConditionValueFormField);\n const fuzzyThreshold = getAttribute(initialConditionValueFormField, 'fuzzy');\n const tagValuesDisplay =\n (getAttribute(initialConditionValueFormField, 'tagvalues', { filterInvalid: true }) as\n | FiltersCondition['tagValuesDisplay']\n | undefined) ?? SETTINGS.tagvalues.defaultValue;\n const { op, fieldMatch } = parseOperatorValue(conditionOperatorSelect.value);\n\n conditionGroup.conditions.value = [...conditionGroup.conditions.value, condition];\n\n const filtersGroup = getFiltersGroup(list, conditionGroup);\n if (!filtersGroup) return;\n\n filtersGroup.conditions.push({\n id,\n type,\n fieldKey,\n op,\n value,\n fuzzyThreshold,\n fieldMatch,\n showTag: true,\n interacted: true,\n tagValuesDisplay,\n });\n\n // Handle remove button\n const conditionRemoveButton = queryElement('condition-remove', { scope: element });\n if (conditionRemoveButton) {\n const cleanup = initConditionRemove(conditionRemoveButton, condition, conditionGroup);\n cleanups.add(cleanup);\n }\n\n const conditionFieldKeySelectCleanup = initConditionFieldKeySelect(\n list,\n conditionFieldKeySelect,\n condition,\n );\n cleanups.add(conditionFieldKeySelectCleanup);\n\n const conditionOperatorSelectCleanup = initConditionOperatorSelect(\n list,\n conditionOperatorSelect,\n condition,\n );\n cleanups.add(conditionOperatorSelectCleanup);\n\n const conditionValueFieldCleanup = initConditionValueField(\n list,\n initialConditionValueFormField,\n element,\n condition,\n );\n cleanups.add(conditionValueFieldCleanup);\n\n const autoCleanup = watch(\n () => getFiltersCondition(list, condition),\n (filtersCondition) => {\n if (!filtersCondition) {\n condition.cleanup();\n }\n },\n );\n\n cleanups.add(autoCleanup);\n\n return condition;\n};\n", "import { addListener, cloneNode } from '@adartem/adlib-utils';\nimport { effect, type ShallowRef, shallowRef, watch } from '@vue/reactivity';\n\nimport type { List } from '../../components';\nimport { getAttribute, queryElement } from '../../utils/selectors';\nimport type { FilterMatch, FiltersGroup } from '../types';\nimport { type Condition, initCondition, initConditionAdd, initConditionsMatch } from './conditions';\nimport { getFilterMatchValue } from './utils';\n\nexport type ConditionGroup = {\n id: string;\n element: HTMLElement;\n conditions: ShallowRef<Condition[]>;\n cleanup: () => void;\n};\n\n/**\n * Inits the condition groups match for a dynamic filters setup.\n * @param list\n * @param element\n * @param conditionGroups\n * @returns A cleanup function\n */\nexport const initConditionGroupsMatch = (\n list: List,\n element: HTMLSelectElement,\n conditionGroups: ShallowRef<ConditionGroup[]>,\n) => {\n // TODO: support ad-list-filteron\n const inputCleanup = addListener(element, 'change', () => {\n list.filters.value.groupsMatch = getFilterMatchValue(element);\n });\n\n const disabledClass = getAttribute(element, 'dynamicdisabledclass');\n\n const runner = effect(() => {\n const disabled = conditionGroups.value.length <= 1;\n\n element.setAttribute('aria-disabled', disabled ? 'true' : 'false');\n element.classList.toggle(disabledClass, disabled);\n });\n\n return () => {\n inputCleanup();\n runner.effect.stop();\n };\n};\n\n/**\n * Inits the button to add a new condition group.\n * @param list\n * @param element\n * @param conditionGroupTemplate\n * @param conditionGroupsWrapper\n * @param conditionGroups\n * @returns A cleanup function\n */\nexport const initConditionGroupsAdd = (\n list: List,\n element: HTMLElement,\n conditionGroupTemplate: HTMLElement,\n conditionGroupsWrapper: HTMLElement,\n conditionGroups: ShallowRef<ConditionGroup[]>,\n) => {\n const clickCleanup = addListener(element, 'click', () => {\n const clone = cloneNode(conditionGroupTemplate);\n\n const conditionGroup = initConditionGroup(list, clone, conditionGroups);\n if (!conditionGroup) return;\n\n const previousConditionGroup = conditionGroups.value[conditionGroups.value.length - 2];\n\n if (previousConditionGroup) {\n previousConditionGroup.element.after(conditionGroup.element);\n } else {\n conditionGroupsWrapper.append(conditionGroup.element);\n }\n });\n\n return clickCleanup;\n};\n\n/**\n * Inits the button to remove a condition group.\n * @param element\n * @param conditionGroup\n * @param conditionGroups\n * @returns A cleanup function\n */\nconst initConditionGroupRemove = (\n element: HTMLElement,\n conditionGroup: ConditionGroup,\n conditionGroups: ShallowRef<ConditionGroup[]>,\n) => {\n const clickCleanup = addListener(element, 'click', () => {\n if (conditionGroups.value.length <= 1) return;\n\n conditionGroup.cleanup();\n });\n\n const disabledClass = getAttribute(element, 'dynamicdisabledclass');\n\n const runner = effect(() => {\n const disabled = conditionGroups.value.length <= 1;\n\n element.setAttribute('aria-disabled', disabled ? 'true' : 'false');\n element.classList.toggle(disabledClass, disabled);\n });\n\n return () => {\n clickCleanup();\n runner.effect.stop();\n };\n};\n\n/**\n * @returns The condition group with the given ID, or undefined if not found.\n * @param list\n * @param conditionGroup\n */\nexport const getFiltersGroup = (\n list: List,\n conditionGroup: ConditionGroup,\n): FiltersGroup | undefined => {\n return list.filters.value.groups.find((group) => group.id === conditionGroup.id);\n};\n\n/**\n * Inits a condition group for a dynamic filters setup.\n * @param list\n * @param element\n * @param conditionGroups\n * @returns The condition group instance\n */\nexport const initConditionGroup = (\n list: List,\n element: HTMLElement,\n conditionGroups: ShallowRef<ConditionGroup[]>,\n): ConditionGroup | undefined => {\n const conditionElement = queryElement('condition', { scope: element });\n if (!conditionElement) return;\n\n const conditionTemplate = cloneNode(conditionElement);\n\n // Store the condition group\n const id = crypto.randomUUID();\n const cleanups = new Set<() => void>();\n\n const conditionGroup: ConditionGroup = {\n id,\n element,\n conditions: shallowRef<Condition[]>([]),\n\n cleanup: () => {\n for (const condition of conditionGroup.conditions.value) {\n condition.cleanup();\n }\n\n for (const cleanup of cleanups) {\n cleanup();\n }\n\n cleanups.clear();\n element.remove();\n\n conditionGroups.value = conditionGroups.value.filter((group) => group.id !== id);\n\n const conditionGroupIndex = list.filters.value.groups.findIndex((group) => group.id === id);\n if (conditionGroupIndex === -1) return;\n\n list.filters.value.groups.splice(conditionGroupIndex, 1);\n },\n };\n\n // Handle condition matching\n let conditionsMatch: FilterMatch = 'and';\n\n const conditionsMatchSelect = queryElement<HTMLSelectElement>('condition-match', {\n scope: element,\n });\n if (conditionsMatchSelect) {\n conditionsMatch = getFilterMatchValue(conditionsMatchSelect);\n\n const cleanup = initConditionsMatch(list, conditionsMatchSelect, conditionGroup);\n cleanups.add(cleanup);\n }\n\n // Store the group\n conditionGroups.value = [...conditionGroups.value, conditionGroup];\n\n list.filters.value.groups.push({\n id,\n conditionsMatch,\n conditions: [],\n });\n\n // Handle adding conditions to the group\n const conditionAddButton = queryElement('condition-add', { scope: element });\n if (conditionAddButton) {\n const cleanup = initConditionAdd(list, conditionAddButton, conditionTemplate, conditionGroup);\n cleanups.add(cleanup);\n }\n\n // Handle removing the group\n const conditionGroupRemoveButton = queryElement('condition-group-remove', { scope: element });\n if (conditionGroupRemoveButton) {\n const cleanup = initConditionGroupRemove(\n conditionGroupRemoveButton,\n conditionGroup,\n conditionGroups,\n );\n cleanups.add(cleanup);\n }\n\n // Init default condition\n initCondition(list, conditionElement, conditionGroup);\n\n const autoCleanup = watch(\n () => getFiltersGroup(list, conditionGroup),\n (filtersGroup: FiltersGroup | undefined) => {\n if (!filtersGroup) {\n conditionGroup.cleanup();\n }\n },\n );\n\n cleanups.add(autoCleanup);\n\n return conditionGroup;\n};\n", "import { addListener, cloneNode } from '@adartem/adlib-utils';\nimport { shallowRef } from '@vue/reactivity';\n\nimport type { List } from '../../components/List';\nimport { getElementSelector, queryElement } from '../../utils/selectors';\nimport { handleFiltersForm } from '../elements';\nimport type { FilterMatch, FiltersCondition } from '../types';\nimport {\n type ConditionGroup,\n initConditionGroup,\n initConditionGroupsAdd,\n initConditionGroupsMatch,\n} from './groups';\nimport { getFilterMatchValue } from './utils';\n\n/**\n * Inits dynamic filters for a list.\n * @param list\n * @param form\n * @returns A cleanup function\n */\nexport const initDynamicFilters = (list: List, form: HTMLFormElement) => {\n const conditionGroupElement = queryElement('condition-group', { scope: form });\n if (!conditionGroupElement) return;\n\n const conditionGroupsWrapper = conditionGroupElement.parentElement;\n if (!conditionGroupsWrapper) return;\n\n const conditionGroupTemplate = cloneNode(conditionGroupElement);\n const conditionGroups = shallowRef<ConditionGroup[]>([]);\n\n const cleanups = new Set<() => void>();\n\n // Handle submissions\n const formElementCleanup = handleFiltersForm(form);\n cleanups.add(formElementCleanup);\n\n // Handle adding condition groups\n const conditionGroupAddButton =\n queryElement('condition-group-add', { scope: form }) ||\n queryElement('condition-groups-add', { scope: form });\n\n if (conditionGroupAddButton) {\n const cleanup = initConditionGroupsAdd(\n list,\n conditionGroupAddButton,\n conditionGroupTemplate,\n conditionGroupsWrapper,\n conditionGroups,\n );\n\n cleanups.add(cleanup);\n }\n\n // Handle condition groups matching\n let groupsMatch: FilterMatch = 'and';\n\n const conditionGroupMatchSelect =\n queryElement<HTMLSelectElement>('condition-group-match', { scope: form }) ||\n queryElement<HTMLSelectElement>('condition-groups-match', { scope: form });\n\n if (conditionGroupMatchSelect) {\n groupsMatch = getFilterMatchValue(conditionGroupMatchSelect);\n\n const cleanup = initConditionGroupsMatch(list, conditionGroupMatchSelect, conditionGroups);\n cleanups.add(cleanup);\n }\n\n list.filters.value.groupsMatch = groupsMatch;\n\n // Handle global clear buttons\n const clearCleanup = handleClearButtons(list);\n cleanups.add(clearCleanup);\n\n // Init default condition group\n initConditionGroup(list, conditionGroupElement, conditionGroups);\n\n return () => {\n for (const conditionGroup of conditionGroups.value) {\n conditionGroup.cleanup();\n }\n\n for (const cleanup of cleanups) {\n cleanup();\n }\n\n cleanups.clear();\n };\n};\n\n/**\n * Handles the clear buttons.\n * @param list\n * @returns A cleanup function.\n */\nconst handleClearButtons = (list: List) => {\n return addListener(window, 'click', (e) => {\n const { target } = e;\n\n if (!(target instanceof Element)) return;\n\n const { instance, filters } = list;\n\n const clearElementSelector = getElementSelector('clear', { instance });\n const clearElement = target?.closest(clearElementSelector);\n if (!clearElement) return;\n\n list.settingFilters = true;\n\n // Remove all groups and conditions except the first one\n filters.value.groups.splice(1);\n\n const firstGroup = filters.value.groups[0];\n if (!firstGroup) return;\n\n firstGroup.conditions.splice(1);\n\n const firstCondition = firstGroup.conditions[0];\n if (!firstCondition) return;\n\n const updated: Partial<FiltersCondition> = {\n value: Array.isArray(firstCondition.value) ? [] : '',\n interacted: false,\n };\n\n Object.assign(firstCondition, updated);\n\n list.settingFilters = false;\n });\n};\n", "import inlineWorker from '__inline-worker'\nexport default function Worker() {\n return inlineWorker(\"var Bo=Object.create;var Hr=Object.defineProperty,Oo=Object.defineProperties,Fo=Object.getOwnPropertyDescriptor,Lo=Object.getOwnPropertyDescriptors,ko=Object.getOwnPropertyNames,or=Object.getOwnPropertySymbols,Po=Object.getPrototypeOf,zr=Object.prototype.hasOwnProperty,On=Object.prototype.propertyIsEnumerable;var Bn=(t,e,r)=>e in t?Hr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,b=(t,e)=>{for(var r in e||(e={}))zr.call(e,r)&&Bn(t,r,e[r]);if(or)for(var r of or(e))On.call(e,r)&&Bn(t,r,e[r]);return t},O=(t,e)=>Oo(t,Lo(e));var X=(t,e)=>{var r={};for(var n in t)zr.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&or)for(var n of or(t))e.indexOf(n)<0&&On.call(t,n)&&(r[n]=t[n]);return r};var No=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Ko=(t,e,r,n)=>{if(e&&typeof e==\\\"object\\\"||typeof e==\\\"function\\\")for(let i of ko(e))!zr.call(t,i)&&i!==r&&Hr(t,i,{get:()=>e[i],enumerable:!(n=Fo(e,i))||n.enumerable});return t};var Uo=(t,e,r)=>(r=t!=null?Bo(Po(t)):{},Ko(e||!t||!t.__esModule?Hr(r,\\\"default\\\",{value:t,enumerable:!0}):r,t));var _o=No((Mo,Yr)=>{((t,e)=>{typeof define==\\\"function\\\"&&define.amd?define([],e):typeof Yr==\\\"object\\\"&&Yr.exports?Yr.exports=e():t.fuzzysort=e()})(Mo,t=>{\\\"use strict\\\";var e=(p,u)=>{if(!p||!u)return H;var h=d(p);xe(u)||(u=g(u));var w=h.bitflags;return(w&u._bitflags)!==w?H:A(h,u)},r=(p,u,h)=>{if(!p)return h!=null&&h.all?R(u,h):Et;var w=d(p),V=w.bitflags,T=w.containsSpace,x=f((h==null?void 0:h.threshold)||0),_=(h==null?void 0:h.limit)||rr,E=0,L=0,G=u.length;function he(ze){E<_?(He.add(ze),++E):(++L,ze._score>He.peek()._score&&He.replaceTop(ze))}if(h!=null&&h.key)for(var ae=h.key,W=0;W<G;++W){var me=u[W],Y=Le(me,ae);if(Y&&(xe(Y)||(Y=g(Y)),(V&Y._bitflags)===V)){var z=A(w,Y);z!==H&&(z._score<x||(z.obj=me,he(z)))}}else if(h!=null&&h.keys){var ke=h.keys,Se=ke.length;e:for(var W=0;W<G;++W){var me=u[W];{for(var le=0,$=0;$<Se;++$){var ae=ke[$],Y=Le(me,ae);if(!Y){be[$]=ne;continue}xe(Y)||(Y=g(Y)),be[$]=Y,le|=Y._bitflags}if((V&le)!==V)continue}if(T)for(let q=0;q<w.spaceSearches.length;q++)N[q]=de;for(var $=0;$<Se;++$){if(Y=be[$],Y===ne){re[$]=ne;continue}if(re[$]=A(w,Y,!1,T),re[$]===H){re[$]=ne;continue}if(T)for(let j=0;j<w.spaceSearches.length;j++){if(k[j]>-1e3&&N[j]>de){var ie=(N[j]+k[j])/4;ie>N[j]&&(N[j]=ie)}k[j]>N[j]&&(N[j]=k[j])}}if(T){for(let q=0;q<w.spaceSearches.length;q++)if(N[q]===de)continue e}else{var U=!1;for(let q=0;q<Se;q++)if(re[q]._score!==de){U=!0;break}if(!U)continue}var ye=new a(Se);for(let q=0;q<Se;q++)ye[q]=re[q];if(T){var ee=0;for(let q=0;q<w.spaceSearches.length;q++)ee+=N[q]}else{var ee=de;for(let j=0;j<Se;j++){var z=ye[j];if(z._score>-1e3&&ee>de){var ie=(ee+z._score)/4;ie>ee&&(ee=ie)}z._score>ee&&(ee=z._score)}}if(ye.obj=me,ye._score=ee,h!=null&&h.scoreFn){if(ee=h.scoreFn(ye),!ee)continue;ee=f(ee),ye._score=ee}ee<x||he(ye)}}else for(var W=0;W<G;++W){var Y=u[W];if(Y&&(xe(Y)||(Y=g(Y)),(V&Y._bitflags)===V)){var z=A(w,Y);z!==H&&(z._score<x||he(z))}}if(E===0)return Et;for(var Pe=new Array(E),W=E-1;W>=0;--W)Pe[W]=He.poll();return Pe.total=E+L,Pe},n=(p,u=\\\"<b>\\\",h=\\\"</b>\\\")=>{for(var w=typeof u==\\\"function\\\"?u:void 0,V=p.target,T=V.length,x=p.indexes,_=\\\"\\\",E=0,L=0,G=!1,he=[],ae=0;ae<T;++ae){var W=V[ae];if(x[L]===ae){if(++L,G||(G=!0,w?(he.push(_),_=\\\"\\\"):_+=u),L===x.length){w?(_+=W,he.push(w(_,E++)),_=\\\"\\\",he.push(V.substr(ae+1))):_+=W+h+V.substr(ae+1);break}}else G&&(G=!1,w?(he.push(w(_,E++)),_=\\\"\\\"):_+=h);_+=W}return w?he:_},i=p=>{typeof p==\\\"number\\\"?p=\\\"\\\"+p:typeof p!=\\\"string\\\"&&(p=\\\"\\\");var u=I(p);return l(p,{_targetLower:u._lower,_targetLowerCodes:u.lowerCodes,_bitflags:u.bitflags})},o=()=>{M.clear(),B.clear()};class s{get indexes(){return this._indexes.slice(0,this._indexes.len).sort((u,h)=>u-h)}set indexes(u){return this._indexes=u}highlight(u,h){return n(this,u,h)}get score(){return m(this._score)}set score(u){this._score=f(u)}}class a extends Array{get score(){return m(this._score)}set score(u){this._score=f(u)}}var l=(p,u)=>{var w,V,T,x,_,E,L;let h=new s;return h.target=p,h.obj=(w=u.obj)!=null?w:H,h._score=(V=u._score)!=null?V:de,h._indexes=(T=u._indexes)!=null?T:[],h._targetLower=(x=u._targetLower)!=null?x:\\\"\\\",h._targetLowerCodes=(_=u._targetLowerCodes)!=null?_:H,h._nextBeginningIndexes=(E=u._nextBeginningIndexes)!=null?E:H,h._bitflags=(L=u._bitflags)!=null?L:0,h},m=p=>p===de?0:p>1?p:Math.E**(((-p+1)**.04307-1)*-2),f=p=>p===0?de:p>1?p:1-Math.pow(Math.log(p)/-2+1,1/.04307),c=p=>{typeof p==\\\"number\\\"?p=\\\"\\\"+p:typeof p!=\\\"string\\\"&&(p=\\\"\\\"),p=p.trim();var u=I(p),h=[];if(u.containsSpace){var w=p.split(/\\\\s+/);w=[...new Set(w)];for(var V=0;V<w.length;V++)if(w[V]!==\\\"\\\"){var T=I(w[V]);h.push({lowerCodes:T.lowerCodes,_lower:w[V].toLowerCase(),containsSpace:!1})}}return{lowerCodes:u.lowerCodes,_lower:u._lower,containsSpace:u.containsSpace,bitflags:u.bitflags,spaceSearches:h}},g=p=>{if(p.length>999)return i(p);var u=M.get(p);return u!==void 0||(u=i(p),M.set(p,u)),u},d=p=>{if(p.length>999)return c(p);var u=B.get(p);return u!==void 0||(u=c(p),B.set(p,u)),u},R=(p,u)=>{var h=[];h.total=p.length;var w=(u==null?void 0:u.limit)||rr;if(u!=null&&u.key)for(var V=0;V<p.length;V++){var T=p[V],x=Le(T,u.key);if(x!=H){xe(x)||(x=g(x));var _=l(x.target,{_score:x._score,obj:T});if(h.push(_),h.length>=w)return h}}else if(u!=null&&u.keys)for(var V=0;V<p.length;V++){for(var T=p[V],E=new a(u.keys.length),L=u.keys.length-1;L>=0;--L){var x=Le(T,u.keys[L]);if(!x){E[L]=ne;continue}xe(x)||(x=g(x)),x._score=de,x._indexes.len=0,E[L]=x}if(E.obj=T,E._score=de,h.push(E),h.length>=w)return h}else for(var V=0;V<p.length;V++){var x=p[V];if(x!=H&&(xe(x)||(x=g(x)),x._score=de,x._indexes.len=0,h.push(x),h.length>=w))return h}return h},A=(p,u,h=!1,w=!1)=>{if(h===!1&&p.containsSpace)return C(p,u,w);for(var V=p._lower,T=p.lowerCodes,x=T[0],_=u._targetLowerCodes,E=T.length,L=_.length,W=0,G=0,he=0;;){var ae=x===_[G];if(ae){if(K[he++]=G,++W,W===E)break;x=T[W]}if(++G,G>=L)return H}var W=0,me=!1,Y=0,z=u._nextBeginningIndexes;z===H&&(z=u._nextBeginningIndexes=F(u.target)),G=K[0]===0?0:z[K[0]-1];var ke=0;if(G!==L)for(;;)if(G>=L){if(W<=0||(++ke,ke>200))break;--W;var Se=v[--Y];G=z[Se]}else{var ae=T[W]===_[G];if(ae){if(v[Y++]=G,++W,W===E){me=!0;break}++G}else G=z[G]}var le=E<=1?-1:u._targetLower.indexOf(V,K[0]),$=!!~le,ie=$?le===0||u._nextBeginningIndexes[le-1]===le:!1;if($&&!ie){for(var U=0;U<z.length;U=z[U])if(!(U<=le)){for(var ye=0;ye<E&&T[ye]===u._targetLowerCodes[U+ye];ye++);if(ye===E){le=U,ie=!0;break}}}var ee=q=>{for(var j=0,Dn=0,_e=1;_e<E;++_e)q[_e]-q[_e-1]!==1&&(j-=q[_e],++Dn);var Do=q[E-1]-q[0]-(E-1);if(j-=(12+Do)*Dn,q[0]!==0&&(j-=q[0]*q[0]*.2),!me)j*=1e3;else{for(var qr=1,_e=z[0];_e<L;_e=z[_e])++qr;qr>24&&(j*=(qr-24)*10)}return j-=(L-E)/2,$&&(j/=1+E*E*1),ie&&(j/=1+E*E*1),j-=(L-E)/2,j};if(me)if(ie){for(var U=0;U<E;++U)K[U]=le+U;var Pe=K,ze=ee(K)}else var Pe=v,ze=ee(v);else{if($)for(var U=0;U<E;++U)K[U]=le+U;var Pe=K,ze=ee(Pe)}u._score=ze;for(var U=0;U<E;++U)u._indexes[U]=Pe[U];u._indexes.len=E;let ir=new s;return ir.target=u.target,ir._score=u._score,ir._indexes=u._indexes,ir},C=(p,u,h)=>{for(var w=new Set,V=0,T=H,x=0,_=p.spaceSearches,E=_.length,L=0,G=()=>{for(let ie=L-1;ie>=0;ie--)u._nextBeginningIndexes[P[ie*2+0]]=P[ie*2+1]},he=!1,$=0;$<E;++$){k[$]=de;var ae=_[$];if(T=A(ae,u),h){if(T===H)continue;he=!0}else if(T===H)return G(),H;var W=$===E-1;if(!W){var me=T._indexes,Y=!0;for(let U=0;U<me.len-1;U++)if(me[U+1]-me[U]!==1){Y=!1;break}if(Y){var z=me[me.len-1]+1,ke=u._nextBeginningIndexes[z-1];for(let U=z-1;U>=0&&ke===u._nextBeginningIndexes[U];U--)u._nextBeginningIndexes[U]=z,P[L*2+0]=U,P[L*2+1]=ke,L++}}V+=T._score/E,k[$]=T._score/E,T._indexes[0]<x&&(V-=(x-T._indexes[0])*2),x=T._indexes[0];for(var Se=0;Se<T._indexes.len;++Se)w.add(T._indexes[Se])}if(h&&!he)return H;G();var le=A(p,u,!0);if(le!==H&&le._score>V){if(h)for(var $=0;$<E;++$)k[$]=le._score/E;return le}h&&(T=u),T._score=V;var $=0;for(let ie of w)T._indexes[$++]=ie;return T._indexes.len=$,T},S=p=>p.replace(new RegExp(\\\"\\\\\\\\p{Script=Latin}+\\\",\\\"gu\\\"),u=>u.normalize(\\\"NFD\\\")).replace(/[\\\\u0300-\\\\u036f]/g,\\\"\\\"),I=p=>{p=S(p);for(var u=p.length,h=p.toLowerCase(),w=[],V=0,T=!1,x=0;x<u;++x){var _=w[x]=h.charCodeAt(x);if(_===32){T=!0;continue}var E=_>=97&&_<=122?_-97:_>=48&&_<=57?26:_<=127?30:31;V|=1<<E}return{lowerCodes:w,bitflags:V,containsSpace:T,_lower:h}},D=p=>{for(var u=p.length,h=[],w=0,V=!1,T=!1,x=0;x<u;++x){var _=p.charCodeAt(x),E=_>=65&&_<=90,L=E||_>=97&&_<=122||_>=48&&_<=57,G=E&&!V||!T||!L;V=E,T=L,G&&(h[w++]=x)}return h},F=p=>{p=S(p);for(var u=p.length,h=D(p),w=[],V=h[0],T=0,x=0;x<u;++x)V>x?w[x]=V:(V=h[++T],w[x]=V===void 0?u:V);return w},M=new Map,B=new Map,K=[],v=[],P=[],N=[],k=[],be=[],re=[],Le=(p,u)=>{var h=p[u];if(h!==void 0)return h;if(typeof u==\\\"function\\\")return u(p);var w=u;Array.isArray(u)||(w=u.split(\\\".\\\"));for(var V=w.length,T=-1;p&&++T<V;)p=p[w[T]];return p},xe=p=>typeof p==\\\"object\\\"&&typeof p._bitflags==\\\"number\\\",rr=1/0,de=-rr,Et=[];Et.total=0;var H=null,ne=i(\\\"\\\"),nr=p=>{var u=[],h=0,w={},V=T=>{for(var x=0,_=u[x],E=1;E<h;){var L=E+1;x=E,L<h&&u[L]._score<u[E]._score&&(x=L),u[x-1>>1]=u[x],E=1+(x<<1)}for(var G=x-1>>1;x>0&&_._score<u[G]._score;G=(x=G)-1>>1)u[x]=u[G];u[x]=_};return w.add=(T=>{var x=h;u[h++]=T;for(var _=x-1>>1;x>0&&T._score<u[_]._score;_=(x=_)-1>>1)u[x]=u[_];u[x]=T}),w.poll=(T=>{if(h!==0){var x=u[0];return u[0]=u[--h],V(),x}}),w.peek=(T=>{if(h!==0)return u[0]}),w.replaceTop=(T=>{u[0]=T,V()}),w},He=nr();return{single:e,go:r,prepare:i,cleanup:o}})});function jr(t,e){t.indexOf(e)===-1&&t.push(e)}function je(t,e){let r=t.indexOf(e);r>-1&&t.splice(r,1)}var fe=(t,e,r)=>r>e?e:r<t?t:r;var Ie=()=>{},ge=()=>{};var ue={};var wt=t=>/^-?(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)$/u.test(t);function Xr(t){return typeof t==\\\"object\\\"&&t!==null}var Vt=t=>/^0[^.\\\\s]+$/u.test(t);function Xe(t){let e;return()=>(e===void 0&&(e=t()),e)}var Te=t=>t;var Go=(t,e)=>r=>e(t(r)),Ze=(...t)=>t.reduce(Go);var Je=(t,e,r)=>{let n=e-t;return n===0?1:(r-t)/n};var Qe=class{constructor(){this.subscriptions=[]}add(e){return jr(this.subscriptions,e),()=>je(this.subscriptions,e)}notify(e,r,n){let i=this.subscriptions.length;if(i)if(i===1)this.subscriptions[0](e,r,n);else for(let o=0;o<i;o++){let s=this.subscriptions[o];s&&s(e,r,n)}}getSize(){return this.subscriptions.length}clear(){this.subscriptions.length=0}};var oe=t=>t*1e3,se=t=>t/1e3;function Mt(t,e){return e?t*(1e3/e):0}var Fn=(t,e,r)=>{let n=e-t;return((r-t)%n+n)%n+t};var Ln=(t,e,r)=>(((1-3*r+3*e)*t+(3*r-6*e))*t+3*e)*t,$o=1e-7,Wo=12;function Yo(t,e,r,n,i){let o,s,a=0;do s=e+(r-e)/2,o=Ln(s,n,i)-t,o>0?r=s:e=s;while(Math.abs(o)>$o&&++a<Wo);return s}function Ne(t,e,r,n){if(t===e&&r===n)return Te;let i=o=>Yo(o,0,1,t,r);return o=>o===0||o===1?o:Ln(i(o),e,n)}var sr=t=>e=>e<=.5?t(2*e)/2:(2-t(2*(1-e)))/2;var ar=t=>e=>1-t(1-e);var lr=Ne(.33,1.53,.69,.99),st=ar(lr),_t=sr(st);var It=t=>(t*=2)<1?.5*st(t):.5*(2-Math.pow(2,-10*(t-1)));var Ct=t=>1-Math.sin(Math.acos(t)),Zr=ar(Ct),Rt=sr(Ct);var Jr=Ne(.42,0,1,1),Qr=Ne(0,0,.58,1),Dt=Ne(.42,0,.58,1);var Bt=t=>Array.isArray(t)&&typeof t[0]!=\\\"number\\\";function Ot(t,e){return Bt(t)?t[Fn(0,t.length,e)]:t}var Ft=t=>Array.isArray(t)&&typeof t[0]==\\\"number\\\";var kn={linear:Te,easeIn:Jr,easeInOut:Dt,easeOut:Qr,circIn:Ct,circInOut:Rt,circOut:Zr,backIn:st,backInOut:_t,backOut:lr,anticipate:It},qo=t=>typeof t==\\\"string\\\",at=t=>{if(Ft(t)){ge(t.length===4,\\\"Cubic bezier arrays must contain four numerical values.\\\",\\\"cubic-bezier-length\\\");let[e,r,n,i]=t;return Ne(e,r,n,i)}else if(qo(t))return ge(kn[t]!==void 0,`Invalid easing type '${t}'`,\\\"invalid-easing-type\\\"),kn[t];return t};var Lt=[\\\"setup\\\",\\\"read\\\",\\\"resolveKeyframes\\\",\\\"preUpdate\\\",\\\"update\\\",\\\"preRender\\\",\\\"render\\\",\\\"postRender\\\"];var lt={value:null,addProjectionMetrics:null};function Pn(t,e){let r=new Set,n=new Set,i=!1,o=!1,s=new WeakSet,a={delta:0,timestamp:0,isProcessing:!1},l=0;function m(c){s.has(c)&&(f.schedule(c),t()),l++,c(a)}let f={schedule:(c,g=!1,d=!1)=>{let A=d&&i?r:n;return g&&s.add(c),A.has(c)||A.add(c),c},cancel:c=>{n.delete(c),s.delete(c)},process:c=>{if(a=c,i){o=!0;return}i=!0,[r,n]=[n,r],r.forEach(m),e&&lt.value&&lt.value.frameloop[e].push(l),l=0,r.clear(),i=!1,o&&(o=!1,f.process(c))}};return f}var Ho=40;function fr(t,e){let r=!1,n=!0,i={delta:0,timestamp:0,isProcessing:!1},o=()=>r=!0,s=Lt.reduce((D,F)=>(D[F]=Pn(o,e?F:void 0),D),{}),{setup:a,read:l,resolveKeyframes:m,preUpdate:f,update:c,preRender:g,render:d,postRender:R}=s,A=()=>{let D=ue.useManualTiming?i.timestamp:performance.now();r=!1,ue.useManualTiming||(i.delta=n?1e3/60:Math.max(Math.min(D-i.timestamp,Ho),1)),i.timestamp=D,i.isProcessing=!0,a.process(i),l.process(i),m.process(i),f.process(i),c.process(i),g.process(i),d.process(i),R.process(i),i.isProcessing=!1,r&&e&&(n=!1,t(A))},C=()=>{r=!0,n=!0,i.isProcessing||t(A)};return{schedule:Lt.reduce((D,F)=>{let M=s[F];return D[F]=(B,K=!1,v=!1)=>(r||C(),M.schedule(B,K,v)),D},{}),cancel:D=>{for(let F=0;F<Lt.length;F++)s[Lt[F]].cancel(D)},state:i,steps:s}}var{schedule:ce,cancel:kt,state:ft,steps:Af}=fr(typeof requestAnimationFrame!=\\\"undefined\\\"?requestAnimationFrame:Te,!0);var ur;function zo(){ur=void 0}var te={now:()=>(ur===void 0&&te.set(ft.isProcessing||ue.useManualTiming?ft.timestamp:performance.now()),ur),set:t=>{ur=t,queueMicrotask(zo)}};var ut={layout:0,mainThread:0,waapi:0};var Nn=t=>e=>typeof e==\\\"string\\\"&&e.startsWith(t),mr=Nn(\\\"--\\\"),jo=Nn(\\\"var(--\\\"),mt=t=>jo(t)?Xo.test(t.split(\\\"/*\\\")[0].trim()):!1,Xo=/var\\\\(--(?:[\\\\w-]+\\\\s*|[\\\\w-]+\\\\s*,(?:\\\\s*[^)(\\\\s]|\\\\s*\\\\((?:[^)(]|\\\\([^)(]*\\\\))*\\\\))+\\\\s*)\\\\)$/iu;function en(t){return typeof t!=\\\"string\\\"?!1:t.split(\\\"/*\\\")[0].includes(\\\"var(--\\\")}var Ee={test:t=>typeof t==\\\"number\\\",parse:parseFloat,transform:t=>t},Ce=O(b({},Ee),{transform:t=>fe(0,1,t)}),Pt=O(b({},Ee),{default:1});var Ke=t=>Math.round(t*1e5)/1e5;var ct=/-?(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)/gu;function Kn(t){return t==null}var Un=/^(?:#[\\\\da-f]{3,8}|(?:rgb|hsl)a?\\\\((?:-?[\\\\d.]+%?[,\\\\s]+){2}-?[\\\\d.]+%?\\\\s*(?:[,/]\\\\s*)?(?:\\\\b\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)?%?\\\\))$/iu;var pt=(t,e)=>r=>!!(typeof r==\\\"string\\\"&&Un.test(r)&&r.startsWith(t)||e&&!Kn(r)&&Object.prototype.hasOwnProperty.call(r,e)),cr=(t,e,r)=>n=>{if(typeof n!=\\\"string\\\")return n;let[i,o,s,a]=n.match(ct);return{[t]:parseFloat(i),[e]:parseFloat(o),[r]:parseFloat(s),alpha:a!==void 0?parseFloat(a):1}};var Zo=t=>fe(0,255,t),tn=O(b({},Ee),{transform:t=>Math.round(Zo(t))}),we={test:pt(\\\"rgb\\\",\\\"red\\\"),parse:cr(\\\"red\\\",\\\"green\\\",\\\"blue\\\"),transform:({red:t,green:e,blue:r,alpha:n=1})=>\\\"rgba(\\\"+tn.transform(t)+\\\", \\\"+tn.transform(e)+\\\", \\\"+tn.transform(r)+\\\", \\\"+Ke(Ce.transform(n))+\\\")\\\"};function Jo(t){let e=\\\"\\\",r=\\\"\\\",n=\\\"\\\",i=\\\"\\\";return t.length>5?(e=t.substring(1,3),r=t.substring(3,5),n=t.substring(5,7),i=t.substring(7,9)):(e=t.substring(1,2),r=t.substring(2,3),n=t.substring(3,4),i=t.substring(4,5),e+=e,r+=r,n+=n,i+=i),{red:parseInt(e,16),green:parseInt(r,16),blue:parseInt(n,16),alpha:i?parseInt(i,16)/255:1}}var Nt={test:pt(\\\"#\\\"),parse:Jo,transform:we.transform};var Kt=t=>({test:e=>typeof e==\\\"string\\\"&&e.endsWith(t)&&e.split(\\\" \\\").length===1,parse:parseFloat,transform:e=>`${e}${t}`}),Ve=Kt(\\\"deg\\\"),Ue=Kt(\\\"%\\\"),y=Kt(\\\"px\\\"),Gn=Kt(\\\"vh\\\"),$n=Kt(\\\"vw\\\"),rn=O(b({},Ue),{parse:t=>Ue.parse(t)/100,transform:t=>Ue.transform(t*100)});var Ge={test:pt(\\\"hsl\\\",\\\"hue\\\"),parse:cr(\\\"hue\\\",\\\"saturation\\\",\\\"lightness\\\"),transform:({hue:t,saturation:e,lightness:r,alpha:n=1})=>\\\"hsla(\\\"+Math.round(t)+\\\", \\\"+Ue.transform(Ke(e))+\\\", \\\"+Ue.transform(Ke(r))+\\\", \\\"+Ke(Ce.transform(n))+\\\")\\\"};var Q={test:t=>we.test(t)||Nt.test(t)||Ge.test(t),parse:t=>we.test(t)?we.parse(t):Ge.test(t)?Ge.parse(t):Nt.parse(t),transform:t=>typeof t==\\\"string\\\"?t:t.hasOwnProperty(\\\"red\\\")?we.transform(t):Ge.transform(t),getAnimatableNone:t=>{let e=Q.parse(t);return e.alpha=0,Q.transform(e)}};var Wn=/(?:#[\\\\da-f]{3,8}|(?:rgb|hsl)a?\\\\((?:-?[\\\\d.]+%?[,\\\\s]+){2}-?[\\\\d.]+%?\\\\s*(?:[,/]\\\\s*)?(?:\\\\b\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)?%?\\\\))/giu;function Qo(t){var e,r;return isNaN(t)&&typeof t==\\\"string\\\"&&(((e=t.match(ct))==null?void 0:e.length)||0)+(((r=t.match(Wn))==null?void 0:r.length)||0)>0}var qn=\\\"number\\\",Hn=\\\"color\\\",es=\\\"var\\\",ts=\\\"var(\\\",Yn=\\\"${}\\\",rs=/var\\\\s*\\\\(\\\\s*--(?:[\\\\w-]+\\\\s*|[\\\\w-]+\\\\s*,(?:\\\\s*[^)(\\\\s]|\\\\s*\\\\((?:[^)(]|\\\\([^)(]*\\\\))*\\\\))+\\\\s*)\\\\)|#[\\\\da-f]{3,8}|(?:rgb|hsl)a?\\\\((?:-?[\\\\d.]+%?[,\\\\s]+){2}-?[\\\\d.]+%?\\\\s*(?:[,/]\\\\s*)?(?:\\\\b\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)?%?\\\\)|-?(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)/giu;function et(t){let e=t.toString(),r=[],n={color:[],number:[],var:[]},i=[],o=0,a=e.replace(rs,l=>(Q.test(l)?(n.color.push(o),i.push(Hn),r.push(Q.parse(l))):l.startsWith(ts)?(n.var.push(o),i.push(es),r.push(l)):(n.number.push(o),i.push(qn),r.push(parseFloat(l))),++o,Yn)).split(Yn);return{values:r,split:a,indexes:n,types:i}}function zn(t){return et(t).values}function jn(t){let{split:e,types:r}=et(t),n=e.length;return i=>{let o=\\\"\\\";for(let s=0;s<n;s++)if(o+=e[s],i[s]!==void 0){let a=r[s];a===qn?o+=Ke(i[s]):a===Hn?o+=Q.transform(i[s]):o+=i[s]}return o}}var ns=t=>typeof t==\\\"number\\\"?0:Q.test(t)?Q.getAnimatableNone(t):t;function is(t){let e=zn(t);return jn(t)(e.map(ns))}var pe={test:Qo,parse:zn,createTransformer:jn,getAnimatableNone:is};function nn(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+(e-t)*6*r:r<1/2?e:r<2/3?t+(e-t)*(2/3-r)*6:t}function Xn({hue:t,saturation:e,lightness:r,alpha:n}){t/=360,e/=100,r/=100;let i=0,o=0,s=0;if(!e)i=o=s=r;else{let a=r<.5?r*(1+e):r+e-r*e,l=2*r-a;i=nn(l,a,t+1/3),o=nn(l,a,t),s=nn(l,a,t-1/3)}return{red:Math.round(i*255),green:Math.round(o*255),blue:Math.round(s*255),alpha:n}}function dt(t,e){return r=>r>0?e:t}var ve=(t,e,r)=>t+(e-t)*r;var on=(t,e,r)=>{let n=t*t,i=r*(e*e-n)+n;return i<0?0:Math.sqrt(i)},os=[Nt,we,Ge],ss=t=>os.find(e=>e.test(t));function Zn(t){let e=ss(t);if(Ie(!!e,`'${t}' is not an animatable color. Use the equivalent color code instead.`,\\\"color-not-animatable\\\"),!e)return!1;let r=e.parse(t);return e===Ge&&(r=Xn(r)),r}var sn=(t,e)=>{let r=Zn(t),n=Zn(e);if(!r||!n)return dt(t,e);let i=b({},r);return o=>(i.red=on(r.red,n.red,o),i.green=on(r.green,n.green,o),i.blue=on(r.blue,n.blue,o),i.alpha=ve(r.alpha,n.alpha,o),we.transform(i))};var pr=new Set([\\\"none\\\",\\\"hidden\\\"]);function Jn(t,e){return pr.has(t)?r=>r<=0?t:e:r=>r>=1?e:t}function as(t,e){return r=>ve(t,e,r)}function dr(t){return typeof t==\\\"number\\\"?as:typeof t==\\\"string\\\"?mt(t)?dt:Q.test(t)?sn:us:Array.isArray(t)?Qn:typeof t==\\\"object\\\"?Q.test(t)?sn:ls:dt}function Qn(t,e){let r=[...t],n=r.length,i=t.map((o,s)=>dr(o)(o,e[s]));return o=>{for(let s=0;s<n;s++)r[s]=i[s](o);return r}}function ls(t,e){let r=b(b({},t),e),n={};for(let i in r)t[i]!==void 0&&e[i]!==void 0&&(n[i]=dr(t[i])(t[i],e[i]));return i=>{for(let o in n)r[o]=n[o](i);return r}}function fs(t,e){var i;let r=[],n={color:0,var:0,number:0};for(let o=0;o<e.values.length;o++){let s=e.types[o],a=t.indexes[s][n[s]],l=(i=t.values[a])!=null?i:0;r[o]=l,n[s]++}return r}var us=(t,e)=>{let r=pe.createTransformer(e),n=et(t),i=et(e);return n.indexes.var.length===i.indexes.var.length&&n.indexes.color.length===i.indexes.color.length&&n.indexes.number.length>=i.indexes.number.length?pr.has(t)&&!i.values.length||pr.has(e)&&!n.values.length?Jn(t,e):Ze(Qn(fs(n,i),i.values),r):(Ie(!0,`Complex values '${t}' and '${e}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`,\\\"complex-values-different\\\"),dt(t,e))};function hr(t,e,r){return typeof t==\\\"number\\\"&&typeof e==\\\"number\\\"&&typeof r==\\\"number\\\"?ve(t,e,r):dr(t)(t,e)}var ei=t=>{let e=({timestamp:r})=>t(r);return{start:(r=!0)=>ce.update(e,r),stop:()=>kt(e),now:()=>ft.isProcessing?ft.timestamp:te.now()}};var gr=(t,e,r=10)=>{let n=\\\"\\\",i=Math.max(Math.round(e/r),2);for(let o=0;o<i;o++)n+=Math.round(t(o/(i-1))*1e4)/1e4+\\\", \\\";return`linear(${n.substring(0,n.length-2)})`};function ht(t){let e=0,r=50,n=t.next(e);for(;!n.done&&e<2e4;)e+=r,n=t.next(e);return e>=2e4?1/0:e}function Ut(t,e=100,r){let n=r(O(b({},t),{keyframes:[0,e]})),i=Math.min(ht(n),2e4);return{type:\\\"keyframes\\\",ease:o=>n.next(i*o).value/e,duration:se(i)}}var ms=5;function xr(t,e,r){let n=Math.max(e-ms,0);return Mt(r-t(n),e-n)}var Z={stiffness:100,damping:10,mass:1,velocity:0,duration:800,bounce:.3,visualDuration:.3,restSpeed:{granular:.01,default:2},restDelta:{granular:.005,default:.5},minDuration:.01,maxDuration:10,minDamping:.05,maxDamping:1};var ln=.001;function ti({duration:t=Z.duration,bounce:e=Z.bounce,velocity:r=Z.velocity,mass:n=Z.mass}){let i,o;Ie(t<=oe(Z.maxDuration),\\\"Spring duration must be 10 seconds or less\\\",\\\"spring-duration-limit\\\");let s=1-e;s=fe(Z.minDamping,Z.maxDamping,s),t=fe(Z.minDuration,Z.maxDuration,se(t)),s<1?(i=m=>{let f=m*s,c=f*t,g=f-r,d=yr(m,s),R=Math.exp(-c);return ln-g/d*R},o=m=>{let c=m*s*t,g=c*r+r,d=Math.pow(s,2)*Math.pow(m,2)*t,R=Math.exp(-c),A=yr(Math.pow(m,2),s);return(-i(m)+ln>0?-1:1)*((g-d)*R)/A}):(i=m=>{let f=Math.exp(-m*t),c=(m-r)*t+1;return-ln+f*c},o=m=>{let f=Math.exp(-m*t),c=(r-m)*(t*t);return f*c});let a=5/t,l=ps(i,o,a);if(t=oe(t),isNaN(l))return{stiffness:Z.stiffness,damping:Z.damping,duration:t};{let m=Math.pow(l,2)*n;return{stiffness:m,damping:s*2*Math.sqrt(n*m),duration:t}}}var cs=12;function ps(t,e,r){let n=r;for(let i=1;i<cs;i++)n=n-t(n)/e(n);return n}function yr(t,e){return t*Math.sqrt(1-e*e)}var ds=[\\\"duration\\\",\\\"bounce\\\"],hs=[\\\"stiffness\\\",\\\"damping\\\",\\\"mass\\\"];function ri(t,e){return e.some(r=>t[r]!==void 0)}function gs(t){let e=b({velocity:Z.velocity,stiffness:Z.stiffness,damping:Z.damping,mass:Z.mass,isResolvedFromDuration:!1},t);if(!ri(t,hs)&&ri(t,ds))if(t.visualDuration){let r=t.visualDuration,n=2*Math.PI/(r*1.2),i=n*n,o=2*fe(.05,1,1-(t.bounce||0))*Math.sqrt(i);e=O(b({},e),{mass:Z.mass,stiffness:i,damping:o})}else{let r=ti(t);e=O(b(b({},e),r),{mass:Z.mass}),e.isResolvedFromDuration=!0}return e}function Re(t=Z.visualDuration,e=Z.bounce){let r=typeof t!=\\\"object\\\"?{visualDuration:t,keyframes:[0,1],bounce:e}:t,{restSpeed:n,restDelta:i}=r,o=r.keyframes[0],s=r.keyframes[r.keyframes.length-1],a={done:!1,value:o},{stiffness:l,damping:m,mass:f,duration:c,velocity:g,isResolvedFromDuration:d}=gs(O(b({},r),{velocity:-se(r.velocity||0)})),R=g||0,A=m/(2*Math.sqrt(l*f)),C=s-o,S=se(Math.sqrt(l/f)),I=Math.abs(C)<5;n||(n=I?Z.restSpeed.granular:Z.restSpeed.default),i||(i=I?Z.restDelta.granular:Z.restDelta.default);let D;if(A<1){let M=yr(S,A);D=B=>{let K=Math.exp(-A*S*B);return s-K*((R+A*S*C)/M*Math.sin(M*B)+C*Math.cos(M*B))}}else if(A===1)D=M=>s-Math.exp(-S*M)*(C+(R+S*C)*M);else{let M=S*Math.sqrt(A*A-1);D=B=>{let K=Math.exp(-A*S*B),v=Math.min(M*B,300);return s-K*((R+A*S*C)*Math.sinh(v)+M*C*Math.cosh(v))/M}}let F={calculatedDuration:d&&c||null,next:M=>{let B=D(M);if(d)a.done=M>=c;else{let K=M===0?R:0;A<1&&(K=M===0?oe(R):xr(D,M,B));let v=Math.abs(K)<=n,P=Math.abs(s-B)<=i;a.done=v&&P}return a.value=a.done?s:B,a},toString:()=>{let M=Math.min(ht(F),2e4),B=gr(K=>F.next(M*K).value,M,30);return M+\\\"ms \\\"+B},toTransition:()=>{}};return F}Re.applyToOptions=t=>{let e=Ut(t,100,Re);return t.ease=e.ease,t.duration=oe(e.duration),t.type=\\\"keyframes\\\",t};function Gt({keyframes:t,velocity:e=0,power:r=.8,timeConstant:n=325,bounceDamping:i=10,bounceStiffness:o=500,modifyTarget:s,min:a,max:l,restDelta:m=.5,restSpeed:f}){let c=t[0],g={done:!1,value:c},d=v=>a!==void 0&&v<a||l!==void 0&&v>l,R=v=>a===void 0?l:l===void 0||Math.abs(a-v)<Math.abs(l-v)?a:l,A=r*e,C=c+A,S=s===void 0?C:s(C);S!==C&&(A=S-c);let I=v=>-A*Math.exp(-v/n),D=v=>S+I(v),F=v=>{let P=I(v),N=D(v);g.done=Math.abs(P)<=m,g.value=g.done?S:N},M,B,K=v=>{d(g.value)&&(M=v,B=Re({keyframes:[g.value,R(g.value)],velocity:xr(D,v,g.value),damping:i,stiffness:o,restDelta:m,restSpeed:f}))};return K(0),{calculatedDuration:null,next:v=>{let P=!1;return!B&&M===void 0&&(P=!0,F(v),K(v)),M!==void 0&&v>=M?B.next(v-M):(!P&&F(v),g)}}}function xs(t,e,r){let n=[],i=r||ue.mix||hr,o=t.length-1;for(let s=0;s<o;s++){let a=i(t[s],t[s+1]);if(e){let l=Array.isArray(e)?e[s]||Te:e;a=Ze(l,a)}n.push(a)}return n}function ni(t,e,{clamp:r=!0,ease:n,mixer:i}={}){let o=t.length;if(ge(o===e.length,\\\"Both input and output ranges must be the same length\\\",\\\"range-length\\\"),o===1)return()=>e[0];if(o===2&&e[0]===e[1])return()=>e[1];let s=t[0]===t[1];t[0]>t[o-1]&&(t=[...t].reverse(),e=[...e].reverse());let a=xs(e,n,i),l=a.length,m=f=>{if(s&&f<t[0])return e[0];let c=0;if(l>1)for(;c<t.length-2&&!(f<t[c+1]);c++);let g=Je(t[c],t[c+1],f);return a[c](g)};return r?f=>m(fe(t[0],t[o-1],f)):m}function $t(t,e){let r=t[t.length-1];for(let n=1;n<=e;n++){let i=Je(0,e,n);t.push(ve(r,1,i))}}function Wt(t){let e=[0];return $t(e,t.length-1),e}function ii(t,e){return t.map(r=>r*e)}function ys(t,e){return t.map(()=>e||Dt).splice(0,t.length-1)}function tt({duration:t=300,keyframes:e,times:r,ease:n=\\\"easeInOut\\\"}){let i=Bt(n)?n.map(at):at(n),o={done:!1,value:e[0]},s=ii(r&&r.length===e.length?r:Wt(e),t),a=ni(s,e,{ease:Array.isArray(i)?i:ys(e,i)});return{calculatedDuration:t,next:l=>(o.value=a(l),o.done=l>=t,o)}}var Ts=t=>t!==null;function gt(t,{repeat:e,repeatType:r=\\\"loop\\\"},n,i=1){let o=t.filter(Ts),a=i<0||e&&r!==\\\"loop\\\"&&e%2===1?0:o.length-1;return!a||n===void 0?o[a]:n}var vs={decay:Gt,inertia:Gt,tween:tt,keyframes:tt,spring:Re};function Tr(t){typeof t.type==\\\"string\\\"&&(t.type=vs[t.type])}var $e=class{constructor(){this.updateFinished()}get finished(){return this._finished}updateFinished(){this._finished=new Promise(e=>{this.resolve=e})}notifyFinished(){this.resolve()}then(e,r){return this.finished.then(e,r)}};var bs=t=>t/100,We=class extends $e{constructor(e){super(),this.state=\\\"idle\\\",this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.stop=()=>{var n,i;let{motionValue:r}=this.options;r&&r.updatedAt!==te.now()&&this.tick(te.now()),this.isStopped=!0,this.state!==\\\"idle\\\"&&(this.teardown(),(i=(n=this.options).onStop)==null||i.call(n))},ut.mainThread++,this.options=e,this.initAnimation(),this.play(),e.autoplay===!1&&this.pause()}initAnimation(){let{options:e}=this;Tr(e);let{type:r=tt,repeat:n=0,repeatDelay:i=0,repeatType:o,velocity:s=0}=e,{keyframes:a}=e,l=r||tt;l!==tt&&typeof a[0]!=\\\"number\\\"&&(this.mixKeyframes=Ze(bs,hr(a[0],a[1])),a=[0,100]);let m=l(O(b({},e),{keyframes:a}));o===\\\"mirror\\\"&&(this.mirroredGenerator=l(O(b({},e),{keyframes:[...a].reverse(),velocity:-s}))),m.calculatedDuration===null&&(m.calculatedDuration=ht(m));let{calculatedDuration:f}=m;this.calculatedDuration=f,this.resolvedDuration=f+i,this.totalDuration=this.resolvedDuration*(n+1)-i,this.generator=m}updateTime(e){let r=Math.round(e-this.startTime)*this.playbackSpeed;this.holdTime!==null?this.currentTime=this.holdTime:this.currentTime=r}tick(e,r=!1){let{generator:n,totalDuration:i,mixKeyframes:o,mirroredGenerator:s,resolvedDuration:a,calculatedDuration:l}=this;if(this.startTime===null)return n.next(0);let{delay:m=0,keyframes:f,repeat:c,repeatType:g,repeatDelay:d,type:R,onUpdate:A,finalKeyframe:C}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,e):this.speed<0&&(this.startTime=Math.min(e-i/this.speed,this.startTime)),r?this.currentTime=e:this.updateTime(e);let S=this.currentTime-m*(this.playbackSpeed>=0?1:-1),I=this.playbackSpeed>=0?S<0:S>i;this.currentTime=Math.max(S,0),this.state===\\\"finished\\\"&&this.holdTime===null&&(this.currentTime=i);let D=this.currentTime,F=n;if(c){let v=Math.min(this.currentTime,i)/a,P=Math.floor(v),N=v%1;!N&&v>=1&&(N=1),N===1&&P--,P=Math.min(P,c+1),P%2&&(g===\\\"reverse\\\"?(N=1-N,d&&(N-=d/a)):g===\\\"mirror\\\"&&(F=s)),D=fe(0,1,N)*a}let M=I?{done:!1,value:f[0]}:F.next(D);o&&(M.value=o(M.value));let{done:B}=M;!I&&l!==null&&(B=this.playbackSpeed>=0?this.currentTime>=i:this.currentTime<=0);let K=this.holdTime===null&&(this.state===\\\"finished\\\"||this.state===\\\"running\\\"&&B);return K&&R!==Gt&&(M.value=gt(f,this.options,C,this.speed)),A&&A(M.value),K&&this.finish(),M}then(e,r){return this.finished.then(e,r)}get duration(){return se(this.calculatedDuration)}get iterationDuration(){let{delay:e=0}=this.options||{};return this.duration+se(e)}get time(){return se(this.currentTime)}set time(e){var r;e=oe(e),this.currentTime=e,this.startTime===null||this.holdTime!==null||this.playbackSpeed===0?this.holdTime=e:this.driver&&(this.startTime=this.driver.now()-e/this.playbackSpeed),(r=this.driver)==null||r.start(!1)}get speed(){return this.playbackSpeed}set speed(e){this.updateTime(te.now());let r=this.playbackSpeed!==e;this.playbackSpeed=e,r&&(this.time=se(this.currentTime))}play(){var i,o;if(this.isStopped)return;let{driver:e=ei,startTime:r}=this.options;this.driver||(this.driver=e(s=>this.tick(s))),(o=(i=this.options).onPlay)==null||o.call(i);let n=this.driver.now();this.state===\\\"finished\\\"?(this.updateFinished(),this.startTime=n):this.holdTime!==null?this.startTime=n-this.holdTime:this.startTime||(this.startTime=r!=null?r:n),this.state===\\\"finished\\\"&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state=\\\"running\\\",this.driver.start()}pause(){this.state=\\\"paused\\\",this.updateTime(te.now()),this.holdTime=this.currentTime}complete(){this.state!==\\\"running\\\"&&this.play(),this.state=\\\"finished\\\",this.holdTime=null}finish(){var e,r;this.notifyFinished(),this.teardown(),this.state=\\\"finished\\\",(r=(e=this.options).onComplete)==null||r.call(e)}cancel(){var e,r;this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),(r=(e=this.options).onCancel)==null||r.call(e)}teardown(){this.state=\\\"idle\\\",this.stopDriver(),this.startTime=this.holdTime=null,ut.mainThread--}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(e){return this.startTime=0,this.tick(e,!0)}attachTimeline(e){var r;return this.options.allowFlatten&&(this.options.type=\\\"keyframes\\\",this.options.ease=\\\"linear\\\",this.initAnimation()),(r=this.driver)==null||r.stop(),e.observe(this)}};function oi(t){var e;for(let r=1;r<t.length;r++)(e=t[r])!=null||(t[r]=t[r-1])}var rt=t=>t*180/Math.PI,fn=t=>{let e=rt(Math.atan2(t[1],t[0]));return un(e)},Ss={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:t=>(Math.abs(t[0])+Math.abs(t[3]))/2,rotate:fn,rotateZ:fn,skewX:t=>rt(Math.atan(t[1])),skewY:t=>rt(Math.atan(t[2])),skew:t=>(Math.abs(t[1])+Math.abs(t[2]))/2},un=t=>(t=t%360,t<0&&(t+=360),t),si=fn,ai=t=>Math.sqrt(t[0]*t[0]+t[1]*t[1]),li=t=>Math.sqrt(t[4]*t[4]+t[5]*t[5]),As={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:ai,scaleY:li,scale:t=>(ai(t)+li(t))/2,rotateX:t=>un(rt(Math.atan2(t[6],t[5]))),rotateY:t=>un(rt(Math.atan2(-t[2],t[0]))),rotateZ:si,rotate:si,skewX:t=>rt(Math.atan(t[4])),skewY:t=>rt(Math.atan(t[1])),skew:t=>(Math.abs(t[1])+Math.abs(t[4]))/2};function vr(t){return t.includes(\\\"scale\\\")?1:0}function br(t,e){if(!t||t===\\\"none\\\")return vr(e);let r=t.match(/^matrix3d\\\\(([-\\\\d.e\\\\s,]+)\\\\)$/u),n,i;if(r)n=As,i=r;else{let a=t.match(/^matrix\\\\(([-\\\\d.e\\\\s,]+)\\\\)$/u);n=Ss,i=a}if(!i)return vr(e);let o=n[e],s=i[1].split(\\\",\\\").map(Es);return typeof o==\\\"function\\\"?o(s):s[o]}var fi=(t,e)=>{let{transform:r=\\\"none\\\"}=getComputedStyle(t);return br(r,e)};function Es(t){return parseFloat(t.trim())}var Me=[\\\"transformPerspective\\\",\\\"x\\\",\\\"y\\\",\\\"z\\\",\\\"translateX\\\",\\\"translateY\\\",\\\"translateZ\\\",\\\"scale\\\",\\\"scaleX\\\",\\\"scaleY\\\",\\\"rotate\\\",\\\"rotateX\\\",\\\"rotateY\\\",\\\"rotateZ\\\",\\\"skew\\\",\\\"skewX\\\",\\\"skewY\\\"],Ae=new Set(Me);var mn=t=>t===Ee||t===y,ws=new Set([\\\"x\\\",\\\"y\\\",\\\"z\\\"]),Vs=Me.filter(t=>!ws.has(t));function ui(t){let e=[];return Vs.forEach(r=>{let n=t.getValue(r);n!==void 0&&(e.push([r,n.get()]),n.set(r.startsWith(\\\"scale\\\")?1:0))}),e}var De={width:({x:t},{paddingLeft:e=\\\"0\\\",paddingRight:r=\\\"0\\\"})=>t.max-t.min-parseFloat(e)-parseFloat(r),height:({y:t},{paddingTop:e=\\\"0\\\",paddingBottom:r=\\\"0\\\"})=>t.max-t.min-parseFloat(e)-parseFloat(r),top:(t,{top:e})=>parseFloat(e),left:(t,{left:e})=>parseFloat(e),bottom:({y:t},{top:e})=>parseFloat(e)+(t.max-t.min),right:({x:t},{left:e})=>parseFloat(e)+(t.max-t.min),x:(t,{transform:e})=>br(e,\\\"x\\\"),y:(t,{transform:e})=>br(e,\\\"y\\\")};De.translateX=De.x;De.translateY=De.y;var nt=new Set,cn=!1,pn=!1,dn=!1;function mi(){if(pn){let t=Array.from(nt).filter(n=>n.needsMeasurement),e=new Set(t.map(n=>n.element)),r=new Map;e.forEach(n=>{let i=ui(n);i.length&&(r.set(n,i),n.render())}),t.forEach(n=>n.measureInitialState()),e.forEach(n=>{n.render();let i=r.get(n);i&&i.forEach(([o,s])=>{var a;(a=n.getValue(o))==null||a.set(s)})}),t.forEach(n=>n.measureEndState()),t.forEach(n=>{n.suspendedScrollY!==void 0&&window.scrollTo(0,n.suspendedScrollY)})}pn=!1,cn=!1,nt.forEach(t=>t.complete(dn)),nt.clear()}function ci(){nt.forEach(t=>{t.readKeyframes(),t.needsMeasurement&&(pn=!0)})}function pi(){dn=!0,ci(),mi(),dn=!1}var Ye=class{constructor(e,r,n,i,o,s=!1){this.state=\\\"pending\\\",this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...e],this.onComplete=r,this.name=n,this.motionValue=i,this.element=o,this.isAsync=s}scheduleResolve(){this.state=\\\"scheduled\\\",this.isAsync?(nt.add(this),cn||(cn=!0,ce.read(ci),ce.resolveKeyframes(mi))):(this.readKeyframes(),this.complete())}readKeyframes(){let{unresolvedKeyframes:e,name:r,element:n,motionValue:i}=this;if(e[0]===null){let o=i==null?void 0:i.get(),s=e[e.length-1];if(o!==void 0)e[0]=o;else if(n&&r){let a=n.readValue(r,s);a!=null&&(e[0]=a)}e[0]===void 0&&(e[0]=s),i&&o===void 0&&i.set(e[0])}oi(e)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(e=!1){this.state=\\\"complete\\\",this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,e),nt.delete(this)}cancel(){this.state===\\\"scheduled\\\"&&(nt.delete(this),this.state=\\\"pending\\\")}resume(){this.state===\\\"pending\\\"&&this.scheduleResolve()}};var di=t=>t.startsWith(\\\"--\\\");function hi(t,e,r){di(e)?t.style.setProperty(e,r):t.style[e]=r}var gi=Xe(()=>window.ScrollTimeline!==void 0);var xi={};function yi(t,e){let r=Xe(t);return()=>{var n;return(n=xi[e])!=null?n:r()}}var Sr=yi(()=>{try{document.createElement(\\\"div\\\").animate({opacity:0},{easing:\\\"linear(0, 1)\\\"})}catch(t){return!1}return!0},\\\"linearEasing\\\");var it=([t,e,r,n])=>`cubic-bezier(${t}, ${e}, ${r}, ${n})`;var hn={linear:\\\"linear\\\",ease:\\\"ease\\\",easeIn:\\\"ease-in\\\",easeOut:\\\"ease-out\\\",easeInOut:\\\"ease-in-out\\\",circIn:it([0,.65,.55,1]),circOut:it([.55,0,1,.45]),backIn:it([.31,.01,.66,-.59]),backOut:it([.33,1.53,.69,.99])};function gn(t,e){if(t)return typeof t==\\\"function\\\"?Sr()?gr(t,e):\\\"ease-out\\\":Ft(t)?it(t):Array.isArray(t)?t.map(r=>gn(r,e)||hn.easeOut):hn[t]}function Ti(t,e,r,{delay:n=0,duration:i=300,repeat:o=0,repeatType:s=\\\"loop\\\",ease:a=\\\"easeOut\\\",times:l}={},m=void 0){let f={[e]:r};l&&(f.offset=l);let c=gn(a,i);Array.isArray(c)&&(f.easing=c),lt.value&&ut.waapi++;let g={delay:n,duration:i,easing:Array.isArray(c)?\\\"linear\\\":c,fill:\\\"both\\\",iterations:o+1,direction:s===\\\"reverse\\\"?\\\"alternate\\\":\\\"normal\\\"};m&&(g.pseudoElement=m);let d=t.animate(f,g);return lt.value&&d.finished.finally(()=>{ut.waapi--}),d}function ot(t){return typeof t==\\\"function\\\"&&\\\"applyToOptions\\\"in t}function vi(r){var n=r,{type:t}=n,e=X(n,[\\\"type\\\"]);var i,o;return ot(t)&&Sr()?t.applyToOptions(e):((i=e.duration)!=null||(e.duration=300),(o=e.ease)!=null||(e.ease=\\\"easeOut\\\"),e)}var Ar=class extends $e{constructor(e){if(super(),this.finishedTime=null,this.isStopped=!1,this.manualStartTime=null,!e)return;let{element:r,name:n,keyframes:i,pseudoElement:o,allowFlatten:s=!1,finalKeyframe:a,onComplete:l}=e;this.isPseudoElement=!!o,this.allowFlatten=s,this.options=e,ge(typeof e.type!=\\\"string\\\",`Mini animate() doesn't support \\\"type\\\" as a string.`,\\\"mini-spring\\\");let m=vi(e);this.animation=Ti(r,n,i,m,o),m.autoplay===!1&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!o){let f=gt(i,this.options,a,this.speed);this.updateMotionValue?this.updateMotionValue(f):hi(r,n,f),this.animation.cancel()}l==null||l(),this.notifyFinished()}}play(){this.isStopped||(this.manualStartTime=null,this.animation.play(),this.state===\\\"finished\\\"&&this.updateFinished())}pause(){this.animation.pause()}complete(){var e,r;(r=(e=this.animation).finish)==null||r.call(e)}cancel(){try{this.animation.cancel()}catch(e){}}stop(){if(this.isStopped)return;this.isStopped=!0;let{state:e}=this;e===\\\"idle\\\"||e===\\\"finished\\\"||(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){var e,r;this.isPseudoElement||(r=(e=this.animation).commitStyles)==null||r.call(e)}get duration(){var r,n;let e=((n=(r=this.animation.effect)==null?void 0:r.getComputedTiming)==null?void 0:n.call(r).duration)||0;return se(Number(e))}get iterationDuration(){let{delay:e=0}=this.options||{};return this.duration+se(e)}get time(){return se(Number(this.animation.currentTime)||0)}set time(e){this.manualStartTime=null,this.finishedTime=null,this.animation.currentTime=oe(e)}get speed(){return this.animation.playbackRate}set speed(e){e<0&&(this.finishedTime=null),this.animation.playbackRate=e}get state(){return this.finishedTime!==null?\\\"finished\\\":this.animation.playState}get startTime(){var e;return(e=this.manualStartTime)!=null?e:Number(this.animation.startTime)}set startTime(e){this.manualStartTime=this.animation.startTime=e}attachTimeline({timeline:e,observe:r}){var n;return this.allowFlatten&&((n=this.animation.effect)==null||n.updateTiming({easing:\\\"linear\\\"})),this.animation.onfinish=null,e&&gi()?(this.animation.timeline=e,Te):r(this)}};var bi={anticipate:It,backInOut:_t,circInOut:Rt};function Ms(t){return t in bi}function Si(t){typeof t.ease==\\\"string\\\"&&Ms(t.ease)&&(t.ease=bi[t.ease])}var xn=10,Er=class extends Ar{constructor(e){Si(e),Tr(e),super(e),e.startTime!==void 0&&(this.startTime=e.startTime),this.options=e}updateMotionValue(e){let f=this.options,{motionValue:r,onUpdate:n,onComplete:i,element:o}=f,s=X(f,[\\\"motionValue\\\",\\\"onUpdate\\\",\\\"onComplete\\\",\\\"element\\\"]);if(!r)return;if(e!==void 0){r.set(e);return}let a=new We(O(b({},s),{autoplay:!1})),l=Math.max(xn,te.now()-this.startTime),m=fe(0,xn,l-xn);r.setWithVelocity(a.sample(Math.max(0,l-m)).value,a.sample(l).value,m),a.stop()}};var yn=(t,e)=>e===\\\"zIndex\\\"?!1:!!(typeof t==\\\"number\\\"||Array.isArray(t)||typeof t==\\\"string\\\"&&(pe.test(t)||t===\\\"0\\\")&&!t.startsWith(\\\"url(\\\"));function _s(t){let e=t[0];if(t.length===1)return!0;for(let r=0;r<t.length;r++)if(t[r]!==e)return!0}function Ai(t,e,r,n){let i=t[0];if(i===null)return!1;if(e===\\\"display\\\"||e===\\\"visibility\\\")return!0;let o=t[t.length-1],s=yn(i,e),a=yn(o,e);return Ie(s===a,`You are trying to animate ${e} from \\\"${i}\\\" to \\\"${o}\\\". \\\"${s?o:i}\\\" is not an animatable value.`,\\\"value-not-animatable\\\"),!s||!a?!1:_s(t)||(r===\\\"spring\\\"||ot(r))&&n}function Yt(t){t.duration=0,t.type=\\\"keyframes\\\"}var Is=new Set([\\\"opacity\\\",\\\"clipPath\\\",\\\"filter\\\",\\\"transform\\\"]),Cs=Xe(()=>Object.hasOwnProperty.call(Element.prototype,\\\"animate\\\"));function Ei(t){var f;let{motionValue:e,name:r,repeatDelay:n,repeatType:i,damping:o,type:s}=t;if(!(((f=e==null?void 0:e.owner)==null?void 0:f.current)instanceof HTMLElement))return!1;let{onUpdate:l,transformTemplate:m}=e.owner.getProps();return Cs()&&r&&Is.has(r)&&(r!==\\\"transform\\\"||!m)&&!l&&!n&&i!==\\\"mirror\\\"&&o!==0&&s!==\\\"inertia\\\"}var Rs=40,wr=class extends $e{constructor(g){var d=g,{autoplay:e=!0,delay:r=0,type:n=\\\"keyframes\\\",repeat:i=0,repeatDelay:o=0,repeatType:s=\\\"loop\\\",keyframes:a,name:l,motionValue:m,element:f}=d,c=X(d,[\\\"autoplay\\\",\\\"delay\\\",\\\"type\\\",\\\"repeat\\\",\\\"repeatDelay\\\",\\\"repeatType\\\",\\\"keyframes\\\",\\\"name\\\",\\\"motionValue\\\",\\\"element\\\"]);var C;super(),this.stop=()=>{var S,I;this._animation&&(this._animation.stop(),(S=this.stopTimeline)==null||S.call(this)),(I=this.keyframeResolver)==null||I.cancel()},this.createdAt=te.now();let R=b({autoplay:e,delay:r,type:n,repeat:i,repeatDelay:o,repeatType:s,name:l,motionValue:m,element:f},c),A=(f==null?void 0:f.KeyframeResolver)||Ye;this.keyframeResolver=new A(a,(S,I,D)=>this.onKeyframesResolved(S,I,R,!D),l,m,f),(C=this.keyframeResolver)==null||C.scheduleResolve()}onKeyframesResolved(e,r,n,i){var C,S;this.keyframeResolver=void 0;let{name:o,type:s,velocity:a,delay:l,isHandoff:m,onUpdate:f}=n;this.resolvedAt=te.now(),Ai(e,o,s,a)||((ue.instantAnimations||!l)&&(f==null||f(gt(e,n,r))),e[0]=e[e.length-1],Yt(n),n.repeat=0);let c=i?this.resolvedAt?this.resolvedAt-this.createdAt>Rs?this.resolvedAt:this.createdAt:this.createdAt:void 0,g=O(b({startTime:c,finalKeyframe:r},n),{keyframes:e}),d=!m&&Ei(g),R=(S=(C=g.motionValue)==null?void 0:C.owner)==null?void 0:S.current,A=d?new Er(O(b({},g),{element:R})):new We(g);A.finished.then(()=>{this.notifyFinished()}).catch(Te),this.pendingTimeline&&(this.stopTimeline=A.attachTimeline(this.pendingTimeline),this.pendingTimeline=void 0),this._animation=A}get finished(){return this._animation?this.animation.finished:this._finished}then(e,r){return this.finished.finally(e).then(()=>{})}get animation(){var e;return this._animation||((e=this.keyframeResolver)==null||e.resume(),pi()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(e){this.animation.time=e}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(e){this.animation.speed=e}get startTime(){return this.animation.startTime}attachTimeline(e){return this._animation?this.stopTimeline=this.animation.attachTimeline(e):this.pendingTimeline=e,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){var e;this._animation&&this.animation.cancel(),(e=this.keyframeResolver)==null||e.cancel()}};var Vr=class{constructor(e){this.stop=()=>this.runAll(\\\"stop\\\"),this.animations=e.filter(Boolean)}get finished(){return Promise.all(this.animations.map(e=>e.finished))}getAll(e){return this.animations[0][e]}setAll(e,r){for(let n=0;n<this.animations.length;n++)this.animations[n][e]=r}attachTimeline(e){let r=this.animations.map(n=>n.attachTimeline(e));return()=>{r.forEach((n,i)=>{n&&n(),this.animations[i].stop()})}}get time(){return this.getAll(\\\"time\\\")}set time(e){this.setAll(\\\"time\\\",e)}get speed(){return this.getAll(\\\"speed\\\")}set speed(e){this.setAll(\\\"speed\\\",e)}get state(){return this.getAll(\\\"state\\\")}get startTime(){return this.getAll(\\\"startTime\\\")}get duration(){return wi(this.animations,\\\"duration\\\")}get iterationDuration(){return wi(this.animations,\\\"iterationDuration\\\")}runAll(e){this.animations.forEach(r=>r[e]())}play(){this.runAll(\\\"play\\\")}pause(){this.runAll(\\\"pause\\\")}cancel(){this.runAll(\\\"cancel\\\")}complete(){this.runAll(\\\"complete\\\")}};function wi(t,e){let r=0;for(let n=0;n<t.length;n++){let i=t[n][e];i!==null&&i>r&&(r=i)}return r}var qt=class extends Vr{then(e,r){return this.finished.finally(e).then(()=>{})}};var Ds=/^var\\\\(--(?:([\\\\w-]+)|([\\\\w-]+), ?([a-zA-Z\\\\d ()%#.,-]+))\\\\)/u;function Bs(t){let e=Ds.exec(t);if(!e)return[,];let[,r,n,i]=e;return[`--${r!=null?r:n}`,i]}var Os=4;function Tn(t,e,r=1){ge(r<=Os,`Max CSS variable fallback depth detected in property \\\"${t}\\\". This may indicate a circular fallback dependency.`,\\\"max-css-var-depth\\\");let[n,i]=Bs(t);if(!n)return;let o=window.getComputedStyle(e).getPropertyValue(n);if(o){let s=o.trim();return wt(s)?parseFloat(s):s}return mt(i)?Tn(i,e,r+1):i}var Fs={type:\\\"spring\\\",stiffness:500,damping:25,restSpeed:10},Ls=t=>({type:\\\"spring\\\",stiffness:550,damping:t===0?2*Math.sqrt(550):30,restSpeed:10}),ks={type:\\\"keyframes\\\",duration:.8},Ps={type:\\\"keyframes\\\",ease:[.25,.1,.35,1],duration:.3},Vi=(t,{keyframes:e})=>e.length>2?ks:Ae.has(t)?t.startsWith(\\\"scale\\\")?Ls(e[1]):Fs:Ps;var Ns=t=>t!==null;function Mi(t,{repeat:e,repeatType:r=\\\"loop\\\"},n){let i=t.filter(Ns),o=e&&r!==\\\"loop\\\"&&e%2===1?0:i.length-1;return!o||n===void 0?i[o]:n}function Mr(t,e){var r,n;return(n=(r=t==null?void 0:t[e])!=null?r:t==null?void 0:t.default)!=null?n:t}function _i(c){var g=c,{when:t,delay:e,delayChildren:r,staggerChildren:n,staggerDirection:i,repeat:o,repeatType:s,repeatDelay:a,from:l,elapsed:m}=g,f=X(g,[\\\"when\\\",\\\"delay\\\",\\\"delayChildren\\\",\\\"staggerChildren\\\",\\\"staggerDirection\\\",\\\"repeat\\\",\\\"repeatType\\\",\\\"repeatDelay\\\",\\\"from\\\",\\\"elapsed\\\"]);return!!Object.keys(f).length}var _r=(t,e,r,n={},i,o)=>s=>{let a=Mr(n,t)||{},l=a.delay||n.delay||0,{elapsed:m=0}=n;m=m-oe(l);let f=O(b({keyframes:Array.isArray(r)?r:[null,r],ease:\\\"easeOut\\\",velocity:e.getVelocity()},a),{delay:-m,onUpdate:g=>{e.set(g),a.onUpdate&&a.onUpdate(g)},onComplete:()=>{s(),a.onComplete&&a.onComplete()},name:t,motionValue:e,element:o?void 0:i});_i(a)||Object.assign(f,Vi(t,f)),f.duration&&(f.duration=oe(f.duration)),f.repeatDelay&&(f.repeatDelay=oe(f.repeatDelay)),f.from!==void 0&&(f.keyframes[0]=f.from);let c=!1;if((f.type===!1||f.duration===0&&!f.repeatDelay)&&(Yt(f),f.delay===0&&(c=!0)),(ue.instantAnimations||ue.skipAnimations)&&(c=!0,Yt(f),f.delay=0),f.allowFlatten=!a.type&&!a.ease,c&&!o&&e.get()!==void 0){let g=Mi(f.keyframes,a);if(g!==void 0){ce.update(()=>{f.onUpdate(g),f.onComplete()});return}}return a.isSync?new We(f):new wr(f)};function Ii(t){let e=[{},{}];return t==null||t.values.forEach((r,n)=>{e[0][n]=r.get(),e[1][n]=r.getVelocity()}),e}function Ir(t,e,r,n){if(typeof e==\\\"function\\\"){let[i,o]=Ii(n);e=e(r!==void 0?r:t.custom,i,o)}if(typeof e==\\\"string\\\"&&(e=t.variants&&t.variants[e]),typeof e==\\\"function\\\"){let[i,o]=Ii(n);e=e(r!==void 0?r:t.custom,i,o)}return e}function Ci(t,e,r){let n=t.getProps();return Ir(n,e,r!==void 0?r:n.custom,t)}var Cr=new Set([\\\"width\\\",\\\"height\\\",\\\"top\\\",\\\"left\\\",\\\"right\\\",\\\"bottom\\\",...Me]);var Ri=30,Ks=t=>!isNaN(parseFloat(t)),Di={current:void 0},vn=class{constructor(e,r={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=n=>{var o;let i=te.now();if(this.updatedAt!==i&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(n),this.current!==this.prev&&((o=this.events.change)==null||o.notify(this.current),this.dependents))for(let s of this.dependents)s.dirty()},this.hasAnimated=!1,this.setCurrent(e),this.owner=r.owner}setCurrent(e){this.current=e,this.updatedAt=te.now(),this.canTrackVelocity===null&&e!==void 0&&(this.canTrackVelocity=Ks(this.current))}setPrevFrameValue(e=this.current){this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt}onChange(e){return this.on(\\\"change\\\",e)}on(e,r){this.events[e]||(this.events[e]=new Qe);let n=this.events[e].add(r);return e===\\\"change\\\"?()=>{n(),ce.read(()=>{this.events.change.getSize()||this.stop()})}:n}clearListeners(){for(let e in this.events)this.events[e].clear()}attach(e,r){this.passiveEffect=e,this.stopPassiveEffect=r}set(e){this.passiveEffect?this.passiveEffect(e,this.updateAndNotify):this.updateAndNotify(e)}setWithVelocity(e,r,n){this.set(r),this.prev=void 0,this.prevFrameValue=e,this.prevUpdatedAt=this.updatedAt-n}jump(e,r=!0){this.updateAndNotify(e),this.prev=e,this.prevUpdatedAt=this.prevFrameValue=void 0,r&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){var e;(e=this.events.change)==null||e.notify(this.current)}addDependent(e){this.dependents||(this.dependents=new Set),this.dependents.add(e)}removeDependent(e){this.dependents&&this.dependents.delete(e)}get(){return Di.current&&Di.current.push(this),this.current}getPrevious(){return this.prev}getVelocity(){let e=te.now();if(!this.canTrackVelocity||this.prevFrameValue===void 0||e-this.updatedAt>Ri)return 0;let r=Math.min(this.updatedAt-this.prevUpdatedAt,Ri);return Mt(parseFloat(this.current)-parseFloat(this.prevFrameValue),r)}start(e){return this.stop(),new Promise(r=>{this.hasAnimated=!0,this.animation=e(r),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){var e,r;(e=this.dependents)==null||e.clear(),(r=this.events.destroy)==null||r.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}};function Be(t,e){return new vn(t,e)}var Bi=t=>Array.isArray(t);function Us(t,e,r){t.hasValue(e)?t.getValue(e).set(r):t.addValue(e,Be(r))}function Gs(t){return Bi(t)?t[t.length-1]||0:t}function Oi(t,e){let s=Ci(t,e)||{},{transitionEnd:n={},transition:i={}}=s,o=X(s,[\\\"transitionEnd\\\",\\\"transition\\\"]);o=b(b({},o),n);for(let a in o){let l=Gs(o[a]);Us(t,a,l)}}var J=t=>!!(t&&t.getVelocity);function Fi(t){return!!(J(t)&&t.add)}function Li(t,e){let r=t.getValue(\\\"willChange\\\");if(Fi(r))return r.add(e);if(!r&&ue.WillChange){let n=new ue.WillChange(\\\"auto\\\");t.addValue(\\\"willChange\\\",n),n.add(e)}}function xt(t){return t.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`)}var $s=\\\"framerAppearId\\\",ki=\\\"data-\\\"+xt($s);function Pi(t){return t.props[ki]}function Ws({protectedKeys:t,needsAnimating:e},r){let n=t.hasOwnProperty(r)&&e[r]!==!0;return e[r]=!1,n}function bn(t,e,{delay:r=0,transitionOverride:n,type:i}={}){var c;let f=e,{transition:o=t.getDefaultTransition(),transitionEnd:s}=f,a=X(f,[\\\"transition\\\",\\\"transitionEnd\\\"]);n&&(o=n);let l=[],m=i&&t.animationState&&t.animationState.getState()[i];for(let g in a){let d=t.getValue(g,(c=t.latestValues[g])!=null?c:null),R=a[g];if(R===void 0||m&&Ws(m,g))continue;let A=b({delay:r},Mr(o||{},g)),C=d.get();if(C!==void 0&&!d.isAnimating&&!Array.isArray(R)&&R===C&&!A.velocity)continue;let S=!1;if(window.MotionHandoffAnimation){let D=Pi(t);if(D){let F=window.MotionHandoffAnimation(D,g,ce);F!==null&&(A.startTime=F,S=!0)}}Li(t,g),d.start(_r(g,d,R,t.shouldReduceMotion&&Cr.has(g)?{type:!1}:A,t,S));let I=d.animation;I&&l.push(I)}return s&&Promise.all(l).then(()=>{ce.update(()=>{s&&Oi(t,s)})}),l}var Ni={test:t=>t===\\\"auto\\\",parse:t=>t};var Rr=t=>e=>e.test(t);var Sn=[Ee,y,Ue,Ve,$n,Gn,Ni],An=t=>Sn.find(Rr(t));function Ki(t){return typeof t==\\\"number\\\"?t===0:t!==null?t===\\\"none\\\"||t===\\\"0\\\"||Vt(t):!0}var Ys=new Set([\\\"brightness\\\",\\\"contrast\\\",\\\"saturate\\\",\\\"opacity\\\"]);function qs(t){let[e,r]=t.slice(0,-1).split(\\\"(\\\");if(e===\\\"drop-shadow\\\")return t;let[n]=r.match(ct)||[];if(!n)return t;let i=r.replace(n,\\\"\\\"),o=Ys.has(e)?1:0;return n!==r&&(o*=100),e+\\\"(\\\"+o+i+\\\")\\\"}var Hs=/\\\\b([a-z-]*)\\\\(.*?\\\\)/gu,Ht=O(b({},pe),{getAnimatableNone:t=>{let e=t.match(Hs);return e?e.map(qs).join(\\\" \\\"):t}});var En=O(b({},Ee),{transform:Math.round});var Ui={rotate:Ve,rotateX:Ve,rotateY:Ve,rotateZ:Ve,scale:Pt,scaleX:Pt,scaleY:Pt,scaleZ:Pt,skew:Ve,skewX:Ve,skewY:Ve,distance:y,translateX:y,translateY:y,translateZ:y,x:y,y,z:y,perspective:y,transformPerspective:y,opacity:Ce,originX:rn,originY:rn,originZ:y};var yt=O(b({borderWidth:y,borderTopWidth:y,borderRightWidth:y,borderBottomWidth:y,borderLeftWidth:y,borderRadius:y,borderTopLeftRadius:y,borderTopRightRadius:y,borderBottomRightRadius:y,borderBottomLeftRadius:y,width:y,maxWidth:y,height:y,maxHeight:y,top:y,right:y,bottom:y,left:y,inset:y,insetBlock:y,insetBlockStart:y,insetBlockEnd:y,insetInline:y,insetInlineStart:y,insetInlineEnd:y,padding:y,paddingTop:y,paddingRight:y,paddingBottom:y,paddingLeft:y,paddingBlock:y,paddingBlockStart:y,paddingBlockEnd:y,paddingInline:y,paddingInlineStart:y,paddingInlineEnd:y,margin:y,marginTop:y,marginRight:y,marginBottom:y,marginLeft:y,marginBlock:y,marginBlockStart:y,marginBlockEnd:y,marginInline:y,marginInlineStart:y,marginInlineEnd:y,fontSize:y,backgroundPositionX:y,backgroundPositionY:y},Ui),{zIndex:En,fillOpacity:Ce,strokeOpacity:Ce,numOctaves:En});var zs=O(b({},yt),{color:Q,backgroundColor:Q,outlineColor:Q,fill:Q,stroke:Q,borderColor:Q,borderTopColor:Q,borderRightColor:Q,borderBottomColor:Q,borderLeftColor:Q,filter:Ht,WebkitFilter:Ht}),Dr=t=>zs[t];function Br(t,e){let r=Dr(t);return r!==Ht&&(r=pe),r.getAnimatableNone?r.getAnimatableNone(e):void 0}var js=new Set([\\\"auto\\\",\\\"none\\\",\\\"0\\\"]);function Gi(t,e,r){let n=0,i;for(;n<t.length&&!i;){let o=t[n];typeof o==\\\"string\\\"&&!js.has(o)&&et(o).values.length&&(i=t[n]),n++}if(i&&r)for(let o of e)t[o]=Br(r,i)}var Or=class extends Ye{constructor(e,r,n,i,o){super(e,r,n,i,o,!0)}readKeyframes(){let{unresolvedKeyframes:e,element:r,name:n}=this;if(!r||!r.current)return;super.readKeyframes();for(let f=0;f<e.length;f++){let c=e[f];if(typeof c==\\\"string\\\"&&(c=c.trim(),mt(c))){let g=Tn(c,r.current);g!==void 0&&(e[f]=g),f===e.length-1&&(this.finalKeyframe=c)}}if(this.resolveNoneKeyframes(),!Cr.has(n)||e.length!==2)return;let[i,o]=e,s=An(i),a=An(o),l=en(i),m=en(o);if(l!==m&&De[n]){this.needsMeasurement=!0;return}if(s!==a)if(mn(s)&&mn(a))for(let f=0;f<e.length;f++){let c=e[f];typeof c==\\\"string\\\"&&(e[f]=parseFloat(c))}else De[n]&&(this.needsMeasurement=!0)}resolveNoneKeyframes(){let{unresolvedKeyframes:e,name:r}=this,n=[];for(let i=0;i<e.length;i++)(e[i]===null||Ki(e[i]))&&n.push(i);n.length&&Gi(e,n,r)}measureInitialState(){let{element:e,unresolvedKeyframes:r,name:n}=this;if(!e||!e.current)return;n===\\\"height\\\"&&(this.suspendedScrollY=window.pageYOffset),this.measuredOrigin=De[n](e.measureViewportBox(),window.getComputedStyle(e.current)),r[0]=this.measuredOrigin;let i=r[r.length-1];i!==void 0&&e.getValue(n,i).jump(i,!1)}measureEndState(){var a;let{element:e,name:r,unresolvedKeyframes:n}=this;if(!e||!e.current)return;let i=e.getValue(r);i&&i.jump(this.measuredOrigin,!1);let o=n.length-1,s=n[o];n[o]=De[r](e.measureViewportBox(),window.getComputedStyle(e.current)),s!==null&&this.finalKeyframe===void 0&&(this.finalKeyframe=s),(a=this.removedTransforms)!=null&&a.length&&this.removedTransforms.forEach(([l,m])=>{e.getValue(l).set(m)}),this.resolveNoneKeyframes()}};function wn(t,e,r){var n;if(t==null)return[];if(t instanceof EventTarget)return[t];if(typeof t==\\\"string\\\"){let i=document;e&&(i=e.current);let o=(n=r==null?void 0:r[t])!=null?n:i.querySelectorAll(t);return o?Array.from(o):[]}return Array.from(t).filter(i=>i!=null)}var Fr=(t,e)=>e&&typeof t==\\\"number\\\"?e.transform(t):t;var{schedule:$i,cancel:yh}=fr(queueMicrotask,!1);function zt(t){return Xr(t)&&\\\"ownerSVGElement\\\"in t}function Vn(t){return zt(t)&&t.tagName===\\\"svg\\\"}function Wi(t,e){if(t===\\\"first\\\")return 0;{let r=e-1;return t===\\\"last\\\"?r:r/2}}function Lr(t=.1,{startDelay:e=0,from:r=0,ease:n}={}){return(i,o)=>{let s=typeof r==\\\"number\\\"?r:Wi(r,o),a=Math.abs(s-i),l=t*a;if(n){let m=o*t;l=at(n)(l/m)*m}return e+l}}var Xs=[...Sn,Q,pe],Yi=t=>Xs.find(Rr(t));var qi=()=>({min:0,max:0}),Tt=()=>({x:qi(),y:qi()});var jt={current:null},kr={current:!1};var Zs=typeof window!=\\\"undefined\\\";function Hi(){if(kr.current=!0,!!Zs)if(window.matchMedia){let t=window.matchMedia(\\\"(prefers-reduced-motion)\\\"),e=()=>jt.current=t.matches;t.addEventListener(\\\"change\\\",e),e()}else jt.current=!1}var Oe=new WeakMap;function zi(t){return t!==null&&typeof t==\\\"object\\\"&&typeof t.start==\\\"function\\\"}function ji(t){return typeof t==\\\"string\\\"||Array.isArray(t)}var Js=[\\\"animate\\\",\\\"whileInView\\\",\\\"whileFocus\\\",\\\"whileHover\\\",\\\"whileTap\\\",\\\"whileDrag\\\",\\\"exit\\\"],Xi=[\\\"initial\\\",...Js];function Mn(t){return zi(t.animate)||Xi.some(e=>ji(t[e]))}function Zi(t){return!!(Mn(t)||t.variants)}function Ji(t,e,r){for(let n in e){let i=e[n],o=r[n];if(J(i))t.addValue(n,i);else if(J(o))t.addValue(n,Be(i,{owner:t}));else if(o!==i)if(t.hasValue(n)){let s=t.getValue(n);s.liveStyle===!0?s.jump(i):s.hasAnimated||s.set(i)}else{let s=t.getStaticValue(n);t.addValue(n,Be(s!==void 0?s:i,{owner:t}))}}for(let n in r)e[n]===void 0&&t.removeValue(n);return e}var Qi=[\\\"AnimationStart\\\",\\\"AnimationComplete\\\",\\\"Update\\\",\\\"BeforeLayoutMeasure\\\",\\\"LayoutMeasure\\\",\\\"LayoutAnimationStart\\\",\\\"LayoutAnimationComplete\\\"],eo={};var vt=class{scrapeMotionValuesFromProps(e,r,n){return{}}constructor({parent:e,props:r,presenceContext:n,reducedMotionConfig:i,blockInitialAnimation:o,visualState:s},a={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.values=new Map,this.KeyframeResolver=Ye,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify(\\\"Update\\\",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{let d=te.now();this.renderScheduledAt<d&&(this.renderScheduledAt=d,ce.render(this.render,!1,!0))};let{latestValues:l,renderState:m}=s;this.latestValues=l,this.baseTarget=b({},l),this.initialValues=r.initial?b({},l):{},this.renderState=m,this.parent=e,this.props=r,this.presenceContext=n,this.depth=e?e.depth+1:0,this.reducedMotionConfig=i,this.options=a,this.blockInitialAnimation=!!o,this.isControllingVariants=Mn(r),this.isVariantNode=Zi(r),this.isVariantNode&&(this.variantChildren=new Set),this.manuallyAnimateOnMount=!!(e&&e.current);let g=this.scrapeMotionValuesFromProps(r,{},this),{willChange:f}=g,c=X(g,[\\\"willChange\\\"]);for(let d in c){let R=c[d];l[d]!==void 0&&J(R)&&R.set(l[d])}}mount(e){var r;this.current=e,Oe.set(e,this),this.projection&&!this.projection.instance&&this.projection.mount(e),this.parent&&this.isVariantNode&&!this.isControllingVariants&&(this.removeFromVariantTree=this.parent.addVariantChild(this)),this.values.forEach((n,i)=>this.bindToMotionValue(i,n)),this.reducedMotionConfig===\\\"never\\\"?this.shouldReduceMotion=!1:this.reducedMotionConfig===\\\"always\\\"?this.shouldReduceMotion=!0:(kr.current||Hi(),this.shouldReduceMotion=jt.current),(r=this.parent)==null||r.addChild(this),this.update(this.props,this.presenceContext)}unmount(){var e;this.projection&&this.projection.unmount(),kt(this.notifyUpdate),kt(this.render),this.valueSubscriptions.forEach(r=>r()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),(e=this.parent)==null||e.removeChild(this);for(let r in this.events)this.events[r].clear();for(let r in this.features){let n=this.features[r];n&&(n.unmount(),n.isMounted=!1)}this.current=null}addChild(e){var r;this.children.add(e),(r=this.enteringChildren)!=null||(this.enteringChildren=new Set),this.enteringChildren.add(e)}removeChild(e){this.children.delete(e),this.enteringChildren&&this.enteringChildren.delete(e)}bindToMotionValue(e,r){this.valueSubscriptions.has(e)&&this.valueSubscriptions.get(e)();let n=Ae.has(e);n&&this.onBindTransform&&this.onBindTransform();let i=r.on(\\\"change\\\",s=>{this.latestValues[e]=s,this.props.onUpdate&&ce.preRender(this.notifyUpdate),n&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()}),o;typeof window!=\\\"undefined\\\"&&window.MotionCheckAppearSync&&(o=window.MotionCheckAppearSync(this,e,r)),this.valueSubscriptions.set(e,()=>{i(),o&&o(),r.owner&&r.stop()})}sortNodePosition(e){return!this.current||!this.sortInstanceNodePosition||this.type!==e.type?0:this.sortInstanceNodePosition(this.current,e.current)}updateFeatures(){let e=\\\"animation\\\";for(e in eo){let r=eo[e];if(!r)continue;let{isEnabled:n,Feature:i}=r;if(!this.features[e]&&i&&n(this.props)&&(this.features[e]=new i(this)),this.features[e]){let o=this.features[e];o.isMounted?o.update():(o.mount(),o.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):Tt()}getStaticValue(e){return this.latestValues[e]}setStaticValue(e,r){this.latestValues[e]=r}update(e,r){(e.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=e,this.prevPresenceContext=this.presenceContext,this.presenceContext=r;for(let n=0;n<Qi.length;n++){let i=Qi[n];this.propEventSubscriptions[i]&&(this.propEventSubscriptions[i](),delete this.propEventSubscriptions[i]);let o=\\\"on\\\"+i,s=e[o];s&&(this.propEventSubscriptions[i]=this.on(i,s))}this.prevMotionValues=Ji(this,this.scrapeMotionValuesFromProps(e,this.prevProps||{},this),this.prevMotionValues),this.handleChildMotionValue&&this.handleChildMotionValue()}getProps(){return this.props}getVariant(e){return this.props.variants?this.props.variants[e]:void 0}getDefaultTransition(){return this.props.transition}getTransformPagePoint(){return this.props.transformPagePoint}getClosestVariantNode(){return this.isVariantNode?this:this.parent?this.parent.getClosestVariantNode():void 0}addVariantChild(e){let r=this.getClosestVariantNode();if(r)return r.variantChildren&&r.variantChildren.add(e),()=>r.variantChildren.delete(e)}addValue(e,r){let n=this.values.get(e);r!==n&&(n&&this.removeValue(e),this.bindToMotionValue(e,r),this.values.set(e,r),this.latestValues[e]=r.get())}removeValue(e){this.values.delete(e);let r=this.valueSubscriptions.get(e);r&&(r(),this.valueSubscriptions.delete(e)),delete this.latestValues[e],this.removeValueFromRenderState(e,this.renderState)}hasValue(e){return this.values.has(e)}getValue(e,r){if(this.props.values&&this.props.values[e])return this.props.values[e];let n=this.values.get(e);return n===void 0&&r!==void 0&&(n=Be(r===null?void 0:r,{owner:this}),this.addValue(e,n)),n}readValue(e,r){var i;let n=this.latestValues[e]!==void 0||!this.current?this.latestValues[e]:(i=this.getBaseTargetFromProps(this.props,e))!=null?i:this.readValueFromInstance(this.current,e,this.options);return n!=null&&(typeof n==\\\"string\\\"&&(wt(n)||Vt(n))?n=parseFloat(n):!Yi(n)&&pe.test(r)&&(n=Br(e,r)),this.setBaseTarget(e,J(n)?n.get():n)),J(n)?n.get():n}setBaseTarget(e,r){this.baseTarget[e]=r}getBaseTarget(e){var o;let{initial:r}=this.props,n;if(typeof r==\\\"string\\\"||typeof r==\\\"object\\\"){let s=Ir(this.props,r,(o=this.presenceContext)==null?void 0:o.custom);s&&(n=s[e])}if(r&&n!==void 0)return n;let i=this.getBaseTargetFromProps(this.props,e);return i!==void 0&&!J(i)?i:this.initialValues[e]!==void 0&&n===void 0?void 0:this.baseTarget[e]}on(e,r){return this.events[e]||(this.events[e]=new Qe),this.events[e].add(r)}notify(e,...r){this.events[e]&&this.events[e].notify(...r)}scheduleRenderMicrotask(){$i.render(this.render)}};var bt=class extends vt{constructor(){super(...arguments),this.KeyframeResolver=Or}sortInstanceNodePosition(e,r){return e.compareDocumentPosition(r)&2?1:-1}getBaseTargetFromProps(e,r){let n=e.style;return n?n[r]:void 0}removeValueFromRenderState(e,{vars:r,style:n}){delete r[e],delete n[e]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);let{children:e}=this.props;J(e)&&(this.childSubscription=e.on(\\\"change\\\",r=>{this.current&&(this.current.textContent=`${r}`)}))}};function to({top:t,left:e,right:r,bottom:n}){return{x:{min:e,max:r},y:{min:t,max:n}}}function ro(t,e){if(!e)return t;let r=e({x:t.left,y:t.top}),n=e({x:t.right,y:t.bottom});return{top:r.y,left:r.x,bottom:n.y,right:n.x}}function no(t,e){return to(ro(t.getBoundingClientRect(),e))}var Qs={x:\\\"translateX\\\",y:\\\"translateY\\\",z:\\\"translateZ\\\",transformPerspective:\\\"perspective\\\"},ea=Me.length;function io(t,e,r){let n=\\\"\\\",i=!0;for(let o=0;o<ea;o++){let s=Me[o],a=t[s];if(a===void 0)continue;let l=!0;if(typeof a==\\\"number\\\")l=a===(s.startsWith(\\\"scale\\\")?1:0);else{let m=parseFloat(a);l=s.startsWith(\\\"scale\\\")?m===1:m===0}if(!l||r){let m=Fr(a,yt[s]);if(!l){i=!1;let f=Qs[s]||s;n+=`${f}(${m}) `}r&&(e[s]=m)}}return n=n.trim(),r?n=r(e,i?\\\"\\\":n):i&&(n=\\\"none\\\"),n}function Pr(t,e,r){let{style:n,vars:i,transformOrigin:o}=t,s=!1,a=!1;for(let l in e){let m=e[l];if(Ae.has(l)){s=!0;continue}else if(mr(l)){i[l]=m;continue}else{let f=Fr(m,yt[l]);l.startsWith(\\\"origin\\\")?(a=!0,o[l]=f):n[l]=f}}if(e.transform||(s||r?n.transform=io(e,t.transform,r):n.transform&&(n.transform=\\\"none\\\")),a){let{originX:l=\\\"50%\\\",originY:m=\\\"50%\\\",originZ:f=0}=o;n.transformOrigin=`${l} ${m} ${f}`}}function Nr(t,{style:e,vars:r},n,i){let o=t.style,s;for(s in e)o[s]=e[s];i==null||i.applyProjectionStyles(o,n);for(s in r)o.setProperty(s,r[s])}function oo(t,e){return e.max===e.min?0:t/(e.max-e.min)*100}var St={correct:(t,e)=>{if(!e.target)return t;if(typeof t==\\\"string\\\")if(y.test(t))t=parseFloat(t);else return t;let r=oo(t,e.target.x),n=oo(t,e.target.y);return`${r}% ${n}%`}};var so={correct:(t,{treeScale:e,projectionDelta:r})=>{let n=t,i=pe.parse(t);if(i.length>5)return n;let o=pe.createTransformer(t),s=typeof i[0]!=\\\"number\\\"?1:0,a=r.x.scale*e.x,l=r.y.scale*e.y;i[0+s]/=a,i[1+s]/=l;let m=ve(a,l,.5);return typeof i[2+s]==\\\"number\\\"&&(i[2+s]/=m),typeof i[3+s]==\\\"number\\\"&&(i[3+s]/=m),o(i)}};var ao={borderRadius:O(b({},St),{applyTo:[\\\"borderTopLeftRadius\\\",\\\"borderTopRightRadius\\\",\\\"borderBottomLeftRadius\\\",\\\"borderBottomRightRadius\\\"]}),borderTopLeftRadius:St,borderTopRightRadius:St,borderBottomLeftRadius:St,borderBottomRightRadius:St,boxShadow:so};function lo(t,{layout:e,layoutId:r}){return Ae.has(t)||t.startsWith(\\\"origin\\\")||(e||r!==void 0)&&(!!ao[t]||t===\\\"opacity\\\")}function Kr(t,e,r){var s;let n=t.style,i=e==null?void 0:e.style,o={};if(!n)return o;for(let a in n)(J(n[a])||i&&J(i[a])||lo(a,t)||((s=r==null?void 0:r.getValue(a))==null?void 0:s.liveStyle)!==void 0)&&(o[a]=n[a]);return o}function ta(t){return window.getComputedStyle(t)}var Xt=class extends bt{constructor(){super(...arguments),this.type=\\\"html\\\",this.renderInstance=Nr}readValueFromInstance(e,r){var n;if(Ae.has(r))return(n=this.projection)!=null&&n.isProjecting?vr(r):fi(e,r);{let i=ta(e),o=(mr(r)?i.getPropertyValue(r):i[r])||0;return typeof o==\\\"string\\\"?o.trim():o}}measureInstanceViewportBox(e,{transformPagePoint:r}){return no(e,r)}build(e,r,n){Pr(e,r,n.transformTemplate)}scrapeMotionValuesFromProps(e,r,n){return Kr(e,r,n)}};function ra(t,e){return t in e}var Zt=class extends vt{constructor(){super(...arguments),this.type=\\\"object\\\"}readValueFromInstance(e,r){if(ra(r,e)){let n=e[r];if(typeof n==\\\"string\\\"||typeof n==\\\"number\\\")return n}}getBaseTargetFromProps(){}removeValueFromRenderState(e,r){delete r.output[e]}measureInstanceViewportBox(){return Tt()}build(e,r){Object.assign(e.output,r)}renderInstance(e,{output:r}){Object.assign(e,r)}sortInstanceNodePosition(){return 0}};var na={offset:\\\"stroke-dashoffset\\\",array:\\\"stroke-dasharray\\\"},ia={offset:\\\"strokeDashoffset\\\",array:\\\"strokeDasharray\\\"};function fo(t,e,r=1,n=0,i=!0){t.pathLength=1;let o=i?na:ia;t[o.offset]=`${-n}`,t[o.array]=`${e} ${r}`}var oa=[\\\"offsetDistance\\\",\\\"offsetPath\\\",\\\"offsetRotate\\\",\\\"offsetAnchor\\\"];function uo(t,c,l,m,f){var g=c,{attrX:e,attrY:r,attrScale:n,pathLength:i,pathSpacing:o=1,pathOffset:s=0}=g,a=X(g,[\\\"attrX\\\",\\\"attrY\\\",\\\"attrScale\\\",\\\"pathLength\\\",\\\"pathSpacing\\\",\\\"pathOffset\\\"]);var A,C;if(Pr(t,a,m),l){t.style.viewBox&&(t.attrs.viewBox=t.style.viewBox);return}t.attrs=t.style,t.style={};let{attrs:d,style:R}=t;d.transform&&(R.transform=d.transform,delete d.transform),(R.transform||d.transformOrigin)&&(R.transformOrigin=(A=d.transformOrigin)!=null?A:\\\"50% 50%\\\",delete d.transformOrigin),R.transform&&(R.transformBox=(C=f==null?void 0:f.transformBox)!=null?C:\\\"fill-box\\\",delete d.transformBox);for(let S of oa)d[S]!==void 0&&(R[S]=d[S],delete d[S]);e!==void 0&&(d.x=e),r!==void 0&&(d.y=r),n!==void 0&&(d.scale=n),i!==void 0&&fo(d,i,o,s,!1)}var Ur=new Set([\\\"baseFrequency\\\",\\\"diffuseConstant\\\",\\\"kernelMatrix\\\",\\\"kernelUnitLength\\\",\\\"keySplines\\\",\\\"keyTimes\\\",\\\"limitingConeAngle\\\",\\\"markerHeight\\\",\\\"markerWidth\\\",\\\"numOctaves\\\",\\\"targetX\\\",\\\"targetY\\\",\\\"surfaceScale\\\",\\\"specularConstant\\\",\\\"specularExponent\\\",\\\"stdDeviation\\\",\\\"tableValues\\\",\\\"viewBox\\\",\\\"gradientTransform\\\",\\\"pathLength\\\",\\\"startOffset\\\",\\\"textLength\\\",\\\"lengthAdjust\\\"]);var mo=t=>typeof t==\\\"string\\\"&&t.toLowerCase()===\\\"svg\\\";function co(t,e,r,n){Nr(t,e,void 0,n);for(let i in e.attrs)t.setAttribute(Ur.has(i)?i:xt(i),e.attrs[i])}function po(t,e,r){let n=Kr(t,e,r);for(let i in t)if(J(t[i])||J(e[i])){let o=Me.indexOf(i)!==-1?\\\"attr\\\"+i.charAt(0).toUpperCase()+i.substring(1):i;n[o]=t[i]}return n}var Jt=class extends bt{constructor(){super(...arguments),this.type=\\\"svg\\\",this.isSVGTag=!1,this.measureInstanceViewportBox=Tt}getBaseTargetFromProps(e,r){return e[r]}readValueFromInstance(e,r){if(Ae.has(r)){let n=Dr(r);return n&&n.default||0}return r=Ur.has(r)?r:xt(r),e.getAttribute(r)}scrapeMotionValuesFromProps(e,r,n){return po(e,r,n)}build(e,r,n){uo(e,r,this.isSVGTag,n.transformTemplate,n.style)}renderInstance(e,r,n,i){co(e,r,n,i)}mount(e){this.isSVGTag=mo(e.tagName),super.mount(e)}};function _n(t,e,r){let n=J(t)?t:Be(t);return n.start(_r(\\\"\\\",n,e,r)),n.animation}function Qt(t){return typeof t==\\\"object\\\"&&!Array.isArray(t)}function Gr(t,e,r,n){return t==null?[]:typeof t==\\\"string\\\"&&Qt(e)?wn(t,r,n):t instanceof NodeList?Array.from(t):Array.isArray(t)?t.filter(i=>i!=null):[t]}function ho(t,e,r){return t*(e+1)}function In(t,e,r,n){var i;return typeof e==\\\"number\\\"?e:e.startsWith(\\\"-\\\")||e.startsWith(\\\"+\\\")?Math.max(0,t+parseFloat(e)):e===\\\"<\\\"?r:e.startsWith(\\\"<\\\")?Math.max(0,r+parseFloat(e.slice(1))):(i=n.get(e))!=null?i:t}function sa(t,e,r){for(let n=0;n<t.length;n++){let i=t[n];i.at>e&&i.at<r&&(je(t,i),n--)}}function go(t,e,r,n,i,o){sa(t,i,o);for(let s=0;s<e.length;s++)t.push({value:e[s],at:ve(i,o,n[s]),easing:Ot(r,s)})}function xo(t,e){for(let r=0;r<t.length;r++)t[r]=t[r]/(e+1)}function yo(t,e){return t.at===e.at?t.value===null?1:e.value===null?-1:0:t.at-e.at}var aa=\\\"easeInOut\\\",la=20;function bo(t,o={},n,i){var s=o,{defaultTransition:e={}}=s,r=X(s,[\\\"defaultTransition\\\"]);let a=e.duration||.3,l=new Map,m=new Map,f={},c=new Map,g=0,d=0,R=0;for(let A=0;A<t.length;A++){let C=t[A];if(typeof C==\\\"string\\\"){c.set(C,d);continue}else if(!Array.isArray(C)){c.set(C.name,In(d,C.at,g,c));continue}let[S,I,D={}]=C;D.at!==void 0&&(d=In(d,D.at,g,c));let F=0,M=(B,K,v,P=0,N=0)=>{let k=fa(B),V=K,{delay:be=0,times:re=Wt(k),type:Le=e.type||\\\"keyframes\\\",repeat:xe,repeatType:rr,repeatDelay:de=0}=V,Et=X(V,[\\\"delay\\\",\\\"times\\\",\\\"type\\\",\\\"repeat\\\",\\\"repeatType\\\",\\\"repeatDelay\\\"]),{ease:H=e.ease||\\\"easeOut\\\",duration:ne}=K,nr=typeof be==\\\"function\\\"?be(P,N):be,He=k.length,p=ot(Le)?Le:i==null?void 0:i[Le||\\\"keyframes\\\"];if(He<=2&&p){let T=100;if(He===2&&ca(k)){let E=k[1]-k[0];T=Math.abs(E)}let x=b(b({},e),Et);ne!==void 0&&(x.duration=oe(ne));let _=Ut(x,T,p);H=_.ease,ne=_.duration}ne!=null||(ne=a);let u=d+nr;re.length===1&&re[0]===0&&(re[1]=1);let h=re.length-k.length;if(h>0&&$t(re,h),k.length===1&&k.unshift(null),xe){ge(xe<la,\\\"Repeat count too high, must be less than 20\\\",\\\"repeat-count-high\\\"),ne=ho(ne,xe);let T=[...k],x=[...re];H=Array.isArray(H)?[...H]:[H];let _=[...H];for(let E=0;E<xe;E++){k.push(...T);for(let L=0;L<T.length;L++)re.push(x[L]+(E+1)),H.push(L===0?\\\"linear\\\":Ot(_,L-1))}xo(re,xe)}let w=u+ne;go(v,k,H,re,u,w),F=Math.max(nr+ne,F),R=Math.max(w,R)};if(J(S)){let B=To(S,m);M(I,D,vo(\\\"default\\\",B))}else{let B=Gr(S,I,n,f),K=B.length;for(let v=0;v<K;v++){I=I,D=D;let P=B[v],N=To(P,m);for(let k in I)M(I[k],ua(D,k),vo(k,N),v,K)}}g=d,d+=F}return m.forEach((A,C)=>{for(let I in A){let D=A[I];D.sort(yo);let F=[],M=[],B=[];for(let N=0;N<D.length;N++){let{at:k,value:be,easing:re}=D[N];F.push(be),M.push(Je(0,R,k)),B.push(re||\\\"easeOut\\\")}M[0]!==0&&(M.unshift(0),F.unshift(F[0]),B.unshift(aa)),M[M.length-1]!==1&&(M.push(1),F.push(null)),l.has(C)||l.set(C,{keyframes:{},transition:{}});let K=l.get(C);K.keyframes[I]=F;let S=e,{type:v}=S,P=X(S,[\\\"type\\\"]);K.transition[I]=b(O(b({},P),{duration:R,ease:B,times:M}),r)}}),l}function To(t,e){return!e.has(t)&&e.set(t,{}),e.get(t)}function vo(t,e){return e[t]||(e[t]=[]),e[t]}function fa(t){return Array.isArray(t)?t:[t]}function ua(t,e){return t&&t[e]?b(b({},t),t[e]):b({},t)}var ma=t=>typeof t==\\\"number\\\",ca=t=>t.every(ma);function So(t){let e={presenceContext:null,props:{},visualState:{renderState:{transform:{},transformOrigin:{},style:{},vars:{},attrs:{}},latestValues:{}}},r=zt(t)&&!Vn(t)?new Jt(e):new Xt(e);r.mount(t),Oe.set(t,r)}function Ao(t){let e={presenceContext:null,props:{},visualState:{renderState:{output:{}},latestValues:{}}},r=new Zt(e);r.mount(t),Oe.set(t,r)}function pa(t,e){return J(t)||typeof t==\\\"number\\\"||typeof t==\\\"string\\\"&&!Qt(e)}function $r(t,e,r,n){let i=[];if(pa(t,e))i.push(_n(t,Qt(e)&&e.default||e,r&&(r.default||r)));else{if(t==null)return i;let o=Gr(t,e,n),s=o.length;ge(!!s,\\\"No valid elements provided.\\\",\\\"no-valid-elements\\\");for(let a=0;a<s;a++){let l=o[a],m=l instanceof Element?So:Ao;Oe.has(l)||m(l);let f=Oe.get(l),c=b({},r);\\\"delay\\\"in c&&typeof c.delay==\\\"function\\\"&&(c.delay=c.delay(a,s)),i.push(...bn(f,O(b({},e),{transition:c}),{}))}}return i}function Eo(t,e,r){let n=[];return bo(t,e,r,{spring:Re}).forEach(({keyframes:o,transition:s},a)=>{n.push(...$r(a,o,s))}),n}function da(t){return Array.isArray(t)&&t.some(Array.isArray)}function wo(t){function e(r,n,i){let o=[],s;if(da(r))o=Eo(r,n,t);else{let l=i||{},{onComplete:m}=l,f=X(l,[\\\"onComplete\\\"]);typeof m==\\\"function\\\"&&(s=m),o=$r(r,n,f,t)}let a=new qt(o);return s&&a.finished.then(s),t&&(t.animations.push(a),a.finished.then(()=>{je(t.animations,a)})),a}return e}var Cn=wo();var ha=Object.defineProperty;var ga=(t,e)=>{for(var r in e)ha(t,r,{get:e[r],enumerable:!0})};var qe=({initialStyles:t,keyframes:e})=>{let r=Cn,n=o=>Object.fromEntries(Object.entries(o).map(([s,a])=>[s,Array.isArray(a)?[...a].reverse():a])),i=(o,s={})=>{let{target:a,insertAfter:l,display:m=\\\"\\\"}=s;Array.isArray(o)||(o=[o]);for(let f of o)f.style.display=m,Object.assign(f.style,t),a&&l!==void 0?l?a.insertBefore(f,l.nextSibling):a.prepend(f):a&&a.appendChild(f)};return{prepareIn:i,animateIn:async(o,s={})=>{let A=s,{prepared:a,stagger:l,display:m,duration:f}=A,c=X(A,[\\\"prepared\\\",\\\"stagger\\\",\\\"display\\\",\\\"duration\\\"]),g=f?f/1e3:void 0;a||i(o,s);let d=Array.isArray(o)?o:[o],{finished:R}=r(d,e,O(b({},c),{delay:l?Lr(l/1e3):void 0,duration:g}));return await R},animateOut:async(o,s={})=>{let S=s,{remove:a,stagger:l,target:m,insertAfter:f,display:c=\\\"none\\\",duration:g}=S,d=X(S,[\\\"remove\\\",\\\"stagger\\\",\\\"target\\\",\\\"insertAfter\\\",\\\"display\\\",\\\"duration\\\"]),R=g?g/1e3:void 0,A=(Array.isArray(o)?o:[o]).filter(I=>document.body.contains(I));if(!A.length)return;let{finished:C}=r(A,n(e),O(b({},d),{duration:R,delay:l?Lr(l/1e3):void 0}));await C;for(let I of A)m&&f!==void 0?f?m.insertBefore(I,f.nextSibling):m.prepend(I):m&&m.appendChild(I),a?I.remove():I.style.display=c}}};var Wy={fade:qe({keyframes:{opacity:[0,1]},initialStyles:{opacity:\\\"0\\\"}}),\\\"slide-up\\\":qe({keyframes:{y:[100,0],opacity:[0,1]},initialStyles:{transform:\\\"translateY(100px)\\\",opacity:\\\"0\\\"}}),\\\"slide-down\\\":qe({keyframes:{y:[-100,0],opacity:[0,1]},initialStyles:{transform:\\\"translateY(-100px)\\\",opacity:\\\"0\\\"}}),\\\"slide-right\\\":qe({keyframes:{x:[-100,0],opacity:[0,1]},initialStyles:{transform:\\\"translateX(-100px)\\\",opacity:\\\"0\\\"}}),\\\"slide-left\\\":qe({keyframes:{x:[100,0],opacity:[0,1]},initialStyles:{transform:\\\"translateX(100px)\\\",opacity:\\\"0\\\"}}),grow:qe({keyframes:{scale:[0,1],opacity:[0,1]},initialStyles:{transform:\\\"scale(0)\\\",opacity:\\\"0\\\"}}),shrink:qe({keyframes:{scale:[1.25,1],opacity:[0,1]},initialStyles:{transform:\\\"scale(1.25)\\\",opacity:\\\"0\\\"}}),spin:qe({keyframes:{rotate:[900,0],opacity:[0,1]},initialStyles:{transform:\\\"rotate(900deg)\\\",opacity:\\\"0\\\"}})};var er=t=>typeof t==\\\"string\\\",xa=t=>typeof t==\\\"number\\\";var Rn=t=>t===void 0,Fe=t=>t instanceof Date;var At=t=>{if(Fe(t))return t;if(t===\\\"\\\")return;let e=new Date(t);if(!isNaN(e.getTime()))return e};var ya={};ga(ya,{ACCORDION_ATTRIBUTE:()=>Ta,AUTO_VIDEO_ATTRIBUTE:()=>va,CODE_HIGHLIGHT_ATTRIBUTE:()=>ba,COMBO_BOX_ATTRIBUTE:()=>Sa,COPY_CLIP_ATTRIBUTE:()=>Ea,DISPLAY_VALUES_ATTRIBUTE:()=>wa,DOCS_ATTRIBUTE:()=>Va,FAV_CUSTOM_ATTRIBUTE:()=>Ma,FORM_SUBMIT_ATTRIBUTE:()=>_a,INJECT_ATTRIBUTE:()=>Aa,INPUT_ACTIVE_ATTRIBUTE:()=>Ia,INPUT_COUNTER_ATTRIBUTE:()=>Ca,LIST_ATTRIBUTE:()=>Fa,MIRROR_CLICK_ATTRIBUTE:()=>Ra,MIRROR_INPUT_ATTRIBUTE:()=>Da,MODAL_ATTRIBUTE:()=>Ba,NUMBER_COUNT_ATTRIBUTE:()=>Oa,QUERY_PARAM_ATTRIBUTE:()=>La,RANGE_SLIDER_ATTRIBUTE:()=>ka,READ_TIME_ATTRIBUTE:()=>Ya,REMOVE_QUERY_ATTRIBUTE:()=>qa,SCROLL_DISABLE_ATTRIBUTE:()=>Pa,SELECT_CUSTOM_ATTRIBUTE:()=>Na,SLIDER_DOTS_ATTRIBUTE:()=>Ka,SMART_LIGHTBOX_ATTRIBUTE:()=>Ua,SOCIAL_SHARE_ATTRIBUTE:()=>Ga,STAR_RATING_ATTRIBUTE:()=>$a,TOC_ATTRIBUTE:()=>Wa,VIDEO_HLS_ATTRIBUTE:()=>Ha});var Ta=\\\"accordion\\\",va=\\\"autovideo\\\",ba=\\\"codehighlight\\\",Sa=\\\"combobox\\\",Aa=\\\"inject\\\",Ea=\\\"copyclip\\\",wa=\\\"displayvalues\\\",Va=\\\"docs\\\",Ma=\\\"favcustom\\\",_a=\\\"formsubmit\\\",Ia=\\\"inputactive\\\",Ca=\\\"inputcounter\\\",Ra=\\\"mirrorclick\\\",Da=\\\"mirrorinput\\\",Ba=\\\"modal\\\",Oa=\\\"numbercount\\\",Fa=\\\"list\\\",La=\\\"queryparam\\\",ka=\\\"rangeslider\\\",Pa=\\\"scrolldisable\\\",Na=\\\"selectcustom\\\",Ka=\\\"sliderdots\\\",Ua=\\\"smartlightbox\\\",Ga=\\\"socialshare\\\",$a=\\\"starrating\\\",Wa=\\\"toc\\\",Ya=\\\"readtime\\\",qa=\\\"removequery\\\",Ha=\\\"videohls\\\";var Wr=t=>{if(xa(t))return t;if(Fe(t))return t.getTime();if(t)return parseFloat(t.replace(/[^0-9.-]+/g,\\\"\\\"))};var Vo=(t,e=!0)=>t?t.split(\\\",\\\").reduce((r,n)=>{let i=n.trim();return(!e||i)&&r.push(i),r},[]):[];var za,ja;za=new WeakMap,ja=new WeakMap;var Io=Uo(_o(),1),tr=(t,e,r)=>{if(r===\\\"date\\\"||e===\\\"date\\\"||e===\\\"time\\\"||e===\\\"datetime-local\\\"||e===\\\"month\\\"||e===\\\"week\\\"){let n=At(t);return n===void 0||isNaN(n.getTime())?null:n}if(r===\\\"number\\\"||e===\\\"number\\\"||e===\\\"range\\\"){let n=Wr(t);return n===void 0||isNaN(n)?null:n}return t},Co=(t,e,r)=>{var o;typeof t!=typeof e&&(Fe(t)?e=At(e)||e:Fe(e)&&(t=At(t)||t));let n=Fe(t)?t.getTime():er(t)?t.toLowerCase():t,i=Fe(e)?e.getTime():er(e)?e.toLowerCase():e;if(r){let s=r/100,a=(o=Io.single(i.toString(),n.toString()))==null?void 0:o.score;return!!a&&a>=s}return n===i},Ro=(t,e,r)=>{var o,s;let n,i;return Fe(t)||Fe(e)?(n=(o=At(t))==null?void 0:o.getTime(),i=(s=At(e))==null?void 0:s.getTime()):er(t)||er(e)?(n=Wr(t),i=Wr(e)):(n=t,i=e),Rn(n)||Rn(i)?!1:r===\\\"greater\\\"?n>i:r===\\\"greater-equal\\\"?n>=i:r===\\\"less\\\"?n<i:r===\\\"less-equal\\\"?n<=i:!1};self.onmessage=t=>{let{filters:e,items:r}=t.data,n=e.groups.reduce((o,s)=>{let a=s.conditions.reduce((l,m)=>{let{op:f,value:c,fieldKey:g}=m;return!g||!f||f!==\\\"empty\\\"&&f!==\\\"not-empty\\\"&&(c===\\\"\\\"||Array.isArray(c)&&!c.length)||l.push(m),l},[]);return a.length&&o.push(O(b({},s),{validConditions:a})),o},[]),i=r.filter(o=>{let s=a=>{let l=m=>{let f=g=>{let{op:d,filterMatch:R,fieldMatch:A}=m,C=o.fields[g];if(!C)return!1;let S=C.value,I=m.value;if(d===\\\"empty\\\")return Array.isArray(S)?!S.length:!S;if(d===\\\"not-empty\\\")return Array.isArray(S)?!!S.length:!!S;let D=d==null?void 0:d.startsWith(\\\"not-\\\"),F=(v,P,N)=>{var be;let k=!1;return d===\\\"equal\\\"||d===\\\"not-equal\\\"?k=Co(v,N,m.fuzzyThreshold):d===\\\"start\\\"||d===\\\"not-start\\\"?k=v.toString().toLowerCase().startsWith(P.toLowerCase()):d===\\\"end\\\"||d===\\\"not-end\\\"?k=v.toString().toLowerCase().endsWith(P.toLowerCase()):d===\\\"contain\\\"||d===\\\"not-contain\\\"?k=v.toString().toLowerCase().includes(P.toLowerCase()):(d===\\\"greater\\\"||d===\\\"greater-equal\\\"||d===\\\"less\\\"||d===\\\"less-equal\\\")&&(k=Ro(v,N,d)),k&&(d===\\\"equal\\\"||d===\\\"contain\\\")&&((be=o.matchedFields)[g]||(be[g]=[]),o.matchedFields[g].push({fieldValue:v,filterValue:P})),D?!k:k},M=Array.isArray(I),B=Array.isArray(S);if(S===\\\"\\\"||B&&!S.length)return D;if(M&&B){let v=P=>{let N=tr(P,m.type,C.type);return N===null?!1:A===\\\"and\\\"?S.every(k=>F(k,P,N)):S.some(k=>F(k,P,N))};return R===\\\"and\\\"?I.every(v):I.some(v)}if(M&&!B){let v=P=>{let N=tr(P,m.type,C.type);return N===null?!1:F(S,P,N)};return R===\\\"and\\\"?I.every(v):I.some(v)}if(!M&&B){let v=tr(I,m.type,C.type);return v===null?!1:A===\\\"and\\\"?S.every(P=>F(P,I,v)):S.some(P=>F(P,I,v))}if(!M&&!B){let v=tr(I,m.type,C.type);return v===null?!1:F(S,I,v)}return!1},c=m.fieldKey===\\\"*\\\"?Object.keys(o.fields):Vo(m.fieldKey);return m.fieldMatch===\\\"and\\\"?c.every(f):c.some(f)};return a.conditionsMatch===\\\"or\\\"?a.validConditions.some(l):a.validConditions.every(l)};return e.groupsMatch===\\\"or\\\"?n.some(s):n.every(s)});self.postMessage(i)};\\n\");\n}\n", "import { addListener } from '@adartem/adlib-utils';\nimport { toRaw } from '@vue/reactivity';\n\nimport type { ListItem } from '../components/ListItem';\n// @ts-expect-error - FilterWorker is not recognized by TypeScript\nimport FilterWorker from './filter.worker.js';\nimport type {\n Filters,\n FilterTask,\n FilterTaskData,\n FilterTaskItem,\n FilterTaskResult,\n} from './types';\n\nconst WORKER_POOL_SIZE = navigator.hardwareConcurrency || 4;\n\nconst workers: Worker[] = Array.from({ length: WORKER_POOL_SIZE }, () => new FilterWorker());\nconst freeWorkers = workers.slice();\nconst taskQueue: FilterTask[] = [];\n\n/**\n * Processes a filter task using a worker.\n * Once finished, it will process the next task in the queue.\n * @param worker\n * @param task\n */\nconst processFilterTask = (worker: FilterWorker, task: FilterTask) => {\n const controller = new AbortController();\n const { signal } = controller;\n\n const conclude = () => {\n controller.abort();\n\n const nextTask = taskQueue.shift();\n if (nextTask) {\n processFilterTask(worker, nextTask);\n } else {\n freeWorkers.push(worker);\n }\n };\n\n addListener(\n worker,\n 'message',\n ((event: MessageEvent<FilterTaskResult>) => {\n task.resolve(event.data);\n conclude();\n }) as EventListener,\n { signal, once: true },\n );\n\n addListener(\n worker,\n 'error',\n ((error: Event) => {\n task.reject(error);\n conclude();\n }) as EventListener,\n { signal, once: true },\n );\n\n worker.postMessage(task.data);\n};\n\n/**\n * Queues a filter task to be processed.\n * @param task\n */\nconst queueFilterTask = (task: FilterTask) => {\n const worker = freeWorkers.pop();\n if (worker) {\n processFilterTask(worker, task);\n } else {\n taskQueue.push(task);\n }\n};\n\n/**\n * Runs a filter task.\n * @param data\n * @returns A promise that resolves with the filtered items.\n */\nconst runFilterTask = (data: FilterTaskData) => {\n return new Promise<FilterTaskResult>((resolve, reject) => {\n queueFilterTask({ data, resolve, reject });\n });\n};\n\n/**\n * Filters the provided items based on the provided filters.\n * @param filters\n * @param items\n * @param highlight\n * @returns The filtered items.\n */\nexport const filterItems = async (filters: Filters, items: ListItem[], highlight?: boolean) => {\n const itemsMap = new Map<string, ListItem>();\n const itemsData = items.map<FilterTaskItem>((item) => {\n itemsMap.set(item.id, item);\n\n const { id, fields } = item;\n\n return { id, fields, matchedFields: {} };\n });\n\n const filteredItems = await runFilterTask({ items: itemsData, filters: toRaw(filters) });\n\n const result = filteredItems.map(({ id, matchedFields }) => {\n const item = itemsMap.get(id)!;\n\n itemsMap.delete(id);\n\n // Highlight the matched fields\n if (highlight) {\n item.highlight(matchedFields);\n }\n\n return item;\n });\n\n // Reset the highlight for the remaining items\n if (highlight) {\n itemsMap.forEach((item) => item.highlight({}));\n }\n\n return result;\n};\n", "import {\n type FormField,\n type FormFieldType,\n getFormFieldValue,\n isFormField,\n isString,\n setFormFieldValue,\n} from '@adartem/adlib-utils';\n\nimport type { List } from '../../components/List';\nimport { SETTINGS } from '../../utils/constants';\nimport {\n CUSTOM_VALUE_ATTRIBUTE,\n getAttribute,\n getSettingSelector,\n getSplitSeparator,\n hasAttributeValue,\n} from '../../utils/selectors';\nimport type {\n FilterMatch,\n FilterOperator,\n FiltersCondition,\n FiltersGroup,\n FilterTagValuesDisplay,\n} from '../types';\nimport { splitValue } from '../utils';\n\n/**\n * @returns The value of a given form field.\n * @param formField A {@link FormField} element.\n * @param fieldKey The field name.\n * @param interacted Indicates if the form field has been interacted with.\n */\nexport const getConditionData = (\n formField: FormField,\n fieldKey: string,\n interacted = false,\n): FiltersCondition => {\n const type = formField.type as FormFieldType;\n\n const op = getConditionOperator(formField);\n const id = `${fieldKey}_${op}`;\n\n const tagFieldDisplay = getAttribute(formField, 'tagfield');\n const tagValuesDisplay =\n (getAttribute(formField, 'tagvalues', { filterInvalid: true }) as\n | FilterTagValuesDisplay\n | undefined) ?? SETTINGS.tagvalues.defaultValue;\n const filterMatch = getAttribute(formField, 'filtermatch', {\n filterInvalid: true,\n }) as FilterMatch | undefined;\n const fieldMatch = getAttribute(formField, 'fieldmatch', {\n filterInvalid: true,\n }) as FilterMatch | undefined;\n const fuzzyThreshold = getAttribute(formField, 'fuzzy');\n const showTag = !hasAttributeValue(formField, 'showtag', 'false');\n const splitSeparator = getSplitSeparator(formField);\n\n let value = getFormFieldValue(formField, CUSTOM_VALUE_ATTRIBUTE);\n\n if (isString(value) && splitSeparator) {\n value = splitValue(value, splitSeparator);\n }\n\n return {\n id,\n fieldKey,\n type,\n op,\n value,\n filterMatch,\n fieldMatch,\n fuzzyThreshold,\n interacted,\n tagFieldDisplay,\n tagValuesDisplay,\n showTag,\n };\n};\n\n/**\n * Sets the form fields' values based on the provided conditions.\n * @param list\n * @param form\n * @param conditions\n */\nexport const setConditionsData = (\n list: List,\n form: HTMLFormElement,\n conditions: FiltersCondition[],\n) => {\n list.settingFilters = true;\n\n for (const { fieldKey, value, op, type } of conditions) {\n const tagSelector = `:is(input[type=\"${type}\"], select, textarea)`;\n const fieldSelector = getSettingSelector('field', fieldKey);\n const operatorSelector = `:is(${getSettingSelector('operator', op)}, :not(${getSettingSelector('operator')}))`;\n const selector = [tagSelector, fieldSelector, operatorSelector].join('');\n\n const formField = form.querySelector(selector);\n if (!isFormField(formField)) continue;\n\n setFormFieldValue(formField, value, CUSTOM_VALUE_ATTRIBUTE);\n }\n\n list.settingFilters = false;\n};\n\n/**\n * Retrieves the condition operator based on the form field type.\n *\n * @param formField The form field to retrieve the operator for.\n * @returns The condition operator as a string, with the proper fallback value.\n */\nexport const getConditionOperator = (formField: FormField): FilterOperator => {\n const type = formField.type as FormFieldType;\n\n const stringInputTypes: FormFieldType[] = [\n 'text',\n 'password',\n 'email',\n 'tel',\n 'url',\n 'search',\n 'color',\n ];\n const opDefault = stringInputTypes.includes(type) ? 'contain' : 'equal';\n\n const op = getAttribute(formField, 'operator', { filterInvalid: true }) || opDefault;\n return op as FilterOperator;\n};\n\n/**\n * @returns An object with the form fields as keys and their values as values.\n * @param list A {@link List} instance.\n * @param form A {@link HTMLFormElement} element.\n * @param groupIndex The index of the group.\n * @param interacted Indicates if the form has been interacted with.\n */\nexport const getStandardFiltersGroup = (\n list: List,\n form: HTMLFormElement,\n groupIndex: number,\n interacted = false,\n) => {\n list.readingFilters = true;\n\n const group: FiltersGroup = {\n id: groupIndex.toString(),\n conditions: [],\n conditionsMatch: (getAttribute(form, 'conditionsmatch', { filterInvalid: true }) ??\n SETTINGS.conditionsmatch.defaultValue) as FilterMatch,\n };\n\n for (const formField of form.elements) {\n if (!isFormField(formField)) continue;\n\n const { type } = formField;\n if (type === 'submit') continue;\n\n const fieldKey = getAttribute(formField, 'field')?.trim();\n if (!fieldKey) continue;\n\n const data = getConditionData(formField, fieldKey, interacted);\n\n if (!group.conditions.some((c) => c.fieldKey === fieldKey && c.op === data.op)) {\n group.conditions.push(data);\n }\n }\n\n list.readingFilters = false;\n\n return group;\n};\n", "import {\n type FormFieldType,\n getCheckboxGroup,\n isElement,\n isHTMLInputElement,\n isHTMLSelectElement,\n} from '@adartem/adlib-utils';\nimport { toRaw, watch } from '@vue/reactivity';\nimport debounce from 'just-debounce';\n\nimport type { ListItem } from '../../components';\nimport type { List } from '../../components/List';\nimport {\n CUSTOM_VALUE_ATTRIBUTE,\n getAttribute,\n getElementSelector,\n getSettingSelector,\n queryElement,\n} from '../../utils/selectors';\nimport { filterItems } from '../filter';\nimport type { FilterOperator, Filters } from '../types';\nimport { getConditionOperator } from './conditions';\n\n/**\n * Initializes a specific filter's results count.\n * @param list\n * @param form\n * @param groupIndex\n */\nexport const initFacets = (list: List, form: HTMLFormElement, groupIndex: number) => {\n const cleanups = new Map<Node, (() => void) | undefined>();\n\n const init = (element: Element) => {\n const isInput = isHTMLInputElement(element);\n const isSelect = isHTMLSelectElement(element);\n if (!isInput && !isSelect) return;\n\n const handler = isInput\n ? createInputFacetsHandler(list, element, groupIndex)\n : createSelectOptionsFacetsHandler(list, element, groupIndex);\n\n if (!handler) return;\n\n const itemsCleanup = watch(list.items, (items) => handler({ items }));\n const filtersCleanup = watch(list.filters, (filters) => handler({ filters }), {\n deep: true,\n immediate: true,\n });\n\n return () => {\n itemsCleanup();\n filtersCleanup();\n };\n };\n\n // Init existing elements\n for (const node of [...form.elements]) {\n const cleanup = init(node);\n cleanups.set(node, cleanup);\n }\n\n // Observe new or removed elements\n const observer = new MutationObserver((mutations) => {\n for (const { addedNodes, removedNodes } of mutations) {\n for (const node of addedNodes) {\n if (!isElement(node)) continue;\n\n const elements = [node, ...node.querySelectorAll('input, select')];\n\n for (const element of elements) {\n if (cleanups.has(element)) continue;\n\n const cleanup = init(element);\n cleanups.set(element, cleanup);\n }\n }\n\n for (const node of removedNodes) {\n if (!isElement(node)) continue;\n\n const elements = [node, ...node.querySelectorAll('input, select')];\n\n for (const element of elements) {\n const cleanup = cleanups.get(element);\n cleanup?.();\n cleanups.delete(element);\n }\n }\n }\n });\n\n observer.observe(form, { childList: true, subtree: true });\n\n return () => {\n observer.disconnect();\n\n for (const [, cleanup] of cleanups) {\n cleanup?.();\n }\n };\n};\n\n/**\n * Creates a handler for input facets.\n * @param list\n * @param formField\n * @param groupIndex\n */\nconst createInputFacetsHandler = (list: List, formField: HTMLInputElement, groupIndex: number) => {\n const fieldKey = getAttribute(formField, 'field')?.trim();\n if (!fieldKey) return;\n\n const parentElement = formField.parentElement ?? undefined;\n let facetCountElement = queryElement('facet-count', { scope: parentElement });\n\n if (isHTMLSelectElement(facetCountElement)) {\n facetCountElement = null; // select elements have their own handler\n }\n\n const hideOnEmptyETarget = formField.closest<HTMLElement>(\n getSettingSelector('emptyfacet', 'hide'),\n );\n const addClassOnEmptyTarget = formField.closest<HTMLElement>(\n getSettingSelector('emptyfacet', 'add-class'),\n );\n\n if (!facetCountElement && !hideOnEmptyETarget && !addClassOnEmptyTarget) return;\n\n const type = formField.type as FormFieldType;\n\n const op = getConditionOperator(formField);\n const emptyClassName = getAttribute(addClassOnEmptyTarget, 'emptyfacetclass');\n const isSingleCheckbox =\n type === 'checkbox' &&\n !getCheckboxGroup(formField.name, formField.form, CUSTOM_VALUE_ATTRIBUTE)?.length;\n\n const value = isSingleCheckbox\n ? getAttribute(formField, 'value') || 'true'\n : getAttribute(formField, 'value') || formField.value;\n\n let filterPromise: Promise<ListItem[]> | undefined;\n\n const handler = debounce(\n async ({\n filters = list.filters.value,\n items = list.items.value,\n }: {\n filters?: Filters;\n items?: ListItem[];\n }) => {\n await filterPromise;\n\n filterPromise = triggerFacetFilter({\n filters,\n items,\n fieldKey,\n op,\n groupIndex,\n value,\n });\n\n const filteredItems = await filterPromise;\n if (!filteredItems) return;\n\n const hasResults = filteredItems.length > 0;\n\n if (facetCountElement) {\n facetCountElement.textContent = `${filteredItems.length}`;\n }\n\n if (hideOnEmptyETarget) {\n hideOnEmptyETarget.style.display = hasResults ? '' : 'none';\n }\n\n if (addClassOnEmptyTarget) {\n addClassOnEmptyTarget.classList.toggle(emptyClassName, !hasResults);\n }\n },\n 0,\n );\n\n return handler;\n};\n\n/**\n * Creates a handler for select options facets.\n * @param list\n * @param formField\n * @param groupIndex\n */\nconst createSelectOptionsFacetsHandler = (\n list: List,\n formField: HTMLSelectElement,\n groupIndex: number,\n) => {\n const fieldKey = getAttribute(formField, 'field')?.trim();\n if (!fieldKey) return;\n\n const op = getConditionOperator(formField);\n const hideOnEmpty = getAttribute(formField, 'emptyfacet', { filterInvalid: true }) === 'hide';\n const displayFacetCounts =\n formField.matches(getElementSelector('facet-count')) ||\n formField.matches(getSettingSelector('facetcount'));\n\n if (!hideOnEmpty && !displayFacetCounts) return;\n\n const optionLabels = new Map<HTMLOptionElement, string>();\n\n let filterPromise: Promise<void[]> | undefined;\n\n const handler = debounce(\n async ({\n filters = list.filters.value,\n items = list.items.value,\n }: {\n filters?: Filters;\n items?: ListItem[];\n }) => {\n await filterPromise;\n\n filterPromise = Promise.all(\n [...formField.options].map(async (option) => {\n const { value } = option;\n if (!value) return;\n\n if (!optionLabels.has(option)) {\n optionLabels.set(option, option.text);\n }\n\n const filteredItems = await triggerFacetFilter({\n filters,\n items,\n fieldKey,\n op,\n groupIndex,\n value,\n });\n\n if (!filteredItems) return;\n\n const disabled = !filteredItems.length;\n\n if (displayFacetCounts) {\n const label = optionLabels.get(option) || '';\n option.text = `${label} (${filteredItems.length})`;\n }\n\n if (hideOnEmpty && !option.selected) {\n option.hidden = disabled;\n option.disabled = disabled;\n }\n }),\n );\n },\n 0,\n );\n\n return handler;\n};\n\n/**\n * Triggers a facet search.\n * @param params\n * @returns The promise of the filtered items.\n */\nconst triggerFacetFilter = ({\n filters,\n items,\n fieldKey,\n op,\n groupIndex,\n value,\n}: {\n filters: Filters;\n items: ListItem[];\n fieldKey: string;\n op: FilterOperator;\n groupIndex: number;\n value: string;\n}) => {\n const filtersClone = structuredClone(toRaw(filters)) as Filters;\n\n const conditionsGroup = filtersClone.groups[groupIndex];\n if (!conditionsGroup) return;\n\n const { conditions = [] } = conditionsGroup;\n const conditionIndex = conditions.findIndex((c) => c.fieldKey === fieldKey && c.op === op);\n\n const condition = conditions[conditionIndex];\n if (!condition) return;\n\n // Inject the condition value\n if (Array.isArray(condition.value)) {\n if (condition.filterMatch === 'and') {\n condition.value.push(value);\n } else {\n condition.value = [value];\n }\n } else {\n condition.value = value;\n }\n\n return filterItems(filtersClone, items);\n};\n", "import {\n addListener,\n ensureButtonLike,\n isActivationKey,\n isElement,\n isFormField,\n isNumber,\n} from '@adartem/adlib-utils';\nimport { watch } from '@vue/reactivity';\n\nimport type { List } from '../../components/List';\nimport { getAttribute, getElementSelector } from '../../utils/selectors';\nimport { handleFiltersForm } from '../elements';\nimport type { FilterMatch, FiltersCondition } from '../types';\nimport { getConditionData, getStandardFiltersGroup, setConditionsData } from './conditions';\nimport { initFacets } from './facets';\n\n/**\n * Initializes standard filters for a list.\n * @param list\n * @param form\n * @returns A cleanup function.\n */\nexport const initStandardFilters = (list: List, forms: HTMLFormElement[]) => {\n const cleanups = forms.map((form, groupIndex) => initStandardFiltersForm(list, form, groupIndex));\n\n return () => {\n for (const cleanup of cleanups) {\n cleanup();\n }\n };\n};\n\n/**\n * Initializes standard filters for a list.\n * @param list\n * @param form\n * @param groupIndex\n * @returns A cleanup function.\n */\nconst initStandardFiltersForm = (list: List, form: HTMLFormElement, groupIndex: number) => {\n const debounces = new Map<string, number>();\n\n // Handle inputs\n const formElementCleanup = handleFiltersForm(form);\n const formFieldsCleanup = handleFormFields(list, form, groupIndex, debounces);\n\n // Handle clear buttons\n const clickCleanup = handleClearButtons(list, groupIndex, debounces);\n\n // Get initial filters\n const groupsMatch = getAttribute(form, 'groupsmatch', {\n filterInvalid: true,\n }) as FilterMatch | undefined;\n\n list.filters.value.groupsMatch ||= groupsMatch;\n list.filters.value.groups[groupIndex] = getStandardFiltersGroup(list, form, groupIndex);\n\n // 2 way binding\n const twoWayBindingCleanup = watch(\n () => list.filters.value.groups[groupIndex]?.conditions,\n (conditions) => {\n if (list.readingFilters) return;\n\n setConditionsData(list, form, conditions);\n },\n { deep: true },\n );\n\n const facetCountsCleanup = initFacets(list, form, groupIndex);\n\n return () => {\n formElementCleanup();\n formFieldsCleanup();\n clickCleanup();\n twoWayBindingCleanup();\n facetCountsCleanup();\n };\n};\n\n/**\n * Handles the form inputs.\n * @param list\n * @param form\n * @param debounces\n * @returns A cleanup function.\n */\nconst handleFormFields = (\n list: List,\n form: HTMLFormElement,\n groupIndex: number,\n debounces: Map<string, number>,\n) => {\n const event = getAttribute(form, 'filteron', { filterInvalid: true });\n\n // submit\n if (event === 'submit') {\n return addListener(form, 'submit', () => {\n list.readingFilters = true;\n\n list.filters.value.groups[groupIndex] = getStandardFiltersGroup(list, form, groupIndex, true);\n\n list.readingFilters = false;\n });\n }\n\n // input / change\n return addListener(form, event, (e) => {\n if (list.settingFilters) return;\n\n const { target } = e;\n\n if (!isFormField(target)) return;\n\n const fieldKey = getAttribute(target, 'field')?.trim();\n if (!fieldKey) return;\n\n const condition = getConditionData(target, fieldKey, true);\n\n const update = () => {\n const conditions = list.filters.value.groups[groupIndex]?.conditions || [];\n\n const conditionIndex = conditions.findIndex(\n (c) => c.fieldKey === fieldKey && c.op === condition.op,\n );\n\n list.readingFilters = true;\n\n if (conditionIndex >= 0) {\n conditions[conditionIndex] = condition;\n } else {\n conditions.push(condition);\n }\n\n list.readingFilters = false;\n };\n\n const debounceKey = `${fieldKey}_${condition.op}`;\n const debounce = debounces.get(debounceKey);\n\n if (debounce) {\n clearTimeout(debounce);\n }\n\n // With debouncing\n const timeout = getAttribute(target, 'debounce');\n\n if (isNumber(timeout) && !isNaN(timeout)) {\n const timeoutId = window.setTimeout(update, timeout);\n\n debounces.set(debounceKey, timeoutId);\n return;\n }\n\n // Without debouncing\n update();\n });\n};\n\n/**\n * Handles the clear buttons.\n * @param list\n * @param debounces\n * @returns A cleanup function.\n */\nconst handleClearButtons = (list: List, groupIndex: number, debounces: Map<string, number>) => {\n const { instance } = list;\n const clearElementSelector = getElementSelector('clear', { instance });\n\n // A11y: make clear buttons keyboard accessible\n if (list.options.a11y !== false) {\n const clearElements = document.querySelectorAll<HTMLElement>(clearElementSelector);\n for (const el of clearElements) {\n ensureButtonLike(el);\n }\n }\n\n const handleClear = (target: Element) => {\n const clearElement = target.closest(clearElementSelector);\n if (!clearElement) return;\n\n const fieldKey = getAttribute(clearElement, 'field')?.trim();\n\n const conditions = list.filters.value.groups[groupIndex]?.conditions || [];\n const conditionsToClear = fieldKey\n ? conditions.filter((condition) => condition.fieldKey === fieldKey)\n : conditions;\n\n for (const condition of conditionsToClear) {\n debounces.delete(`${condition.fieldKey}_${condition.op}`);\n\n const updated: Partial<FiltersCondition> = {\n value: Array.isArray(condition.value) ? [] : '',\n interacted: false,\n };\n\n Object.assign(condition, updated);\n }\n };\n\n const clickCleanup = addListener(window, 'click', (e) => {\n const { target } = e;\n if (!(target instanceof Element)) return;\n handleClear(target);\n });\n\n // A11y: keyboard activation for clear buttons\n let keydownCleanup: (() => void) | undefined;\n if (list.options.a11y !== false) {\n keydownCleanup = addListener(window, 'keydown', (e) => {\n if (!isActivationKey(e)) return;\n\n const { target } = e;\n if (!isElement(target)) return;\n\n const clearElement = target.closest<HTMLElement>(clearElementSelector);\n if (!clearElement) return;\n\n if (e.key === ' ' || e.key === 'Spacebar') {\n e.preventDefault();\n }\n\n clearElement.click();\n });\n }\n\n return () => {\n clickCleanup();\n keydownCleanup?.();\n };\n};\n", "import { isNotEmpty, isString } from '@adartem/adlib-utils';\n\nimport type { List } from '../../components';\nimport { SETTINGS } from '../../utils/constants';\nimport { listInstancesStore } from '../../utils/store';\nimport type { FiltersCondition } from '../types';\n\n/**\n * @param list\n * @returns A regex to match the filters query string.\n */\nconst getListFiltersQueryRegex = (list: List) => {\n const allFieldKeys = Object.keys(list.allFieldsData.value);\n const allFilterKeys = list.filters.value.groups.flatMap((group) =>\n group.conditions.flatMap((condition) => condition.fieldKey),\n );\n\n const allKeys = new Set([...allFieldKeys, ...allFilterKeys]);\n\n // Escape special regex characters in the keys\n const escapedKeys = [...allKeys].map((key) => key.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n\n const regex = new RegExp(\n `^(?:([0-9]+)_)?(${escapedKeys.join('|')})(?:_(${SETTINGS.operator.values.join('|')}))?$`,\n );\n return regex;\n};\n\n/**\n * Gets the filters query string for the list.\n * @param list\n */\nexport const getListFiltersQuery = async (list: List) => {\n const usePrefix = listInstancesStore.size > 1;\n const existingParams = await list.getAllSearchParams(usePrefix);\n\n const regex = getListFiltersQueryRegex(list);\n const params = existingParams.filter(([key]) => key.match(regex));\n\n for (const [key, value] of params) {\n const match = key.match(regex);\n if (!match) continue;\n\n const groupIndex = match[1] ? parseInt(match[1]) : 0;\n const fieldKey = match[2];\n const op = match[3] ? match[3] : undefined;\n\n const condition = list.filters.value.groups[groupIndex]?.conditions.find(\n (c) => c.fieldKey === fieldKey && c.op === op,\n );\n\n if (!condition) continue;\n\n let valueToSet: FiltersCondition['value'] = value;\n\n try {\n const parsedValue = JSON.parse(value);\n\n if (Array.isArray(parsedValue) && parsedValue.every(isString)) {\n valueToSet = parsedValue;\n } else if (isString(parsedValue)) {\n valueToSet = parsedValue;\n }\n } catch {\n // Skip\n }\n\n condition.value = valueToSet;\n condition.interacted = true;\n }\n};\n\n/**\n * Sets the filters query string for the list.\n * @param list\n */\nexport const setListFiltersQuery = async (list: List) => {\n const usePrefix = listInstancesStore.size > 1;\n const existingParams = await list.getAllSearchParams(usePrefix);\n\n const regex = getListFiltersQueryRegex(list);\n\n for (const [key] of existingParams) {\n if (!key.match(regex)) continue;\n\n await list.setSearchParam(key, null, { usePrefix });\n }\n\n const multipleGroups = list.filters.value.groups.length > 1;\n\n list.filters.value.groups.forEach((group, index) => {\n group.conditions.forEach(({ fieldKey, op, value, interacted }) => {\n const key = [multipleGroups ? index : undefined, fieldKey, op].filter(isNotEmpty).join('_');\n const isArray = Array.isArray(value);\n\n if (!interacted || !value || (isArray && !value.length)) return;\n\n let valueToSet = null;\n\n if (isArray) {\n try {\n valueToSet = JSON.stringify(value);\n } catch {\n //\n }\n } else {\n valueToSet = value;\n }\n\n list.setSearchParam(key, valueToSet, { usePrefix });\n });\n });\n};\n", "import { addListener, cloneNode, isDate, isNotEmpty, isNumber } from '@adartem/adlib-utils';\nimport { watch } from '@vue/reactivity';\n\nimport type { List } from '../components/List';\nimport { SETTINGS } from '../utils/constants';\nimport { getAttribute, getElementSelector, queryElement } from '../utils/selectors';\nimport type { FilterOperator, Filters, FiltersCondition } from './types';\nimport { parseFilterValue } from './utils';\n\ntype TagData = {\n element: HTMLElement;\n remove: () => void;\n cleanup: () => void;\n};\n\ntype TagGroupData = {\n element: HTMLElement;\n renderedTags: Map<string, TagData>;\n remove: () => void;\n cleanup: () => void;\n};\n\nconst OPERATOR_SYMBOLS: Record<FilterOperator, string> = {\n empty: '∅',\n 'not-empty': '!∅',\n contain: '⊃',\n 'not-contain': '⊅',\n start: '⋀',\n 'not-start': '⋀̸',\n end: '⋁',\n 'not-end': '⋁̸',\n equal: '=',\n 'not-equal': '≠',\n less: '<',\n 'less-equal': '≤',\n greater: '>',\n 'greater-equal': '≥',\n};\n\n/**\n * Inits the tags for the list.\n * @param list\n * @param isDynamic Defines if the filters are dynamic or not\n * @returns A cleanup function\n */\nexport const initTags = (list: List, isDynamic: boolean) => {\n const tagTemplate = queryElement('tag', { instance: list.instance });\n if (!tagTemplate) return;\n\n const tagGroupTemplate =\n tagTemplate.closest<HTMLElement>(getElementSelector('tag-group')) || tagTemplate.parentElement;\n if (!tagGroupTemplate) return;\n\n const tagsListsWrapper = tagGroupTemplate.parentNode;\n if (!tagsListsWrapper) return;\n\n const indexOfTagTemplate = Array.from(tagGroupTemplate.children).indexOf(tagTemplate);\n const indexOfTagGroupTemplate = Array.from(tagsListsWrapper.children).indexOf(tagGroupTemplate);\n\n tagGroupTemplate.remove();\n tagTemplate.remove();\n\n const renderedTagGroups: Map<string, TagGroupData> = new Map();\n\n const watcherCleanup = watch(\n list.filters,\n (filters: Filters) => {\n // Render the tag groups\n const newRenderedTagGroups = new Map<string, TagGroupData>();\n\n filters.groups.forEach((group) => {\n // Get the tag list, if existing\n let tagGroupData = renderedTagGroups.get(group.id);\n\n const tagListIsRendered = !!tagGroupData;\n\n if (!tagGroupData) {\n const element = cloneNode(tagGroupTemplate);\n const removeElement = queryElement('tag-group-remove', { scope: element });\n const removeCleanup = addListener(removeElement, 'click', () => {\n tagGroupData?.remove();\n });\n\n tagGroupData = {\n element,\n renderedTags: new Map(),\n remove: () => {\n tagGroupData?.renderedTags.forEach((tag) => tag.remove());\n\n const hasGroups = filters.groups.length > 1;\n\n if (isDynamic && hasGroups) {\n const groupIndex = filters.groups.findIndex((g) => g.id === group.id);\n filters.groups.splice(groupIndex, 1);\n }\n },\n cleanup: () => {\n removeCleanup();\n tagGroupData?.renderedTags.forEach((tag) => tag.cleanup());\n tagGroupData?.element.remove();\n renderedTagGroups.delete(group.id);\n },\n };\n\n renderedTagGroups.set(group.id, tagGroupData);\n }\n\n // Render the tags\n const newRenderedTags = new Map<string, TagData>();\n\n const hasRenderedTags = group.conditions\n .map((condition) => {\n const conditionValue = condition.value;\n const shouldSeparate =\n Array.isArray(conditionValue) && condition.tagValuesDisplay === 'separate';\n\n // Separate tags per value\n if (shouldSeparate) {\n const hasRenderedValues = conditionValue.map((value) => {\n const tagKey = `${condition.id}:${value}`;\n let tagData = tagGroupData.renderedTags.get(tagKey);\n const tagIsRendered = !!tagData;\n\n const shouldRender = condition.showTag && !!condition.interacted && !!value;\n if (!shouldRender) {\n tagData?.cleanup();\n return false;\n }\n\n if (!tagData) {\n const element = cloneNode(tagTemplate);\n const removeElement = queryElement('tag-remove', { scope: element });\n const removeCleanup = addListener(removeElement, 'click', () =>\n tagData?.remove(),\n );\n\n tagData = {\n element,\n remove: () => {\n const hasConditions = group.conditions.length > 1;\n const conditionIndex = group.conditions.findIndex(\n (c) => c.id === condition.id,\n );\n const currentValues = group.conditions[conditionIndex].value;\n\n if (Array.isArray(currentValues) && currentValues.length > 1) {\n group.conditions[conditionIndex].value = currentValues.filter(\n (v) => v !== value,\n );\n } else if (isDynamic && hasConditions) {\n group.conditions.splice(conditionIndex, 1);\n } else {\n group.conditions[conditionIndex].value = [];\n }\n },\n cleanup: () => {\n removeCleanup();\n tagData?.element.remove();\n tagGroupData.renderedTags.delete(tagKey);\n },\n };\n\n tagGroupData.renderedTags.set(tagKey, tagData);\n }\n\n // Create a single-value condition for rendering\n const singleValueCondition: FiltersCondition = {\n ...condition,\n value,\n };\n\n populateTag(singleValueCondition, tagData);\n\n if (!tagIsRendered) {\n const anchor =\n tagGroupData.element.children[indexOfTagTemplate + newRenderedTags.size] ||\n null;\n tagGroupData.element.insertBefore(tagData.element, anchor);\n }\n\n newRenderedTags.set(tagKey, tagData);\n\n return true;\n });\n\n return hasRenderedValues.some(Boolean);\n }\n\n // Combined tag per all values\n const tagKey = condition.id;\n let tagData = tagGroupData.renderedTags.get(tagKey);\n const tagIsRendered = !!tagData;\n\n const shouldRender =\n condition.showTag &&\n !!condition.interacted &&\n !!condition.value &&\n (Array.isArray(condition.value) ? !!condition.value.length : true);\n\n if (!shouldRender) {\n tagData?.cleanup();\n return false;\n }\n\n if (!tagData) {\n const element = cloneNode(tagTemplate);\n const removeElement = queryElement('tag-remove', { scope: element });\n const removeCleanup = addListener(removeElement, 'click', () => tagData?.remove());\n\n tagData = {\n element,\n remove: () => {\n const hasConditions = group.conditions.length > 1;\n const conditionIndex = group.conditions.findIndex((c) => c.id === condition.id);\n\n if (isDynamic && hasConditions) {\n group.conditions.splice(conditionIndex, 1);\n } else {\n group.conditions[conditionIndex].value = Array.isArray(condition.value)\n ? []\n : '';\n }\n },\n cleanup: () => {\n removeCleanup();\n tagData?.element.remove();\n tagGroupData.renderedTags.delete(tagKey);\n },\n };\n\n tagGroupData.renderedTags.set(tagKey, tagData);\n }\n\n populateTag(condition, tagData);\n\n if (!tagIsRendered) {\n const anchor =\n tagGroupData.element.children[indexOfTagTemplate + newRenderedTags.size] || null;\n tagGroupData.element.insertBefore(tagData.element, anchor);\n }\n\n newRenderedTags.set(tagKey, tagData);\n\n return true;\n })\n .some(Boolean);\n\n // Remove the tags that are not rendered anymore\n for (const [id, tagData] of tagGroupData.renderedTags) {\n if (!newRenderedTags.has(id)) {\n tagData.cleanup();\n }\n }\n\n if (!hasRenderedTags) {\n tagGroupData.cleanup();\n return;\n }\n\n if (!tagListIsRendered) {\n const anchor =\n tagsListsWrapper.children[indexOfTagGroupTemplate + newRenderedTagGroups.size] || null;\n\n tagsListsWrapper.insertBefore(tagGroupData.element, anchor);\n }\n\n newRenderedTagGroups.set(group.id, tagGroupData);\n });\n\n // Remove the tag groups that are not rendered anymore\n for (const [id, tagGroupData] of renderedTagGroups) {\n if (!newRenderedTagGroups.has(id)) {\n tagGroupData.cleanup();\n }\n }\n },\n { deep: true },\n );\n\n return () => {\n watcherCleanup();\n\n for (const [, { cleanup }] of renderedTagGroups) {\n cleanup();\n }\n };\n};\n\n/**\n * Populates a tag with the condition data.\n * @param condition\n * @param tagData\n */\nconst populateTag = (condition: FiltersCondition, tagData: TagData) => {\n const scope = tagData.element;\n\n const fieldElement = queryElement('tag-field', { scope });\n const operatorElement = queryElement('tag-operator', { scope });\n const valueElement = queryElement('tag-value', { scope });\n\n const operatorOverwriteElements = new Map(\n SETTINGS.operator.values\n .map((operator) => {\n const operatorOverwriteElement = queryElement(`tag-operator-${operator}`, { scope });\n if (!operatorOverwriteElement) return;\n\n return [operator, operatorOverwriteElement] as const;\n })\n .filter(isNotEmpty),\n );\n\n // Field\n if (fieldElement) {\n fieldElement.textContent = condition.tagFieldDisplay || condition.fieldKey;\n }\n\n // Operator\n const operator = condition.op;\n\n if (operator) {\n const operatorOverwriteElement = operatorOverwriteElements.get(operator);\n\n // Overwrite exists\n if (operatorOverwriteElement) {\n operatorElement?.remove();\n operatorOverwriteElements.delete(operator);\n }\n\n // Fallback\n else if (operatorElement) {\n const operatorSymbol = OPERATOR_SYMBOLS[operator];\n operatorElement.textContent = operatorSymbol;\n }\n\n // Remove all unused overwrites\n for (const [, element] of operatorOverwriteElements) {\n element.remove();\n }\n }\n\n // Value\n if (valueElement) {\n // No value\n if (!condition.value) {\n valueElement.remove();\n }\n\n // Has value\n else {\n // Format the value, if needed\n let formattedValue = condition.value;\n\n const formatDisplay = getAttribute(valueElement, 'formatdisplay');\n if (formatDisplay) {\n const locale = formatDisplay === 'true' ? undefined : formatDisplay;\n\n if (Array.isArray(condition.value)) {\n formattedValue = condition.value.map((value) => {\n const parsedValue = parseFilterValue(value, condition.type);\n\n if (isNumber(parsedValue)) {\n return parsedValue.toLocaleString(locale);\n }\n\n if (isDate(parsedValue)) {\n return parsedValue.toLocaleDateString(locale);\n }\n\n return value;\n });\n } else {\n const parsedValue = parseFilterValue(condition.value, condition.type);\n\n if (isNumber(parsedValue)) {\n formattedValue = parsedValue.toLocaleString(locale);\n }\n\n if (isDate(parsedValue)) {\n formattedValue = parsedValue.toLocaleDateString(locale);\n }\n }\n }\n\n // Set the value\n const value = Array.isArray(formattedValue)\n ? formattedValue.join(condition.filterMatch === 'and' ? ' & ' : ' | ')\n : formattedValue;\n\n valueElement.textContent = value;\n }\n }\n};\n", "import { watch } from '@vue/reactivity';\nimport debounce from 'just-debounce';\n\nimport type { List } from '../components/List';\nimport { queryElement } from '../utils/selectors';\nimport { initDynamicFilters } from './dynamic';\nimport { handleFilterElements } from './elements';\nimport { filterItems } from './filter';\nimport { initStandardFilters } from './standard';\nimport { getListFiltersQuery, setListFiltersQuery } from './standard/query';\nimport { initTags } from './tags';\n\n/**\n * Inits loading functionality for the list.\n * @param list\n * @param forms\n */\nexport const initListFiltering = (list: List, forms: HTMLFormElement[]) => {\n const filteringClass = list.options.filteringclass ?? 'is-list-filtering';\n\n // Init hooks\n const filterHookCleanup = list.addHook('filter', async (items) => {\n const filteredItems = await filterItems(list.filters.value, items, list.highlight);\n return filteredItems;\n });\n\n const beforeRenderHookCleanup = list.addHook('beforeRender', async (items) => {\n if (list.triggeredHook === 'filter') {\n list.wrapperElement.classList.add(filteringClass);\n\n const animations = list.wrapperElement.getAnimations({ subtree: true });\n\n try {\n await Promise.all(animations.map((a) => a.finished));\n } catch {\n //\n }\n }\n\n return items;\n });\n\n const afterRenderHookCleanup = list.addHook('afterRender', (items) => {\n list.wrapperElement.classList.remove(filteringClass);\n\n return items;\n });\n\n // Handle elements\n const elementsCleanup = handleFilterElements(list);\n\n // Init filters\n const isDynamic = !!queryElement('condition-group', { scope: forms[0] });\n const filteringCleanup = isDynamic\n ? initDynamicFilters(list, forms[0])\n : initStandardFilters(list, forms);\n\n // Init Tags\n const tagsCleanup = initTags(list, isDynamic);\n\n // Trigger the hook when the filters change\n const filtersCleanup = watch(\n list.filters,\n debounce(() => {\n list.triggerHook('filter', {\n scrollToAnchor: list.hasInteracted.value,\n resetCurrentPage: list.hasInteracted.value,\n });\n\n // Handle query params\n if (list.showQuery) {\n setListFiltersQuery(list);\n }\n }, 0),\n { deep: true, immediate: true },\n );\n\n // Read query params\n getListFiltersQuery(list);\n\n return () => {\n filterHookCleanup();\n beforeRenderHookCleanup();\n afterRenderHookCleanup();\n elementsCleanup();\n tagsCleanup?.();\n filtersCleanup();\n filteringCleanup?.();\n };\n};\n", "import { fetchPage, isNotEmpty } from '@adartem/adlib-utils';\n\nimport type { List } from '../components/List';\nimport { getCMSElementSelector, getCollectionElements } from '../utils/dom';\n\n/**\n * Loads all paginated items of a `List` instance.\n * @param list The {@link List} instance.\n *\n * @returns Nothing, it mutates the `List` instance.\n */\nexport const loadPaginatedCMSItems = (list: List): Promise<void> => {\n const {\n paginationNextCMSElement,\n paginationPreviousCMSElement,\n paginationCountElement,\n loadingSearchParamsData,\n cache: cacheItems,\n } = list;\n\n if (!paginationNextCMSElement.value && !paginationPreviousCMSElement.value) {\n return Promise.resolve();\n }\n\n list.loading.value = true;\n\n // Attempt to get the total amount of pages from the `Page Count` element.\n let totalPages;\n\n if (paginationCountElement) {\n const [, rawTotalPages] = paginationCountElement.textContent?.split('/') || [];\n if (rawTotalPages) {\n totalPages = parseInt(rawTotalPages.trim());\n }\n }\n\n list.loadingPaginatedItems = (async () => {\n await loadingSearchParamsData;\n\n if (totalPages) {\n await parallelItemsLoad(list, totalPages, cacheItems);\n } else {\n await chainedPagesLoad(list, cacheItems);\n }\n\n list.loading.value = false;\n })();\n\n return list.loadingPaginatedItems;\n};\n\n/**\n * Collects Collection Items from a Collection List's pagination.\n * Loads all pages in a chained sequence until there are no more valid pages to load.\n *\n * @param list The List instance.\n * @param cache Whether to cache the loaded items or not.\n *\n * @returns Nothing, it mutates the `List` instance.\n */\nconst chainedPagesLoad = async (list: List, cache: boolean): Promise<void> => {\n const currentPage = list.currentPage.value;\n if (currentPage > 1) {\n await parallelItemsLoad(list, currentPage, cache);\n }\n\n if (!list.paginationNextCMSElement.value) return;\n\n const { href } = list.paginationNextCMSElement.value;\n const pageLinks: string[] = [href];\n\n /**\n * Loads the items from the specified URL.\n * @param href The URL to load.\n */\n const loadPage = async (href: string) => {\n // Fetch the page\n const page = await fetchPage(href, { cache });\n if (!page) return;\n\n // Check for recursion (action: `all`)\n const nextPageURL = await parseLoadedPage(page, list);\n\n if (!nextPageURL || pageLinks.includes(nextPageURL)) return;\n\n pageLinks.push(nextPageURL);\n\n await loadPage(nextPageURL);\n };\n\n await loadPage(href);\n};\n\n/**\n * Collects Collection Items from a Collection List's pagination.\n * Loads all pages in parallel.\n *\n * @param list The List instance.\n * @param totalPages The total number of pages to load.\n * @param cache Whether to cache the loaded items or not.\n *\n * @returns Nothing, it mutates the `List` instance.\n */\nconst parallelItemsLoad = async (list: List, totalPages: number, cache: boolean) => {\n if (!list.paginationNextCMSElement.value && !list.paginationPreviousCMSElement.value) return;\n\n const currentPage = list.currentPage.value;\n\n if (!list.paginationSearchParam || !currentPage) return;\n\n const { origin, pathname } = window.location;\n\n /**\n * @param pageNumber\n * @returns The URL of the specified page.\n */\n const getPageURL = (pageNumber: number) =>\n `${origin}${pathname}?${list.paginationSearchParam}=${pageNumber}`;\n\n // Previous Pages\n for (let pageNumber = currentPage - 1; pageNumber >= 1; pageNumber--) {\n const url = getPageURL(pageNumber);\n\n const page = await fetchPage(url, { cache });\n if (!page) return;\n\n await parseLoadedPage(page, list, 'unshift');\n }\n\n // Next Pages\n const fetchPromises: Promise<void>[] = [];\n\n for (let pageNumber = currentPage + 1; pageNumber <= totalPages; pageNumber++) {\n fetchPromises[pageNumber] = (async () => {\n const previousPromise = fetchPromises[pageNumber - 1];\n\n const url = getPageURL(pageNumber);\n\n const page = await fetchPage(url, { cache });\n\n await previousPromise;\n\n if (!page) return;\n\n await parseLoadedPage(page, list);\n })();\n }\n\n await Promise.all(fetchPromises);\n};\n\n/**\n * Parses a loaded page and adds the items to the `List` instance.\n * @param page\n * @param list\n * @param itemsTarget\n * @returns The URL of the next page, if any.\n */\nconst parseLoadedPage = async (\n page: Document,\n list: List,\n itemsTarget: 'push' | 'unshift' = 'push',\n) => {\n // Get DOM Elements\n const allCollectionWrappers = page.querySelectorAll(getCMSElementSelector('wrapper'));\n const collectionListWrapper = allCollectionWrappers[list.pageIndex];\n if (!collectionListWrapper) return;\n\n // Store and mount the new items\n const nextPageURL = getCollectionElements(collectionListWrapper, 'pagination-next')?.href;\n const collectionItems = getCollectionElements(collectionListWrapper, 'item');\n\n const { length: itemsLength } = collectionItems;\n\n // Make sure the itemsPerPage value is correct\n if (nextPageURL && list.initialItemsPerPage !== itemsLength && !list.customItemsPerPage) {\n list.initialItemsPerPage = itemsLength;\n list.itemsPerPage.value = itemsLength;\n }\n\n // Add the new items to the list\n const newItems = collectionItems.map(list.createItem).filter(isNotEmpty);\n\n if (itemsTarget === 'push') {\n list.items.value = [...list.items.value, ...newItems];\n } else {\n list.items.value = [...newItems, ...list.items.value];\n }\n\n return nextPageURL;\n};\n", "import { addListener } from '@adartem/adlib-utils';\n\nimport type { List } from '../components/List';\nimport { loadPaginatedCMSItems } from './load';\n\n/**\n * Inits the `Load All` mode.\n * @param list The {@link List} instance.\n * @returns A cleanup function.\n */\nexport const initAllMode = (list: List) => {\n loadPaginatedCMSItems(list).then(() => {\n list.itemsPerPage.value = list.items.value.length;\n });\n\n const cleanupClick = addListener(\n [...list.allPaginationPreviousElements.value, ...list.allPaginationNextElements.value],\n 'click',\n (e) => {\n e.preventDefault();\n },\n );\n\n return () => {\n cleanupClick();\n };\n};\n", "import { effect } from '@vue/reactivity';\n\nimport type { List } from '../components';\n\n/**\n * Handles the load-specific elements.\n * @param list\n * @returns A cleanup function.\n */\nexport const handleLoadElements = (list: List) => {\n const runner = effect(() => {\n const filteredItems = list.hooks.filter.result.value;\n\n if (list.visibleCountElement) {\n const visibleCountTotal = Math.min(list.itemsPerPage.value, filteredItems.length);\n\n list.visibleCountElement.textContent = `${visibleCountTotal}`;\n }\n\n if (list.visibleCountFromElement) {\n const visibleCountFrom = Math.min(\n (list.currentPage.value - 1) * list.itemsPerPage.value + 1,\n filteredItems.length,\n );\n\n list.visibleCountFromElement.textContent = `${visibleCountFrom}`;\n }\n\n if (list.visibleCountToElement) {\n const visibleCountTo = Math.min(\n list.currentPage.value * list.itemsPerPage.value,\n filteredItems.length,\n );\n\n list.visibleCountToElement.textContent = `${visibleCountTo}`;\n }\n });\n\n return () => {\n runner.effect.stop();\n };\n};\n", "import {\n createDelegation,\n ensureButtonLike,\n isActivationKey,\n isElement,\n parseNumericAttribute,\n} from '@adartem/adlib-utils';\nimport { effect, watch, type WatchHandle } from '@vue/reactivity';\n\nimport type { List } from '../components/List';\nimport { getAttribute, getElementSelector } from '../utils/selectors';\nimport { loadPaginatedCMSItems } from './load';\n\n/**\n * Inits the default mode.\n * @param list The {@link List} instance.\n *\n * @returns A callback to remove event listeners.\n */\nexport const initMoreMode = (list: List) => {\n // Add hook\n list.addHook('pagination', (items) => {\n const paginatedItems = items.slice(0, list.itemsPerPage.value);\n return paginatedItems;\n });\n\n // Init\n loadPaginatedCMSItems(list);\n\n // Listeners\n const cleanupPaginationNextButtons = handlePaginationNextButtons(list);\n const cleanupElements = handleElements(list);\n\n return () => {\n cleanupPaginationNextButtons();\n cleanupElements();\n };\n};\n\n/**\n * Handles the pagination next buttons.\n * @param list\n * @returns A cleanup function.\n */\nexport const handlePaginationNextButtons = (list: List) => {\n let cleanupLoadRemaining: WatchHandle | undefined;\n\n // A11y: make load-more buttons keyboard accessible\n if (list.options.a11y !== false) {\n list.allPaginationNextElements.value.forEach((el) => ensureButtonLike(el));\n }\n\n const paginationNextSelector = getElementSelector('pagination-next', {\n instance: list.instance,\n });\n\n const destroyDelegation = createDelegation(paginationNextSelector, {\n click: ({ event, el }) => {\n if (!isElement(el)) return;\n\n event.preventDefault();\n\n const rawLoadCount = getAttribute(el, 'loadcount') || list.options.loadcount;\n\n if (rawLoadCount === 'all') {\n cleanupLoadRemaining ||= watch(\n list.items,\n (items) => {\n list.itemsPerPage.value = items.length;\n },\n { immediate: true },\n );\n } else {\n list.itemsPerPage.value += parseNumericAttribute(rawLoadCount, list.initialItemsPerPage);\n }\n\n list.triggerHook('pagination');\n },\n keydown: ({ event, el }) => {\n if (list.options.a11y === false) return;\n if (!isActivationKey(event)) return;\n\n if (event.key === ' ' || event.key === 'Spacebar') {\n event.preventDefault();\n }\n\n (el as HTMLElement).click();\n },\n });\n\n return () => {\n destroyDelegation();\n cleanupLoadRemaining?.();\n };\n};\n\n/**\n * Handles the display of elements.\n * @param list\n * @returns A cleanup function.\n */\nexport const handleElements = (list: List) => {\n const runner = effect(() => {\n const allItemsDisplayed = list.itemsPerPage.value >= list.hooks.filter.result.value.length;\n\n list.allPaginationNextElements.value.forEach((element) => {\n element.style.display = allItemsDisplayed ? 'none' : '';\n element.setAttribute('aria-hidden', allItemsDisplayed ? 'true' : 'false');\n element.setAttribute('tabindex', allItemsDisplayed ? '-1' : '0');\n });\n\n if (list.paginationCountElement) {\n const totalPages = Math.ceil(\n list.hooks.filter.result.value.length / list.initialItemsPerPage,\n );\n const currentPage = Math.ceil(list.itemsPerPage.value / list.initialItemsPerPage);\n\n list.paginationCountElement.innerText = `${currentPage} / ${totalPages}`;\n list.paginationCountElement.setAttribute(\n 'aria-label',\n `Page ${currentPage} of ${totalPages}`,\n );\n }\n });\n\n return () => {\n runner.effect.stop();\n };\n};\n", "import { addListener } from '@adartem/adlib-utils';\nimport throttle from 'just-throttle';\n\nimport type { List } from '../components/List';\nimport { loadPaginatedCMSItems } from './load';\nimport { handleElements, handlePaginationNextButtons } from './more';\n\n/**\n * Inits the infinite mode.\n * @param list The {@link List} instance.\n *\n * @returns A callback to remove all event listeners.\n */\nexport const initInfiniteMode = (list: List) => {\n if (!list.listElement) return;\n\n const thresholdCoefficient = getInfiniteThreshold(list);\n\n // Add hook\n list.addHook('pagination', (items) => {\n const paginatedItems = items.slice(0, list.itemsPerPage.value);\n return paginatedItems;\n });\n\n // Init\n loadPaginatedCMSItems(list);\n\n /**\n * Handles a scroll event.\n * Recalculates the scroll ratio of the element.\n */\n const handleScroll = throttle(async () => {\n if (!list.listElement) return;\n\n const { innerHeight } = window;\n const { bottom } = list.listElement.getBoundingClientRect();\n\n const validRange = thresholdCoefficient * innerHeight;\n const shouldLoad = bottom > 0 && bottom <= validRange;\n\n if (shouldLoad && list.itemsPerPage.value < list.items.value.length) {\n list.itemsPerPage.value += list.initialItemsPerPage;\n list.triggerHook('pagination');\n }\n }, 10);\n\n let cleanupScroll: (() => void) | undefined;\n\n const observer = new IntersectionObserver((entries) => {\n for (const { isIntersecting } of entries) {\n if (isIntersecting) {\n if (!cleanupScroll) {\n cleanupScroll = addListener(window, 'scroll', handleScroll);\n }\n } else {\n cleanupScroll?.();\n cleanupScroll = undefined;\n }\n }\n });\n\n // Set listeners\n observer.observe(list.listElement);\n\n const cleanupPaginationNextButtons = handlePaginationNextButtons(list);\n const cleanupElements = handleElements(list);\n\n return () => {\n observer.disconnect();\n cleanupScroll?.();\n cleanupPaginationNextButtons();\n cleanupElements();\n };\n};\n\n/**\n * Collects the `Infinite` mode settings.\n * @param list The {@link List} instance.\n */\nconst getInfiniteThreshold = (list: List): number => {\n const threshold = list.options.threshold ?? -20;\n\n const thresholdCoefficient = 1 - threshold / 100;\n return thresholdCoefficient;\n};\n", "import {\n addListener,\n cloneNode,\n createDelegation,\n CURRENT_CSS_CLASS,\n ensureButtonLike,\n extractCommaSeparatedValues,\n getCurrentBreakpoint,\n isActivationKey,\n isHTMLAnchorElement,\n isNotEmpty,\n isNumber,\n} from '@adartem/adlib-utils';\nimport { effect, type Ref, ref, watch } from '@vue/reactivity';\nimport debounce from 'just-debounce';\n\nimport type { List } from '../components/List';\nimport { BREAKPOINTS_INDEX } from '../utils/constants';\nimport { getCMSElementSelector } from '../utils/dom';\nimport { getAttribute, getElementSelector, getInstance, queryElement } from '../utils/selectors';\nimport { loadPaginatedCMSItems } from './load';\n\n/**\n * Inits the `Pagination` mode.\n * @param list The {@link List} instance.\n *\n * @returns A callback to destroy the event listeners.\n */\nexport const initPaginationMode = async (list: List) => {\n const { currentPage, itemsPerPage, paginationWrapperElement } = list;\n if (!paginationWrapperElement) return;\n\n // Init hook\n list.addHook('pagination', (items) => {\n const $itemsPerPage = itemsPerPage.value;\n\n const start = (currentPage.value - 1) * $itemsPerPage;\n const end = start + $itemsPerPage;\n\n const paginatedItems = items.slice(start, end);\n\n return paginatedItems;\n });\n\n const currentPageCleanup = watch(\n list.currentPage,\n () => {\n // We reset currentPage to 1 when filtering and sorting,\n // we don't want to trigger pagination again when that happens\n if (!list.triggeredHook) {\n list.triggerHook('pagination', { scrollToAnchor: true });\n }\n\n if (list.showQuery) {\n list.setSearchParam('page', currentPage.value.toString(), { useSearchParamsPrefix: true });\n }\n },\n {},\n );\n\n const paginateCleanup = watch(list.itemsPerPage, () => {\n list.triggerHook('pagination', { scrollToAnchor: true });\n });\n\n // Init items load\n loadPaginatedCMSItems(list);\n\n await list.loadingSearchParamsData;\n\n // Get settings\n const [pageBoundary, pageBoundaryCleanup] = getBreakpointSetting(list, 'pageboundary');\n const [pageSiblings, pageSiblingsCleanup] = getBreakpointSetting(list, 'pagesiblings');\n\n // Page Button Template\n const pageButtonTemplate = queryElement('page-button', { scope: paginationWrapperElement });\n\n // Page Dots Template\n let pageDotsTemplate = queryElement('page-dots', { scope: paginationWrapperElement });\n\n if (pageDotsTemplate) {\n pageDotsTemplate.remove();\n } else {\n pageDotsTemplate = document.createElement('div');\n pageDotsTemplate.textContent = '...';\n }\n\n // Handle page buttons\n let pageButtonsCleanup: (() => void) | undefined;\n\n if (pageButtonTemplate) {\n const { parentElement } = pageButtonTemplate;\n\n pageButtonTemplate.remove();\n\n if (parentElement) {\n pageButtonsCleanup = handlePageButtons(\n list,\n parentElement,\n pageButtonTemplate,\n pageDotsTemplate,\n pageSiblings,\n pageBoundary,\n );\n }\n }\n\n // Handle pagination elements\n const paginationWrapperCleanup = handlePaginationWrapper(list);\n const paginationButtonsCleanup = handlePaginationButtons(list);\n const paginationCountCleanup = handlePaginationCount(list);\n\n // Return destroy callback\n return () => {\n pageBoundaryCleanup?.();\n pageSiblingsCleanup?.();\n pageButtonsCleanup?.();\n paginationWrapperCleanup?.();\n paginationCountCleanup?.();\n paginationButtonsCleanup();\n currentPageCleanup();\n paginateCleanup();\n };\n};\n\n/**\n * Handles the page buttons elements.\n * @param list\n * @param parentElement\n * @param pageButtonTemplate\n * @param pageDotsTemplate\n * @param pageSiblings\n * @param pageBoundary\n */\nconst handlePageButtons = (\n list: List,\n parentElement: HTMLElement,\n pageButtonTemplate: HTMLElement,\n pageDotsTemplate: HTMLElement,\n pageSiblings: Ref<number>,\n pageBoundary: Ref<number>,\n) => {\n const { currentPage, totalPages } = list;\n\n let renderedButtons = new Map<HTMLElement, number | null>();\n\n const pageButtonsRunner = effect(() => {\n const totalSiblings = pageSiblings.value * 2 + 1;\n const totalBoundary = pageBoundary.value * 2;\n\n const maxElements = totalBoundary + totalSiblings + 2;\n\n const isStartRange = currentPage.value - 1 < maxElements - totalSiblings;\n const isEndRange = totalPages.value - currentPage.value < maxElements - totalSiblings;\n\n const existingElements: Array<[HTMLElement, number | null] | undefined> = [...renderedButtons];\n\n for (let index = 1; index <= maxElements; index++) {\n // Get previous elements\n const [existingElement, existingTargetPage] = existingElements[index - 1] || [];\n const [lastElement] = existingElements[index - 2] || [];\n\n // Get rid of invalid elements\n if (index > totalPages.value) {\n if (existingElement) {\n existingElement.remove();\n existingElements[index - 1] = undefined;\n }\n continue;\n }\n\n // Collect new target page\n let targetPage: number | null;\n\n if (totalPages.value <= maxElements) targetPage = index;\n else if (isStartRange) {\n if (index > maxElements - pageBoundary.value)\n targetPage = totalPages.value - (maxElements - index);\n else if (index === maxElements - pageBoundary.value) targetPage = null;\n else targetPage = index;\n } else if (isEndRange) {\n if (index < pageBoundary.value + 1) targetPage = index;\n else if (index === pageBoundary.value + 1) targetPage = null;\n else targetPage = totalPages.value - (maxElements - index);\n } else {\n if (index < pageBoundary.value + 1) targetPage = index;\n else if (index > maxElements - pageBoundary.value)\n targetPage = totalPages.value - (maxElements - index);\n else if (index === pageBoundary.value + 1 || index === maxElements - pageBoundary.value)\n targetPage = null;\n else\n targetPage =\n currentPage.value + (index - (pageBoundary.value + 1) - (1 + pageSiblings.value));\n }\n\n // Render a new item only when needed\n let newElement: HTMLElement | undefined;\n\n if (existingTargetPage !== targetPage) {\n // Remove the existing element\n existingElement?.remove();\n\n // Add the new item\n newElement = createPageButton(pageButtonTemplate, pageDotsTemplate, targetPage, list);\n existingElements[index - 1] = [newElement, targetPage];\n\n if (lastElement) parentElement.insertBefore(newElement, lastElement.nextSibling);\n else parentElement.appendChild(newElement);\n\n newElement.style.opacity = '';\n }\n\n const elementToUpdate = newElement || existingElement;\n if (!elementToUpdate) continue;\n\n // Update CSS and Aria\n if (targetPage === currentPage.value) {\n elementToUpdate.classList.add(CURRENT_CSS_CLASS);\n elementToUpdate.setAttribute('aria-current', 'page');\n } else {\n elementToUpdate.classList.remove(CURRENT_CSS_CLASS);\n elementToUpdate.removeAttribute('aria-current');\n }\n }\n\n // Store new state\n renderedButtons = new Map([...existingElements.filter(isNotEmpty)]);\n });\n\n // Handle clicks + keydown via delegation\n const pageButtonSelector = getElementSelector('page-button');\n\n const destroyPageButtonDelegation = createDelegation(\n pageButtonSelector,\n {\n click: ({ event, el }) => {\n event.preventDefault();\n\n const targetPage = renderedButtons.get(el as HTMLElement);\n if (!targetPage) return;\n\n list.currentPage.value = targetPage;\n },\n keydown: ({ event, el }) => {\n if (list.options.a11y === false) return;\n if (!isActivationKey(event)) return;\n\n if (event.key === ' ' || event.key === 'Spacebar') {\n event.preventDefault();\n }\n\n (el as HTMLElement).click();\n },\n },\n { root: parentElement },\n );\n\n return () => {\n pageButtonsRunner.effect.stop();\n destroyPageButtonDelegation();\n };\n};\n\n/**\n * Creates a new page button element.\n *\n * @param pageButtonTemplate\n * @param pageDotsTemplate\n * @param targetPage The page where it will point to. If no target page is defined, a `Page Dots` element will be returned.\n * @param list The {@link List} instance.\n *\n * @returns The new element.\n */\nconst createPageButton = (\n pageButtonTemplate: HTMLElement,\n pageDotsTemplate: HTMLElement,\n targetPage: number | null,\n { paginationSearchParam }: List,\n) => {\n if (!targetPage) return cloneNode(pageDotsTemplate);\n\n const newElement = cloneNode(pageButtonTemplate);\n newElement.classList.remove(CURRENT_CSS_CLASS);\n newElement.textContent = `${targetPage}`;\n\n if (isHTMLAnchorElement(newElement) && paginationSearchParam) {\n newElement.href = `?${paginationSearchParam}=${targetPage}`;\n }\n\n return newElement;\n};\n\n/**\n * Updates the native `Page Count` element.\n * @param list The {@link List} instance.\n * @returns A cleanup function to remove the effect.\n */\nconst handlePaginationCount = ({ paginationCountElement, currentPage, totalPages }: List) => {\n if (!paginationCountElement) return;\n\n const runner = effect(() => {\n paginationCountElement.setAttribute(\n 'aria-label',\n `Page ${currentPage.value} of ${totalPages.value}`,\n );\n paginationCountElement.textContent = `${currentPage.value} / ${totalPages.value}`;\n });\n\n return () => runner.effect.stop();\n};\n\n/**\n * Handles the display of the pagination wrapper element.\n * @param list The {@link List} instance.\n * @returns A cleanup function to remove the effect.\n */\nconst handlePaginationWrapper = (list: List) => {\n if (!list.paginationWrapperElement) return;\n\n const runner = effect(() => {\n list.paginationWrapperElement!.style.display =\n list.hooks.pagination.result.value.length > 0 ? '' : 'none';\n });\n\n return () => runner.effect.stop();\n};\n\n/**\n * Handles the `display` and `href` properties of native pagination buttons (`Previous` & `Next`).\n * @param list The {@link List} instance.\n * @returns A cleanup function to remove the effect.\n */\nconst handlePaginationButtons = (list: List) => {\n const setAttributes = (element: HTMLElement, shouldDisplay: boolean) => {\n const disabledClass = getAttribute(element, 'paginationdisabledclass');\n\n element.style.display = '';\n element.classList[shouldDisplay ? 'remove' : 'add'](disabledClass);\n element.setAttribute('aria-disabled', shouldDisplay ? 'false' : 'true');\n element.setAttribute('tabindex', shouldDisplay ? '0' : '-1');\n };\n\n const buttonsRunner = effect(() => {\n list.allPaginationPreviousElements.value.forEach((element) => {\n const shouldDisplay = list.currentPage.value !== 1;\n\n setAttributes(element, shouldDisplay);\n\n if (isHTMLAnchorElement(element)) {\n element.href = `?${list.paginationSearchParam}=${list.currentPage.value - 1}`;\n }\n });\n\n list.allPaginationNextElements.value.forEach((element) => {\n const shouldDisplay = list.currentPage.value !== list.totalPages.value;\n\n setAttributes(element, shouldDisplay);\n\n if (isHTMLAnchorElement(element)) {\n element.href = `?${list.paginationSearchParam}=${list.currentPage.value + 1}`;\n }\n });\n });\n\n // A11y: make pagination buttons keyboard accessible\n if (list.options.a11y !== false) {\n list.allPaginationPreviousElements.value.forEach((el) => ensureButtonLike(el));\n list.allPaginationNextElements.value.forEach((el) => ensureButtonLike(el));\n }\n\n const paginationNextSelector = getCMSElementSelector('pagination-next');\n const paginationPreviousSelector = getCMSElementSelector('pagination-previous');\n\n const destroyPaginationDelegation = createDelegation(\n `:is(${paginationNextSelector}, ${paginationPreviousSelector})`,\n {\n click: ({ event, el }) => {\n if (getInstance(el) !== list.instance) return;\n\n event.preventDefault();\n\n const isNext = el.matches(paginationNextSelector);\n const targetPage = isNext ? list.currentPage.value + 1 : list.currentPage.value - 1;\n if (!targetPage || targetPage < 1 || targetPage > list.totalPages.value) return;\n\n list.currentPage.value = targetPage;\n },\n keydown: ({ event, el }) => {\n if (list.options.a11y === false) return;\n if (!isActivationKey(event)) return;\n if (getInstance(el) !== list.instance) return;\n\n if (event.key === ' ' || event.key === 'Spacebar') {\n event.preventDefault();\n }\n\n (el as HTMLElement).click();\n },\n },\n );\n\n return () => {\n buttonsRunner.effect.stop();\n destroyPaginationDelegation();\n };\n};\n\n/**\n * Gets a breakpoint setting and returns it as a store that will be updated on resize.\n * @param list\n * @param setting\n * @returns A store atom and a cleanup function.\n */\nconst getBreakpointSetting = (list: List, setting: 'pagesiblings' | 'pageboundary') => {\n const rawValues = list.options[setting];\n const values = extractCommaSeparatedValues(rawValues).map(parseInt);\n const store = ref(values[0]);\n\n const updateValue = () => {\n const currentBreakpoint = getCurrentBreakpoint();\n const breakpointIndex = BREAKPOINTS_INDEX[currentBreakpoint];\n\n for (let i = breakpointIndex; i >= 0; i--) {\n const value = values[i];\n\n if (isNumber(value)) {\n store.value = value;\n break;\n }\n }\n };\n\n const cleanup = addListener(window, 'resize', debounce(updateValue, 100));\n\n updateValue();\n\n return [store, cleanup] as const;\n};\n", "import type { List } from '../components/List';\nimport type { SETTINGS } from '../utils/constants';\nimport { initAllMode } from './all';\nimport { handleLoadElements } from './elements';\nimport { initInfiniteMode } from './infinite';\nimport { initMoreMode } from './more';\nimport { initPaginationMode } from './pagination';\n\ntype LoadModeValues = (typeof SETTINGS)['load']['values'];\ntype LoadMode = LoadModeValues[keyof LoadModeValues];\n\n/**\n * Inits loading functionality for the list.\n * @param list\n * @param mode\n */\nexport const initListLoading = (list: List, mode: LoadMode) => {\n const loadingClass = list.options.loadingclass ?? 'is-list-loading';\n const resetIx = list.options.resetix ?? false;\n\n if (resetIx) {\n list.webflowModules.add('ix2');\n }\n\n // Handle elements\n const elementsCleanup = handleLoadElements(list);\n\n // Init mode\n const loadModeCleanup =\n mode === 'all'\n ? initAllMode(list)\n : mode === 'more'\n ? initMoreMode(list)\n : mode === 'infinite'\n ? initInfiniteMode(list)\n : initPaginationMode(list);\n\n const beforeRenderHookCleanup = list.addHook('beforeRender', async (items) => {\n if (list.triggeredHook === 'pagination') {\n list.wrapperElement.classList.add(loadingClass);\n\n const animations = list.wrapperElement.getAnimations({ subtree: true });\n\n try {\n await Promise.all(animations.map((a) => a.finished));\n } catch {\n //\n }\n }\n\n return items;\n });\n\n const afterRenderHookCleanup = list.addHook('afterRender', (items) => {\n list.wrapperElement.classList.remove(loadingClass);\n\n return items;\n });\n\n return async () => {\n (await loadModeCleanup)?.();\n beforeRenderHookCleanup();\n afterRenderHookCleanup();\n elementsCleanup();\n };\n};\n", "import {\n attachExternalStylesheets,\n cloneNode,\n extractCommaSeparatedValues,\n fetchPage,\n} from '@adartem/adlib-utils';\nimport { effect, triggerRef } from '@vue/reactivity';\n\nimport { List, ListItem } from '../components';\nimport { getAllCollectionListWrappers, getCollectionElements } from '../utils/dom';\nimport {\n getAttribute,\n getElementSelector,\n getSettingSelector,\n queryAllElements,\n queryElement,\n} from '../utils/selectors';\nimport { listInstancesStore } from '../utils/store';\n\n/**\n * Initializes list nesting.\n * @param list - The list to initialize nesting for.\n */\nexport const initListNest = (list: List) => {\n const handledItems = new Set<ListItem>();\n\n const runner = effect(() => {\n let hasChanges = false;\n\n Promise.all(\n list.items.value.map(async (item) => {\n if (handledItems.has(item)) return;\n\n handledItems.add(item);\n\n const nestTargets = queryAllElements('nest-target', { scope: item.element });\n if (!nestTargets.length) return;\n\n await Promise.all(nestTargets.map(async (target) => handleNestTarget(list, item, target)));\n\n hasChanges = true;\n }),\n ).then(() => {\n if (hasChanges) {\n triggerRef(list.items);\n }\n });\n });\n\n return () => {\n runner.effect.stop();\n handledItems.clear();\n };\n};\n\n/**\n * Handles a nest target element.\n * @param list\n * @param item\n * @param target\n * @returns\n */\nconst handleNestTarget = (list: List, item: ListItem, target: HTMLElement) => {\n if (!item.href) return;\n\n const instance = getAttribute(target, 'nest');\n if (!instance) return;\n\n const slugsElement = item.element.querySelector<HTMLElement>(\n `${getElementSelector('nest-slugs')}${getSettingSelector('nest', instance)}`,\n );\n\n item.nesting = new Promise((resolve) => {\n if (slugsElement) {\n const slugs = extractCommaSeparatedValues(slugsElement.textContent);\n\n handleManualNesting(list, item, target, slugs, instance).then(resolve);\n } else {\n handleExternalNesting(list, item, target, instance).then(resolve);\n }\n });\n\n return item.nesting;\n};\n\n/**\n * Handles manual nesting.\n * @param list\n * @param item\n * @param target\n * @param slugs\n * @param instance\n */\nconst handleManualNesting = async (\n list: List,\n item: ListItem,\n target: HTMLElement,\n slugs: string[],\n instance: string,\n) => {\n if (!slugs.length) return;\n if (!item.href) return;\n\n const source = [...listInstancesStore.values()].find(\n (sourceList) => sourceList !== list && sourceList.instance === instance,\n );\n if (!source) return;\n\n const sourceItems = source.items.value.filter(({ href }) => {\n if (!href) return false;\n\n try {\n const url = new URL(href);\n const [slug] = url.pathname.match(/[^/]+(?=\\/$|$)/g) || [];\n\n return slug && slugs.includes(slug);\n } catch {\n return false;\n }\n });\n\n const sourceWrapper = cloneNode(source.wrapperElement, false);\n\n // Items list\n if (sourceItems.length) {\n const sourceList = source.listElement\n ? cloneNode(source.listElement, false)\n : document.createElement('div');\n\n await Promise.resolve();\n\n const elements = await Promise.all(\n sourceItems.map(async (item) => {\n await item.nesting;\n\n return cloneNode(item.element);\n }),\n );\n\n sourceList.append(...elements);\n sourceWrapper.append(sourceList);\n }\n\n // Empty state\n else {\n let sourceEmpty = source.emptyElement.value;\n\n if (!sourceEmpty) {\n await source.loadingPaginationElements;\n sourceEmpty = source.emptyElement.value;\n }\n\n if (sourceEmpty) {\n sourceWrapper.append(sourceEmpty);\n }\n }\n\n target.append(sourceWrapper);\n item.collectFields();\n};\n\n/**\n * Handles external nesting.\n * @param list\n * @param item\n * @param target\n * @param instance\n */\nconst handleExternalNesting = async (\n list: List,\n item: ListItem,\n target: HTMLElement,\n instance: string,\n) => {\n if (!item.href) return;\n\n const scope = await fetchPage(item.href, { cache: list.cache });\n if (!scope) return;\n\n const sourceReference =\n queryElement('wrapper', { scope, instance }) || queryElement('list', { scope, instance });\n if (!sourceReference) return;\n\n const sourceWrapper = getCollectionElements(sourceReference, 'wrapper');\n if (!sourceWrapper) return;\n\n const allWrappers = getAllCollectionListWrappers(scope);\n\n const index = allWrappers.indexOf(sourceWrapper);\n if (index === -1) return;\n\n const sourceInstance = new List(sourceWrapper, index, false);\n\n if (sourceInstance.emptyElement.value) {\n target.append(sourceInstance.emptyElement.value);\n return;\n }\n\n if (!sourceInstance.items.value.length) return;\n\n // Collect stylesheets from the item page template\n const externalStylesheetsPromise = attachExternalStylesheets(scope);\n\n // Recursively nest items\n await Promise.all(\n sourceInstance.items.value.map(async (sourceItem) => {\n const nestedTargets = queryAllElements('nest-target', { scope: sourceItem.element });\n if (!nestedTargets.length) return;\n\n await Promise.all(\n nestedTargets.map(async (nestedTarget) => {\n const nestedInstance = getAttribute(nestedTarget, 'nest');\n if (!nestedInstance) return;\n\n await handleExternalNesting(list, sourceItem, nestedTarget, nestedInstance);\n\n item.collectFields();\n }),\n );\n }),\n );\n\n // Append external stylesheets, if any\n // This is required since Webflow launched per-page CSS splitting\n // as items may come unstyled\n await externalStylesheetsPromise;\n\n target.append(sourceWrapper);\n item.collectFields();\n};\n", "import { cloneNode } from '@adartem/adlib-utils';\nimport { watch } from '@vue/reactivity';\n\nimport type { List, ListItem } from '../components';\nimport { queryElement } from '../utils/selectors';\n\n/**\n * Initializes the previous and next items for a collection template page.\n * @param list\n * @param previousItemTarget\n * @param nextItemTarget\n * @returns A cleanup function.\n */\nexport const initPrevNext = (\n list: List,\n previousItemTarget: HTMLElement | null,\n nextItemTarget: HTMLElement | null,\n) => {\n const previousEmptyPlaceholder = queryElement('previous-empty', { instance: list.instance });\n const nextEmptyPlaceholder = queryElement('next-empty', { instance: list.instance });\n\n previousEmptyPlaceholder?.remove();\n nextEmptyPlaceholder?.remove();\n\n let loadingItems = !!list.loadingPaginatedItems;\n let previousItem: ListItem | undefined;\n let nextItem: ListItem | undefined;\n\n list.loadingPaginatedItems?.then(() => {\n loadingItems = false;\n handleItems(list.items.value);\n });\n\n /**\n * Handles items for the previous and next functionality.\n * @param items\n */\n const handleItems = (items: ListItem[]) => {\n if (previousItem && nextItem) {\n return;\n }\n\n const href = window.location.origin + window.location.pathname;\n const currentItemIndex = items.findIndex((item) => item.href === href);\n\n // Display empty placeholders if the current item is not found\n if (currentItemIndex === -1 && !loadingItems) {\n if (previousEmptyPlaceholder) {\n previousItemTarget?.append(previousEmptyPlaceholder);\n }\n\n if (nextEmptyPlaceholder) {\n nextItemTarget?.append(nextEmptyPlaceholder);\n }\n }\n\n if (currentItemIndex === -1) return;\n\n // Previous item\n if (!previousItem) {\n previousItem = items[currentItemIndex - 1];\n\n // If found, clone the element and append it to the target\n if (previousItem) {\n const clone = cloneNode(previousItem.element);\n\n previousEmptyPlaceholder?.remove();\n previousItemTarget?.append(clone);\n }\n\n // If not found, show the empty placeholder only if the items have finished loading\n else if (!loadingItems && previousEmptyPlaceholder) {\n previousItemTarget?.append(previousEmptyPlaceholder);\n }\n }\n\n // Next item\n if (!nextItem) {\n nextItem = items[currentItemIndex + 1];\n\n // If found, clone the element and append it to the target\n if (nextItem) {\n const clone = cloneNode(nextItem.element);\n\n nextEmptyPlaceholder?.remove();\n nextItemTarget?.append(clone);\n }\n\n // If not found, show the empty placeholder only if the items have finished loading\n else if (!loadingItems && nextEmptyPlaceholder) {\n nextItemTarget?.append(nextEmptyPlaceholder);\n }\n }\n };\n\n const cleanup = watch(list.items, handleItems, { immediate: true });\n return cleanup;\n};\n", "import { isHTMLSelectElement } from '@adartem/adlib-utils';\n\nimport type { List } from '../components';\nimport { queryAllElements } from '../utils/selectors';\n\n/**\n * Inits the list select dropdowns.\n * @param list\n * @param selectElements\n */\nexport const initListSelects = (list: List, selectElements: HTMLElement[]) => {\n list.webflowModules.add('slider');\n\n const cleanups = selectElements.map((selectReference) => initListSelect(list, selectReference));\n\n return () => {\n for (const cleanup of cleanups) cleanup?.();\n };\n};\n\n/**\n * Inits a list select dropdown.\n * @param list\n * @param selectElement\n */\nconst initListSelect = (list: List, selectElement: HTMLElement) => {\n if (!isHTMLSelectElement(selectElement)) return;\n\n // Store rendered options\n const renderedOptions = new Map<string, HTMLOptionElement>();\n\n list.addHook('render', (items = []) => {\n const allOptionValues = new Set<string>();\n\n for (const item of items) {\n const optionValues = queryAllElements('select-value', { scope: item.element });\n\n for (const optionValue of optionValues) {\n allOptionValues.add(optionValue.innerText);\n }\n }\n\n for (const optionValue of allOptionValues) {\n if (renderedOptions.has(optionValue)) continue;\n\n const option = new Option(optionValue, optionValue);\n\n selectElement.options.add(option);\n renderedOptions.set(optionValue, option);\n }\n\n for (const [optionValue, option] of renderedOptions) {\n if (allOptionValues.has(optionValue)) continue;\n\n option?.remove();\n renderedOptions.delete(optionValue);\n }\n });\n\n return () => {\n renderedOptions.clear();\n };\n};\n", "import { ARIA_ROLE_KEY, SLIDER_CSS_CLASSES } from '@adartem/adlib-utils';\n\nimport type { List } from '../components';\n\n/**\n * Inits the list sliders.\n * @param list\n * @param slidersReferences\n */\nexport const initListSliders = (list: List, slidersReferences: HTMLElement[]) => {\n list.webflowModules.add('slider');\n\n const cleanups = slidersReferences.map((sliderReference) =>\n initListSlider(list, sliderReference),\n );\n\n return () => {\n for (const cleanup of cleanups) cleanup?.();\n };\n};\n\n/**\n * Inits a list slider.\n * @param list\n * @param sliderReference\n */\nconst initListSlider = (list: List, sliderReference: HTMLElement) => {\n const sliderElement = sliderReference.closest(`.${SLIDER_CSS_CLASSES.slider}`);\n if (!sliderElement) return;\n\n const sliderMask = sliderElement.querySelector(`.${SLIDER_CSS_CLASSES.sliderMask}`);\n if (!sliderMask) return;\n\n const existingSlides = sliderElement.querySelectorAll(`.${SLIDER_CSS_CLASSES.slide}`);\n if (!existingSlides.length) return;\n\n // Store the template CSS classes\n const slideCSS = existingSlides[0].classList.value;\n\n // Remove existing slides\n for (const slide of existingSlides) slide.remove();\n\n // Store rendered items\n const renderedItems = new Map<string, HTMLDivElement>();\n\n list.addHook('beforeRender', (items = []) => {\n for (const item of items) {\n if (renderedItems.has(item.id)) continue;\n\n item.currentIndex = undefined;\n item.element.removeAttribute(ARIA_ROLE_KEY);\n\n const newSlide = document.createElement('div');\n newSlide.setAttribute('class', slideCSS);\n\n newSlide.appendChild(item.element);\n sliderMask.appendChild(newSlide);\n\n renderedItems.set(item.id, newSlide);\n }\n\n for (const [itemId, slide] of renderedItems) {\n if (items.some((item) => item.id === itemId)) continue;\n\n slide?.remove();\n renderedItems.delete(itemId);\n }\n\n list.renderedItems.clear();\n\n return [];\n });\n\n list.triggerHook('beforeRender');\n\n return () => {\n renderedItems.clear();\n };\n};\n", "import {\n ARIA_ROLE_KEY,\n ARIA_ROLE_VALUES,\n ARIA_SORT_KEY,\n ARIA_SORT_VALUES,\n createDelegation,\n ensureButtonLike,\n isActivationKey,\n isNotEmpty,\n TABINDEX_KEY,\n} from '@adartem/adlib-utils';\nimport { computed, effect, type Ref, ref } from '@vue/reactivity';\n\nimport type { List } from '../components/List';\nimport { getAttribute, getElementSelector, hasAttributeValue } from '../utils/selectors';\nimport type { SortingDirection } from './types';\n\ntype ButtonData = {\n fieldKey: string;\n reverse: boolean;\n currentDirection: Ref<SortingDirection | undefined>;\n};\n\n/**\n * Inits the sorting with a group of Buttons.\n * @param buttons The button elements.\n * @param list The {@link List} instance.\n *\n */\nexport const initButtons = (buttons: HTMLElement[], list: List) => {\n const activeButton = ref<HTMLElement | undefined>();\n const buttonDataMap = new Map<Element, ButtonData>();\n\n const cleanups = buttons\n .flatMap((button) => {\n const fieldKey = getAttribute(button, 'field')?.trim();\n if (!fieldKey) return;\n\n const reverse = hasAttributeValue(button, 'reverse', 'true');\n const ascClass = getAttribute(button, 'ascclass');\n const desClass = getAttribute(button, 'descclass');\n\n const currentDirection = ref<SortingDirection | undefined>();\n\n button.setAttribute(ARIA_ROLE_KEY, ARIA_ROLE_VALUES.columnheader);\n button.setAttribute(TABINDEX_KEY, '0');\n\n if (list.options.a11y !== false) {\n ensureButtonLike(button);\n }\n\n buttonDataMap.set(button, { fieldKey, reverse, currentDirection });\n\n // Dynamically set the `aria-sort` attribute\n const ariaSort = computed(() => {\n if (activeButton.value !== button) return 'none';\n\n return currentDirection.value === 'asc'\n ? ARIA_SORT_VALUES.ascending\n : ARIA_SORT_VALUES.descending;\n });\n\n const ariaSortRunner = effect(() => {\n button.setAttribute(ARIA_SORT_KEY, ariaSort.value);\n });\n\n // Dynamically set the direction CSS class\n const cssClass = computed(() => {\n if (activeButton.value !== button) return null;\n\n return currentDirection.value === 'asc' ? ascClass : desClass;\n });\n\n const cssClassRunner = effect(() => {\n button.classList.remove(ascClass, desClass);\n\n if (cssClass.value) {\n button.classList.add(cssClass.value);\n }\n });\n\n return [() => ariaSortRunner.effect.stop(), () => cssClassRunner.effect.stop()];\n })\n .filter(isNotEmpty);\n\n // Delegation for sort trigger click + keydown\n const sortTriggerSelector = getElementSelector('sort-trigger', { instance: list.instance });\n\n const destroyDelegation = createDelegation(sortTriggerSelector, {\n click: ({ event, el }) => {\n const data = buttonDataMap.get(el);\n if (!data) return;\n\n event.preventDefault();\n\n activeButton.value = el as HTMLElement;\n data.currentDirection.value = getNextDirection(data.currentDirection.value, data.reverse);\n\n list.sorting.value = {\n fieldKey: data.fieldKey,\n direction: data.currentDirection.value,\n interacted: true,\n };\n },\n keydown: ({ event, el }) => {\n if (!buttonDataMap.has(el)) return;\n if (list.options.a11y === false) return;\n if (!isActivationKey(event)) return;\n\n if (event.key === ' ' || event.key === 'Spacebar') {\n event.preventDefault();\n }\n\n (el as HTMLElement).click();\n },\n });\n\n return () => {\n destroyDelegation();\n for (const cleanup of cleanups) cleanup();\n };\n};\n\n/**\n * @returns The new direction of a button.\n * @param currentDirection The current direction of a button.\n */\nconst getNextDirection = (\n currentDirection: SortingDirection | undefined,\n reverse: boolean,\n): SortingDirection => {\n if (!currentDirection) return reverse ? 'desc' : 'asc';\n\n return currentDirection === 'desc' ? 'asc' : 'desc';\n};\n", "import {\n ARIA_HASPOPUP_KEY,\n ARIA_MULTISELECTABLE_KEY,\n ARIA_ROLE_KEY,\n ARIA_ROLE_VALUES,\n ARIA_SELECTED_KEY,\n closeDropdown,\n createDelegation,\n CURRENT_CSS_CLASS,\n DROPDOWN_CSS_CLASSES,\n type DropdownElement,\n type DropdownList,\n type DropdownToggle,\n} from '@adartem/adlib-utils';\nimport { effect, type Ref, ref } from '@vue/reactivity';\n\nimport type { List } from '../components/List';\nimport { getAttribute, queryElement } from '../utils/selectors';\nimport type { SortingDirection } from './types';\n\ntype DropdownOption = {\n element: HTMLAnchorElement;\n fieldKey?: string;\n direction?: SortingDirection;\n cleanup: () => void;\n};\n\ntype DropdownOptions = Map<HTMLAnchorElement, DropdownOption>;\n\n/**\n * Inits sorting on a `Dropdown` component.\n * @param dropdown The {@link DropdownElement} element.\n * @param list The {@link List} instance.\n */\nexport const initDropdown = (dropdown: DropdownElement, list: List) => {\n const dropdownToggle = dropdown.querySelector<DropdownToggle>(\n `.${DROPDOWN_CSS_CLASSES.dropdownToggle}`,\n );\n const dropdownList = dropdown.querySelector<DropdownList>(\n `.${DROPDOWN_CSS_CLASSES.dropdownList}`,\n );\n\n if (!dropdownToggle || !dropdownList) {\n return;\n }\n\n setDropdownAria(dropdownToggle, dropdownList);\n\n const activeOption = ref<DropdownOption | undefined>();\n\n // Listen events\n const dropdownLabelCleanup = initDropdownLabel(dropdownToggle, activeOption);\n\n const dropdownOptions = initDropdownOptions(dropdownList, activeOption);\n if (!dropdownOptions) {\n return;\n }\n\n const destroyDelegation = createDelegation(\n 'a',\n {\n click: ({ event, el }) => {\n event.preventDefault();\n\n const optionElement = el as HTMLAnchorElement;\n const optionData = dropdownOptions.get(optionElement);\n if (!optionData) return;\n\n const isSelected = activeOption.value?.element === optionElement;\n if (isSelected) return;\n\n activeOption.value = optionData;\n\n list.sorting.value = {\n fieldKey: optionData.fieldKey,\n direction: optionData.direction,\n interacted: true,\n };\n\n closeDropdown(dropdownToggle);\n },\n },\n { root: dropdownList },\n );\n\n return () => {\n dropdownLabelCleanup?.();\n destroyDelegation();\n };\n};\n\n/**\n * Collects all options in the Dropdown.\n * @param dropdownList The {@link DropdownList} element.\n * @returns\n */\nconst initDropdownOptions = (\n dropdownList: DropdownList,\n activeOption: Ref<DropdownOption | undefined>,\n) => {\n const dropdownOptions: DropdownOptions = new Map();\n\n const options = [...dropdownList.querySelectorAll('a')];\n if (!options.length) return;\n\n for (const element of options) {\n element.setAttribute(ARIA_ROLE_KEY, ARIA_ROLE_VALUES.option);\n\n const rawField = getAttribute(element, 'field')?.trim();\n\n let fieldKey: string | undefined;\n let direction: SortingDirection | undefined;\n\n if (rawField) {\n if (rawField.endsWith('-asc')) {\n direction = 'asc';\n fieldKey = rawField.slice(0, -4);\n } else if (rawField.endsWith('-desc')) {\n direction = 'desc';\n fieldKey = rawField.slice(0, -5);\n } else {\n direction = 'asc';\n fieldKey = rawField;\n }\n }\n\n // Handle active state\n const runner = effect(() => {\n const isSelected = activeOption.value?.element === element;\n\n if (isSelected) {\n element.setAttribute(ARIA_SELECTED_KEY, 'true');\n element.classList.add(CURRENT_CSS_CLASS);\n } else {\n element.removeAttribute(ARIA_SELECTED_KEY);\n element.classList.remove(CURRENT_CSS_CLASS);\n }\n });\n\n dropdownOptions.set(element, {\n element,\n fieldKey,\n direction,\n cleanup: () => runner.effect.stop(),\n });\n }\n\n return dropdownOptions;\n};\n\n/**\n * Dynamically updates the Dropdown label with the selected option.\n * @param dropdownToggle The {@link DropdownToggle}.\n * @returns A cleanup function.\n */\nconst initDropdownLabel = (\n dropdownToggle: DropdownToggle,\n activeOption: Ref<DropdownOption | undefined>,\n) => {\n const dropdownLabel = queryElement('dropdown-label', { scope: dropdownToggle });\n if (!dropdownLabel) return;\n\n const originalHTML = dropdownLabel.innerHTML;\n\n const runner = effect(() => {\n if (!activeOption.value) {\n dropdownLabel.innerHTML = originalHTML;\n return;\n }\n\n dropdownLabel.innerHTML = activeOption.value.element.innerHTML;\n });\n\n return () => runner.effect.stop();\n};\n\n/**\n * Adds `a11y` attributes to the Dropdown elements.\n * @param dropdownToggle The {@link DropdownToggle} element.\n * @param dropdownList The {@link DropdownList} element.\n */\nconst setDropdownAria = (dropdownToggle: DropdownToggle, dropdownList: DropdownList) => {\n dropdownToggle.setAttribute(ARIA_HASPOPUP_KEY, ARIA_ROLE_VALUES.listbox);\n dropdownList.setAttribute(ARIA_ROLE_KEY, ARIA_ROLE_VALUES.listbox);\n dropdownList.setAttribute(ARIA_MULTISELECTABLE_KEY, 'false');\n};\n", "import type { List } from '../components';\nimport { listInstancesStore } from '../utils/store';\nimport type { SortingDirection } from './types';\n\n/**\n * @param list\n * @returns A regex to match the filters query string.\n */\nconst getListSortingQueryRegex = (list: List) => {\n const allFieldKeys = Object.keys(list.allFieldsData.value);\n\n const regex = new RegExp(`sort_(${allFieldKeys.join('|')})$`);\n return regex;\n};\n\n/**\n * Gets the filters query string for the list.\n * @param list\n */\nexport const getListSortingQuery = async (list: List) => {\n const usePrefix = listInstancesStore.size > 1;\n const existingParams = await list.getAllSearchParams(usePrefix);\n\n const regex = getListSortingQueryRegex(list);\n\n const param = existingParams.find(\n ([key, value]) => key.match(regex) && (value === 'asc' || value === 'desc'),\n );\n if (!param) return;\n\n const [key, value] = param;\n\n const match = key.match(regex);\n if (!match) return;\n\n const fieldKey = match[1];\n\n list.sorting.value.fieldKey = fieldKey;\n list.sorting.value.direction = value as SortingDirection;\n list.sorting.value.interacted = true;\n};\n\n/**\n * Sets the filters query string for the list.\n * @param list\n */\nexport const setListSortingQuery = async (list: List) => {\n const usePrefix = listInstancesStore.size > 1;\n const existingParams = await list.getAllSearchParams(usePrefix);\n\n const regex = getListSortingQueryRegex(list);\n\n for (const [key] of existingParams) {\n if (!key.match(regex)) continue;\n\n await list.setSearchParam(key, null, { usePrefix });\n }\n\n const { fieldKey, direction } = list.sorting.value;\n if (!fieldKey || !direction) return;\n\n const key = `sort_${fieldKey}`;\n\n list.setSearchParam(key, direction, { usePrefix });\n};\n", "import { addListener } from '@adartem/adlib-utils';\n\nimport type { List } from '../components/List';\nimport { hasAttributeValue } from '../utils/selectors';\nimport type { Sorting, SortingDirection } from './types';\n\n/**\n * Inits sorting on an `HTMLSelectElement`.\n * @param selectElement The {@link HTMLSelectElement}.\n * @param list The {@link List} instance.\n */\nexport const initHTMLSelect = (selectElement: HTMLSelectElement, list: List) => {\n const handleSelect = (interacted = false) => {\n list.sorting.value = getSortingParams(selectElement.value, interacted);\n };\n\n // Sort on change\n const changeCleanup = addListener(selectElement, 'change', () => handleSelect(true));\n\n // Sort on init\n handleSelect();\n\n // Prevent submit events on the form\n const form = selectElement.closest('form');\n\n const allowSubmit = hasAttributeValue(selectElement, 'allowsubmit', 'true');\n\n const submitCleanup = allowSubmit ? addListener(form, 'submit', handleFormSubmit) : undefined;\n\n return () => {\n changeCleanup();\n submitCleanup?.();\n };\n};\n\n/**\n * Handles `submit` events on the parent form of the `HTMLSelect` element.\n * @param e The `submit` event.\n */\nconst handleFormSubmit = (e: Event) => {\n e.preventDefault();\n e.stopImmediatePropagation();\n return false;\n};\n\n/**\n * Extracts the `sortKey` and `direction` from a Select element value.\n * @param value The Select element value.\n * @param interacted Indicates if the user interacted with the select element.\n */\nconst getSortingParams = (value: string, interacted = false): Sorting => {\n let fieldKey: string;\n let direction: SortingDirection;\n\n if (value.endsWith('-asc')) {\n direction = 'asc';\n fieldKey = value.slice(0, -4);\n } else if (value.endsWith('-desc')) {\n direction = 'desc';\n fieldKey = value.slice(0, -5);\n } else {\n direction = 'asc';\n fieldKey = value;\n }\n\n return { fieldKey, direction, interacted };\n};\n", "import type { ListItem } from '../components/ListItem';\nimport type { Sorting } from './types';\n\n/**\n * Sorts the items of a `CMSList`.\n * **Important:** This method mutates the {@link ListItem.items} property.\n *\n * @param listInstance The {@link CMSList} instance.\n * @param direction The direction to sort.\n * @param sortKey The key of the field to use as sorting reference.\n */\nexport const sortListItems = (\n items: ListItem[],\n { fieldKey, direction }: Sorting,\n): ListItem[] | undefined => {\n const validField = !!direction && !!fieldKey && items.some(({ fields }) => fieldKey in fields);\n if (!validField) return;\n\n const sorted = [...items].sort((firstItem, secondItem) => {\n const firstItemProp = firstItem.fields[fieldKey];\n const secondItemProp = secondItem.fields[fieldKey];\n\n if (!firstItemProp) return 1;\n if (!secondItemProp) return -1;\n\n // Number sorting\n if (firstItemProp.type === 'number' && secondItemProp.type === 'number') {\n const firstItemValue = getItemValue(firstItemProp.value);\n const secondItemValue = getItemValue(secondItemProp.value);\n\n if (isNaN(firstItemValue)) return 1;\n if (isNaN(secondItemValue)) return -1;\n\n if (direction === 'asc') return firstItemValue - secondItemValue;\n\n return secondItemValue - firstItemValue;\n }\n\n // Dates sorting\n if (firstItemProp.type === 'date' && secondItemProp.type === 'date') {\n const firstItemValue = getItemValue(firstItemProp.value).getTime();\n const secondItemValue = getItemValue(secondItemProp.value).getTime();\n\n if (direction === 'asc') return firstItemValue - secondItemValue;\n\n return secondItemValue - firstItemValue;\n }\n\n // Text sorting\n if (firstItemProp.type === 'text' && secondItemProp.type === 'text') {\n const firstItemValue = getItemValue(firstItemProp.value);\n const secondItemValue = getItemValue(secondItemProp.value);\n\n const collatorOptions: Intl.CollatorOptions = {\n numeric: true,\n sensitivity: 'base',\n };\n\n if (direction === 'asc')\n return firstItemValue.localeCompare(secondItemValue, undefined, collatorOptions);\n\n return secondItemValue.localeCompare(firstItemValue, undefined, collatorOptions);\n }\n\n return 0;\n });\n\n return sorted;\n};\n\n/**\n * @returns The first value of the array or the value itself.\n * @param value\n */\nconst getItemValue = <\n Value extends number | string | Date | number[] | string[] | Date[],\n ReturnValue = Value extends (infer U)[] ? U : Value,\n>(\n value: Value,\n) => {\n const [firstValue] = Array.isArray(value) ? value : [value];\n return firstValue as ReturnValue;\n};\n", "import {\n DROPDOWN_CSS_CLASSES,\n type DropdownElement,\n isHTMLSelectElement,\n} from '@adartem/adlib-utils';\nimport { watch } from '@vue/reactivity';\nimport debounce from 'just-debounce';\n\nimport type { List } from '../components/List';\nimport { initButtons } from './buttons';\nimport { initDropdown } from './dropdown';\nimport { getListSortingQuery, setListSortingQuery } from './query';\nimport { initHTMLSelect } from './select';\nimport { sortListItems } from './sort';\n\n/**\n * Inits sorting functionality for the list.\n */\nexport const initListSorting = (list: List, triggers: HTMLElement[]) => {\n const sortingClass = list.options.sortingclass ?? 'is-list-sorting';\n\n // Init mode\n const [firstTrigger] = triggers;\n const isSelect = isHTMLSelectElement(firstTrigger);\n const isDropdown = firstTrigger.closest<DropdownElement>(`.${DROPDOWN_CSS_CLASSES.dropdown}`);\n\n const modeCleanup = isSelect\n ? initHTMLSelect(firstTrigger, list)\n : isDropdown\n ? initDropdown(isDropdown, list)\n : initButtons(triggers, list);\n\n // Set up hooks\n const sortHookCleanup = list.addHook('sort', (items) => {\n const sortedItems = sortListItems(items, list.sorting.value);\n return sortedItems;\n });\n\n const beforeRenderHookCleanup = list.addHook('beforeRender', async (items) => {\n if (list.triggeredHook === 'sort') {\n list.wrapperElement.classList.add(sortingClass);\n\n const animations = list.wrapperElement.getAnimations({ subtree: true });\n\n try {\n await Promise.all(animations.map((a) => a.finished));\n } catch {\n //\n }\n }\n\n return items;\n });\n\n const afterRenderHookCleanup = list.addHook('afterRender', (items) => {\n list.wrapperElement.classList.remove(sortingClass);\n\n return items;\n });\n\n // Set up reactivity\n const sortingCleanup = watch(\n list.sorting,\n debounce(() => {\n list.triggerHook('sort', {\n scrollToAnchor: list.hasInteracted.value,\n resetCurrentPage: list.hasInteracted.value,\n });\n\n // Handle query params\n if (list.showQuery) {\n setListSortingQuery(list);\n }\n }, 0),\n { deep: true, immediate: true },\n );\n\n // Read query params\n getListSortingQuery(list);\n\n return () => {\n modeCleanup?.();\n sortHookCleanup();\n beforeRenderHookCleanup();\n afterRenderHookCleanup();\n sortingCleanup();\n };\n};\n", "import { cloneNode } from '@adartem/adlib-utils';\nimport { triggerRef } from '@vue/reactivity';\n\nimport type { List, ListItem } from '../components';\nimport { getAttribute } from '../utils/selectors';\n\nconst usedStaticItems = new WeakSet<HTMLElement>();\n\n/**\n * Inits the static items for a list.\n * @param list\n * @param staticItems\n */\nexport const initStaticItems = (list: List, staticItems: HTMLElement[]) => {\n const { interactiveItems, nonInteractiveItems } = staticItems.reduce<{\n interactiveItems: Array<{ position: number; item: ListItem }>;\n nonInteractiveItems: Array<{ position: number; item: ListItem; repeat?: number }>;\n }>(\n (acc, staticItem) => {\n const position = getAttribute(staticItem, 'position') - 1; // Users define positions starting from 1\n const repeat = getAttribute(staticItem, 'repeat');\n const interactive = getAttribute(staticItem, 'interactive');\n\n let item: ListItem;\n\n if (usedStaticItems.has(staticItem)) {\n const elementClone = cloneNode(staticItem);\n item = list.createItem(elementClone);\n } else {\n item = list.createItem(staticItem);\n }\n\n usedStaticItems.add(staticItem);\n\n if (interactive) {\n acc.interactiveItems.push({ position, item });\n } else {\n acc.nonInteractiveItems.push({ position, item, repeat });\n }\n\n return acc;\n },\n { interactiveItems: [], nonInteractiveItems: [] },\n );\n\n interactiveItems.sort((a, b) => a.position - b.position);\n nonInteractiveItems.sort((a, b) => a.position - b.position);\n\n // Non-interactive items are injected before rendering\n const cleanup = list.addHook('static', (items) => {\n const newItems = [...items];\n\n for (const { position, item, repeat } of nonInteractiveItems) {\n newItems.splice(position, 0, item);\n\n if (!repeat) continue;\n\n let index = position + repeat;\n\n while (index < newItems.length) {\n const elementClone = cloneNode(item.element);\n const itemClone = list.createItem(elementClone);\n\n newItems.splice(index, 0, itemClone);\n index += repeat;\n }\n }\n\n return newItems;\n });\n\n // Interactive items are added as regular elements\n for (const { position, item } of interactiveItems) {\n list.items.value.splice(position, 0, item);\n }\n\n // Force trigger the hooks lifecycle\n if (interactiveItems.length) {\n triggerRef(list.items);\n } else if (nonInteractiveItems.length) {\n list.triggerHook('static');\n }\n\n return cleanup;\n};\n", "import { ARIA_ROLE_KEY, cloneNode, TABS_CSS_CLASSES } from '@adartem/adlib-utils';\n\nimport type { List } from '../components';\nimport { queryElement } from '../utils/selectors';\n\n/**\n * Inits the list tabs.\n * @param list\n * @param tabsReferences\n */\nexport const initListTabs = (list: List, tabsReferences: HTMLElement[]) => {\n list.webflowModules.add('tabs');\n\n const cleanups = tabsReferences.map((tabsReference) => initListTab(list, tabsReference));\n\n return () => {\n for (const cleanup of cleanups) cleanup?.();\n };\n};\n\n/**\n * Inits a list tab.\n * @param list\n * @param tabsReference\n */\nconst initListTab = (list: List, tabsReference: HTMLElement) => {\n const tabsElement = tabsReference.closest(`.${TABS_CSS_CLASSES.tabs}`);\n if (!tabsElement) return;\n\n const tabsMenu = tabsElement.querySelector(`.${TABS_CSS_CLASSES.tabsMenu}`);\n if (!tabsMenu) return;\n\n const tabsContent = tabsElement.querySelector(`.${TABS_CSS_CLASSES.tabsContent}`);\n if (!tabsContent) return;\n\n const existingTabLinks = tabsElement.querySelectorAll(`.${TABS_CSS_CLASSES.tabLink}`);\n if (!existingTabLinks.length) return;\n\n const existingTabPanes = tabsElement.querySelectorAll(`.${TABS_CSS_CLASSES.tabPane}`);\n if (!existingTabPanes.length) return;\n\n // Store the template CSS classes\n const tabLinkCSS = existingTabLinks[0].classList.value;\n const tabPaneCSS = existingTabPanes[0].classList.value;\n\n // Remove existing elements\n for (const element of [...existingTabLinks, ...existingTabPanes]) {\n element.remove();\n }\n\n // Store rendered items\n const renderedItems = new Map<\n string,\n {\n tabLink: HTMLElement;\n tabPane: HTMLElement;\n }\n >();\n\n list.addHook('beforeRender', (items = []) => {\n for (const item of items) {\n if (renderedItems.has(item.id)) continue;\n\n item.currentIndex = undefined;\n item.element.removeAttribute(ARIA_ROLE_KEY);\n\n const tabLink = document.createElement('div');\n tabLink.setAttribute('class', tabLinkCSS);\n\n const tabPane = document.createElement('div');\n tabPane.setAttribute('class', tabPaneCSS);\n\n let tabLinkContent = queryElement('tab-link', { scope: item.element });\n\n if (tabLinkContent) {\n tabLinkContent = cloneNode(tabLinkContent);\n } else {\n tabLinkContent = document.createElement('div');\n tabLinkContent.innerHTML = /* html */ `Missing <strong>ad-list-element=\"tab-link\"</strong>`;\n }\n\n tabLink.appendChild(tabLinkContent);\n tabsMenu.appendChild(tabLink);\n tabPane.appendChild(item.element);\n tabsContent.appendChild(tabPane);\n\n renderedItems.set(item.id, { tabLink, tabPane });\n }\n\n for (const [itemId, { tabLink, tabPane }] of renderedItems) {\n if (items.some((item) => item.id === itemId)) continue;\n\n tabLink?.remove();\n tabPane?.remove();\n renderedItems.delete(itemId);\n }\n\n [...renderedItems.values()].forEach(({ tabLink, tabPane }, index) => {\n const dataset = `Tab ${index}`;\n\n tabLink.dataset.wTab = dataset;\n tabPane.dataset.wTab = dataset;\n });\n\n list.renderedItems.clear();\n\n return [];\n });\n\n list.triggerHook('beforeRender');\n\n return () => {\n renderedItems.clear();\n };\n};\n", "import { isHTMLFormElement, readOptionsFromAttributes } from '@adartem/adlib-utils';\n\nimport { initListCombine } from './combine';\nimport { List } from './components/List';\nimport { initListFiltering } from './filter';\nimport { initListLoading } from './load';\nimport { initListNest } from './nest';\nimport { initPrevNext } from './prevnext';\nimport { initListSelects } from './select';\nimport { initListSliders } from './slider';\nimport { initListSorting } from './sort';\nimport { initStaticItems } from './static';\nimport { initListTabs } from './tabs';\nimport { MODULE_KEY, OPTIONS } from './utils/constants';\nimport { getAllCollectionListWrappers, getCollectionElements } from './utils/dom';\nimport { getElementSelector, queryAllElements, queryElement } from './utils/selectors';\nimport { listInstancesStore } from './utils/store';\n\n/**\n * Creates a new `CMSList` instance, making sure there are no already existing instances on the page.\n * @param referenceElement The `Collection List` reference element.\n * @returns A new `CMSList` instance, if instantiation was valid.\n */\nexport const createListInstance = (referenceElement: HTMLElement): List | undefined => {\n const wrapper = getCollectionElements(referenceElement, 'wrapper');\n if (!wrapper) return;\n\n const existingListInstance = listInstancesStore.get(wrapper);\n if (existingListInstance) return existingListInstance;\n\n const allWrappers = getAllCollectionListWrappers();\n\n const index = allWrappers.indexOf(wrapper);\n if (index === -1) return;\n\n const options = readOptionsFromAttributes(wrapper, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n });\n\n const listInstance = new List(wrapper, index, true, options);\n listInstancesStore.set(wrapper, listInstance);\n\n return listInstance;\n};\n\n/**\n * Initializes the list features.\n * @param list\n * @returns A cleanup function.\n */\nexport const initList = (list: List) => {\n const { instance } = list;\n\n const cleanups = new Set<(() => void) | undefined>();\n\n // Filter\n const filtersForm = queryAllElements('filters', { instance }).filter(isHTMLFormElement);\n if (filtersForm.length) {\n const cleanup = initListFiltering(list, filtersForm);\n cleanups.add(cleanup);\n }\n\n // Sort\n const sortTriggers = queryAllElements('sort-trigger', { instance });\n if (sortTriggers.length) {\n const cleanup = initListSorting(list, sortTriggers);\n cleanups.add(cleanup);\n }\n\n // Load\n const { load } = list.options;\n if (load && (load === 'all' || load === 'more' || load === 'infinite' || load === 'pagination')) {\n const cleanup = initListLoading(list, load);\n cleanups.add(cleanup);\n }\n\n // Combine\n const { combine } = list.options;\n if (combine) {\n const cleanup = initListCombine(list, combine);\n cleanups.add(cleanup);\n }\n\n // Nest\n const nestCleanup = initListNest(list);\n cleanups.add(nestCleanup);\n\n // Static Items\n const listSelector = getElementSelector('list', { instance });\n const itemSelector = getElementSelector('item', { instance });\n const staticItemSelector = `:is(${itemSelector}):not(:is(${listSelector}) :is(${itemSelector}))`;\n const staticItems = document.querySelectorAll<HTMLElement>(staticItemSelector);\n if (staticItems.length) {\n const cleanup = initStaticItems(list, [...staticItems]);\n cleanups.add(cleanup);\n }\n\n // Sliders\n const sliders = queryAllElements('slider', { instance });\n if (sliders.length) {\n const cleanup = initListSliders(list, sliders);\n cleanups.add(cleanup);\n }\n\n // Tabs\n const tabs = queryAllElements('tabs', { instance });\n if (tabs.length) {\n const cleanup = initListTabs(list, tabs);\n cleanups.add(cleanup);\n }\n\n // Selects\n const selects = queryAllElements('select', { instance });\n if (selects.length) {\n const cleanup = initListSelects(list, selects);\n cleanups.add(cleanup);\n }\n\n // Prev/Next\n const previousItemTarget = queryElement('previous-item', { instance });\n const nextItemTarget = queryElement('next-item', { instance });\n if (previousItemTarget || nextItemTarget) {\n initPrevNext(list, previousItemTarget, nextItemTarget);\n }\n\n return () => {\n for (const cleanup of cleanups) {\n cleanup?.();\n }\n\n cleanups.clear();\n list.destroy();\n };\n};\n", "import {\n type AdLibAttributeInit,\n createCleanupBag,\n isNotEmpty,\n makeIdempotentDestroy,\n readOptionsFromAttributes,\n runActivationPipeline,\n waitWebflowReady,\n} from '@adartem/adlib-utils';\n\nimport { createListInstance, initList } from './factory';\nimport { MODULE_KEY, OPTIONS } from './utils/constants';\nimport { getCMSElementSelector } from './utils/dom';\nimport { getInstance, queryAllElements } from './utils/selectors';\n\ninterface ModuleDiagnostics {\n activeCount: number;\n disabledCount: number;\n guardFailedCount: number;\n lastNonActivationReason: 'disabled' | 'guard-failed' | null;\n}\n\n/**\n * Inits the attribute.\n */\nexport const init: AdLibAttributeInit = async () => {\n await waitWebflowReady();\n\n let bag = createCleanupBag();\n let destroy = makeIdempotentDestroy(() => bag.run());\n\n const diagnostics: ModuleDiagnostics = {\n activeCount: 0,\n disabledCount: 0,\n guardFailedCount: 0,\n lastNonActivationReason: null,\n };\n\n const mount = async () => {\n const listElements = queryAllElements('list');\n const lists: ReturnType<typeof createListInstance>[] = [];\n\n for (const listElement of listElements) {\n const result = await runActivationPipeline({\n el: listElement,\n moduleKey: MODULE_KEY,\n includeGlobal: false,\n guardsRegistry: {},\n readOptions: () =>\n readOptionsFromAttributes(listElement, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n }),\n action: () => {\n const listSelector = getCMSElementSelector('list');\n\n const parentLists: Element[] = [];\n\n let parentList = listElement.parentElement?.closest(listSelector);\n while (parentList) {\n parentLists.push(parentList);\n parentList = parentList.parentElement?.closest(listSelector);\n }\n\n const isNestedList = parentLists.length > 0;\n if (isNestedList) {\n const listInstance = getInstance(listElement);\n\n const parentListHasInstance = parentLists.some((parentList) => {\n const parentListInstance = getInstance(parentList);\n return listInstance === parentListInstance;\n });\n\n // Nested lists can only be initialized if\n // they have a different instance than their parent lists\n // to avoid unexpected behaviors\n if (parentListHasInstance) return;\n }\n\n const listInstance = createListInstance(listElement);\n if (listInstance) {\n lists.push(listInstance);\n }\n },\n });\n\n if (result.ok) {\n diagnostics.activeCount += 1;\n } else if (result.reason === 'disabled') {\n diagnostics.disabledCount += 1;\n diagnostics.lastNonActivationReason = 'disabled';\n } else if (result.reason === 'guard-failed') {\n diagnostics.guardFailedCount += 1;\n diagnostics.lastNonActivationReason = 'guard-failed';\n }\n }\n\n const activeLists = lists.filter(isNotEmpty);\n const cleanups = activeLists.map(initList);\n cleanups.forEach((cleanup) => bag.add(cleanup));\n\n return activeLists;\n };\n\n const result = await mount();\n\n return {\n result: { lists: result, diagnostics },\n destroy() {\n destroy();\n },\n async restart() {\n bag.run();\n bag = createCleanupBag();\n destroy = makeIdempotentDestroy(() => bag.run());\n await mount();\n },\n };\n};\n", "{\n \"name\": \"@adartem/ad-list\",\n \"version\": \"0.1.1\",\n \"description\": \"AdLib - Module ad-list (lists: filter/sort/load/url sync) for Webflow + DOM natif.\",\n \"private\": false,\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/adartem/adlib.git\",\n \"directory\": \"packages/ad-list\"\n },\n \"homepage\": \"https://github.com/adartem/adlib/tree/main/packages/ad-list#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/adartem/adlib/issues\"\n },\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n },\n \"./selectors\": {\n \"types\": \"./src/utils/selectors.ts\",\n \"import\": \"./src/utils/selectors.ts\"\n },\n \"./dom\": {\n \"types\": \"./src/utils/dom.ts\",\n \"import\": \"./src/utils/dom.ts\"\n }\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"scripts\": {\n \"typecheck\": \"tsc --noEmit\",\n \"build\": \"tsup --config tsup.config.ts\",\n \"lint\": \"eslint . --ext .ts\",\n \"lint:fix\": \"eslint ./src --fix && prettier --write ./src\",\n \"test\": \"vitest run -c ../../vitest.config.ts\",\n \"dev\": \"tsup --config tsup.config.ts --watch\"\n },\n \"keywords\": [\n \"adlib\",\n \"adartem\",\n \"webflow\",\n \"attributes\",\n \"list\",\n \"filter\",\n \"sort\",\n \"pagination\"\n ],\n \"dependencies\": {\n \"@adartem/adlib-attributes\": \"workspace:*\",\n \"@adartem/adlib-utils\": \"workspace:*\",\n \"@vue/reactivity\": \"^3.5.27\",\n \"fuzzysort\": \"^3.1.0\",\n \"just-debounce\": \"^1.1.0\",\n \"just-throttle\": \"^4.2.0\"\n },\n \"devDependencies\": {\n \"@types/dlv\": \"^1.1.5\",\n \"esbuild-plugin-inline-worker\": \"^0.1.1\"\n },\n \"sideEffects\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n", "import { createCleanupBag, defineModule } from '@adartem/adlib-utils';\n\nimport { init as legacyInit } from './init';\nimport { MODULE_KEY } from './utils/constants';\n\nexport default defineModule({\n key: MODULE_KEY,\n init: async (core) => {\n void core;\n\n const bag = createCleanupBag();\n const res = await legacyInit();\n\n if (res && typeof (res as { destroy?: unknown }).destroy === 'function') {\n bag.add(() => {\n try {\n (res as { destroy: () => void }).destroy();\n } catch {\n // best-effort\n }\n });\n }\n\n const instance = {\n key: MODULE_KEY,\n destroy: () => bag.run(),\n };\n\n if (res && typeof (res as { restart?: unknown }).restart === 'function') {\n return {\n ...instance,\n restart: async () => {\n try {\n await (res as { restart: () => Promise<void> | void }).restart();\n } catch {\n // best-effort\n }\n },\n };\n }\n\n return instance;\n },\n});\n\nexport { version } from '../package.json';\nexport * from './components';\nexport { init } from './init';\nexport { ELEMENTS, MODULE_KEY, SETTINGS } from './utils/constants';\n"],
5
+ "mappings": "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",
6
+ "names": ["_", "go", "result", "q", "i", "score", "j", "v", "r", "a", "computed", "computed", "v", "self", "hasOwnProperty", "v", "readonly", "effect", "v", "listInstancesStore", "initListCombine", "targetList", "rawSourceInstances", "sourceInstances", "extractCommaSeparatedValues", "sourceLists", "list", "cleanups", "sourceList", "runner", "effect", "elements", "item", "cleanup", "MODULE_KEY", "OPTIONS", "ELEMENTS", "TEXT", "NUMBER", "DATE", "SELECT_ONE", "SELECT_MULTIPLE", "OP_CONTAIN", "OP_NOT_CONTAIN", "OP_START", "OP_NOT_START", "OP_END", "OP_NOT_END", "OP_EQUAL", "OP_NOT_EQUAL", "OP_GREATER", "OP_GREATER_EQUAL", "OP_LESS", "OP_LESS_EQUAL", "OP_EMPTY", "OP_NOT_EMPTY", "SETTINGS", "BREAKPOINTS_INDEX", "ALLOWED_DYNAMIC_FIELD_TYPES", "RENDER_INDEX_CSS_VARIABLE", "getElementSelector", "queryElement", "queryAllElements", "getSettingSelector", "getSettingAttributeName", "getClosestElement", "getAttribute", "hasAttributeValue", "getInstance", "getInstanceSelector", "getPresenceSelector", "generateSelectors", "CUSTOM_VALUE_ATTRIBUTE", "getSplitSeparator", "element", "rawSplitSeparator", "CMS_CSS_SELECTORS", "CMS_CSS_CLASSES", "getCMSElementSelector", "key", "options", "getCollectionElements", "referenceElement", "target", "collectionListWrapper", "collectionList", "getAllCollectionListWrappers", "page", "getPaginationSearchEntries", "paginationButton", "href", "searchParams", "ListItem", "currentIndex", "__publicField", "link", "isHTMLAnchorElement", "_a", "_b", "_c", "fieldSelector", "fieldElements", "fieldKey", "rawValue", "type", "value", "normalizeNumber", "normalizeDate", "listSelector", "parentList", "field", "v", "matchedFields", "fieldElementsData", "matchedField", "originalHTML", "match", "fieldValue", "regex", "walkNodes", "parent", "node", "text", "template", "_List_instances", "initHooks_fn", "initElements_fn", "getCMSPaginationData_fn", "getCMSPaginationElements_fn", "runHook_fn", "List", "wrapperElement", "pageIndex", "reactive", "__privateAdd", "shallowRef", "computed", "paginationPreviousElement", "paginationNextElement", "ref", "acc", "fieldRawValues", "group", "condition", "watch", "itemElement", "listElement", "instance", "collectionItemElements", "items", "index", "__privateMethod", "paginationSearchParam", "elementsCleanup", "hooksCleanup", "callback", "hook", "cb", "scrollToAnchor", "resetCurrentPage", "triggeredHookIndex", "queuedHookIndex", "scrollAnchorFilterElement", "scrollAnchorSortElement", "scrollAnchorPaginationElement", "scrollAnchorElement", "anchor", "usePrefix", "prefixes", "prefix", "name", "map", "unprefixedKey", "useSearchParamsPrefix", "url", "renderIndex", "renderPromise", "previousItem", "render", "animations", "a", "isNumber", "renderedItem", "restartWebflow", "initHook", "previous", "queuedHook", "itemsCountRunner", "initialElementRunner", "showInitial", "loaderElementRunner", "emptyElementCleanup", "emptyElement", "hasItems", "searchEntries", "rawTargetPage", "pageEntry", "origin", "pathname", "initialPage", "fetchPage", "initialCollectionListWrapper", "initialPaginationNext", "initialPageEntry", "query", "targetPage", "currentPage", "paginationWrapperElement", "paginationNextCMSElement", "paginationPreviousCMSElement", "$currentPage", "paginationNext", "paginationPrevious", "empty", "result", "handleFilterElements", "elementsRunner", "filteredItems", "handleFiltersForm", "form", "allowSubmit", "submitCleanup", "addListener", "e", "activeElement", "isTouch", "isMobileUA", "isHTMLInputElement", "changeCleanup", "isFormField", "setActiveClass", "formField", "activeClass", "checked", "getFormFieldWrapper", "groupRadios", "getRadioGroupInputs", "radio", "parseFilterValue", "filterValue", "filterType", "fieldType", "parsedFilterValue", "splitValue", "separator", "FIELD_REGEX", "OPERATOR_REGEX", "FIELD_MATCH_VALUES", "FIELD_MATCH_REGEX", "getFilterMatchValue", "selectElement", "parseOperatorValue", "op", "fieldMatch", "opMatch", "fieldKeyMatch", "fieldMatchMatch", "initConditionsMatch", "conditionGroup", "inputCleanup", "filtersGroup", "getFiltersGroup", "conditionsMatch", "disabledClass", "disabled", "initConditionAdd", "conditionTemplate", "conditionClone", "cloneNode", "initCondition", "$conditions", "previousCondition", "initConditionRemove", "clickCleanup", "initConditionFieldKeySelect", "filtersCondition", "getFiltersCondition", "fieldsRunner", "invalidSelectedOption", "option", "isValid", "simulateEvent", "initConditionOperatorSelect", "optionsHandler", "allFieldsData", "fieldData", "allFieldKeys", "optionsData", "optionsDataByOp", "optionsToHide", "optionsToDisplay", "invalid", "operatorData", "isFieldKeyValid", "optionData", "isMultiFieldValue", "opOptionsData", "optionWithPreference", "other", "optionsCleanup", "debounce", "initConditionValueField", "initialFormField", "conditionElement", "conditionValueFieldAnchor", "conditionSelector", "conditionValueSelector", "externalConditionValueSelector", "internalConditionValueFormFields", "externalConditionValueFormFields", "allConditionValueFormFields", "internalConditionValueFormField", "externalConditionValueFormField", "clone", "activeFormFieldType", "changeHandler", "activeFormField", "fuzzyThreshold", "splitSeparator", "getConditionValue", "isString", "changeCleanups", "event", "debouncing", "handler", "formFieldsHandler", "allowedFormFields", "previouslyActiveFormFieldType", "isHTMLSelectElement", "selectElements", "activeSelect", "rawValues", "sortedValues", "b", "formFieldsCleanup", "twoWayBindingCleanup", "oldValue", "setFormFieldValue", "conditionValueField", "valueAsDate", "_value", "c", "conditionFieldKeySelect", "conditionOperatorSelect", "initialConditionValueFormField", "id", "conditionIndex", "tagValuesDisplay", "conditionRemoveButton", "conditionFieldKeySelectCleanup", "conditionOperatorSelectCleanup", "conditionValueFieldCleanup", "autoCleanup", "initConditionGroupsMatch", "conditionGroups", "initConditionGroupsAdd", "conditionGroupTemplate", "conditionGroupsWrapper", "initConditionGroup", "previousConditionGroup", "initConditionGroupRemove", "conditionGroupIndex", "conditionsMatchSelect", "conditionAddButton", "conditionGroupRemoveButton", "initDynamicFilters", "conditionGroupElement", "formElementCleanup", "conditionGroupAddButton", "groupsMatch", "conditionGroupMatchSelect", "clearCleanup", "handleClearButtons", "filters", "clearElementSelector", "firstGroup", "firstCondition", "updated", "Worker", "inlineWorker", "WORKER_POOL_SIZE", "workers", "freeWorkers", "taskQueue", "processFilterTask", "worker", "task", "controller", "signal", "conclude", "nextTask", "error", "queueFilterTask", "runFilterTask", "data", "resolve", "reject", "filterItems", "highlight", "itemsMap", "itemsData", "fields", "toRaw", "getConditionData", "interacted", "getConditionOperator", "tagFieldDisplay", "filterMatch", "showTag", "getFormFieldValue", "setConditionsData", "conditions", "tagSelector", "operatorSelector", "selector", "opDefault", "getStandardFiltersGroup", "groupIndex", "initFacets", "init", "isInput", "isSelect", "createInputFacetsHandler", "createSelectOptionsFacetsHandler", "itemsCleanup", "filtersCleanup", "observer", "mutations", "addedNodes", "removedNodes", "isElement", "parentElement", "facetCountElement", "hideOnEmptyETarget", "addClassOnEmptyTarget", "emptyClassName", "getCheckboxGroup", "filterPromise", "triggerFacetFilter", "hasResults", "hideOnEmpty", "displayFacetCounts", "optionLabels", "label", "filtersClone", "conditionsGroup", "initStandardFilters", "forms", "initStandardFiltersForm", "debounces", "handleFormFields", "facetCountsCleanup", "update", "debounceKey", "timeout", "timeoutId", "clearElements", "el", "ensureButtonLike", "handleClear", "clearElement", "conditionsToClear", "keydownCleanup", "isActivationKey", "getListFiltersQueryRegex", "allFilterKeys", "escapedKeys", "getListFiltersQuery", "existingParams", "params", "valueToSet", "parsedValue", "setListFiltersQuery", "multipleGroups", "isNotEmpty", "isArray", "OPERATOR_SYMBOLS", "initTags", "isDynamic", "tagTemplate", "tagGroupTemplate", "tagsListsWrapper", "indexOfTagTemplate", "indexOfTagGroupTemplate", "renderedTagGroups", "watcherCleanup", "newRenderedTagGroups", "tagGroupData", "tagListIsRendered", "removeElement", "removeCleanup", "tag", "hasGroups", "g", "newRenderedTags", "hasRenderedTags", "conditionValue", "tagKey", "tagData", "tagIsRendered", "hasConditions", "currentValues", "singleValueCondition", "populateTag", "scope", "fieldElement", "operatorElement", "valueElement", "operatorOverwriteElements", "operator", "operatorOverwriteElement", "operatorSymbol", "formattedValue", "formatDisplay", "locale", "isDate", "initListFiltering", "filteringClass", "filterHookCleanup", "beforeRenderHookCleanup", "afterRenderHookCleanup", "filteringCleanup", "tagsCleanup", "loadPaginatedCMSItems", "paginationCountElement", "loadingSearchParamsData", "cacheItems", "totalPages", "rawTotalPages", "parallelItemsLoad", "chainedPagesLoad", "cache", "pageLinks", "loadPage", "nextPageURL", "parseLoadedPage", "getPageURL", "pageNumber", "fetchPromises", "previousPromise", "itemsTarget", "collectionItems", "itemsLength", "newItems", "initAllMode", "cleanupClick", "handleLoadElements", "visibleCountTotal", "visibleCountFrom", "visibleCountTo", "initMoreMode", "cleanupPaginationNextButtons", "handlePaginationNextButtons", "cleanupElements", "handleElements", "cleanupLoadRemaining", "paginationNextSelector", "destroyDelegation", "createDelegation", "rawLoadCount", "parseNumericAttribute", "allItemsDisplayed", "initInfiniteMode", "thresholdCoefficient", "getInfiniteThreshold", "handleScroll", "throttle", "innerHeight", "bottom", "validRange", "cleanupScroll", "entries", "isIntersecting", "initPaginationMode", "itemsPerPage", "$itemsPerPage", "start", "end", "currentPageCleanup", "paginateCleanup", "pageBoundary", "pageBoundaryCleanup", "getBreakpointSetting", "pageSiblings", "pageSiblingsCleanup", "pageButtonTemplate", "pageDotsTemplate", "pageButtonsCleanup", "handlePageButtons", "paginationWrapperCleanup", "handlePaginationWrapper", "paginationButtonsCleanup", "handlePaginationButtons", "paginationCountCleanup", "handlePaginationCount", "renderedButtons", "pageButtonsRunner", "totalSiblings", "maxElements", "isStartRange", "isEndRange", "existingElements", "existingElement", "existingTargetPage", "lastElement", "newElement", "createPageButton", "elementToUpdate", "CURRENT_CSS_CLASS", "pageButtonSelector", "destroyPageButtonDelegation", "setAttributes", "shouldDisplay", "buttonsRunner", "paginationPreviousSelector", "destroyPaginationDelegation", "setting", "values", "store", "updateValue", "currentBreakpoint", "getCurrentBreakpoint", "breakpointIndex", "i", "initListLoading", "mode", "loadingClass", "loadModeCleanup", "initListNest", "handledItems", "hasChanges", "nestTargets", "handleNestTarget", "triggerRef", "slugsElement", "slugs", "handleManualNesting", "handleExternalNesting", "source", "sourceItems", "slug", "sourceWrapper", "sourceEmpty", "sourceReference", "sourceInstance", "externalStylesheetsPromise", "attachExternalStylesheets", "sourceItem", "nestedTargets", "nestedTarget", "nestedInstance", "initPrevNext", "previousItemTarget", "nextItemTarget", "previousEmptyPlaceholder", "nextEmptyPlaceholder", "loadingItems", "nextItem", "handleItems", "currentItemIndex", "initListSelects", "selectReference", "initListSelect", "renderedOptions", "allOptionValues", "optionValues", "optionValue", "initListSliders", "slidersReferences", "sliderReference", "initListSlider", "sliderElement", "SLIDER_CSS_CLASSES", "sliderMask", "existingSlides", "slideCSS", "slide", "renderedItems", "ARIA_ROLE_KEY", "newSlide", "itemId", "initButtons", "buttons", "activeButton", "buttonDataMap", "button", "reverse", "ascClass", "desClass", "currentDirection", "ARIA_ROLE_VALUES", "TABINDEX_KEY", "ariaSort", "ARIA_SORT_VALUES", "ariaSortRunner", "ARIA_SORT_KEY", "cssClass", "cssClassRunner", "sortTriggerSelector", "getNextDirection", "initDropdown", "dropdown", "dropdownToggle", "DROPDOWN_CSS_CLASSES", "dropdownList", "setDropdownAria", "activeOption", "dropdownLabelCleanup", "initDropdownLabel", "dropdownOptions", "initDropdownOptions", "optionElement", "closeDropdown", "rawField", "direction", "ARIA_SELECTED_KEY", "dropdownLabel", "ARIA_HASPOPUP_KEY", "ARIA_MULTISELECTABLE_KEY", "getListSortingQueryRegex", "getListSortingQuery", "param", "setListSortingQuery", "initHTMLSelect", "handleSelect", "getSortingParams", "handleFormSubmit", "sortListItems", "firstItem", "secondItem", "firstItemProp", "secondItemProp", "firstItemValue", "getItemValue", "secondItemValue", "collatorOptions", "firstValue", "initListSorting", "triggers", "sortingClass", "firstTrigger", "isDropdown", "modeCleanup", "sortHookCleanup", "sortingCleanup", "usedStaticItems", "initStaticItems", "staticItems", "interactiveItems", "nonInteractiveItems", "staticItem", "position", "repeat", "interactive", "elementClone", "itemClone", "initListTabs", "tabsReferences", "tabsReference", "initListTab", "tabsElement", "TABS_CSS_CLASSES", "tabsMenu", "tabsContent", "existingTabLinks", "existingTabPanes", "tabLinkCSS", "tabPaneCSS", "tabLink", "tabPane", "tabLinkContent", "dataset", "createListInstance", "wrapper", "existingListInstance", "readOptionsFromAttributes", "listInstance", "initList", "filtersForm", "isHTMLFormElement", "sortTriggers", "load", "combine", "nestCleanup", "itemSelector", "staticItemSelector", "sliders", "tabs", "selects", "waitWebflowReady", "bag", "createCleanupBag", "destroy", "makeIdempotentDestroy", "diagnostics", "mount", "listElements", "lists", "runActivationPipeline", "parentLists", "parentListInstance", "activeLists", "version", "index_default", "defineModule", "core", "res"]
7
+ }