{"version":3,"file":"url_sync.DFt_UIwd.mjs","names":[],"sources":["https:/framerusercontent.com/modules/btKadHcwepCes5ME1dWi/1oPmQbILL9BfunIfeUb3/url_sync.js"],"sourcesContent":["const SEARCH_PARAM_BASE=\"search\";const SORT_PARAM_BASE=\"sort\";export function slugifyParamSegment(value){return(value||\"\").trim().toLowerCase().replace(/[^a-z0-9]+/g,\"-\").replace(/^-+|-+$/g,\"\");}export function buildURLParamKey(name,prefix=\"\"){const slug=slugifyParamSegment(name);const normalizedPrefix=slugifyParamSegment(prefix);if(!slug)return normalizedPrefix;if(!normalizedPrefix)return slug;return`${normalizedPrefix}-${slug}`;}export function getSearchParamKey(prefix=\"\"){return buildURLParamKey(SEARCH_PARAM_BASE,prefix);}export function getScopedSearchParamKey(searchFields=[],displayTitle=\"\",prefix=\"\"){const fieldKey=slugifyParamSegment(searchFields[0]||\"\");const titleKey=slugifyParamSegment(displayTitle||\"\");const scopedName=fieldKey||titleKey||SEARCH_PARAM_BASE;return buildURLParamKey(scopedName,prefix);}export function getSortParamKey(prefix=\"\"){return buildURLParamKey(SORT_PARAM_BASE,prefix);}export function getCurrentURLParams(){if(typeof window===\"undefined\")return new URLSearchParams;return new URLSearchParams(window.location.search);}export function readURLParam(paramKey,searchParams=getCurrentURLParams()){if(!paramKey)return null;return searchParams.get(paramKey);}export function readURLParamValues(paramKey,searchParams=getCurrentURLParams()){const rawValue=readURLParam(paramKey,searchParams);if(!rawValue)return[];const uniqueValues=new Set;rawValue.split(\",\").map(value=>decodeURIComponent(value).trim()).filter(Boolean).forEach(value=>uniqueValues.add(value));return Array.from(uniqueValues);}export function hasRelevantURLParams(prefix=\"\"){if(typeof window===\"undefined\")return false;const params=new URLSearchParams(window.location.search);const normalizedPrefix=slugifyParamSegment(prefix);const prefixedStart=normalizedPrefix?`${normalizedPrefix}-`:\"\";let isRelevant=false;params.forEach((_,key)=>{if(key===getSearchParamKey(prefix)||key===getSortParamKey(prefix)){isRelevant=true;return;}if(normalizedPrefix){if(key.startsWith(prefixedStart)){isRelevant=true;}return;}if(key!==\"cmsFilterDebug\"){isRelevant=true;}});return isRelevant;}function dedupeAndSortValues(values){return Array.from(new Set(values.map(value=>String(value).trim()).filter(Boolean))).sort((a,b)=>a.localeCompare(b));}function getSerializableFilterValues(filter){const rawValues=Array.isArray(filter.value)?filter.value:[filter.value];const valueTitles=filter.valueTitles||{};return rawValues.map(value=>{if(value===null||value===undefined)return\"\";const rawKey=String(value);const displayValue=valueTitles[rawKey];return(displayValue??rawKey).trim();}).filter(Boolean);}export function canSerializeFilterToURL(filter){const{type,operator,value}=filter;const supportedOperators=new Set([\"equals\",\"includes\"]);const supportedTypes=new Set([\"dropdown\",\"enum\",\"cms-enum\",\"single-ref\",\"multi-ref\"]);if(!type||!supportedTypes.has(type))return false;if(!operator||!supportedOperators.has(operator))return false;if(Array.isArray(value)){return value.every(entry=>typeof entry===\"string\"||typeof entry===\"number\");}return typeof value===\"string\"||typeof value===\"number\";}export function serializeStoreToURLState(state,prefix=\"\"){const params=new Map;const managedKeys=new Set;const filterBuckets=new Map;for(const filter of state?.filters||[]){const paramName=filter.urlParamName||filter.field||filter.displayTitle||\"\";const paramKey=buildURLParamKey(paramName,prefix);if(!paramKey)continue;managedKeys.add(paramKey);if(!canSerializeFilterToURL(filter)){continue;}const signature=JSON.stringify({type:filter.type,operator:filter.operator});const existingBucket=filterBuckets.get(paramKey)||{values:[],signatures:new Set};existingBucket.signatures.add(signature);existingBucket.values.push(...getSerializableFilterValues(filter));filterBuckets.set(paramKey,existingBucket);}filterBuckets.forEach((bucket,paramKey)=>{if(bucket.signatures.size>1){return;}const values=dedupeAndSortValues(bucket.values);if(values.length===0)return;params.set(paramKey,values.join(\",\"));});managedKeys.add(getSearchParamKey(prefix));const activeSearchRules=(state?.searchRules||[]).filter(searchRule=>!!searchRule?.searchTerm?.trim());if(activeSearchRules.length===0){const legacySearchValue=state?.searchTerm||\"\";if(legacySearchValue.trim()){params.set(getSearchParamKey(prefix),legacySearchValue.trim());}}else{activeSearchRules.forEach(searchRule=>{const searchParamKey=getScopedSearchParamKey(searchRule.searchFields||[],searchRule.displayTitle||\"\",prefix);managedKeys.add(searchParamKey);params.set(searchParamKey,searchRule.searchTerm.trim());});}const sortParamKey=getSortParamKey(prefix);managedKeys.add(sortParamKey);const primarySort=state?.sort?.[0];if(primarySort?.field&&primarySort?.direction){params.set(sortParamKey,`${slugifyParamSegment(primarySort.field)}:${primarySort.direction}`);}return{params,managedKeys:Array.from(managedKeys)};}export function buildUpdatedURLSearchParams(currentParams,urlState,previousManagedKeys=[]){const nextParams=new URLSearchParams(currentParams.toString());const keysToClear=new Set([...previousManagedKeys,...urlState.managedKeys]);keysToClear.forEach(key=>{if(key)nextParams.delete(key);});urlState.params.forEach((value,key)=>{nextParams.set(key,value);});return nextParams;}export function updateBrowserURL(params){if(typeof window===\"undefined\")return;const url=new URL(window.location.href);const nextSearch=params.toString();const currentSearch=url.search.startsWith(\"?\")?url.search.slice(1):url.search;if(currentSearch===nextSearch)return;url.search=nextSearch;window.history.replaceState({},\"\",url.toString());}export function generateURLParams(state,prefix=\"\"){const serializedState=serializeStoreToURLState(state,prefix);const params=new URLSearchParams;serializedState.params.forEach((value,key)=>{params.set(key,value);});return params;}export function parseURLParams(searchParams,prefix=\"\",availableFields=new Map){const parsedState={searchTerm:\"\",filters:[],sort:undefined};const searchTerm=searchParams.get(getSearchParamKey(prefix))||\"\";if(searchTerm.trim()){parsedState.searchTerm=searchTerm.trim();}const sortValue=searchParams.get(getSortParamKey(prefix))||\"\";if(sortValue.includes(\":\")){const[field,direction]=sortValue.split(\":\");if(field&&(direction===\"asc\"||direction===\"desc\")){parsedState.sort=[{id:\"url-sort\",componentId:\"url-sort\",field,direction}];}}const filters=[];searchParams.forEach((value,key)=>{if(key===getSearchParamKey(prefix)||key===getSortParamKey(prefix)){return;}const normalizedPrefix=slugifyParamSegment(prefix);if(normalizedPrefix&&!key.startsWith(`${normalizedPrefix}-`)){return;}const rawField=normalizedPrefix?key.slice(`${normalizedPrefix}-`.length):key;const availableFieldEntry=Array.from(availableFields.entries()).find(([fieldName])=>slugifyParamSegment(fieldName)===rawField);const fieldName=availableFieldEntry?.[0]||rawField;const fieldType=availableFieldEntry?.[1]?.type||\"dropdown\";const values=value.split(\",\").map(entry=>entry.trim()).filter(Boolean);if(values.length===0)return;filters.push({id:`url-${fieldName}`,field:fieldName,displayTitle:fieldName,type:fieldType,operator:fieldType===\"multi-ref\"?\"includes\":\"equals\",value:values.length===1?values[0]:values,logic:\"Any\",builderLogic:\"Any\",componentId:\"url-sync\"});});parsedState.filters=filters;return parsedState;}export function buildAvailableFieldsMap(propertyControls){const fieldsMap=new Map;if(!propertyControls||typeof propertyControls!==\"object\"){return fieldsMap;}Object.entries(propertyControls).forEach(([key,control])=>{fieldsMap.set(control.title||key,{type:control.type||\"dropdown\",options:control.options});});return fieldsMap;}export function createDebouncedURLUpdate(delay=250){let timeoutId=null;return function(params){if(timeoutId){clearTimeout(timeoutId);}timeoutId=setTimeout(()=>{updateBrowserURL(params);timeoutId=null;},delay);};}export function hasURLParams(prefix=\"\"){return hasRelevantURLParams(prefix);}\nexport const __FramerMetadata__ = {\"exports\":{\"readURLParamValues\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"hasURLParams\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"updateBrowserURL\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getSearchParamKey\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"serializeStoreToURLState\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buildURLParamKey\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"slugifyParamSegment\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"canSerializeFilterToURL\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"readURLParam\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getScopedSearchParamKey\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"parseURLParams\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buildUpdatedURLSearchParams\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"generateURLParams\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buildAvailableFieldsMap\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getCurrentURLParams\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"hasRelevantURLParams\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getSortParamKey\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"createDebouncedURLUpdate\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./url_sync.map"],"mappings":"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"}