@adartem/adlib-attributes 0.1.0 → 0.1.1
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.
- package/README.md +308 -121
- package/attributes.js +124 -2
- package/attributes.js.map +7 -1
- package/dist/chunk-25Q4WE2N.js +523 -0
- package/dist/chunk-25Q4WE2N.js.map +7 -0
- package/dist/chunk-HCVJS2H7.js +1 -0
- package/dist/src-2RQ5FG6U.js +18 -0
- package/dist/src-4GFV7C3M.js +7248 -0
- package/dist/src-4GFV7C3M.js.map +7 -0
- package/package.json +34 -42
- package/dist/attributes.js +0 -2
- package/dist/attributes.js.map +0 -1
- package/dist/core/index.cjs +0 -201
- package/dist/core/index.cjs.map +0 -1
- package/dist/core/index.js +0 -195
- package/dist/core/index.js.map +0 -1
- package/dist/index.cjs +0 -446
- package/dist/index.cjs.map +0 -1
- package/dist/index.js +0 -439
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../node_modules/just-debounce/index.js", "../../../node_modules/fuzzysort/fuzzysort.js", "../../ad-list/src/index.ts", "../../ad-list/package.json", "../../ad-list/src/components/index.ts", "../../ad-list/src/components/List.ts", "../../adlib-utils/src/helpers/dates.ts", "../../adlib-utils/src/helpers/forms.ts", "../../adlib-utils/src/helpers/numbers.ts", "../../adlib-utils/src/helpers/selectors.ts", "../../adlib-utils/src/helpers/strings.ts", "../../../node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js", "../../../node_modules/@vue/shared/dist/shared.esm-bundler.js", "../../ad-list/src/utils/constants.ts", "../../ad-list/src/utils/dom.ts", "../../ad-list/src/utils/selectors.ts", "../../ad-list/src/utils/pagination.ts", "../../ad-list/src/utils/store.ts", "../../ad-list/src/components/ListItem.ts", "../../ad-list/src/init.ts", "../../ad-list/src/factory.ts", "../../ad-list/src/combine/index.ts", "../../ad-list/src/filter/index.ts", "../../ad-list/src/filter/dynamic/index.ts", "../../ad-list/src/filter/elements.ts", "../../ad-list/src/filter/dynamic/groups.ts", "../../ad-list/src/filter/dynamic/conditions.ts", "../../ad-list/src/filter/utils.ts", "../../ad-list/src/filter/dynamic/utils.ts", "../../ad-list/src/filter/filter.ts", "../../ad-list/src/filter/filter.worker.ts", "inline-worker:__inline-worker", "../../ad-list/src/filter/standard/index.ts", "../../ad-list/src/filter/standard/conditions.ts", "../../ad-list/src/filter/standard/facets.ts", "../../ad-list/src/filter/standard/query.ts", "../../ad-list/src/filter/tags.ts", "../../ad-list/src/load/index.ts", "../../ad-list/src/load/all.ts", "../../ad-list/src/load/load.ts", "../../ad-list/src/load/elements.ts", "../../ad-list/src/load/infinite.ts", "../../../node_modules/just-throttle/index.mjs", "../../ad-list/src/load/more.ts", "../../ad-list/src/load/pagination.ts", "../../ad-list/src/nest/index.ts", "../../ad-list/src/prevnext/index.ts", "../../ad-list/src/select/index.ts", "../../ad-list/src/slider/index.ts", "../../ad-list/src/sort/index.ts", "../../ad-list/src/sort/buttons.ts", "../../ad-list/src/sort/dropdown.ts", "../../ad-list/src/sort/query.ts", "../../ad-list/src/sort/select.ts", "../../ad-list/src/sort/sort.ts", "../../ad-list/src/static/index.ts", "../../ad-list/src/tabs/index.ts"],
|
|
4
|
+
"sourcesContent": ["module.exports = debounce;\n\nfunction debounce(fn, delay, atStart, guarantee) {\n var timeout;\n var args;\n var self;\n\n return function debounced() {\n self = this;\n args = Array.prototype.slice.call(arguments);\n\n if (timeout && (atStart || guarantee)) {\n return;\n } else if (!atStart) {\n clear();\n\n timeout = setTimeout(run, delay);\n return timeout;\n }\n\n timeout = setTimeout(clear, delay);\n fn.apply(self, args);\n\n function run() {\n clear();\n fn.apply(self, args);\n }\n\n function clear() {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n}\n", "// 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", "export { version } from '../package.json';\nexport * from './components';\nexport { init } from './init';\nexport { ELEMENTS, SETTINGS } from './utils/constants';\n", "{\n \"name\": \"@adartem/ad-list\",\n \"version\": \"0.1.0\",\n \"description\": \"AdLib \u2014 Module ad-list (lists: filter/sort/load/url sync) for Webflow + DOM natif.\",\n \"private\": true,\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\": \"src/index.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./src/index.ts\",\n \"import\": \"./src/index.ts\"\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 \"lint\": \"eslint . --ext .ts\",\n \"lint:fix\": \"eslint ./src --fix && prettier --write ./src\",\n \"test\": \"vitest run -c ../../vitest.config.ts && pnpm --filter @adartem/adlib-attributes test\"\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 }\n}", "export * from './List';\nexport * from './ListItem';\n", "import {\n CMS_CSS_CLASSES,\n fetchPage,\n isHTMLAnchorElement,\n isNumber,\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 { RENDER_INDEX_CSS_VARIABLE } from '../utils/constants';\nimport {\n getAllCollectionListWrappers,\n getCMSElementSelector,\n getCollectionElements,\n} from '../utils/dom';\nimport { getPaginationSearchEntries } from '../utils/pagination';\nimport {\n getAttribute,\n getInstance,\n hasAttributeValue,\n queryAllElements,\n queryElement,\n} 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 // 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 = hasAttributeValue(this.listOrWrapper, 'cache', 'true');\n this.showQuery = hasAttributeValue(this.listOrWrapper, 'showquery', 'true');\n this.highlight = hasAttributeValue(this.listOrWrapper, 'highlight', 'true');\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 = getAttribute(this.listOrWrapper, 'itemsperpage');\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 { isDate } from './guards';\n\n/**\n * Converts a string to a `Date`.\n * @param value\n * @returns The `Date` object, if the conversion is successful.\n */\nexport const normalizeDate = (value: string | number | Date) => {\n if (isDate(value)) return value;\n if (value === '') return;\n\n const date = new Date(value);\n\n if (!isNaN(date.getTime())) {\n return date;\n }\n};\n", "import { FORM_CSS_CLASSES } from '../constants';\nimport type { FormField, FormFieldType } from '../types';\nimport { simulateEvent } from './events';\nimport { isBoolean, isHTMLInputElement, isHTMLSelectElement, isNotEmpty } from './guards';\n\n/**\n * Gets the value of a given form field.\n * @param formField A {@link FormField} element.\n * @param customValueAttribute Optional custom value attribute used to identify checkboxes and radios.\n */\nexport const getFormFieldValue = (\n formField: FormField,\n customValueAttribute?: string,\n): string | string[] => {\n const type = formField.type as FormFieldType;\n\n let value: string | string[];\n\n switch (type) {\n // Checkbox\n case 'checkbox': {\n // Group\n const groupCheckboxes = getCheckboxGroup(\n formField.name,\n formField.form,\n customValueAttribute,\n );\n if (groupCheckboxes?.length) {\n value = [];\n\n for (const checkbox of groupCheckboxes) {\n const checkboxValue = customValueAttribute\n ? (checkbox.getAttribute(customValueAttribute) ?? checkbox.value)\n : checkbox.value;\n\n if (!checkboxValue || !checkbox.checked) continue;\n\n value.push(checkboxValue);\n }\n\n break;\n }\n\n // Single\n const { checked } = formField as HTMLInputElement;\n value = checked ? 'true' : '';\n\n break;\n }\n\n // Radio\n case 'radio': {\n const checkedRadio = formField.form?.querySelector<HTMLInputElement>(\n `input[name=\"${formField.name}\"][type=\"radio\"]:checked`,\n );\n\n value = checkedRadio\n ? customValueAttribute\n ? (checkedRadio.getAttribute(customValueAttribute) ?? checkedRadio.value)\n : checkedRadio.value\n : '';\n\n break;\n }\n\n // Select multiple\n case 'select-multiple': {\n value = [...(formField as HTMLSelectElement).selectedOptions]\n .map((option) => option.value)\n .filter(Boolean);\n\n break;\n }\n\n // Dates\n case 'date':\n case 'month':\n case 'week':\n case 'time': {\n const { valueAsDate, value: _value } = formField as HTMLInputElement;\n value = valueAsDate ? valueAsDate.toISOString() : _value;\n\n break;\n }\n\n // Default - Text\n default: {\n value = formField.value;\n }\n }\n\n return value;\n};\n\n/**\n * Sets a value to a FormField element and emits `click`, `input` and `change` Events.\n *\n * @param element The FormField to update.\n * @param value `boolean` for Checkboxes and Radios, `string` for the rest.\n */\nexport const setFormFieldValue = (\n formField: FormField,\n value: string | boolean | string[],\n customValueAttribute?: string,\n): void => {\n const type = formField.type as FormFieldType;\n\n switch (type) {\n // Checkboxes\n case 'checkbox': {\n if (!isHTMLInputElement(formField)) break;\n\n // Single checkbox\n if (!Array.isArray(value)) {\n const check = isBoolean(value) ? value : value === 'true';\n\n if (check !== formField.checked) {\n formField.checked = check;\n\n simulateEvent(formField, ['click', 'input', 'change']);\n }\n\n break;\n }\n\n const groupCheckboxes = getCheckboxGroup(\n formField.name,\n formField.form,\n customValueAttribute,\n );\n if (!groupCheckboxes?.length) break;\n\n for (const checkbox of groupCheckboxes) {\n const checkboxValue = customValueAttribute\n ? (checkbox.getAttribute(customValueAttribute) ?? checkbox.value)\n : checkbox.value;\n\n const check = value.includes(checkboxValue);\n\n if (check !== checkbox.checked) {\n checkbox.checked = check;\n\n simulateEvent(checkbox, ['click', 'input', 'change']);\n }\n }\n\n break;\n }\n\n // Radios\n case 'radio': {\n if (Array.isArray(value)) break;\n\n const groupRadios = getRadioGroupInputs(formField);\n\n for (const radio of groupRadios) {\n const radioValue = customValueAttribute\n ? (radio.getAttribute(customValueAttribute) ?? radio.value)\n : radio.value;\n\n const check = radioValue === value;\n\n if (check !== radio.checked) {\n radio.checked = check;\n\n simulateEvent(radio, ['click', 'input', 'change']);\n\n if (check) continue;\n\n // When unchecking a custom Webflow radio, we need to manually remove the focus and checked classes\n const customRadio = radio.parentElement?.querySelector(`.${FORM_CSS_CLASSES.radioInput}`);\n if (!customRadio) continue;\n\n customRadio.classList.remove(\n FORM_CSS_CLASSES.checkboxOrRadioFocus,\n FORM_CSS_CLASSES.checkboxOrRadioChecked,\n );\n }\n }\n\n break;\n }\n\n // Select-multiple\n case 'select-multiple': {\n if (!Array.isArray(value) || !isHTMLSelectElement(formField)) break;\n\n for (const option of formField.options) {\n const select = value.includes(option.value);\n\n if (select !== option.selected) {\n option.selected = select;\n\n simulateEvent(option, ['input', 'change']);\n }\n }\n\n break;\n }\n\n // Other\n default: {\n if (Array.isArray(value)) break;\n\n if (formField.value !== value) {\n formField.value = value.toString();\n\n simulateEvent(formField, ['input', 'change']);\n }\n }\n }\n};\n\n/**\n * Retrieves all radio inputs that belong to the same group.\n * @param radio A radio input element that belongs to the group.\n * @param form The form element that contains the radio inputs. If not provided, it will be inferred from the radio input.\n * @returns An array of radio inputs.\n */\nexport const getRadioGroupInputs = (radio: FormField): HTMLInputElement[] => {\n if (!radio.form) return [];\n\n return [\n ...radio.form.querySelectorAll<HTMLInputElement>(\n `input[name=\"${radio.name}\"][type=\"${radio.type}\"]`,\n ),\n ];\n};\n\n/**\n * @returns All the checkboxes in a group.\n * @param name The name of the group.\n * @param form The form element containing the group.\n * @param customValueAttribute Optional custom value attribute used to identify checkboxes.\n */\nexport const getCheckboxGroup = (\n name: string,\n form: HTMLFormElement | null,\n customValueAttribute?: string,\n) => {\n const groupSelector = [\n `input[name=\"${name}\"][type=\"checkbox\"][value]`,\n customValueAttribute && `input[name=\"${name}\"][type=\"checkbox\"][${customValueAttribute}]`,\n ]\n .filter(isNotEmpty)\n .join(',');\n\n const groupCheckboxes = form?.querySelectorAll<HTMLInputElement>(groupSelector);\n return groupCheckboxes;\n};\n\n/**\n * Gets the wrapper element for a given form field.\n * @param formField The FormField element to get the wrapper for.\n * @returns The closest wrapper element or the formField itself if no wrapper is found.\n */\nexport const getFormFieldWrapper = (formField: FormField) => {\n const wrapper = formField.closest<HTMLElement>(\n `.${FORM_CSS_CLASSES.checkboxField}, .${FORM_CSS_CLASSES.radioField}, label`,\n );\n return wrapper || formField;\n};\n", "import { isDate, isNumber } from './guards';\n\n/**\n * Converts a value to a number, removing any invalid symbols like `$` or `,`.\n * @param value\n * @returns The valid number value.\n */\nexport const normalizeNumber = (value: string | number | Date) => {\n if (isNumber(value)) return value;\n if (isDate(value)) return value.getTime();\n if (!value) return;\n\n return parseFloat(value.replace(/[^0-9.-]+/g, ''));\n};\n\n/**\n * Parses a numeric Attribute string.\n * @param rawValue The raw string. Example: \"20\", \"-25.3\"...\n * @param fallback A value to fall back to when the parsed value is not valid.\n */\nexport function parseNumericAttribute(\n rawValue: string | number | null | undefined,\n fallback: number,\n): number;\nexport function parseNumericAttribute(\n rawValue: string | number | null | undefined,\n fallback?: number | null,\n): number | null;\nexport function parseNumericAttribute(\n rawValue: string | number | null | undefined,\n fallback?: number | null,\n): number | null {\n if (!rawValue) return fallback ?? null;\n\n const value = Number(rawValue);\n\n if (!isNaN(value)) return value;\n if (fallback) return fallback;\n return null;\n}\n\n/**\n * Calculates the amount of decimals that a float number has.\n * @param value A number.\n */\nexport const getDecimalPrecision = (value: number) => {\n if (!isFinite(value)) return 0;\n\n let exponential = 1;\n let precision = 0;\n\n while (Math.round(value * exponential) / exponential !== value) {\n exponential *= 10;\n precision += 1;\n }\n return precision;\n};\n\n/**\n * Ensures a decimal precision on a number.\n * @param value The number to handle.\n * @param precision The amount of decimals.\n */\nconst setDecimalPrecision = (value: number, precision: number) => {\n const pow = Math.pow(10, precision);\n\n return Math.round(value * pow) / pow;\n};\n\n/**\n * Adjusts a numeric value to a step factor.\n * @param value The numeric value to adjust.\n * @param step The increment step.\n * @param precision The step's decimal precision. If not provided, it will be calculated.\n * @param minRange A minimum range value, used for offsetting.\n * @returns The adjusted value.\n */\nexport const adjustValueToStep = (\n value: number,\n step: number,\n precision?: number,\n minRange = 0,\n) => {\n precision ??= getDecimalPrecision(step);\n\n const offset = minRange > 1 ? minRange % step : 0;\n\n const remainder = value % step;\n const floor = offset + value - remainder;\n\n if (remainder > step / 2) return setDecimalPrecision(floor + step, precision);\n\n return setDecimalPrecision(floor, precision);\n};\n", "import type {\n AdartemAttributeKey,\n AttributeElements,\n AttributeSettings,\n LooseString,\n} from '../types';\n\n/**\n * @returns Selector helpers for the defined Attribute Elements and Settings.\n * @param attributeKey\n * @param elements\n * @param settings\n */\nexport const generateSelectors = <\n ElementsDefinition extends AttributeElements,\n SettingsDefinition extends AttributeSettings,\n>(\n attributeKey: AdartemAttributeKey,\n elements: ElementsDefinition,\n settings: SettingsDefinition,\n) => {\n const ELEMENT_ATTRIBUTE_NAME = `ad-${attributeKey}-element`;\n const INSTANCE_ATTRIBUTE_NAME = `ad-${attributeKey}-instance`;\n\n /**\n * Constructs the attribute name for a setting.\n * @param settingKey\n */\n const getSettingAttributeName = (settingKey: keyof SettingsDefinition) => {\n const { key } = settings[settingKey];\n\n return `ad-${attributeKey}-${key}`;\n };\n\n /**\n * @returns A valid CSS selector for a setting.\n * @param settingKey The key of the setting.\n * @param valueKey [Optional] The key of the setting value.\n * @param explicitValue [Optional] An explicit value to use instead of a predefined setting value.\n */\n const getSettingSelector = <SettingKey extends keyof SettingsDefinition>(\n settingKey: SettingKey,\n value?: LooseString<NonNullable<SettingsDefinition[SettingKey]['values']>[number]>,\n ) => {\n const attributeName = getSettingAttributeName(settingKey);\n\n // With setting value\n if (value) {\n return `[${attributeName}=\"${value}\" i]`;\n }\n\n // No setting value\n return `[${attributeName}]`;\n };\n\n /**\n * @returns A valid CSS selector for an element.\n * @param elementKey The key of the element.\n * @param params.instance The index of the element instance.\n * If `null`, it will select all elements without an instance.\n * If `undefined`, it will select all elements.\n */\n const getElementSelector = (\n elementKey?: ElementsDefinition[number],\n { instance }: { instance?: string | null } = {},\n ) => {\n if (!elementKey) {\n return `[${ELEMENT_ATTRIBUTE_NAME}]`;\n }\n\n const elementSelector = `[${ELEMENT_ATTRIBUTE_NAME}=\"${elementKey}\" i]`;\n\n // If no instance is provided, select all elements\n if (instance === undefined) {\n return elementSelector;\n }\n\n // If instance is null, select all elements without an instance\n if (instance === null) {\n return `${elementSelector}:not([${INSTANCE_ATTRIBUTE_NAME}], [${INSTANCE_ATTRIBUTE_NAME}] ${elementSelector})`;\n }\n\n // If instance exists, select the specific element instance\n const instanceSelector = getInstanceSelector(instance);\n\n return `${elementSelector}${instanceSelector}, ${instanceSelector} ${elementSelector}`;\n };\n\n /**\n * @returns A valid CSS selector for an element instance.\n * @param instance The instance identifier.\n */\n const getInstanceSelector = (instance: string) => {\n return `[${INSTANCE_ATTRIBUTE_NAME}=\"${instance}\"]`;\n };\n\n /**\n * @returns The first element that matches the selector.\n * @param elementKey The key of the element.\n * @param params.instance The index of the element instance.\n * @param params.scope The scope to query the element from. Defaults to `document`.\n */\n const queryElement = <E extends Element = HTMLElement>(\n elementKey?: ElementsDefinition[number],\n { instance, scope }: { instance?: string | null; scope?: ParentNode | null } = {},\n ) => {\n const selector = getElementSelector(elementKey, { instance });\n const target = scope || document;\n\n return target.querySelector<E>(selector);\n };\n\n /**\n * @returns All elements that match the selector.\n * @param elementKey The key of the element.\n * @param params.instance The index of the element instance.\n * @param params.scope The scope to query the element from. Defaults to `document`.\n */\n const queryAllElements = <E extends Element = HTMLElement>(\n elementKey?: ElementsDefinition[number],\n { instance, scope }: { instance?: string | null; scope?: ParentNode | null } = {},\n ) => {\n const selector = getElementSelector(elementKey, { instance });\n const target = scope || document;\n\n return [...target.querySelectorAll<E>(selector)];\n };\n\n /**\n * @returns The instance index of an element.\n * @param element The element to get the instance index from.\n */\n const getInstance = (element: Element) => {\n const instanceHolder = element.closest(`[${INSTANCE_ATTRIBUTE_NAME}]`);\n if (!instanceHolder) return null;\n\n return instanceHolder.getAttribute(INSTANCE_ATTRIBUTE_NAME);\n };\n\n /**\n * @returns The first ancestor that matches the selector.\n * @param elementKey The key of the element.\n * @param params.instance The index of the element instance.\n */\n const getClosestElement = <E extends Element = HTMLElement>(\n element: Element,\n elementKey?: ElementsDefinition[number],\n { instance }: { instance?: string | null } = {},\n ) => {\n const selector = getElementSelector(elementKey, { instance });\n\n return element.closest<E>(selector);\n };\n\n /**\n * @returns The value of an attribute. It will check, in order:\n * - The element itself.\n * - The closest ancestor that has the attribute.\n * - The script tags.\n *\n * @param element The element to get the attribute value from, or its closest ancestor that has the attribute. If `null`, it will check the script tags.\n * @param settingKey The attribute key.\n * @param filterInvalid Whether to filter out invalid values. Defaults to `false`.\n */\n const getAttribute = <\n SettingKey extends keyof SettingsDefinition,\n FilterInvalid extends boolean = false,\n SettingValues = SettingsDefinition[SettingKey]['values'],\n SettingDefaultValue = SettingsDefinition[SettingKey]['defaultValue'],\n SettingValueIsNumeric = SettingsDefinition[SettingKey]['isNumeric'],\n SettingValue = SettingValueIsNumeric extends true\n ? number\n : SettingValues extends Array<string>\n ? FilterInvalid extends true\n ? SettingValues[number]\n : string\n : string,\n >(\n element: Element | null,\n settingKey: SettingKey,\n { filterInvalid }: { filterInvalid?: FilterInvalid } = {},\n ): SettingDefaultValue extends string ? SettingValue : SettingValue | undefined => {\n const attributeName = getSettingAttributeName(settingKey);\n const selector = getSettingSelector(settingKey);\n\n const settingElement = element?.closest(selector);\n\n // Check the element\n let rawValue = settingElement?.getAttribute(attributeName);\n\n // Check the script tags\n if (!rawValue) {\n for (const script of window.AdartemAttributes.scripts) {\n rawValue = script.getAttribute(attributeName);\n\n if (rawValue) break;\n }\n }\n\n // Fall back to the default value, if available\n const { values = [], defaultValue, isNumeric } = settings[settingKey];\n\n rawValue ??= defaultValue;\n\n // @ts-expect-error Returning undefined is valid\n if (!rawValue) return;\n\n // Parse numeric values\n if (isNumeric) {\n let parsedValue = Number(rawValue);\n\n if (isNaN(parsedValue) && defaultValue) {\n parsedValue = Number(defaultValue);\n }\n\n if (!isNaN(parsedValue)) {\n return parsedValue as SettingValue;\n }\n }\n\n // @ts-expect-error Returning undefined is valid\n if (filterInvalid && values.length && !values.includes(rawValue)) return;\n\n const value = rawValue as SettingValue;\n return value;\n };\n\n /**\n * @returns Whether an element has a specific attribute value.\n * @param element\n * @param settingKey\n * @param valueKey\n */\n const hasAttributeValue = <SettingKey extends keyof SettingsDefinition>(\n element: Element,\n settingKey: SettingKey,\n value: NonNullable<SettingsDefinition[SettingKey]['values']>[number],\n ) => {\n return getAttribute(element, settingKey) === value;\n };\n\n return {\n getClosestElement,\n getElementSelector,\n getSettingSelector,\n getInstanceSelector,\n getSettingAttributeName,\n queryElement,\n queryAllElements,\n getInstance,\n getAttribute,\n hasAttributeValue,\n };\n};\n", "/**\n * Convert a string of comma separated values to an array of values.\n *\n * @param string Comma separated string.\n * @param filterEmpty Defines if empty values should be filtered out of the returned array. Defaults to `true`.\n */\nexport const extractCommaSeparatedValues = (\n string: string | null | undefined,\n filterEmpty = true,\n): string[] => {\n if (!string) return [];\n\n const items = string.split(',').reduce<string[]>((accumulatedValue, currentValue) => {\n const value = currentValue.trim();\n\n if (!filterEmpty || value) accumulatedValue.push(value);\n\n return accumulatedValue;\n }, []);\n\n return items;\n};\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 = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\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", "import {\n type AttributeElements,\n type AttributeSettings,\n type FormFieldType,\n LIST_ATTRIBUTE,\n type WebflowBreakpoint,\n} from '@adartem/adlib-utils';\n\nimport type { ListItemField } from '../components';\nimport type { FilterOperator } from '../filter/types';\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_ATTRIBUTE}-asc`,\n },\n\n /**\n * Defines the descending CSS class.\n */\n descclass: {\n key: 'descclass',\n defaultValue: `is-${LIST_ATTRIBUTE}-desc`,\n },\n\n /**\n * Defines the active filter CSS class.\n */\n activeclass: {\n key: 'activeclass',\n defaultValue: `is-${LIST_ATTRIBUTE}-active`,\n },\n\n /**\n * Defines the disabled filter CSS class.\n */\n dynamicdisabledclass: {\n key: 'dynamicdisabledclass',\n defaultValue: `is-${LIST_ATTRIBUTE}-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_ATTRIBUTE}-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_ATTRIBUTE}-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_ATTRIBUTE}-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\u2019s 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\u2026\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_ATTRIBUTE}-filtering` },\n\n /**\n * Defines the CSS class to be added to the list when paginating.\n */\n loadingclass: { key: 'loadingclass', defaultValue: `is-${LIST_ATTRIBUTE}-loading` },\n\n /**\n * Defines the CSS class to be added to the list when sorting.\n */\n sortingclass: { key: 'sortingclass', defaultValue: `is-${LIST_ATTRIBUTE}-sorting` },\n\n /**\n * Defines the CSS class to be added to items before rendering them.\n */\n startingclass: { key: 'startingclass', defaultValue: `is-${LIST_ATTRIBUTE}-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} 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_ATTRIBUTE}-renderindex`;\n\nwindow.CSS?.registerProperty?.({\n name: RENDER_INDEX_CSS_VARIABLE,\n syntax: '<number>',\n inherits: false,\n initialValue: '0',\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", "import { generateSelectors, LIST_ATTRIBUTE } from '@adartem/adlib-utils';\n\nimport { ELEMENTS, 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} = generateSelectors(LIST_ATTRIBUTE, 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", "/**\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 type { CollectionListWrapperElement } from '@adartem/adlib-utils';\n\nimport type { List } from '../components/List';\n\nexport const listInstancesStore = new Map<CollectionListWrapperElement, List>();\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 }) || 'text';\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 { type AdartemAttributeInit, isNotEmpty, waitWebflowReady } from '@adartem/adlib-utils';\n\nimport { createListInstance, initList } from './factory';\nimport { getCMSElementSelector } from './utils/dom';\nimport { getInstance, queryAllElements } from './utils/selectors';\n\n/**\n * Inits the attribute.\n */\nexport const init: AdartemAttributeInit = async () => {\n await waitWebflowReady();\n\n const listElements = queryAllElements('list');\n const lists = listElements\n .map((listElement) => {\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 return createListInstance(listElement);\n })\n .filter(isNotEmpty);\n\n const cleanups = lists.map(initList);\n\n return {\n result: lists,\n destroy() {\n for (const cleanup of cleanups) {\n cleanup();\n }\n },\n };\n};\n", "import { isHTMLFormElement } 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 { getAllCollectionListWrappers, getCollectionElements } from './utils/dom';\nimport {\n getAttribute,\n getElementSelector,\n queryAllElements,\n queryElement,\n} 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 listInstance = new List(wrapper, index);\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 = getAttribute(list.listOrWrapper, 'load', { filterInvalid: true });\n if (load) {\n const cleanup = initListLoading(list, load);\n cleanups.add(cleanup);\n }\n\n // Combine\n const combine = getAttribute(list.listOrWrapper, 'combine');\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 initListSliders(list, sliders);\n }\n\n // Tabs\n const tabs = queryAllElements('tabs', { instance });\n if (tabs.length) {\n initListTabs(list, tabs);\n }\n\n // Selects\n const selects = queryAllElements('select', { instance });\n if (selects.length) {\n initListSelects(list, selects);\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 { 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 { watch } from '@vue/reactivity';\nimport debounce from 'just-debounce';\n\nimport type { List } from '../components/List';\nimport { getAttribute, 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 = getAttribute(list.listElement, 'filteringclass');\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 { 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 {\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 { 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 {\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 = getAttribute(initialConditionValueFormField, 'tagvalues', {\n filterInvalid: true,\n });\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 {\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 { 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 worker.addEventListener(\n 'message',\n (event: MessageEvent<FilterTaskResult>) => {\n task.resolve(event.data);\n conclude();\n },\n { signal, once: true },\n );\n\n worker.addEventListener(\n 'error',\n (error: string | Event) => {\n task.reject(error);\n conclude();\n },\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 inlineWorker from '__inline-worker'\nexport default function Worker() {\n return inlineWorker(\"var Oe=Object.create;var Le=Object.defineProperty,Pe=Object.defineProperties,Ge=Object.getOwnPropertyDescriptor,Ve=Object.getOwnPropertyDescriptors,We=Object.getOwnPropertyNames,Fe=Object.getOwnPropertySymbols,Ye=Object.getPrototypeOf,Se=Object.prototype.hasOwnProperty,Ke=Object.prototype.propertyIsEnumerable;var Ee=(i,a,m)=>a in i?Le(i,a,{enumerable:!0,configurable:!0,writable:!0,value:m}):i[a]=m,Me=(i,a)=>{for(var m in a||(a={}))Se.call(a,m)&&Ee(i,m,a[m]);if(Fe)for(var m of Fe(a))Ke.call(a,m)&&Ee(i,m,a[m]);return i},Ie=(i,a)=>Pe(i,Ve(a));var Je=(i,a)=>()=>(a||i((a={exports:{}}).exports,a),a.exports);var Qe=(i,a,m,x)=>{if(a&&typeof a==\\\"object\\\"||typeof a==\\\"function\\\")for(let L of We(a))!Se.call(i,L)&&L!==m&&Le(i,L,{get:()=>a[L],enumerable:!(x=Ge(a,L))||x.enumerable});return i};var Ue=(i,a,m)=>(m=i!=null?Oe(Ye(i)):{},Qe(a||!i||!i.__esModule?Le(m,\\\"default\\\",{value:i,enumerable:!0}):m,i));var Ne=Je((He,_e)=>{((i,a)=>{typeof define==\\\"function\\\"&&define.amd?define([],a):typeof _e==\\\"object\\\"&&_e.exports?_e.exports=a():i.fuzzysort=a()})(He,i=>{\\\"use strict\\\";var a=(r,e)=>{if(!r||!e)return C;var n=w(r);ie(e)||(e=z(e));var o=n.bitflags;return(o&e._bitflags)!==o?C:Z(n,e)},m=(r,e,n)=>{if(!r)return n!=null&&n.all?ve(e,n):ye;var o=w(r),l=o.bitflags,s=o.containsSpace,t=J((n==null?void 0:n.threshold)||0),u=(n==null?void 0:n.limit)||pe,f=0,v=0,g=e.length;function O(ae){f<u?(de.add(ae),++f):(++v,ae._score>de.peek()._score&&de.replaceTop(ae))}if(n!=null&&n.key)for(var A=n.key,h=0;h<g;++h){var D=e[h],_=ge(D,A);if(_&&(ie(_)||(_=z(_)),(l&_._bitflags)===l)){var y=Z(o,_);y!==C&&(y._score<t||(y.obj=D,O(y)))}}else if(n!=null&&n.keys){var ne=n.keys,Y=ne.length;e:for(var h=0;h<g;++h){var D=e[h];{for(var B=0,d=0;d<Y;++d){var A=ne[d],_=ge(D,A);if(!_){se[d]=fe;continue}ie(_)||(_=z(_)),se[d]=_,B|=_._bitflags}if((l&B)!==l)continue}if(s)for(let p=0;p<o.spaceSearches.length;p++)S[p]=G;for(var d=0;d<Y;++d){if(_=se[d],_===fe){oe[d]=fe;continue}if(oe[d]=Z(o,_,!1,s),oe[d]===C){oe[d]=fe;continue}if(s)for(let b=0;b<o.spaceSearches.length;b++){if(E[b]>-1e3&&S[b]>G){var H=(S[b]+E[b])/4;H>S[b]&&(S[b]=H)}E[b]>S[b]&&(S[b]=E[b])}}if(s){for(let p=0;p<o.spaceSearches.length;p++)if(S[p]===G)continue e}else{var c=!1;for(let p=0;p<Y;p++)if(oe[p]._score!==G){c=!0;break}if(!c)continue}var V=new W(Y);for(let p=0;p<Y;p++)V[p]=oe[p];if(s){var M=0;for(let p=0;p<o.spaceSearches.length;p++)M+=S[p]}else{var M=G;for(let b=0;b<Y;b++){var y=V[b];if(y._score>-1e3&&M>G){var H=(M+y._score)/4;H>M&&(M=H)}y._score>M&&(M=y._score)}}if(V.obj=D,V._score=M,n!=null&&n.scoreFn){if(M=n.scoreFn(V),!M)continue;M=J(M),V._score=M}M<t||O(V)}}else for(var h=0;h<g;++h){var _=e[h];if(_&&(ie(_)||(_=z(_)),(l&_._bitflags)===l)){var y=Z(o,_);y!==C&&(y._score<t||O(y))}}if(f===0)return ye;for(var te=new Array(f),h=f-1;h>=0;--h)te[h]=de.poll();return te.total=f+v,te},x=(r,e=\\\"<b>\\\",n=\\\"</b>\\\")=>{for(var o=typeof e==\\\"function\\\"?e:void 0,l=r.target,s=l.length,t=r.indexes,u=\\\"\\\",f=0,v=0,g=!1,O=[],A=0;A<s;++A){var h=l[A];if(t[v]===A){if(++v,g||(g=!0,o?(O.push(u),u=\\\"\\\"):u+=e),v===t.length){o?(u+=h,O.push(o(u,f++)),u=\\\"\\\",O.push(l.substr(A+1))):u+=h+n+l.substr(A+1);break}}else g&&(g=!1,o?(O.push(o(u,f++)),u=\\\"\\\"):u+=n);u+=h}return o?O:u},L=r=>{typeof r==\\\"number\\\"?r=\\\"\\\"+r:typeof r!=\\\"string\\\"&&(r=\\\"\\\");var e=q(r);return K(r,{_targetLower:e._lower,_targetLowerCodes:e.lowerCodes,_bitflags:e.bitflags})},I=()=>{re.clear(),$.clear()};class P{get indexes(){return this._indexes.slice(0,this._indexes.len).sort((e,n)=>e-n)}set indexes(e){return this._indexes=e}highlight(e,n){return x(this,e,n)}get score(){return N(this._score)}set score(e){this._score=J(e)}}class W extends Array{get score(){return N(this._score)}set score(e){this._score=J(e)}}var K=(r,e)=>{var o,l,s,t,u,f,v;let n=new P;return n.target=r,n.obj=(o=e.obj)!=null?o:C,n._score=(l=e._score)!=null?l:G,n._indexes=(s=e._indexes)!=null?s:[],n._targetLower=(t=e._targetLower)!=null?t:\\\"\\\",n._targetLowerCodes=(u=e._targetLowerCodes)!=null?u:C,n._nextBeginningIndexes=(f=e._nextBeginningIndexes)!=null?f:C,n._bitflags=(v=e._bitflags)!=null?v:0,n},N=r=>r===G?0:r>1?r:Math.E**(((-r+1)**.04307-1)*-2),J=r=>r===0?G:r>1?r:1-Math.pow(Math.log(r)/-2+1,1/.04307),X=r=>{typeof r==\\\"number\\\"?r=\\\"\\\"+r:typeof r!=\\\"string\\\"&&(r=\\\"\\\"),r=r.trim();var e=q(r),n=[];if(e.containsSpace){var o=r.split(/\\\\s+/);o=[...new Set(o)];for(var l=0;l<o.length;l++)if(o[l]!==\\\"\\\"){var s=q(o[l]);n.push({lowerCodes:s.lowerCodes,_lower:o[l].toLowerCase(),containsSpace:!1})}}return{lowerCodes:e.lowerCodes,_lower:e._lower,containsSpace:e.containsSpace,bitflags:e.bitflags,spaceSearches:n}},z=r=>{if(r.length>999)return L(r);var e=re.get(r);return e!==void 0||(e=L(r),re.set(r,e)),e},w=r=>{if(r.length>999)return X(r);var e=$.get(r);return e!==void 0||(e=X(r),$.set(r,e)),e},ve=(r,e)=>{var n=[];n.total=r.length;var o=(e==null?void 0:e.limit)||pe;if(e!=null&&e.key)for(var l=0;l<r.length;l++){var s=r[l],t=ge(s,e.key);if(t!=C){ie(t)||(t=z(t));var u=K(t.target,{_score:t._score,obj:s});if(n.push(u),n.length>=o)return n}}else if(e!=null&&e.keys)for(var l=0;l<r.length;l++){for(var s=r[l],f=new W(e.keys.length),v=e.keys.length-1;v>=0;--v){var t=ge(s,e.keys[v]);if(!t){f[v]=fe;continue}ie(t)||(t=z(t)),t._score=G,t._indexes.len=0,f[v]=t}if(f.obj=s,f._score=G,n.push(f),n.length>=o)return n}else for(var l=0;l<r.length;l++){var t=r[l];if(t!=C&&(ie(t)||(t=z(t)),t._score=G,t._indexes.len=0,n.push(t),n.length>=o))return n}return n},Z=(r,e,n=!1,o=!1)=>{if(n===!1&&r.containsSpace)return R(r,e,o);for(var l=r._lower,s=r.lowerCodes,t=s[0],u=e._targetLowerCodes,f=s.length,v=u.length,h=0,g=0,O=0;;){var A=t===u[g];if(A){if(U[O++]=g,++h,h===f)break;t=s[h]}if(++g,g>=v)return C}var h=0,D=!1,_=0,y=e._nextBeginningIndexes;y===C&&(y=e._nextBeginningIndexes=ee(e.target)),g=U[0]===0?0:y[U[0]-1];var ne=0;if(g!==v)for(;;)if(g>=v){if(h<=0||(++ne,ne>200))break;--h;var Y=T[--_];g=y[Y]}else{var A=s[h]===u[g];if(A){if(T[_++]=g,++h,h===f){D=!0;break}++g}else g=y[g]}var B=f<=1?-1:e._targetLower.indexOf(l,U[0]),d=!!~B,H=d?B===0||e._nextBeginningIndexes[B-1]===B:!1;if(d&&!H){for(var c=0;c<y.length;c=y[c])if(!(c<=B)){for(var V=0;V<f&&s[V]===e._targetLowerCodes[c+V];V++);if(V===f){B=c,H=!0;break}}}var M=p=>{for(var b=0,Te=0,j=1;j<f;++j)p[j]-p[j-1]!==1&&(b-=p[j],++Te);var qe=p[f-1]-p[0]-(f-1);if(b-=(12+qe)*Te,p[0]!==0&&(b-=p[0]*p[0]*.2),!D)b*=1e3;else{for(var be=1,j=y[0];j<v;j=y[j])++be;be>24&&(b*=(be-24)*10)}return b-=(v-f)/2,d&&(b/=1+f*f*1),H&&(b/=1+f*f*1),b-=(v-f)/2,b};if(D)if(H){for(var c=0;c<f;++c)U[c]=B+c;var te=U,ae=M(U)}else var te=T,ae=M(T);else{if(d)for(var c=0;c<f;++c)U[c]=B+c;var te=U,ae=M(te)}e._score=ae;for(var c=0;c<f;++c)e._indexes[c]=te[c];e._indexes.len=f;let he=new P;return he.target=e.target,he._score=e._score,he._indexes=e._indexes,he},R=(r,e,n)=>{for(var o=new Set,l=0,s=C,t=0,u=r.spaceSearches,f=u.length,v=0,g=()=>{for(let H=v-1;H>=0;H--)e._nextBeginningIndexes[F[H*2+0]]=F[H*2+1]},O=!1,d=0;d<f;++d){E[d]=G;var A=u[d];if(s=Z(A,e),n){if(s===C)continue;O=!0}else if(s===C)return g(),C;var h=d===f-1;if(!h){var D=s._indexes,_=!0;for(let c=0;c<D.len-1;c++)if(D[c+1]-D[c]!==1){_=!1;break}if(_){var y=D[D.len-1]+1,ne=e._nextBeginningIndexes[y-1];for(let c=y-1;c>=0&&ne===e._nextBeginningIndexes[c];c--)e._nextBeginningIndexes[c]=y,F[v*2+0]=c,F[v*2+1]=ne,v++}}l+=s._score/f,E[d]=s._score/f,s._indexes[0]<t&&(l-=(t-s._indexes[0])*2),t=s._indexes[0];for(var Y=0;Y<s._indexes.len;++Y)o.add(s._indexes[Y])}if(n&&!O)return C;g();var B=Z(r,e,!0);if(B!==C&&B._score>l){if(n)for(var d=0;d<f;++d)E[d]=B._score/f;return B}n&&(s=e),s._score=l;var d=0;for(let H of o)s._indexes[d++]=H;return s._indexes.len=d,s},k=r=>r.replace(new RegExp(\\\"\\\\\\\\p{Script=Latin}+\\\",\\\"gu\\\"),e=>e.normalize(\\\"NFD\\\")).replace(/[\\\\u0300-\\\\u036f]/g,\\\"\\\"),q=r=>{r=k(r);for(var e=r.length,n=r.toLowerCase(),o=[],l=0,s=!1,t=0;t<e;++t){var u=o[t]=n.charCodeAt(t);if(u===32){s=!0;continue}var f=u>=97&&u<=122?u-97:u>=48&&u<=57?26:u<=127?30:31;l|=1<<f}return{lowerCodes:o,bitflags:l,containsSpace:s,_lower:n}},me=r=>{for(var e=r.length,n=[],o=0,l=!1,s=!1,t=0;t<e;++t){var u=r.charCodeAt(t),f=u>=65&&u<=90,v=f||u>=97&&u<=122||u>=48&&u<=57,g=f&&!l||!s||!v;l=f,s=v,g&&(n[o++]=t)}return n},ee=r=>{r=k(r);for(var e=r.length,n=me(r),o=[],l=n[0],s=0,t=0;t<e;++t)l>t?o[t]=l:(l=n[++s],o[t]=l===void 0?e:l);return o},re=new Map,$=new Map,U=[],T=[],F=[],S=[],E=[],se=[],oe=[],ge=(r,e)=>{var n=r[e];if(n!==void 0)return n;if(typeof e==\\\"function\\\")return e(r);var o=e;Array.isArray(e)||(o=e.split(\\\".\\\"));for(var l=o.length,s=-1;r&&++s<l;)r=r[o[s]];return r},ie=r=>typeof r==\\\"object\\\"&&typeof r._bitflags==\\\"number\\\",pe=1/0,G=-pe,ye=[];ye.total=0;var C=null,fe=L(\\\"\\\"),De=r=>{var e=[],n=0,o={},l=s=>{for(var t=0,u=e[t],f=1;f<n;){var v=f+1;t=f,v<n&&e[v]._score<e[f]._score&&(t=v),e[t-1>>1]=e[t],f=1+(t<<1)}for(var g=t-1>>1;t>0&&u._score<e[g]._score;g=(t=g)-1>>1)e[t]=e[g];e[t]=u};return o.add=(s=>{var t=n;e[n++]=s;for(var u=t-1>>1;t>0&&s._score<e[u]._score;u=(t=u)-1>>1)e[t]=e[u];e[t]=s}),o.poll=(s=>{if(n!==0){var t=e[0];return e[0]=e[--n],l(),t}}),o.peek=(s=>{if(n!==0)return e[0]}),o.replaceTop=(s=>{e[0]=s,l()}),o},de=De();return{single:a,go:m,prepare:L,cleanup:I}})});var ue=i=>typeof i==\\\"string\\\",ke=i=>typeof i==\\\"number\\\";var we=i=>i===void 0,Q=i=>i instanceof Date;var le=i=>{if(Q(i))return i;if(i===\\\"\\\")return;let a=new Date(i);if(!isNaN(a.getTime()))return a};var xe=i=>{if(ke(i))return i;if(Q(i))return i.getTime();if(i)return parseFloat(i.replace(/[^0-9.-]+/g,\\\"\\\"))};var Ce=(i,a=!0)=>i?i.split(\\\",\\\").reduce((x,L)=>{let I=L.trim();return(!a||I)&&x.push(I),x},[]):[];var Ae=Ue(Ne(),1),ce=(i,a,m)=>{if(m===\\\"date\\\"||a===\\\"date\\\"||a===\\\"time\\\"||a===\\\"datetime-local\\\"||a===\\\"month\\\"||a===\\\"week\\\"){let x=le(i);return x===void 0||isNaN(x.getTime())?null:x}if(m===\\\"number\\\"||a===\\\"number\\\"||a===\\\"range\\\"){let x=xe(i);return x===void 0||isNaN(x)?null:x}return i},Be=(i,a,m)=>{var I;typeof i!=typeof a&&(Q(i)?a=le(a)||a:Q(a)&&(i=le(i)||i));let x=Q(i)?i.getTime():ue(i)?i.toLowerCase():i,L=Q(a)?a.getTime():ue(a)?a.toLowerCase():a;if(m){let P=m/100,W=(I=Ae.single(L.toString(),x.toString()))==null?void 0:I.score;return!!W&&W>=P}return x===L},ze=(i,a,m)=>{var I,P;let x,L;return Q(i)||Q(a)?(x=(I=le(i))==null?void 0:I.getTime(),L=(P=le(a))==null?void 0:P.getTime()):ue(i)||ue(a)?(x=xe(i),L=xe(a)):(x=i,L=a),we(x)||we(L)?!1:m===\\\"greater\\\"?x>L:m===\\\"greater-equal\\\"?x>=L:m===\\\"less\\\"?x<L:m===\\\"less-equal\\\"?x<=L:!1};self.onmessage=i=>{let{filters:a,items:m}=i.data,x=a.groups.reduce((I,P)=>{let W=P.conditions.reduce((K,N)=>{let{op:J,value:X,fieldKey:z}=N;return!z||!J||J!==\\\"empty\\\"&&J!==\\\"not-empty\\\"&&(X===\\\"\\\"||Array.isArray(X)&&!X.length)||K.push(N),K},[]);return W.length&&I.push(Ie(Me({},P),{validConditions:W})),I},[]),L=m.filter(I=>{let P=W=>{let K=N=>{let J=z=>{let{op:w,filterMatch:ve,fieldMatch:Z}=N,R=I.fields[z];if(!R)return!1;let k=R.value,q=N.value;if(w===\\\"empty\\\")return Array.isArray(k)?!k.length:!k;if(w===\\\"not-empty\\\")return Array.isArray(k)?!!k.length:!!k;let me=w==null?void 0:w.startsWith(\\\"not-\\\"),ee=(T,F,S)=>{var se;let E=!1;return w===\\\"equal\\\"||w===\\\"not-equal\\\"?E=Be(T,S,N.fuzzyThreshold):w===\\\"start\\\"||w===\\\"not-start\\\"?E=T.toString().toLowerCase().startsWith(F.toLowerCase()):w===\\\"end\\\"||w===\\\"not-end\\\"?E=T.toString().toLowerCase().endsWith(F.toLowerCase()):w===\\\"contain\\\"||w===\\\"not-contain\\\"?E=T.toString().toLowerCase().includes(F.toLowerCase()):(w===\\\"greater\\\"||w===\\\"greater-equal\\\"||w===\\\"less\\\"||w===\\\"less-equal\\\")&&(E=ze(T,S,w)),E&&(w===\\\"equal\\\"||w===\\\"contain\\\")&&((se=I.matchedFields)[z]||(se[z]=[]),I.matchedFields[z].push({fieldValue:T,filterValue:F})),me?!E:E},re=Array.isArray(q),$=Array.isArray(k);if(k===\\\"\\\"||$&&!k.length)return me;if(re&&$){let T=F=>{let S=ce(F,N.type,R.type);return S===null?!1:Z===\\\"and\\\"?k.every(E=>ee(E,F,S)):k.some(E=>ee(E,F,S))};return ve===\\\"and\\\"?q.every(T):q.some(T)}if(re&&!$){let T=F=>{let S=ce(F,N.type,R.type);return S===null?!1:ee(k,F,S)};return ve===\\\"and\\\"?q.every(T):q.some(T)}if(!re&&$){let T=ce(q,N.type,R.type);return T===null?!1:Z===\\\"and\\\"?k.every(F=>ee(F,q,T)):k.some(F=>ee(F,q,T))}if(!re&&!$){let T=ce(q,N.type,R.type);return T===null?!1:ee(k,q,T)}return!1},X=N.fieldKey===\\\"*\\\"?Object.keys(I.fields):Ce(N.fieldKey);return N.fieldMatch===\\\"and\\\"?X.every(J):X.some(J)};return W.conditionsMatch===\\\"or\\\"?W.validConditions.some(K):W.validConditions.every(K)};return a.groupsMatch===\\\"or\\\"?x.some(P):x.every(P)});self.postMessage(L)};\\n\");\n}\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 { addListener, isFormField, isNumber } 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 { 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', { filterInvalid: true });\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 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 const fieldKey = getAttribute(clearElement, 'field')?.trim();\n\n const conditions = 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", "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 {\n CUSTOM_VALUE_ATTRIBUTE,\n getAttribute,\n getSettingSelector,\n getSplitSeparator,\n hasAttributeValue,\n} from '../../utils/selectors';\nimport type { FiltersCondition, FiltersGroup } 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 = getAttribute(formField, 'tagvalues', { filterInvalid: true });\n const filterMatch = getAttribute(formField, 'filtermatch', { filterInvalid: true });\n const fieldMatch = getAttribute(formField, 'fieldmatch', { filterInvalid: true });\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) => {\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;\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 };\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 let facetCountElement = queryElement('facet-count', { scope: formField.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 { 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: '\u2205',\n 'not-empty': '!\u2205',\n contain: '\u2283',\n 'not-contain': '\u2285',\n start: '\u22C0',\n 'not-start': '\u22C0\u0338',\n end: '\u22C1',\n 'not-end': '\u22C1\u0338',\n equal: '=',\n 'not-equal': '\u2260',\n less: '<',\n 'less-equal': '\u2264',\n greater: '>',\n 'greater-equal': '\u2265',\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 type { List } from '../components/List';\nimport type { SETTINGS } from '../utils/constants';\nimport { getAttribute, hasAttributeValue } from '../utils/selectors';\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 = getAttribute(list.listElement, 'loadingclass');\n const resetIx = hasAttributeValue(list.listOrWrapper, 'resetix', 'true');\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 { 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 { 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 { 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 { addListener } from '@adartem/adlib-utils';\nimport throttle from 'just-throttle';\n\nimport type { List } from '../components/List';\nimport { getAttribute } from '../utils/selectors';\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 const observer = new IntersectionObserver((entries) => {\n for (const { isIntersecting } of entries) {\n const action = isIntersecting ? 'addEventListener' : 'removeEventListener';\n window[action]('scroll', handleScroll);\n }\n });\n\n // Set listeners\n observer.observe(list.listElement);\n\n const cleanupScroll = addListener(window, 'scroll', handleScroll);\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 = getAttribute(list.listOrWrapper, 'threshold');\n\n const thresholdCoefficient = 1 - threshold / 100;\n return thresholdCoefficient;\n};\n", "var functionThrottle = throttle;\n\nfunction throttle(fn, interval, options) {\n var timeoutId = null;\n var throttledFn = null;\n var leading = (options && options.leading);\n var trailing = (options && options.trailing);\n\n if (leading == null) {\n leading = true; // default\n }\n\n if (trailing == null) {\n trailing = !leading; //default\n }\n\n if (leading == true) {\n trailing = false; // forced because there should be invocation per call\n }\n\n var cancel = function() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n var flush = function() {\n var call = throttledFn;\n cancel();\n\n if (call) {\n call();\n }\n };\n\n var throttleWrapper = function() {\n var callNow = leading && !timeoutId;\n var context = this;\n var args = arguments;\n\n throttledFn = function() {\n return fn.apply(context, args);\n };\n\n if (!timeoutId) {\n timeoutId = setTimeout(function() {\n timeoutId = null;\n\n if (trailing) {\n return throttledFn();\n }\n }, interval);\n }\n\n if (callNow) {\n callNow = false;\n return throttledFn();\n }\n };\n\n throttleWrapper.cancel = cancel;\n throttleWrapper.flush = flush;\n\n return throttleWrapper;\n}\n\nexport {functionThrottle as default};\n", "import { addListener, isElement, parseNumericAttribute } from '@adartem/adlib-utils';\nimport { effect, watch, type WatchHandle } from '@vue/reactivity';\n\nimport type { List } from '../components/List';\nimport { getAttribute } 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 const cleanupClick = addListener(list.allPaginationNextElements.value, 'click', async (e) => {\n if (!e.target || !isElement(e.target)) return;\n\n e.preventDefault();\n\n const rawLoadCount =\n getAttribute(e.target, 'loadcount') || getAttribute(list.listOrWrapper, '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\n return () => {\n cleanupClick();\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 {\n addListener,\n cloneNode,\n CURRENT_CSS_CLASS,\n extractCommaSeparatedValues,\n getCurrentBreakpoint,\n isElement,\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\n const cleanupClicks = addListener(parentElement, 'click', (e) => {\n const { target } = e;\n\n if (!isElement(target)) return;\n\n const isPageButton = target.closest<HTMLElement>(getElementSelector('page-button'));\n if (!isPageButton) return;\n\n e.preventDefault();\n\n const targetPage = renderedButtons.get(isPageButton);\n if (!targetPage) return;\n\n list.currentPage.value = targetPage;\n });\n\n return () => {\n pageButtonsRunner.effect.stop();\n cleanupClicks();\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 const clicksCleanup = addListener(window, 'click', (e) => {\n const { target } = e;\n\n if (!isElement(target)) return;\n\n const nextButton = target.closest(getCMSElementSelector('pagination-next'));\n const previousButton = target.closest(getCMSElementSelector('pagination-previous'));\n\n const button = nextButton || previousButton;\n\n if (!button || getInstance(button) !== list.instance) return;\n\n e.preventDefault();\n\n const targetPage = nextButton ? list.currentPage.value + 1 : list.currentPage.value - 1;\n if (!targetPage) return;\n if (targetPage < 1) return;\n if (targetPage > list.totalPages.value) return;\n\n list.currentPage.value = targetPage;\n });\n\n return () => {\n buttonsRunner.effect.stop();\n clicksCleanup();\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 = (\n { listOrWrapper }: List,\n setting: 'pagesiblings' | 'pageboundary',\n) => {\n const rawValues = getAttribute(listOrWrapper, 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 {\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 selectElements.forEach((sliderReference) => initListSelect(list, sliderReference));\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 // Handle items\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", "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 slidersReferences.forEach((sliderReference) => initListSlider(list, sliderReference));\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", "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 { getAttribute } from '../utils/selectors';\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 = getAttribute(list.listElement, 'sortingclass');\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 {\n addListener,\n ARIA_ROLE_KEY,\n ARIA_ROLE_VALUES,\n ARIA_SORT_KEY,\n ARIA_SORT_VALUES,\n isNotEmpty,\n TABINDEX_KEY,\n} from '@adartem/adlib-utils';\nimport { computed, effect, ref } from '@vue/reactivity';\n\nimport type { List } from '../components/List';\nimport { getAttribute, hasAttributeValue } from '../utils/selectors';\nimport type { SortingDirection } from './types';\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\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 // 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 // Sort on click\n const clickCleanup = addListener(button, 'click', async (e) => {\n e.preventDefault();\n\n activeButton.value = button;\n currentDirection.value = getNextDirection(currentDirection.value, reverse);\n\n list.sorting.value = {\n fieldKey,\n direction: currentDirection.value,\n interacted: true,\n };\n });\n\n return [() => ariaSortRunner.effect.stop(), () => cssClassRunner.effect.stop(), clickCleanup];\n })\n .filter(isNotEmpty);\n\n return () => {\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 addListener,\n ARIA_HASPOPUP_KEY,\n ARIA_MULTISELECTABLE_KEY,\n ARIA_ROLE_KEY,\n ARIA_ROLE_VALUES,\n ARIA_SELECTED_KEY,\n closeDropdown,\n CURRENT_CSS_CLASS,\n DROPDOWN_CSS_CLASSES,\n type DropdownElement,\n type DropdownList,\n type DropdownToggle,\n isElement,\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 clickCleanup = addListener(dropdownList, 'click', async (e) => {\n e.preventDefault();\n\n const { target } = e;\n\n if (!isElement(target)) {\n return;\n }\n\n const optionElement = target.closest('a');\n if (!optionElement) return;\n\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 return () => {\n dropdownLabelCleanup?.();\n clickCleanup();\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 { 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 tabsReferences.forEach((sliderReference) => initListTab(list, sliderReference));\n};\n\n/**\n * Inits a list slider.\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"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["debounce", "self", "single", "result", "i", "score", "r", "a", "v", "getSettingAttributeName", "getSettingSelector", "getElementSelector", "getInstanceSelector", "queryElement", "queryAllElements", "getInstance", "getClosestElement", "getAttribute", "hasAttributeValue", "isString", "isString", "computed", "computed", "self", "hasOwnProperty", "readonly", "effect", "reactive", "cleanup", "import_just_debounce", "debounce", "condition", "filtersGroup", "Worker", "Worker", "import_just_debounce", "init", "debounce", "handleClearButtons", "debounce", "isArray", "tagKey", "tagData", "tagIsRendered", "shouldRender", "operator", "value", "debounce", "href", "import_just_debounce", "debounce", "item", "import_just_debounce", "key", "value", "debounce", "parentList"]
|
|
7
|
+
}
|