{"version":3,"file":"FrameWithImagePosition.CkSUO2kV.mjs","names":["e","React","useMemo","layout","RenderTarget","e","sortConfig","by","order","fieldName","hasMore"],"sources":["https:/framerusercontent.com/modules/DXJjHvYxw3KgBsib6RMp/ltH0RCfhOR1tifBXWZxm/filterUtils.js","https:/framerusercontent.com/modules/G0m84rGP1Qwz7OiyAKFo/MfkLl5zBuR51YCAIuzPf/filterHandlers.js","https:/framerusercontent.com/modules/8t1feSqyli62m50G0WWC/T1yWf44Q29Pw8MxnLtfl/collectionUtils.js","https:/framerusercontent.com/modules/KI1FDT8inKO4leKDCYXC/n2tuEnJe9b6vmWAFoQoh/filterParsers.js","https:/framerusercontent.com/modules/8M7l1Yu3meG3hHQ7ywoY/ZKHGXcd1zruXTRKPrCF5/sortingUtils.js","https:/framerusercontent.com/modules/giepmhE1P3vBnxMnPCVY/fiq09RHyJ8lIB5N1VaD8/fieldDiscoveryUtils.js","https:/framerusercontent.com/modules/Sg09mYGJaigbUS3E3zom/ex8YQaopIWSGMpHV698w/messageUtils.js","https:/framerusercontent.com/modules/xnmUlbbdBoIKLv1xXXLf/vhF23iC0Lxgmkdku7yv3/navigationUtils.js","https:/framerusercontent.com/modules/3jml9gWevFP3rQgd1tSW/ckEmR6azZzYKl8jVZXFb/FC_CatalogDisplay_Beta.js","https:/framerusercontent.com/modules/EkFwo4aSIElLCMzwBsSR/jjX7Qs5gz8rCEaVWOHXk/FrameWithImagePosition.js"],"sourcesContent":["/**\n * FILTER UTILITIES\n *\n * Common helper functions used across filtering logic\n *//**\n * Find a field ID by matching against common field names\n */export function findFieldIdByCommonNames(controls,possibleNames){if(!controls)return null;for(const[fieldId,field]of Object.entries(controls)){if(possibleNames.some(name=>field.title?.toLowerCase()===name.toLowerCase())){return fieldId;}}return null;}/**\n * Parse price values from CMS field (single value or range format)\n */export function parsePriceValue(priceValue){if(!priceValue||typeof priceValue!==\"string\")return{min:0,max:0};if(priceValue.includes(\" - \")){// Range format: \"19.99 - 20.99\"\nconst[minStr,maxStr]=priceValue.split(\" - \");return{min:parseFloat(minStr)||0,max:parseFloat(maxStr)||0};}else{// Single value format: \"50.00\"\nconst singlePrice=parseFloat(priceValue)||0;return{min:singlePrice,max:singlePrice};}}/**\n * Parse variant data structure for filtering\n */export function parseVariantData(variantData,variantName,variantValues){if(!variantData||!variantName||!variantValues||variantValues.length===0){return false;}try{// Split by '••' to separate variant definitions from combined variants\nconst parts=variantData.split(\"••\");// Parse variant definitions (e.g., [Logo: Muted, Bold • 10103513383206])\nconst variantDefinitions=parts[0]||\"\";const variantRegex=new RegExp(`\\\\[${variantName}:\\\\s*([^\\\\]]+)\\\\s*•\\\\s*[^\\\\]]+\\\\]`,\"i\");const match=variantDefinitions.match(variantRegex);if(match){// Extract the variant values (e.g., \"Muted, Bold\")\nconst availableValues=match[1].split(\",\").map(v=>v.trim().toLowerCase());// Check if any of the filter values match the available values\nconst hasMatch=variantValues.some(filterValue=>availableValues.includes(filterValue.toLowerCase().trim()));// console.log(`    🔍 Variant parsing: variantName=\"${variantName}\", availableValues=[${availableValues.join(\", \")}], filterValues=[${variantValues.join(\", \")}], hasMatch=${hasMatch}`);\nreturn hasMatch;}// console.log(`    🔍 Variant parsing: no variant definition found for \"${variantName}\"`);\nreturn false;}catch(error){console.error(`    ❌ Error parsing variant data:`,error);return false;}}/**\n * Discover field ID for a given field name\n */export function discoverFieldId(propertyControls,targetFieldName){if(!propertyControls||!targetFieldName)return null;for(const[fieldId,field]of Object.entries(propertyControls)){if(field.title?.toLowerCase()===targetFieldName.toLowerCase()){return fieldId;}}return null;}/**\n * Discover field ID for flexible field matching (partial matches)\n */export function discoverFieldIdFlexible(propertyControls,filterKey){if(!propertyControls||!filterKey)return null;const filterKeyLower=filterKey.toLowerCase();// Try exact match first\nfor(const[fieldId,field]of Object.entries(propertyControls)){const fieldTitle=field.title?.toLowerCase();if(fieldTitle===filterKeyLower){return fieldId;}}// Try partial match\nfor(const[fieldId,field]of Object.entries(propertyControls)){const fieldTitle=field.title?.toLowerCase();if(fieldTitle?.includes(filterKeyLower)||filterKeyLower.includes(fieldTitle||\"\")){return fieldId;}}// Try common patterns for Boolean filters\nconst commonPatterns=[\"subscription\",\"subscriptions\",\"status\",\"active\",\"enabled\",\"available\"];for(const pattern of commonPatterns){for(const[fieldId,field]of Object.entries(propertyControls)){const fieldTitle=field.title?.toLowerCase();if(fieldTitle?.includes(pattern)){return fieldId;}}}return null;}\nexport const __FramerMetadata__ = {\"exports\":{\"parsePriceValue\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"parseVariantData\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"findFieldIdByCommonNames\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"discoverFieldIdFlexible\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"discoverFieldId\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./filterUtils.map","/**\n * FILTER HANDLERS\n *\n * Logic for applying different types of filters\n */import{parseVariantData,parsePriceValue,findFieldIdByCommonNames}from\"https://framerusercontent.com/modules/DXJjHvYxw3KgBsib6RMp/ltH0RCfhOR1tifBXWZxm/filterUtils.js\";/**\n * Handle Boolean filter (field has data or is empty)\n */export function handleBooleanFilter(fieldValue,filterData){try{if(!filterData||typeof filterData.value!==\"boolean\"){console.warn(\"handleBooleanFilter: Invalid filterData or value not boolean:\",filterData);return false;}const hasData=fieldValue&&fieldValue.toString().trim()!==\"\";const result=hasData===filterData.value;// console.log(`    🔍 Boolean filter: field has data = ${hasData}, filter expects = ${filterData.value}`);\n// console.log(`    🔍 Boolean filter details: fieldValue = \"${fieldValue}\", isEmpty = ${!hasData}`);\nreturn result;}catch(error){console.error(\"Error in handleBooleanFilter:\",error,{fieldValue,filterData});return false;}}/**\n * Handle Unique filter (special cases like on_sale)\n */export function handleUniqueFilter(fieldValue,filterData){try{if(!filterData){console.warn(\"handleUniqueFilter: Invalid filterData:\",filterData);return false;}if(filterData.targetField===\"Compare Price\"){const hasComparePrice=Boolean(fieldValue&&fieldValue.toString().trim());const result=hasComparePrice===filterData.value;// console.log(`    🔍 Unique filter (Compare Price): fieldValue = \"${fieldValue}\", hasComparePrice = ${hasComparePrice}, filter expects = ${filterData.value}`);\nreturn result;}return false;}catch(error){console.error(\"Error in handleUniqueFilter:\",error,{fieldValue,filterData});return false;}}/**\n * Handle Variant filter with enhanced color support\n */export function handleVariantFilter(fieldValue,filterData,propertyControls,item){try{if(!filterData||!filterData.values||!Array.isArray(filterData.values)){console.warn(\"handleVariantFilter: Invalid filterData or values not an array:\",filterData);return false;}if(filterData.targetField===\"Variants\"){// console.log(`    🔍 Variant filter: parsing data for ${filterData.variantName}`);\n// console.log(`    🔍 Variant data:`, fieldValue);\nconst variantMatch=parseVariantData(fieldValue,filterData.variantName,filterData.values);// Enhanced color variant filtering\nlet customColorMatch=false;if(filterData.variantName&&filterData.variantName.toLowerCase()===\"color\"){const customColorFieldId=Object.entries(propertyControls||{}).find(([fieldId,field])=>field.title.toLowerCase().includes(\"custom.fc_color\")||field.title.toLowerCase().includes(\"fc_color\"))?.[0];if(customColorFieldId){const customColorValue=item[customColorFieldId];// console.log(`    🔍 Enhanced variant filtering: checking custom.fc_color field for Color variant`);\n// console.log(`    🔍 Custom color field ID: ${customColorFieldId}, value: \"${customColorValue}\"`);\nif(customColorValue&&typeof customColorValue===\"string\"){customColorMatch=filterData.values.some(filterColor=>customColorValue.toLowerCase().includes(filterColor.toLowerCase()));// console.log(`    🔍 Custom color check: custom.fc_color = \"${customColorValue}\", filter colors = [${filterData.values.join(\", \")}], customColorMatch = ${customColorMatch}`);\n}}else{// console.log(`    🔍 No custom.fc_color field found in CMS for Color variant`);\n}}const result=variantMatch||customColorMatch;// console.log(`    🔍 Variant filter (${filterData.variantName}): fieldValue = \"${fieldValue}\", variantMatch = ${variantMatch}, customColorMatch = ${customColorMatch}, final match = ${result}, filter expects = [${filterData.values.join(\", \")}]`);\nreturn result;}return false;}catch(error){console.error(\"Error in handleVariantFilter:\",error,{fieldValue,filterData,propertyControls,item});return false;}}/**\n * Handle Price filter (single value or range)\n */export function handlePriceFilter(fieldValue,filterData){try{if(!filterData||!filterData.values||!Array.isArray(filterData.values)){console.warn(\"handlePriceFilter: Invalid filterData or values not an array:\",filterData);return false;}let priceMatch=false;if(fieldValue&&typeof fieldValue===\"string\"){const{min:itemMinPrice,max:itemMaxPrice}=parsePriceValue(fieldValue);// Check if item matches any of the price ranges\npriceMatch=filterData.values.some(range=>{if(range.priceType===\"Under\"){// Under price: item max price must be <= range max\nreturn itemMaxPrice<=range.max;}else if(range.priceType===\"Over\"){// Over price: item min price must be >= range min\nreturn itemMinPrice>=range.min;}else{// Regular range: item price range must overlap with filter range\nreturn itemMinPrice<=range.max&&itemMaxPrice>=range.min;}});// console.log(`    🔍 Price filter: item price = \"${fieldValue}\" (${itemMinPrice}-${itemMaxPrice}), filter ranges = [${filterData.values.map((r: any) => r.priceType === 'Range' ? `${r.min}-${r.max}` : r.priceType === 'Under' ? `Under ${r.max}` : `Over ${r.min}`).join(\", \")}], match = ${priceMatch}`);\n}return priceMatch;}catch(error){console.error(\"Error in handlePriceFilter:\",error,{fieldValue,filterData});return false;}}/**\n * Handle Regular filter (exact match after comma parsing)\n */export function handleRegularFilter(fieldValue,filterData){try{// console.log(`    🔍 REGULAR FILTER DEBUG START:`);\n// console.log(`    🔍 Raw fieldValue:`, fieldValue);\n// console.log(`    🔍 Raw filterData:`, filterData);\n// Safety check for filterData.values\nif(!filterData||!filterData.values||!Array.isArray(filterData.values)){console.warn(\"handleRegularFilter: Invalid filterData or values not an array:\",filterData);return false;}const fieldValues=fieldValue?fieldValue.toString().split(\",\").map(v=>v.trim().toLowerCase()):[];// console.log(`    🔍 Parsed fieldValues:`, fieldValues);\n// console.log(`    🔍 Filter values:`, filterData.values);\nconst result=filterData.values.some(urlValue=>fieldValues.some(fieldVal=>fieldVal===urlValue.toLowerCase().trim()));// console.log(`    🔍 Regular filter result: ${result}`);\n// console.log(`    🔍 REGULAR FILTER DEBUG END`);\nreturn result;}catch(error){console.error(\"Error in handleRegularFilter:\",error,{fieldValue,filterData});return false;}}/**\n * Handle Search filter (search multiple CMS fields)\n */export function handleSearchFilter(item,filterData,propertyControls){try{if(!filterData){console.warn(\"handleSearchFilter: Invalid filterData:\",filterData);return false;}const query=(filterData.query||\"\").toLowerCase();const searchFields=filterData.searchFields||[\"Title\"];if(!query)return true// No search query means no filtering\n;// Search through each specified field\nfor(const fieldName of searchFields){// Find the field ID for this field name using propertyControls\nconst fieldId=findFieldIdByCommonNames(propertyControls,[fieldName]);if(fieldId&&item[fieldId]){const fieldValue=item[fieldId];// Handle different field value types\nlet fieldValueStr=\"\";if(typeof fieldValue===\"string\"){fieldValueStr=fieldValue.toLowerCase();}else if(typeof fieldValue===\"object\"&&fieldValue!==null){// If it's an object, try to extract the text value\nif(fieldValue.text){fieldValueStr=fieldValue.text.toLowerCase();}else if(fieldValue.value){fieldValueStr=fieldValue.value.toLowerCase();}else if(fieldValue.title){fieldValueStr=fieldValue.title.toLowerCase();}else{// Fallback: try to stringify and extract meaningful text\nconst stringified=JSON.stringify(fieldValue);if(stringified.length<100){// Only use if it's not too long\nfieldValueStr=stringified.toLowerCase();}}}else{fieldValueStr=fieldValue?fieldValue.toString().toLowerCase():\"\";}if(fieldValueStr&&fieldValueStr.includes(query)){return true;}}}return false;}catch(error){console.error(\"Error in handleSearchFilter:\",error,{item,filterData,propertyControls});return false;}}\nexport const __FramerMetadata__ = {\"exports\":{\"handleRegularFilter\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"handlePriceFilter\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"handleUniqueFilter\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"handleVariantFilter\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"handleSearchFilter\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"handleBooleanFilter\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./filterHandlers.map","/**\n * COLLECTION UTILITIES\n *\n * Functions for extracting and processing CMS collection data\n *//**\n * Extract collection metadata from a Framer Collection List component\n */export function getCollectionData(collectionList){// console.log(\"🔍 getCollectionData called with:\", collectionList);\n// STEP 1: FIND THE QUERY OBJECT\nlet queryParent=null;if(collectionList?.props?.query){queryParent=collectionList;}else if(collectionList?.props?.children?.props?.query){queryParent=collectionList.props.children;}else if(collectionList?.props?.children?.props?.children?.props?.query){queryParent=collectionList.props.children.props.children;}const query=queryParent?.props?.query;// console.log(\"📋 Query found:\", query);\n// STEP 2: EXTRACT COLLECTION METADATA\nconst from=query?.from;let collections=[];if(from){if(from.type===\"Collection\"){collections.push(from);}else if(from.type===\"LeftJoin\"){processJoin(from.left,collections);processJoin(from.right,collections);}}// console.log(\"📚 Collections found:\", collections);\n// STEP 3: FIND THE RENDER FUNCTION\nlet childrenFunction=null;if(collectionList){const clpc=collectionList.props?.children;if(typeof clpc==\"function\"){childrenFunction=clpc;}else if(typeof clpc?.props?.children==\"function\"){childrenFunction=clpc.props.children;}else if(typeof clpc?.props?.children?.props?.children==\"function\"){childrenFunction=clpc.props.children.props.children;}}// console.log(\"🎭 Children function found:\", typeof childrenFunction);\nreturn{query,collections,childrenFunction};}/**\n * Recursively process joined collections\n */function processJoin(join,collections){if(join&&typeof join===\"object\"){if(join.type===\"Collection\"){collections.push(join);}else if(join.type===\"LeftJoin\"){processJoin(join.left,collections);processJoin(join.right,collections);}}}/**\n * Check if component is in canvas mode and handle accordingly\n */export function handleCanvasMode(collectionList){if(typeof window===\"undefined\"||typeof RenderTarget===\"undefined\"){return{shouldContinue:true};}if(RenderTarget.current()===RenderTarget.canvas){// console.log(\"🎨 Canvas mode - previewing filtered content\");\nif(!collectionList){return{shouldContinue:false,fallbackComponent:{type:\"error\",text:\"Connect a Collection List\"}};}// In canvas mode, try to extract data but don't fail if it's not ready\ntry{const{query,collections,childrenFunction}=getCollectionData(collectionList);if(query&&collections&&childrenFunction){// console.log(\"🎨 Canvas mode - collection data ready, proceeding with preview\");\nreturn{shouldContinue:true};}else{// console.log(\"🎨 Canvas mode - collection data not ready, showing original component\");\nreturn{shouldContinue:false,fallbackComponent:collectionList};}}catch(error){// console.log(\"🎨 Canvas mode - error extracting collection data, showing original component:\", error);\nreturn{shouldContinue:false,fallbackComponent:collectionList};}}return{shouldContinue:true};}\nexport const __FramerMetadata__ = {\"exports\":{\"getCollectionData\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"handleCanvasMode\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./collectionUtils.map","/**\n * FILTER PARSERS\n *\n * Functions for parsing URL parameters and creating filter configurations\n *//**\n * Parse URL parameters into filter configuration\n */export function parseUrlFilters(urlParams){const urlFilters={};let hasUrlFilters=false;for(const[urlParam,value]of urlParams.entries()){if(value){// 🔧 FIXED: Only convert underscores to spaces for known filter types that need it\n// This prevents product_type -> product+type duplication while preserving compatibility\nlet fieldName=urlParam;if(urlParam===\"on_sale\"){fieldName=\"on sale\";}else if(urlParam===\"in_stock\"){fieldName=\"in stock\";}else if(urlParam===\"bundle\"){fieldName=\"bundle\";}else if(urlParam===\"subscription\"){fieldName=\"subscription\";}else if(urlParam.startsWith(\"variant_\")){// Keep variant_ parameters as-is for now\nfieldName=urlParam;}else{// For other parameters, keep original format to prevent encoding issues\nfieldName=urlParam;}// Skip sort parameter here; handled separately in sorting logic\nif(urlParam===\"sort\"){continue;}// Handle Search filter (Title contains)\nif(urlParam===\"search\"){const queryRaw=value||\"\";const query=decodeURIComponent(queryRaw).replace(/\\+/g,\" \").trim();if(query){urlFilters[\"search\"]={active:true,type:\"search\",query:query,targetField:\"Title\"};hasUrlFilters=true;// console.log(`🔍 Search Filter: Title contains \"${query}\"`);\n// console.log(`🔍 Search Filter created:`, urlFilters['search']);\n}}else if(urlParam===\"price\"||urlParam===\"price_min\"||urlParam===\"price_max\"){let priceRanges=[];if(urlParam===\"price\"){// Regular price ranges: price=10-50,25-75\nconst ranges=value.split(\",\").filter(Boolean);priceRanges=ranges.map(range=>{const[min,max]=range.split(\"-\").map(Number);return{min,max,priceType:\"Range\"};});}else if(urlParam===\"price_max\"){// Under prices: price_max=100,200\nconst maxValues=value.split(\",\").filter(Boolean).map(Number);priceRanges=maxValues.map(max=>({min:null,max,priceType:\"Under\"}));}else if(urlParam===\"price_min\"){// Over prices: price_min=50,75\nconst minValues=value.split(\",\").filter(Boolean).map(Number);priceRanges=minValues.map(min=>({min,max:null,priceType:\"Over\"}));}urlFilters[\"price\"]={active:true,type:\"price\",values:priceRanges,urlParam:urlParam};hasUrlFilters=true;// console.log(`🔍 Price Filter: [${priceRanges.map(r => r.priceType === 'Range' ? `${r.min}-${r.max}` : r.priceType === 'Under' ? `Under ${r.max}` : `Over ${r.min}`).join(\", \")}]`);\n// console.log(`🔍 Price Filter created:`, urlFilters['price']);\n}else if(urlParam.startsWith(\"variant_\")){const variantName=urlParam.replace(\"variant_\",\"\");const variantValues=value.split(\",\").filter(Boolean);const variantKey=`variant_${variantName}`;urlFilters[variantKey]={active:true,type:\"variant\",variantName:variantName,values:variantValues,urlParam:urlParam,targetField:\"Variants\"};hasUrlFilters=true;// console.log(`🔍 Variant Filter ${variantName}: [${variantValues.join(\", \")}] (OR logic within variant)`);\n// console.log(`🔍 Variant Filter created:`, urlFilters[variantKey]);\n}else if(fieldName===\"on sale\"){urlFilters[fieldName]={active:true,type:\"unique\",value:value===\"true\",urlParam:urlParam,targetField:\"Compare Price\"};hasUrlFilters=true;// console.log(`🔍 Unique Filter ${fieldName}: ${value === 'true' ? 'has compare price' : 'no compare price'}`);\n}else if(value===\"true\"||value===\"false\"){urlFilters[fieldName]={active:true,type:\"boolean\",value:value===\"true\",urlParam:urlParam,fieldName:fieldName,isFlexible:true};hasUrlFilters=true;// console.log(`🔍 Boolean Filter ${fieldName}: ${value === 'true' ? 'has data' : 'empty'}`);\n}else{const values=value.split(\",\").filter(Boolean);urlFilters[fieldName]={active:true,type:\"regular\",values:values,urlParam:urlParam};hasUrlFilters=true;// console.log(`🔍 Regular Filter ${fieldName}: [${values.join(\", \")}] (OR logic)`);\n}}}return{urlFilters,hasUrlFilters};}/**\n * Create filter configuration from props and URL parameters\n */export function createFilterConfig(filterField,filterValue){if(typeof window===\"undefined\"){return{baseFilter:{field:filterField,value:filterValue},urlFilters:{},hasUrlFilters:false};}try{const urlParams=new URLSearchParams(window.location.search);const{urlFilters,hasUrlFilters}=parseUrlFilters(urlParams);// Always include base filter from props (required)\nconst baseFilter={field:filterField,value:filterValue};// Special handling for the base filter field if it appears in URL\nconst baseFieldUrlParam=Object.keys(urlFilters).find(fieldName=>{const normalizedFilterField=filterField.toLowerCase().replace(/\\s+/g,\"_\");const normalizedUrlField=fieldName.toLowerCase().replace(/\\s+/g,\"_\");return normalizedUrlField===normalizedFilterField;});if(baseFieldUrlParam){const baseFieldValue=urlParams.get(baseFieldUrlParam);if(baseFieldValue){if(baseFieldValue===\"true\"||baseFieldValue===\"false\"){// console.log(`🔍 Base field ${filterField} also in URL: ${baseFieldValue} (Boolean filter)`);\n}else{const values=baseFieldValue.split(\",\").filter(Boolean);// console.log(`🔍 Base field ${filterField} also in URL: [${values.join(\", \")}]`);\n}// console.log(`🔍 Will combine with prop value \"${filterValue}\" for OR logic within same field`);\n}}// console.log(`🔍 Filter Configuration:`, {\n//     baseFilter,\n//     urlFilters,\n//     hasUrlFilters,\n//     totalFilters: Object.keys(urlFilters).length + 1\n// });\nreturn{baseFilter,urlFilters,hasUrlFilters};}catch(error){console.error(\"❌ Error parsing URL filters:\",error);return{baseFilter:{field:filterField,value:filterValue},urlFilters:{},hasUrlFilters:false};}}\nexport const __FramerMetadata__ = {\"exports\":{\"parseUrlFilters\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"createFilterConfig\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./filterParsers.map","/**\n * SORTING UTILITIES\n *\n * Functions for sorting CMS data based on various criteria\n */import{findFieldIdByCommonNames,parsePriceValue}from\"https://framerusercontent.com/modules/DXJjHvYxw3KgBsib6RMp/ltH0RCfhOR1tifBXWZxm/filterUtils.js\";/**\n * Sort data based on sort parameter and CMS field controls\n */export function sortData(dataToSort,sortParam,controls){console.log(\"🚨 [sortData] FUNCTION ENTRY - This should always appear!\");console.log(\"🚨 [sortData] Parameters:\",{sortParam,dataLength:dataToSort?.length,hasControls:!!controls});try{console.log(\"🔍 [sortData] Called with:\",{sortParam,dataLength:dataToSort?.length,hasControls:!!controls});if(!sortParam||sortParam===\"relevance\"){console.log(\"🔍 [sortData] Returning original data (no sort or relevance)\");return dataToSort;}// Helper to resolve custom field names (underscores -> spaces)\nconst resolveCustomFieldId=raw=>{const fieldTitle=raw.replace(/_/g,\" \");// Try exact match first\nlet id=findFieldIdByCommonNames(controls,[fieldTitle]);if(id)return id;// Try case-insensitive contains match\nfor(const[fieldId,field]of Object.entries(controls)){if(field.title?.toLowerCase()===fieldTitle.toLowerCase())return fieldId;}return null;};// Title sorting\nif(sortParam===\"title_asc\"){const titleFieldId=findFieldIdByCommonNames(controls,[\"Title\",\"title\",\"Name\",\"name\"]);console.log(\"🔍 [sortData] Title ASC - fieldId:\",titleFieldId,\"controls:\",Object.keys(controls||{}));if(!titleFieldId){console.log(\"🔍 [sortData] No title field found, returning original data\");return dataToSort;}const sorted=dataToSort.sort((a,b)=>(a[titleFieldId]||\"\").toString().localeCompare((b[titleFieldId]||\"\").toString()));console.log(\"🔍 [sortData] Title ASC sorted:\",sorted.slice(0,3).map(item=>item[titleFieldId]));return sorted;}if(sortParam===\"title_desc\"){const titleFieldId=findFieldIdByCommonNames(controls,[\"Title\",\"title\",\"Name\",\"name\"]);console.log(\"🔍 [sortData] Title DESC - fieldId:\",titleFieldId,\"controls:\",Object.keys(controls||{}));if(!titleFieldId){console.log(\"🔍 [sortData] No title field found, returning original data\");return dataToSort;}const sorted=dataToSort.sort((a,b)=>(b[titleFieldId]||\"\").toString().localeCompare((a[titleFieldId]||\"\").toString()));console.log(\"🔍 [sortData] Title DESC sorted:\",sorted.slice(0,3).map(item=>item[titleFieldId]));return sorted;}// Price sorting\nif(sortParam===\"price_asc\"){const priceFieldId=findFieldIdByCommonNames(controls,[\"Price\",\"price\"]);if(!priceFieldId)return dataToSort;return dataToSort.sort((a,b)=>parsePriceValue(a[priceFieldId]).min-parsePriceValue(b[priceFieldId]).min);}if(sortParam===\"price_desc\"){const priceFieldId=findFieldIdByCommonNames(controls,[\"Price\",\"price\"]);if(!priceFieldId)return dataToSort;return dataToSort.sort((a,b)=>parsePriceValue(b[priceFieldId]).min-parsePriceValue(a[priceFieldId]).min);}// Newest sorting (by Product ID)\nif(sortParam===\"newest\"){const idFieldId=findFieldIdByCommonNames(controls,[\"Product ID\",\"product id\",\"ID\",\"id\"]);if(!idFieldId)return dataToSort;return dataToSort.sort((a,b)=>(parseInt(b[idFieldId])||0)-(parseInt(a[idFieldId])||0));}// Custom field sorting\nif(sortParam.endsWith(\"_asc\")){const raw=sortParam.slice(0,-4);const fieldId=resolveCustomFieldId(raw);if(!fieldId)return dataToSort;return dataToSort.sort((a,b)=>(a[fieldId]||\"\").toString().localeCompare((b[fieldId]||\"\").toString()));}if(sortParam.endsWith(\"_desc\")){const raw=sortParam.slice(0,-5);const fieldId=resolveCustomFieldId(raw);if(!fieldId)return dataToSort;return dataToSort.sort((a,b)=>(b[fieldId]||\"\").toString().localeCompare((a[fieldId]||\"\").toString()));}return dataToSort;}catch(error){console.error(\"❌ Error in sorting logic:\",error);console.error(\"❌ Error details:\",{sortParam,dataLength:dataToSort?.length,hasControls:!!controls});return dataToSort;}}\nexport const __FramerMetadata__ = {\"exports\":{\"sortData\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./sortingUtils.map","/**\n * FIELD DISCOVERY UTILITIES\n *\n * Comprehensive field discovery logic for different filter types\n */import{discoverFieldId,discoverFieldIdFlexible}from\"https://framerusercontent.com/modules/DXJjHvYxw3KgBsib6RMp/ltH0RCfhOR1tifBXWZxm/filterUtils.js\";/**\n * Discover field ID for any filter type with comprehensive logic\n */export function discoverFieldIdForFilter(propertyControls,filterKey,filterData){if(!propertyControls||!filterKey||!filterData){return null;}// 🔧 FIXED: Convert underscores to spaces for field discovery\n// URL parameters use underscores (product_type) but CMS fields use spaces (Product Type)\nconst fieldNameForDiscovery=filterKey.replace(/_/g,\" \");// Debug logs removed to prevent excessive logging during search operations\nlet urlFilterFieldId=null;switch(filterData.type){case\"boolean\":if(filterData.isFlexible){// For flexible Boolean filters, try to find a field with similar name\nurlFilterFieldId=discoverFieldIdFlexible(propertyControls,filterData.fieldName);// Boolean field discovery completed\n}else{urlFilterFieldId=discoverFieldId(propertyControls,fieldNameForDiscovery);}break;case\"unique\":// For unique filters (like on_sale), find the target field specified in the filter\nurlFilterFieldId=discoverFieldId(propertyControls,filterData.targetField);break;case\"search\":// For search, find the Title field\nurlFilterFieldId=discoverFieldId(propertyControls,\"Title\");break;case\"variant\":// For variant filters, find the target field specified in the filter\nurlFilterFieldId=discoverFieldId(propertyControls,filterData.targetField);break;case\"price\":// For price filters, find the \"Price\" CMS field\nurlFilterFieldId=discoverFieldId(propertyControls,\"Price\");break;default:// Regular field matching for non-special filters\nurlFilterFieldId=discoverFieldId(propertyControls,fieldNameForDiscovery);// 🔧 FIXED: Enhanced fallback mappings for plural/singular field compatibility\nif(!urlFilterFieldId){if(filterKey===\"collection\"){// Try \"Collections\" (plural) as fallback for \"Collection\" (singular)\nconst collectionsFieldId=discoverFieldId(propertyControls,\"Collections\");if(collectionsFieldId){urlFilterFieldId=collectionsFieldId;const field=propertyControls[urlFilterFieldId];// Fallback field found\n}else{// Try \"Collection\" (singular) as another fallback\nconst collectionFieldId=discoverFieldId(propertyControls,\"Collection\");if(collectionFieldId){urlFilterFieldId=collectionFieldId;const field=propertyControls[urlFilterFieldId];// Fallback field found\n}}}else if(filterKey===\"product_tag\"){// Try \"Product Tags\" (plural) as fallback for \"Product Tag\" (singular)\nconst productTagsFieldId=discoverFieldId(propertyControls,\"Product Tags\");if(productTagsFieldId){urlFilterFieldId=productTagsFieldId;const field=propertyControls[urlFilterFieldId];// Fallback field found\n}else{// Try \"Product Tag\" (singular) as another fallback\nconst productTagFieldId=discoverFieldId(propertyControls,\"Product Tag\");if(productTagFieldId){urlFilterFieldId=productTagFieldId;const field=propertyControls[urlFilterFieldId];// Fallback field found\n}}}else if(filterKey===\"product_type\"){// Try \"Product Types\" (plural) as fallback for \"Product Type\" (singular)\nconst productTypesFieldId=discoverFieldId(propertyControls,\"Product Types\");if(productTypesFieldId){urlFilterFieldId=productTypesFieldId;const field=propertyControls[urlFilterFieldId];// Fallback field found\n}else{// Try \"Product Type\" (singular) as another fallback\nconst productTypeFieldId=discoverFieldId(propertyControls,\"Product Type\");if(productTypeFieldId){urlFilterFieldId=productTypeFieldId;const field=propertyControls[urlFilterFieldId];// Fallback field found\n}}}else if(filterKey===\"vendor\"){// Try \"Vendors\" (plural) as fallback for \"Vendor\" (singular)\nconst vendorsFieldId=discoverFieldId(propertyControls,\"Vendors\");if(vendorsFieldId){urlFilterFieldId=vendorsFieldId;const field=propertyControls[urlFilterFieldId];// Fallback field found\n}else{// Try \"Vendor\" (singular) as another fallback\nconst vendorFieldId=discoverFieldId(propertyControls,\"Vendor\");if(vendorFieldId){urlFilterFieldId=vendorFieldId;const field=propertyControls[urlFilterFieldId];// Fallback field found\n}}}else if(filterKey===\"tag\"){// Try \"Tags\" (plural) as fallback for \"Tag\" (singular)\nconst tagsFieldId=discoverFieldId(propertyControls,\"Tags\");if(tagsFieldId){urlFilterFieldId=tagsFieldId;const field=propertyControls[urlFilterFieldId];// Fallback field found\n}else{// Try \"Tag\" (singular) as another fallback\nconst tagFieldId=discoverFieldId(propertyControls,\"Tag\");if(tagFieldId){urlFilterFieldId=tagFieldId;const field=propertyControls[urlFilterFieldId];// Fallback field found\n}}}}break;}return urlFilterFieldId;}/**\n * Check if a filter should be skipped based on field discovery results\n */export function shouldSkipFilter(filterData,urlFilterFieldId){if(!urlFilterFieldId){if(filterData.type===\"boolean\"){console.log(`    💡 Boolean filter \"${filterData.fieldName}\" couldn't find a matching field - this filter will be ignored`);return true// Skip Boolean filters that can't find a field\n;}return true// Skip any filter that can't find a field\n;}return false;}\nexport const __FramerMetadata__ = {\"exports\":{\"shouldSkipFilter\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"discoverFieldIdForFilter\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./fieldDiscoveryUtils.map","/**\n * MESSAGE UTILITIES\n *\n * Functions for generating user-friendly messages based on filter results\n *//**\n * Generate message text for no results scenarios\n */export function generateNoResultsMessage(filterField,filterConfig,pageType){// No base filter specified\nif(!filterField||filterField.trim()===\"\"||!filterConfig.baseFilter.value||filterConfig.baseFilter.value.trim()===\"\"){if(Object.keys(filterConfig.urlFilters).length===0){return\"No items found in collection\";}else{const urlFiltersText=Object.entries(filterConfig.urlFilters).map(([key,data])=>formatFilterDescription(key,data)).join(\" AND \");return`No items found with URL filters: ${urlFiltersText}`;}}else{// Base filter specified\nconst baseFilterText=filterConfig.baseFilter.value?`${filterConfig.baseFilter.field} containing \"${filterConfig.baseFilter.value}\"`:`${filterConfig.baseFilter.field}`;if(Object.keys(filterConfig.urlFilters).length===0){return`No items found with ${baseFilterText}`;}else{const urlFiltersText=Object.entries(filterConfig.urlFilters).map(([key,data])=>formatFilterDescription(key,data)).join(\" AND \");return`No items found with ${baseFilterText} AND ${urlFiltersText}`;}}}/**\n * Format individual filter descriptions for display\n */function formatFilterDescription(key,data){switch(data.type){case\"boolean\":return`${key}: ${data.value?\"has data\":\"empty\"}`;case\"unique\":return`${key}: ${data.value?\"has compare price\":\"no compare price\"}`;case\"variant\":return`${key} (${data.variantName}): [${data.values.join(\", \")}]`;case\"search\":return`${key}: \"${data.query}\"`;case\"price\":const priceRanges=data.values.map(r=>r.priceType===\"Range\"?`${r.min}-${r.max}`:r.priceType===\"Under\"?`Under ${r.max}`:`Over ${r.min}`);return`${key}: [${priceRanges.join(\", \")}]`;default:return`${key}: [${data.values.join(\", \")}]`;}}/**\n * Generate favorites-specific message\n */export function generateFavoritesMessage(pageType,sortedDataLength){if(pageType===\"favorites\"&&sortedDataLength===0){return\"No favorite items found\";}return null;}\nexport const __FramerMetadata__ = {\"exports\":{\"generateNoResultsMessage\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"generateFavoritesMessage\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./messageUtils.map","// Navigation utilities shared across Catalog components\n// Centralizes link click tracking, popstate guards, and safe history updates\nfunction getGlobal(){if(typeof window===\"undefined\")return{};if(!window.__fcNav){window.__fcNav={getInProgress:()=>false};}return window.__fcNav;}export function isNavigationInProgress(){if(typeof window===\"undefined\")return false;try{const g=getGlobal();return typeof g.getInProgress===\"function\"?!!g.getInProgress():false;}catch{return false;}}// Install global listeners that detect real page navigations so app logic can stand down\nexport function setupNavigationTracking(timeoutMs=1500){if(typeof window===\"undefined\")return()=>{};let inProgress=false;const setInProgress=value=>{inProgress=value;};const g=getGlobal();g.getInProgress=()=>inProgress;const handleNavigationStart=()=>{try{console.log(\"[nav] navigation start\");}catch{}setInProgress(true);setTimeout(()=>setInProgress(false),Math.max(0,timeoutMs));};const handleTouchStart=()=>{window.__lastTouchTime=Date.now();};const handlePointerDown=e=>{const target=e.target;if(!target)return;const linkish=target.closest?target.closest(\"a, [data-framer-page-link], [data-framer-link], [role='link'], [href]\"):null;if(linkish){try{console.log(\"[nav] pointerdown on linkish\",linkish.tagName);}catch{}handleNavigationStart();}};const handleMouseDown=e=>{const target=e.target;if(!target)return;const linkish=target.closest?target.closest(\"a, [data-framer-page-link], [data-framer-link], [role='link'], [href]\"):null;if(linkish){try{console.log(\"[nav] mousedown on linkish\",linkish.tagName);}catch{}handleNavigationStart();}};const handleLinkClick=e=>{// Ignore synthetic click immediately after touch\nif(\"ontouchstart\"in window&&e.type===\"click\"){const last=window.__lastTouchTime;if(last&&Date.now()-last<500)return;}const target=e.target;if(!target)return;const link=target.closest?target.closest(\"a\"):null;const linkish=link||(target.closest?target.closest(\"[data-framer-page-link], [data-framer-link], [role='link'], [href]\"):null);if(!link&&!linkish)return;try{console.log(\"[nav] click target\",link?\"anchor\":\"linkish\");}catch{}// If it's an anchor, validate scheme; otherwise assume SPA navigation intent\nif(link){const href=link.getAttribute(\"href\")||\"\";const targetAttr=link.getAttribute(\"target\");const isSafeInternal=href&&!href.startsWith(\"#\")&&!href.startsWith(\"javascript:\")&&!href.startsWith(\"mailto:\")&&!href.startsWith(\"tel:\")&&(!targetAttr||targetAttr===\"_self\");if(isSafeInternal){try{console.log(\"[nav] anchor click internal\",href);}catch{}handleNavigationStart();}}else if(linkish){try{console.log(\"[nav] non-anchor linkish click\");}catch{}handleNavigationStart();}};window.addEventListener(\"beforeunload\",handleNavigationStart);// Capture phase to detect navigation intent before other handlers\ndocument.addEventListener(\"click\",handleLinkClick,true);document.addEventListener(\"pointerdown\",handlePointerDown,true);document.addEventListener(\"mousedown\",handleMouseDown,true);document.addEventListener(\"touchstart\",handleTouchStart,true);window.addEventListener(\"pagehide\",handleNavigationStart);document.addEventListener(\"visibilitychange\",()=>{if(document.visibilityState===\"hidden\"){try{console.log(\"[nav] vis hidden\");}catch{}handleNavigationStart();}});return()=>{try{window.removeEventListener(\"beforeunload\",handleNavigationStart);document.removeEventListener(\"click\",handleLinkClick,true);document.removeEventListener(\"touchstart\",handleTouchStart,true);document.removeEventListener(\"pointerdown\",handlePointerDown,true);document.removeEventListener(\"mousedown\",handleMouseDown,true);window.removeEventListener(\"pagehide\",handleNavigationStart);delete window.__lastTouchTime;}catch{}g.getInProgress=()=>false;};}export function safeHistoryUpdate(state,title,url,method=\"replaceState\"){if(typeof window===\"undefined\")return;if(isNavigationInProgress())return;try{const current=window.location.pathname+window.location.search;if(url&&url!==current){try{console.log(\"[nav] history\",method,url);}catch{}window.history[method](state,title,url);}}catch{// ignore\n}}export function onPopState(handler){if(typeof window===\"undefined\")return()=>{};const wrapped=e=>{if(isNavigationInProgress())return;try{try{console.log(\"[nav] popstate\");}catch{}handler(e);}catch{// ignore\n}};window.addEventListener(\"popstate\",wrapped);return()=>window.removeEventListener(\"popstate\",wrapped);}// Light throttle helper (edge-safe, no dependencies)\nexport function throttle(fn,wait){let last=0;let timer=null;return function(...args){const now=Date.now();const remaining=wait-(now-last);if(remaining<=0){last=now;if(timer){clearTimeout(timer);timer=null;}fn.apply(this,args);}else if(!timer){timer=setTimeout(()=>{last=Date.now();timer=null;fn.apply(this,args);},remaining);}};}\nexport const __FramerMetadata__ = {\"exports\":{\"isNavigationInProgress\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HistoryMethod\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"safeHistoryUpdate\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"onPopState\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"setupNavigationTracking\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"throttle\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./navigationUtils.map","import{jsx as _jsx}from\"react/jsx-runtime\";import{ControlType,RenderTarget,addPropertyControls,useQueryData}from\"framer\";import{useMemo}from\"react\";import React from\"react\";// Import utility modules\nimport{findFieldIdByCommonNames,parseVariantData}from\"https://framerusercontent.com/modules/DXJjHvYxw3KgBsib6RMp/ltH0RCfhOR1tifBXWZxm/filterUtils.js\";import{handleBooleanFilter,handleUniqueFilter,handleVariantFilter,handlePriceFilter,handleRegularFilter,handleSearchFilter}from\"https://framerusercontent.com/modules/G0m84rGP1Qwz7OiyAKFo/MfkLl5zBuR51YCAIuzPf/filterHandlers.js\";import{getCollectionData}from\"https://framerusercontent.com/modules/8t1feSqyli62m50G0WWC/T1yWf44Q29Pw8MxnLtfl/collectionUtils.js\";import{createFilterConfig}from\"https://framerusercontent.com/modules/KI1FDT8inKO4leKDCYXC/n2tuEnJe9b6vmWAFoQoh/filterParsers.js\";import{sortData}from\"https://framerusercontent.com/modules/8M7l1Yu3meG3hHQ7ywoY/ZKHGXcd1zruXTRKPrCF5/sortingUtils.js\";import{discoverFieldIdForFilter,shouldSkipFilter}from\"https://framerusercontent.com/modules/giepmhE1P3vBnxMnPCVY/fiq09RHyJ8lIB5N1VaD8/fieldDiscoveryUtils.js\";import{generateNoResultsMessage,generateFavoritesMessage}from\"https://framerusercontent.com/modules/Sg09mYGJaigbUS3E3zom/ex8YQaopIWSGMpHV698w/messageUtils.js\";import{setupNavigationTracking,isNavigationInProgress,onPopState}from\"https://framerusercontent.com/modules/xnmUlbbdBoIKLv1xXXLf/vhF23iC0Lxgmkdku7yv3/navigationUtils.js\";/**\n * MAIN COMPONENT: FILTERED CMS COLLECTION DISPLAY\n *\n * This component connects to a Framer Collection List and filters the displayed\n * items based on a specific field value. It maintains the original design and\n * layout while only showing items that match the filter criteria.\n *\n * @param {Object} props - Component properties\n * @param {Array} props.collectionList - Array containing the Collection List component\n * @param {string} props.filterField - Name of the CMS field to filter by (defaults to \"Title\")\n * @param {string} props.filterValue - Value to filter by (no default)\n * @framerDisableUnlink\n */export default function FC_CatalogDisplay_v2(props){// console.log(\"🚀 FC_CatalogDisplay_v2 rendered with props:\", props);\n// console.log(\"🔍 Sort props:\", props.Sort);\n// EXTRACT PROPS\nconst{collectionList:collectionListProp,filterField=props.filterField||\"Title\",filterValue=props.filterValue||\"\",pageType=props.Favorites?.enable===\"yes\"?\"favorites\":\"default\",layout={}}=props;// DEBUG: Log all available props to see what we're working with (only in development)\nif(process.env.NODE_ENV===\"development\"){// Minimal prop logging in development only\nif(process.env.NODE_ENV===\"development\"&&!props.collectionList){console.log(\"🔍 Missing collection list for displayMode:\",props.displayMode);}}// Add transition state for smooth filtering\nconst[isTransitioning,setIsTransitioning]=React.useState(false);const[transitionTimeout,setTransitionTimeout]=React.useState(null);// 🔧 URL CHANGE TRIGGER - Force re-renders when URL changes\nconst[urlChangeTrigger,setUrlChangeTrigger]=React.useState(0);// 🔧 NEW: COMPLEX FILTER STACKING LOGIC\n// Parse URL parameters and implement proper filter stacking with OR/AND logic\nconst filterConfig=useMemo(()=>{// 🔧 HYDRATION FIX: Always use createFilterConfig, but it handles SSR internally\nreturn createFilterConfig(filterField,filterValue);},[filterField,filterValue,urlChangeTrigger]);// console.log(`🔍 Final filter config:`, filterConfig);\n// Log every time isTransitioning changes (only in development)\nReact.useEffect(()=>{if(process.env.NODE_ENV===\"development\"){// Transition state changed\n}},[isTransitioning]);// Function to handle smooth transitions during filtering\nconst triggerTransition=React.useCallback(()=>{console.log(\"🔄 triggerTransition called at\",Date.now());// 🔧 FIXED: Skip transitions if navigation is in progress\nconst navigationInProgress=isNavigationInProgress();if(navigationInProgress){return;}// Start transition\nsetIsTransitioning(true);// Clear any existing timeout using state updater pattern\nsetTransitionTimeout(prevTimeout=>{if(prevTimeout){clearTimeout(prevTimeout);}// End transition after 300ms (fade out + fade in)\nconst timeout=setTimeout(()=>{setIsTransitioning(false);},300);return timeout;});},[])// Empty deps - uses state updaters to avoid dependencies\n;// Choose the appropriate collection based on displayMode (like original component)\nconst collectionList=props.displayMode===\"Desktop\"?collectionListProp?.[0]:props.phoneInstance?.[0];// Silent collection selection (no logging needed)\n// Create layout styles early so we can apply them in canvas mode too\nlet layoutStyle={};if(props.layout){const layout=props.layout;// Add background and radius to all layout types\nif(layout.background){layoutStyle.backgroundColor=layout.background;}if(layout.radius){if(layout.radiusPerSide){layoutStyle.borderRadius=`${layout.radiusTopLeft}px ${layout.radiusTopRight}px ${layout.radiusBottomRight}px ${layout.radiusBottomLeft}px`;}else{layoutStyle.borderRadius=`${layout.radius}px`;}}switch(layout.type){case\"stack\":const isVertical=layout.direction===\"vertical\";layoutStyle={...layoutStyle,display:\"flex\",flexDirection:isVertical?\"column\":\"row\",flexWrap:layout.wrap?\"wrap\":\"nowrap\",alignItems:isVertical?layout.align:layout.alignH,justifyContent:layout.distribute,gap:layout.gap,padding:layout.paddingPerSide?`${layout.paddingTop}px ${layout.paddingRight}px ${layout.paddingBottom}px ${layout.paddingLeft}px`:`${layout.padding}px`,width:\"100%\",position:\"relative\"};break;case\"grid\":let gridTemplateColumns=\"\";if(layout.columns===\"auto\"){// Use auto-fill instead of auto-fit to maintain column structure\n// This ensures columns stay even when there are fewer items\ngridTemplateColumns=`repeat(auto-fill, minmax(max(${layout.gridWidth}px, calc((100% - ${layout.gap*(layout.maxColumns-1)}px) / ${layout.maxColumns})), 1fr))`;}else{gridTemplateColumns=`repeat(${layout.columnCount}, 1fr)`;}layoutStyle={...layoutStyle,display:\"grid\",gridTemplateColumns,justifyItems:layout.gridAlign,// Ensure grid maintains structure even with fewer items\ngridAutoFlow:\"row\",// Prevent grid from collapsing when there are fewer items\ngridAutoColumns:\"1fr\",gap:layout.gapY&&layout.gapY>0?`${layout.gapY}px ${layout.gap}px`:`${layout.gap}px`,padding:layout.paddingPerSide?`${layout.paddingTop}px ${layout.paddingRight}px ${layout.paddingBottom}px ${layout.paddingLeft}px`:`${layout.padding}px`,width:\"100%\",position:\"relative\"};break;}}// Handle canvas mode FIRST, before any state management (like original component)\nif(RenderTarget.current()===RenderTarget.canvas){// In canvas mode, show state components based on initialSearchState\nconst shouldShowCustomInitialState=props.Search?.enableSearch&&props.Search?.initialSearchState===\"custom\";const shouldShowEmptyState=props.Search?.enableSearch&&props.Search?.initialSearchState===\"none\";if(shouldShowCustomInitialState){// Show custom initial state in canvas\nconst initialStateInstance=props.displayMode===\"Desktop\"?props.CustomInitialState?.[0]:props.CustomInitialStatePhone?.[0];if(initialStateInstance){const styledInitialState=/*#__PURE__*/React.cloneElement(initialStateInstance,{style:{...initialStateInstance.props?.style||{},width:\"100%\",height:\"100%\"}});// Canvas mode - custom initial state\nreturn styledInitialState;}}else if(shouldShowEmptyState){// Show empty state in canvas\nconst emptyStateInstance=props.displayMode===\"Desktop\"?props.EmptyState?.[0]:props.EmptyStatePhone?.[0];if(emptyStateInstance){const styledEmptyState=/*#__PURE__*/React.cloneElement(emptyStateInstance,{style:{...emptyStateInstance.props?.style||{},width:\"100%\",height:\"100%\"}});// Canvas mode - empty state\nreturn styledEmptyState;}}// Default: show the main collection with layout\nif(collectionList){const debugStyle={...collectionList.props?.style||{},width:\"100%\",height:\"100%\",// DEBUG: Bright yellow background during transition\nbackgroundColor:isTransitioning?\"#FFFF00\":\"transparent\",transition:\"background-color 0.3s ease-in-out\",// ADD MORE VISIBLE DEBUG STYLES\nborder:isTransitioning?\"5px solid red\":\"none\",outline:isTransitioning?\"10px solid blue\":\"none\",position:\"relative\",zIndex:isTransitioning?9999:\"auto\"};const sizedInstance=/*#__PURE__*/React.cloneElement(collectionList,{style:debugStyle});const styledInstance=/*#__PURE__*/React.cloneElement(sizedInstance,{style:{...sizedInstance.props.style,...layoutStyle,// 🔧 FIXED: Preserve background color from layoutStyle in canvas mode\nbackgroundColor:layoutStyle.backgroundColor||(isTransitioning?\"#FFFF00\":\"transparent\"),// DEBUG: Super obvious styles for browser runtime testing\nborder:isTransitioning?\"15px solid red\":\"none\",outline:isTransitioning?\"20px solid blue\":\"none\",transition:\"all 0.3s ease-in-out\",position:\"relative\",zIndex:isTransitioning?9999:\"auto\",// Add more visible indicators\nboxShadow:isTransitioning?\"0 0 50px rgba(255, 0, 0, 0.8)\":\"none\",transform:isTransitioning?\"scale(1.02)\":\"scale(1)\"}});// Silent return\nreturn styledInstance;}else{// Fallback: show a message if no collection is connected for the selected displayMode\n// Canvas mode - missing collection\nreturn /*#__PURE__*/_jsx(Message,{text:`Connect CMS (${props.displayMode===\"Desktop\"?\"L\":\"S\"}) collection`});}}// Add pagination state - initialize consistently for SSR\nconst[currentPage,setCurrentPage]=React.useState(1);const[hasMore,setHasMore]=React.useState(false);const itemsPerPage=props.Pagination?.items||12;// ⭐ FAVORITES STATE (only runs in runtime mode)\nconst[favorites,setFavorites]=React.useState([]);// 🔧 SEARCH STATE - Initialize consistently for SSR\nconst[searchConfig,setSearchConfig]=React.useState(()=>{// Only initialize search state if search is enabled\nif(!props.Search?.enableSearch){return{term:\"\",fields:[\"title\",\"productType\",\"tags\",\"collections\",\"vendor\"],active:false};}return{term:\"\",fields:props.Search?.searchFields||[\"title\",\"productType\",\"tags\",\"collections\",\"vendor\"],active:false};});// 🔧 SORT STATE - Initialize consistently for SSR\nconst[sortConfig,setSortConfig]=React.useState(()=>{return{type:\"relevancy\",sortBy:\"relevancy\",sortDirection:null};});// 🔧 HYDRATION FIX: Sync URL parameters after component mounts (client-side only)\nReact.useEffect(()=>{if(typeof window===\"undefined\")return;// Sync URL parameters after hydration\nconst urlParams=new URLSearchParams(window.location.search);// Sync search parameter\nif(props.Search?.enableSearch){const searchParam=urlParams.get(\"search\");if(searchParam&&searchParam!==searchConfig.term){setSearchConfig(prev=>({...prev,term:searchParam,active:true}));}}// Sync sort parameter\nconst sortParam=urlParams.get(\"sort\");if(sortParam){let newSortConfig={type:\"relevancy\",sortBy:\"relevancy\",sortDirection:null};switch(sortParam){case\"title_asc\":newSortConfig={type:\"name\",sortBy:\"name\",sortDirection:\"aToZ\"};break;case\"title_desc\":newSortConfig={type:\"name\",sortBy:\"name\",sortDirection:\"zToA\"};break;case\"price_asc\":newSortConfig={type:\"price\",sortBy:\"price\",sortDirection:\"lowToHigh\"};break;case\"price_desc\":newSortConfig={type:\"price\",sortBy:\"price\",sortDirection:\"highToLow\"};break;case\"newest\":newSortConfig={type:\"created\",sortBy:\"created\",sortDirection:\"newest\"};break;case\"best_selling\":newSortConfig={type:\"best-selling\",sortBy:\"best-selling\",sortDirection:null};break;}if(newSortConfig.type!==sortConfig.type){setSortConfig(newSortConfig);}}// Sync pagination parameter\nif(props.Pagination?.enable){const pageParam=urlParams.get(\"page\");const newPage=pageParam?parseInt(pageParam,10):1;if(newPage!==currentPage&&newPage>0){setCurrentPage(newPage);}}},[])// Only run once after mount\n;// 🔧 HYDRATION FIX: Apply URL-based filtering and sorting after hydration\nReact.useEffect(()=>{if(typeof window===\"undefined\")return;// Always trigger filter recalculation after hydration to ensure URL parameters are applied\n// This ensures that any URL parameters (filters, search, sort) are properly processed\nsetUrlChangeTrigger(prev=>prev+1);},[])// Only run once after mount\n;React.useEffect(()=>{if(typeof window===\"undefined\")return;try{const stored=JSON.parse(localStorage.getItem(\"favorites\")||\"[]\");if(Array.isArray(stored))setFavorites(stored.map(String));// Favorites loaded from localStorage\n}catch(error){console.error(`⭐ Error loading favorites:`,error);}const handler=e=>{try{const newFavs=e?.detail?.favorites;if(Array.isArray(newFavs)){setFavorites(newFavs.map(String));// Favorites updated via event\n}}catch(error){console.error(`⭐ Error handling favorites event:`,error);}};document.addEventListener(\"favorites-updated\",handler);return()=>document.removeEventListener(\"favorites-updated\",handler);},[]);// Handle pagination URL changes and events\nReact.useEffect(()=>{if(typeof window===\"undefined\"||!props.Pagination?.enable)return;const handlePageUrlChange=()=>{const urlParams=new URLSearchParams(window.location.search);const pageParam=urlParams.get(\"page\");const newPage=pageParam?parseInt(pageParam):1;if(newPage!==currentPage){setCurrentPage(newPage);}};// Handle pagination button clicks\nconst handlePaginationEvent=event=>{if(event.detail&&event.detail.page){setCurrentPage(event.detail.page);}};// Listen for popstate events (browser back/forward)\nconst offPop_page=onPopState(handlePageUrlChange);// Listen for pagination button events\ndocument.addEventListener(\"product-pagination-change\",handlePaginationEvent);// Initial check\nhandlePageUrlChange();return()=>{offPop_page();document.removeEventListener(\"product-pagination-change\",handlePaginationEvent);};},[props.Pagination?.enable]);// Mirror CatalogDisplay behavior: force full reload on browser back/forward to avoid stuck states\n// Log popstate only (do not reload to avoid double-handling)\nReact.useEffect(()=>{if(typeof window===\"undefined\")return;const handlePop=e=>{try{console.log(\"[simple] popstate received\");}catch{}};window.addEventListener(\"popstate\",handlePop);return()=>window.removeEventListener(\"popstate\",handlePop);},[]);// 🔧 PAGINATION URL UPDATE - Update page parameter when currentPage changes\nReact.useEffect(()=>{if(typeof window===\"undefined\"||!props.Pagination?.enable)return;const url=new URL(window.location.href);const urlParams=new URLSearchParams(url.search);if(currentPage>1){urlParams.set(\"page\",currentPage.toString());}else{urlParams.delete(\"page\");}const newUrl=`${url.pathname}?${urlParams.toString()}`;if(newUrl!==window.location.pathname+window.location.search){try{window.history.pushState({page:currentPage},\"\",newUrl);}catch{}}},[currentPage,props.Pagination?.enable]);// 🔧 Global navigation tracking (shared utility)\nReact.useEffect(()=>{if(typeof window===\"undefined\")return;// Always enable navigation tracking (CatalogDisplay parity)\nconst teardown=setupNavigationTracking(1500);return()=>{try{teardown();}catch{}};},[]);// 🔧 DISABLED: URL STATE MANAGEMENT - This was causing infinite loops\n// The URL change listener below handles URL-to-state synchronization\n/*\n    React.useEffect(() => {\n        if (typeof window === \"undefined\") return;\n\n        const url = new URL(window.location.href);\n        const urlParams = new URLSearchParams(url.search);\n\n        // 🔧 FIXED: Only update URL if there are actual URL parameters (not internal filter objects)\n        // This prevents the [object Object] corruption issue\n        \n        if (filterConfig?.hasUrlFilters && filterConfig?.urlFilters && Object.keys(filterConfig.urlFilters).length > 0) {\n            // 🔧 FIXED: Check if URL already has price parameters to prevent duplication\n            const hasPriceParams = urlParams.has('price_min') || urlParams.has('price_max') || urlParams.has('price');\n            \n            Object.entries(filterConfig.urlFilters).forEach(([key, filter]: [string, any]) => {\n                // 🔧 FIXED: Skip setting price parameter if URL already has price-related params\n                if (key === 'price' && hasPriceParams) {\n                    return;\n                }\n                \n                if (filter?.active) {\n                    if (Array.isArray(filter.values) && filter.values.length > 0) {\n                        // 🔧 FIXED: Only add string values to URL, never objects\n                        const stringValues = filter.values\n                            .map((val: any) => {\n                                if (typeof val === 'string') return val;\n                                if (typeof val === 'number') return String(val);\n                                if (val && typeof val === 'object' && val.priceType) {\n                                    // Handle price range objects\n                                    if (val.priceType === 'Under' && val.max) return `0-${val.max}`;\n                                    if (val.priceType === 'Over' && val.min) return `${val.min}-999999`;\n                                    if (val.priceType === 'Range' && val.min && val.max) return `${val.min}-${val.max}`;\n                                }\n                                return null;\n                            })\n                            .filter((val: any) => val && val !== 'undefined' && val !== 'null');\n                        \n                        if (stringValues.length > 0) {\n                            urlParams.set(key, stringValues.join(','));\n                        }\n                    } else if (filter.value !== undefined && typeof filter.value !== 'object') {\n                        // Only set string/number values, skip objects\n                        urlParams.set(key, String(filter.value));\n                    }\n                } else {\n                    urlParams.delete(key);\n                }\n            });\n        }\n\n        // Update search parameter - only if search is enabled\n        if (props.Search?.enableSearch) {\n        if (searchConfig?.active && searchConfig?.term) {\n            urlParams.set(\"search\", searchConfig.term);\n        } else if (urlParams.has(\"search\")) {\n            urlParams.delete(\"search\");\n            }\n        }\n\n        // Update sort parameter\n        if (sortConfig?.type && sortConfig.type !== \"relevancy\") {\n            let sortParam = \"\";\n            if (sortConfig.type === \"name\") {\n                sortParam = sortConfig.sortDirection === \"aToZ\" ? \"title_asc\" : \"title_desc\";\n            } else if (sortConfig.type === \"price\") {\n                sortParam = sortConfig.sortDirection === \"lowToHigh\" ? \"price_asc\" : \"price_desc\";\n            } else if (sortConfig.type === \"created\") {\n                sortParam = \"newest\";\n            } else if (sortConfig.type === \"best-selling\") {\n                sortParam = \"best_selling\";\n            }\n            \n            if (sortParam) {\n                urlParams.set(\"sort\", sortParam);\n            }\n        } else if (urlParams.has(\"sort\")) {\n            urlParams.delete(\"sort\");\n        }\n\n        // Update page parameter\n        if (props.Pagination?.enable && currentPage > 1) {\n            urlParams.set(\"page\", currentPage.toString());\n        } else if (urlParams.has(\"page\")) {\n            urlParams.delete(\"page\");\n        }\n\n        // Update URL without triggering page reload\n        const newUrl = `${url.pathname}?${urlParams.toString()}`;\n        if (newUrl !== window.location.pathname + window.location.search) {\n            try {\n                window.history.replaceState(\n                    { \n                        filters: filterConfig?.urlFilters, \n                        search: searchConfig, \n                        sort: sortConfig,\n                        page: currentPage \n                    }, \n                    \"\", \n                    newUrl\n                );\n            } catch (error) {\n                console.error(\"Error updating URL:\", error);\n            }\n        }\n    }, [filterConfig?.urlFilters, searchConfig, sortConfig, currentPage, props.Pagination?.enable]);\n    */// 🔧 MINIMAL URL CHANGE LISTENER - Only for search functionality\nReact.useEffect(()=>{if(typeof window===\"undefined\")return;const handleUrlChange=event=>{try{console.log(\"[simple] handleUrlChange\",{eventType:event?.type,url:window.location.href});}catch{}// 🔧 FIXED: Skip URL change handling if navigation is in progress\nconst navigationInProgress=isNavigationInProgress();if(navigationInProgress){try{console.log(\"[simple] skip handleUrlChange: navigationInProgress\");}catch{}return;}const urlParams=new URLSearchParams(window.location.search);// Handle search parameter - only if search is enabled\nif(props.Search?.enableSearch){const searchParam=urlParams.get(\"search\");if(searchParam&&searchParam!==searchConfig?.term){setSearchConfig(prev=>({...prev,term:searchParam,active:true}));// Trigger transition for search changes\ntriggerTransition();}else if(!searchParam&&searchConfig?.active){try{console.log(\"[simple] url cleared search\");}catch{}setSearchConfig(prev=>({...prev,term:\"\",active:false}));// Trigger transition for search clearing\ntriggerTransition();}}// Handle sort parameter\nconst sortParam=urlParams.get(\"sort\");if(sortParam&&sortParam!==sortConfig?.type){let newSortConfig={...sortConfig};switch(sortParam){case\"title_asc\":newSortConfig={type:\"name\",sortBy:\"name\",sortDirection:\"aToZ\"};break;case\"title_desc\":newSortConfig={type:\"name\",sortBy:\"name\",sortDirection:\"zToA\"};break;case\"price_asc\":newSortConfig={type:\"price\",sortBy:\"price\",sortDirection:\"lowToHigh\"};break;case\"price_desc\":newSortConfig={type:\"price\",sortBy:\"price\",sortDirection:\"highToLow\"};break;case\"newest\":newSortConfig={type:\"created\",sortBy:\"created\",sortDirection:\"newest\"};break;case\"best_selling\":newSortConfig={type:\"best-selling\",sortBy:\"best-selling\",sortDirection:null};break;}if(newSortConfig.type!==sortConfig?.type){setSortConfig(newSortConfig);// Trigger transition for sort changes\ntriggerTransition();}}// Handle page parameter\nconst pageParam=urlParams.get(\"page\");if(pageParam){const newPage=parseInt(pageParam);if(!isNaN(newPage)&&newPage!==currentPage){setCurrentPage(newPage);}}// Handle filter parameters\n// Check for filter changes without excessive logging\nconst hasFilterChanges=Object.keys(filterConfig?.urlFilters||{}).some(key=>{const urlValue=urlParams.get(key);const currentFilter=filterConfig?.urlFilters?.[key];if(urlValue&&currentFilter?.active){if(Array.isArray(currentFilter.values)){return urlValue!==currentFilter.values.join(\",\");}else{return urlValue!==String(currentFilter.value);}}else if(!urlValue&&currentFilter?.active){return true;}return false;});if(hasFilterChanges){// Trigger transition for filter changes\ntry{console.log(\"[simple] detected filter param changes\");}catch{}triggerTransition();}};// Listen for popstate events (browser back/forward)\nconst offPop_min=onPopState(handleUrlChange);// Link click detection is now handled globally above\n// Track last event time to prevent rapid firing\nlet lastEventTime=0;// Listen for custom filter events\nconst handleFilterEvent=e=>{// 🔧 FIXED: Throttle events to prevent loops (minimum 100ms between events)\nconst now=Date.now();if(now-lastEventTime<100){return;}lastEventTime=now;// 🔧 FIXED: Skip filter event handling if navigation is in progress\nconst navigationInProgress=isNavigationInProgress();if(navigationInProgress){try{console.log(\"[simple] skip filter event: navigationInProgress\");}catch{}return;}// 🔧 NEW: Force filter config recalculation when URL changes\ntry{console.log(\"[simple] external event\",e?.type);}catch{}setUrlChangeTrigger(prev=>prev+1);// Small delay to ensure filter state is updated\nsetTimeout(()=>handleUrlChange(),50);};document.addEventListener(\"product-filter-change\",handleFilterEvent);// Only listen for search events if search is enabled\nif(props.Search?.enableSearch){document.addEventListener(\"product-search-change\",handleFilterEvent);}document.addEventListener(\"product-sort-change\",handleFilterEvent);// Initial check\nhandleUrlChange();return()=>{offPop_min();document.removeEventListener(\"product-filter-change\",handleFilterEvent);// Only remove search event listener if search is enabled\nif(props.Search?.enableSearch){document.removeEventListener(\"product-search-change\",handleFilterEvent);}document.removeEventListener(\"product-sort-change\",handleFilterEvent);};},[filterConfig?.urlFilters,searchConfig?.term,searchConfig?.active,sortConfig?.type,currentPage,props.Search?.enableSearch]);// 🔧 STABLE URL SYNCHRONIZATION - URL is the single source of truth\nReact.useEffect(()=>{if(typeof window===\"undefined\")return;const syncStateFromUrl=()=>{// Skip if navigation is in progress\nconst navigationInProgress=isNavigationInProgress();if(navigationInProgress){return;}const urlParams=new URLSearchParams(window.location.search);let hasChanges=false;// Handle search parameter - only if search is enabled\nif(props.Search?.enableSearch){const searchParam=urlParams.get(\"search\");if(searchParam!==searchConfig?.term){setSearchConfig(prev=>({...prev,term:searchParam||\"\",active:Boolean(searchParam)}));hasChanges=true;}}// Handle sort parameter\nconst sortParam=urlParams.get(\"sort\");console.log(\"🔍 [syncStateFromUrl] Reading sort param from URL:\",sortParam);if(sortParam){let newSortConfig={...sortConfig};switch(sortParam){case\"title_asc\":newSortConfig={type:\"name\",sortBy:\"name\",sortDirection:\"aToZ\"};break;case\"title_desc\":newSortConfig={type:\"name\",sortBy:\"name\",sortDirection:\"zToA\"};break;case\"price_asc\":newSortConfig={type:\"price\",sortBy:\"price\",sortDirection:\"lowToHigh\"};break;case\"price_desc\":newSortConfig={type:\"price\",sortBy:\"price\",sortDirection:\"highToLow\"};break;case\"newest\":newSortConfig={type:\"created\",sortBy:\"created\",sortDirection:\"newest\"};break;case\"best_selling\":newSortConfig={type:\"best-selling\",sortBy:\"best-selling\",sortDirection:null};break;}// Generic custom: <field>_asc|desc\nif(!newSortConfig?.type||newSortConfig.type===sortConfig?.type){console.log(\"🔍 [syncStateFromUrl] Checking for custom sort pattern...\");const match=sortParam.match(/^(.*)_(asc|desc)$/);if(match){const base=match[1];const dir=match[2];console.log(\"🔍 [syncStateFromUrl] CUSTOM SORT MATCHED - base:\",base,\"dir:\",dir);newSortConfig={type:\"custom\",sortBy:base,sortDirection:dir};console.log(\"🔍 [syncStateFromUrl] Setting sortConfig to:\",newSortConfig);}else{console.log(\"🔍 [syncStateFromUrl] No custom pattern match for:\",sortParam);}}if(newSortConfig.type!==sortConfig?.type){setSortConfig(newSortConfig);hasChanges=true;}}else if(sortConfig?.type!==\"relevancy\"){setSortConfig({type:\"relevancy\",sortDirection:\"aToZ\"});hasChanges=true;}// Handle pagination parameter\nif(props.Pagination?.enable){const pageParam=urlParams.get(\"page\");const newPage=pageParam?parseInt(pageParam,10):1;if(newPage!==currentPage&&newPage>0){setCurrentPage(newPage);hasChanges=true;}}// Trigger filter config recalculation if any changes occurred\nif(hasChanges){setUrlChangeTrigger(prev=>prev+1);}};// Listen for browser back/forward navigation\nconst offPop_sync=onPopState(syncStateFromUrl);// Initial URL sync\nsyncStateFromUrl();return()=>{offPop_sync();};},[props.Search?.enableSearch,props.Pagination?.enable])// Only depend on props, not state\n;// 🔧 PAGINATION EVENT HANDLERS - Handle pagination via events like DefaultEmpty\nReact.useEffect(()=>{if(typeof window===\"undefined\"||!props.Pagination?.enable)return;const handlePaginationEvent=event=>{if(event.detail&&event.detail.page){setCurrentPage(event.detail.page);}};// Listen for pagination button events\ndocument.addEventListener(\"product-pagination-change\",handlePaginationEvent);return()=>{document.removeEventListener(\"product-pagination-change\",handlePaginationEvent);};},[props.Pagination?.enable]);// 🔧 EXTERNAL EVENT HANDLERS - Update URL when external components trigger changes\nReact.useEffect(()=>{if(typeof window===\"undefined\")return;const handleExternalEvent=e=>{// Skip if navigation is in progress\nconst navigationInProgress=window.__navigationInProgress?.()||false;if(navigationInProgress){return;}const{type,componentId}=e.detail;// Only handle events from other components (not our own)\nif(componentId===\"catalog-display-simple\"){return;}// Handle external sort changes directly to URL (prevents overwriting custom sorts)\nif(e.type===\"product-sort-change\"){const d=e.detail||{};console.log(\"🔍 [handleExternalEvent] product-sort-change received:\",d);let sortParam=\"\";if(d.type===\"name\"){sortParam=d.sortDirection===\"aToZ\"?\"title_asc\":\"title_desc\";}else if(d.type===\"price\"){sortParam=d.sortDirection===\"lowToHigh\"?\"price_asc\":\"price_desc\";}else if(d.type===\"created\"){sortParam=\"newest\";}else if(d.type===\"best-selling\"){sortParam=\"best_selling\";}else if(d.type===\"custom\"&&d.sortBy){console.log(\"🔍 [handleExternalEvent] Processing custom sort - sortBy:\",d.sortBy,\"sortDirection:\",d.sortDirection);const base=String(d.sortBy).toLowerCase().trim().replace(/[^a-z0-9]+/g,\"_\").replace(/^_+|_+$/g,\"\");const dir=d.sortDirection===\"asc\"||d.sortDirection===\"desc\"?d.sortDirection:d.sortDirection===\"lowToHigh\"?\"asc\":\"desc\";sortParam=`${base}_${dir}`;console.log(\"🔍 [handleExternalEvent] Generated custom sort param:\",sortParam,\"from base:\",base,\"dir:\",dir);}if(sortParam){console.log(\"🔍 [handleExternalEvent] Setting URL sort param to:\",sortParam);const url=new URL(window.location.href);const urlParams=new URLSearchParams(url.search);urlParams.set(\"sort\",sortParam);const newUrl=`${url.pathname}?${urlParams.toString()}`;if(newUrl!==window.location.pathname+window.location.search){try{window.history.pushState({},\"\",newUrl);console.log(\"🔍 [handleExternalEvent] URL updated to:\",newUrl);}catch{}}// Trigger recompute based on updated URL\nsetUrlChangeTrigger(prev=>prev+1);}else{console.log(\"❌ [handleExternalEvent] No sortParam generated from:\",d);}return;// Skip default handler\n}// For search events, we need to sync state from URL since search component updates URL directly\nif(e.type===\"product-search-change\"){const searchTerm=e.detail.term;if(props.Search?.enableSearch){setSearchConfig(prev=>({...prev,term:searchTerm||\"\",active:Boolean(searchTerm)}));// Trigger filter config recalculation\nsetUrlChangeTrigger(prev=>prev+1);}return;// Don't update URL since search component already did\n}// Handle filter-navigation events (also dispatched by search component)\nif(e.type===\"filter-navigation\"&&e.detail.search!==undefined){const searchTerm=e.detail.search;if(props.Search?.enableSearch){setSearchConfig(prev=>({...prev,term:searchTerm||\"\",active:Boolean(searchTerm)}));// Trigger filter config recalculation\nsetUrlChangeTrigger(prev=>prev+1);}return;// Don't update URL since search component already did\n}// Handle filter-reset event specially - trigger URL sync and state reset\nif(e.type===\"filter-reset\"){console.log(\"🔄 [simple] Received filter-reset event, syncing URL and state\");// Force URL change detection to sync all state\nsetTimeout(()=>{const urlParams=new URLSearchParams(window.location.search);// Clear all URL parameters that relate to filters\nconst filterParams=[\"collection\",\"product_type\",\"product_tag\",\"price\",\"discount_amount\",\"discount_percent\",\"variant\",\"on_sale\",\"in_stock\",\"bundle\",\"subscription\",\"sort\"];let urlChanged=false;filterParams.forEach(param=>{if(urlParams.has(param)){urlParams.delete(param);urlChanged=true;}});// Update URL if any parameters were removed\nif(urlChanged){const newUrl=`${window.location.pathname}?${urlParams.toString()}`;window.history.replaceState({},\"\",newUrl);}// Force re-sync of all state from the clean URL\nsetUrlChangeTrigger(prev=>prev+1);},50);return;}// For other events, debounce URL updates to prevent rapid changes\nclearTimeout(window.__urlUpdateTimeout);window.__urlUpdateTimeout=setTimeout(()=>{updateUrlFromState();},100);};// Add event listeners for external component communication\ndocument.addEventListener(\"product-filter-change\",handleExternalEvent);document.addEventListener(\"product-search-change\",handleExternalEvent);document.addEventListener(\"product-sort-change\",handleExternalEvent);document.addEventListener(\"filter-navigation\",handleExternalEvent);document.addEventListener(\"filter-reset\",handleExternalEvent);return()=>{document.removeEventListener(\"product-filter-change\",handleExternalEvent);document.removeEventListener(\"product-search-change\",handleExternalEvent);document.removeEventListener(\"product-sort-change\",handleExternalEvent);document.removeEventListener(\"filter-navigation\",handleExternalEvent);document.removeEventListener(\"filter-reset\",handleExternalEvent);clearTimeout(window.__urlUpdateTimeout);};},[])// No dependencies - this only handles external events\n;// 🔧 URL UPDATE FUNCTION - Updates URL based on current state\nconst updateUrlFromState=React.useCallback(()=>{if(typeof window===\"undefined\")return;const url=new URL(window.location.href);const urlParams=new URLSearchParams(url.search);// Update search parameter - only if search is enabled\nif(props.Search?.enableSearch){if(searchConfig?.active&&searchConfig?.term){urlParams.set(\"search\",searchConfig.term);}else if(urlParams.has(\"search\")){urlParams.delete(\"search\");}}// Update sort parameter\nif(sortConfig?.type&&sortConfig.type!==\"relevancy\"){let sortParam=\"\";if(sortConfig.type===\"name\"){sortParam=sortConfig.sortDirection===\"aToZ\"?\"title_asc\":\"title_desc\";}else if(sortConfig.type===\"price\"){sortParam=sortConfig.sortDirection===\"lowToHigh\"?\"price_asc\":\"price_desc\";}else if(sortConfig.type===\"created\"){sortParam=\"newest\";}else if(sortConfig.type===\"best-selling\"){sortParam=\"best_selling\";}else if(sortConfig.type===\"custom\"&&sortConfig.sortBy){const base=String(sortConfig.sortBy).toLowerCase().trim().replace(/[^a-z0-9]+/g,\"_\").replace(/^_+|_+$/g,\"\");const dir=sortConfig.sortDirection===\"asc\"||sortConfig.sortDirection===\"desc\"?sortConfig.sortDirection:sortConfig.sortDirection===\"lowToHigh\"?\"asc\":\"desc\";sortParam=`${base}_${dir}`;}if(sortParam){urlParams.set(\"sort\",sortParam);}}else if(urlParams.has(\"sort\")){urlParams.delete(\"sort\");}// Do not touch pagination here; handled by the dedicated currentPage effect\n// Update URL without triggering page reload (push for pagination like CatalogDisplay)\nconst newUrl=`${url.pathname}?${urlParams.toString()}`;const currentFullUrl=window.location.pathname+window.location.search;if(newUrl!==currentFullUrl){try{window.history.pushState({page:currentPage},\"\",newUrl);}catch{}}},[searchConfig,sortConfig,currentPage,props.Search?.enableSearch])// Only include actual dependencies\n;// 🔧 SURGICAL FIX: URL Update for internal sort changes\nReact.useEffect(()=>{// Only update URL for internal sort changes (not from URL changes)\nif(typeof window===\"undefined\"||!sortConfig?.type)return;// Debounce to prevent rapid URL updates\nclearTimeout(window.__sortUrlUpdateTimeout);window.__sortUrlUpdateTimeout=setTimeout(()=>{const url=new URL(window.location.href);const urlParams=new URLSearchParams(url.search);// Update sort parameter\nif(sortConfig.type&&sortConfig.type!==\"relevancy\"){let sortParam=\"\";if(sortConfig.type===\"name\"){sortParam=sortConfig.sortDirection===\"aToZ\"?\"title_asc\":\"title_desc\";}else if(sortConfig.type===\"price\"){sortParam=sortConfig.sortDirection===\"lowToHigh\"?\"price_asc\":\"price_desc\";}else if(sortConfig.type===\"created\"){sortParam=\"newest\";}else if(sortConfig.type===\"best-selling\"){sortParam=\"best_selling\";}else if(sortConfig.type===\"custom\"&&sortConfig.sortBy){const base=String(sortConfig.sortBy).toLowerCase().trim().replace(/[^a-z0-9]+/g,\"_\").replace(/^_+|_+$/g,\"\");const dir=sortConfig.sortDirection===\"asc\"||sortConfig.sortDirection===\"desc\"?sortConfig.sortDirection:sortConfig.sortDirection===\"lowToHigh\"?\"asc\":\"desc\";sortParam=`${base}_${dir}`;}if(sortParam){urlParams.set(\"sort\",sortParam);}}else if(urlParams.has(\"sort\")){urlParams.delete(\"sort\");}// Update URL without triggering page reload\nconst newUrl=`${url.pathname}?${urlParams.toString()}`;const currentFullUrl=window.location.pathname+window.location.search;if(newUrl!==currentFullUrl){try{window.history.pushState({sort:sortConfig},\"\",newUrl);console.log(\"🔗 [Sort URL Update] URL updated:\",newUrl);}catch(error){console.error(\"Error updating sort URL:\",error);}}},100);},[sortConfig?.type,sortConfig?.sortDirection])// Only trigger on sort changes\n;// 🔧 DISABLED: URL Update Logic - This was also causing infinite loops\n/*\n    React.useEffect(() => {\n        if (typeof window === \"undefined\") return;\n\n        const url = new URL(window.location.href);\n        const urlParams = new URLSearchParams(url.search);\n\n        // 🔧 DEBUG: Check if we're creating the duplication\n        const currentUrlParams = Object.fromEntries(urlParams.entries());\n        // Update URL with current filter state\n        // Only update if there are actual URL parameters (not internal filter objects)\n\n        if (filterConfig?.hasUrlFilters && filterConfig?.urlFilters && Object.keys(filterConfig.urlFilters).length > 0) {\n            Object.entries(filterConfig.urlFilters).forEach(([key, filter]: [string, any]) => {\n                if (filter?.active) {\n                    if (Array.isArray(filter.values) && filter.values.length > 0) {\n                        // 🔧 FIXED: Only add string values to URL, never objects\n                        const stringValues = filter.values\n                            .map((val: any) => {\n                                if (typeof val === 'string') return val;\n                                if (typeof val === 'number') return String(val);\n                                if (val && typeof val === 'object' && val.priceType) {\n                                    // Handle price range objects\n                                    if (val.priceType === 'Under' && val.max) return `0-${val.max}`;\n                                    if (val.priceType === 'Over' && val.min) return `${val.min}-999999`;\n                                    if (val.priceType === 'Range' && val.min && val.max) return `${val.min}-${val.max}`;\n                                }\n                                return null;\n                            })\n                            .filter((val: any) => val && val !== 'undefined' && val !== 'null');\n\n                        if (stringValues.length > 0) {\n                            // 🔧 FIXED: Use urlParam instead of key to prevent encoding issues\n                            const paramName = filter.urlParam || key;\n                            urlParams.set(paramName, stringValues.join(','));\n                        }\n                    } else if (filter.value !== undefined && typeof filter.value !== 'object') {\n                        // Only set string/number values, skip objects\n                        // 🔧 FIXED: Use urlParam instead of key to prevent encoding issues\n                        const paramName = filter.urlParam || key;\n                        urlParams.set(paramName, String(filter.value));\n                    }\n                } else {\n                    // 🔧 FIXED: Use urlParam for deletion too\n                    const paramName = filter?.urlParam || key;\n                    urlParams.delete(paramName);\n                }\n            });\n        }\n\n        // Update search parameter - only if search is enabled\n        if (props.Search?.enableSearch) {\n        if (searchConfig?.active && searchConfig?.term) {\n            urlParams.set(\"search\", searchConfig.term);\n        } else if (urlParams.has(\"search\")) {\n            urlParams.delete(\"search\");\n            }\n        }\n\n        // Update sort parameter\n        if (sortConfig?.type && sortConfig.type !== \"relevancy\") {\n            let sortParam = \"\";\n            if (sortConfig.type === \"name\") {\n                sortParam = sortConfig.sortDirection === \"aToZ\" ? \"title_asc\" : \"title_desc\";\n            } else if (sortConfig.type === \"price\") {\n                sortParam = sortConfig.sortDirection === \"lowToHigh\" ? \"price_asc\" : \"price_desc\";\n            } else if (sortConfig.type === \"created\") {\n                sortParam = \"newest\";\n            } else if (sortConfig.type === \"best-selling\") {\n                sortParam = \"best_selling\";\n            }\n\n            if (sortParam) {\n                urlParams.set(\"sort\", sortParam);\n            }\n        } else if (urlParams.has(\"sort\")) {\n            urlParams.delete(\"sort\");\n        }\n\n        // Update page parameter\n        if (props.Pagination?.enable && currentPage > 1) {\n            urlParams.set(\"page\", currentPage.toString());\n        } else if (urlParams.has(\"page\")) {\n            urlParams.delete(\"page\");\n        }\n\n        // Update URL without triggering page reload\n        const newUrl = `${url.pathname}?${urlParams.toString()}`;\n        const currentFullUrl = window.location.pathname + window.location.search;\n\n        // Silent URL updates\n\n        // 🔧 PREVENT DUPLICATION: Only update if URLs are actually different\n        if (newUrl !== currentFullUrl) {\n            // 🔧 ADDITIONAL CHECK: Don't update if we're just adding duplicates\n            const newParams = Object.fromEntries(new URLSearchParams(newUrl.split('?')[1] || ''));\n            const currentParams = Object.fromEntries(urlParams.entries());\n\n            const hasNewDuplicates = Object.keys(newParams).some(key => {\n                if (key.includes('+') && key.replace(/\\+/g, '_') in currentParams) {\n                    // Duplicate detected\n                    return true;\n                }\n                return false;\n            });\n\n            // 🔧 CHECK FOR UNNECESSARY CHANGES: Don't update if we're just re-encoding existing params\n            const unnecessaryChanges = Object.keys(newParams).some(key => {\n                const underscoreKey = key.replace(/\\+/g, '_');\n                if (underscoreKey in currentParams && newParams[key] === currentParams[underscoreKey]) {\n                    // Unnecessary change detected\n                    return true;\n                }\n                return false;\n            });\n\n            if (!hasNewDuplicates && !unnecessaryChanges) {\n                try {\n                    window.history.replaceState(\n                        {\n                            filters: filterConfig?.urlFilters,\n                            search: searchConfig,\n                            sort: sortConfig,\n                            page: currentPage\n                        },\n                        \"\",\n                        newUrl\n                    );\n                    // URL updated successfully\n                } catch (error) {\n                    console.error(\"Error updating URL:\", error);\n                }\n            } else {\n                // Blocked duplicate parameters\n            }\n        } else {\n            // No URL change needed\n        }\n    }, [filterConfig?.urlFilters, searchConfig, sortConfig, currentPage, props.Pagination?.enable]);\n    */// Runtime mode - processing data\n// EXTRACT COLLECTION METADATA\n// Get the query, collections info, and render function from the Collection List\nconst{query,collections,childrenFunction}=useMemo(()=>getCollectionData(collectionList),[collectionList]);// Data extracted from collection\n// ERROR HANDLING: VALIDATE REQUIRED COMPONENTS\nif(!collectionList){// No collection found\nreturn /*#__PURE__*/_jsx(Message,{text:`Connect CMS (${props.displayMode===\"Desktop\"?\"L\":\"S\"}) collection`});}// Handle canvas mode data validation\nif(RenderTarget.current()===RenderTarget.canvas){if(!query||!childrenFunction){// Canvas mode - missing data\n// Apply layout styles directly to collectionList for canvas preview\nconst canvasStyledInstance=/*#__PURE__*/React.cloneElement(collectionList,{style:{...collectionList.props?.style||{},...layoutStyle}});return canvasStyledInstance;}// If we have data in canvas mode, continue to show the collection\n}// Runtime mode validation\nif(!query){// No query found\nreturn /*#__PURE__*/_jsx(Message,{text:\"Connect a CMS Collection List\"});}if(!childrenFunction){// No children function found\nreturn /*#__PURE__*/_jsx(Message,{text:\"Could not find the Collection's children function. Make sure it's a valid Collection List.\"});}// FETCH DATA FROM CMS\n// Use Framer's useQueryData hook to get the actual content from your CMS\n// Fetching data from CMS\nconst allData=useQueryData({...query,select:query.select||[]});// Data fetched from CMS\n// VALIDATE DATA STRUCTURE\n// Ensure we received an array of items from the CMS\nif(!Array.isArray(allData)){// Data validation failed\nreturn /*#__PURE__*/_jsx(Message,{text:\"No data available from the collection\"});}// Data validation passed\n// FILTER DATA BY SPECIFIED FIELD\n// This is the core functionality: show only items where the specified field equals the filter value\nconst filteredData=useMemo(()=>{if(!collections?.[0]||!Array.isArray(allData))return[];// Get the main collection's field definitions\nconst mainCollection=collections[0];const propertyControls=mainCollection.data?.propertyControls;// ⭐ FAVORITES FILTERING: Apply first before other filters (optimized)\nlet dataToFilter=allData// Don't copy unless necessary\n;if(pageType===\"favorites\"){const productIdFieldId=findFieldIdByCommonNames(propertyControls,[\"Product ID\",\"product id\",\"ID\",\"id\"]);if(productIdFieldId){const favSet=new Set(favorites.map(String));dataToFilter=allData.filter(item=>{const itemProductId=String(item[productIdFieldId]||\"\");return favSet.has(itemProductId);});}else{console.warn('⭐ Favorites: Could not resolve \"Product ID\" field. Skipping favorites filter.');dataToFilter=[];}}// Find the specified field in the collection\n// 🔧 NEW: Check if filtering is needed at all\n// If no filter field OR no filter value is specified, show all items\nconst shouldApplyBaseFilter=filterField&&filterField.trim()!==\"\"&&filterConfig.baseFilter.value&&filterConfig.baseFilter.value.trim()!==\"\";// Filtering decision made\n// Early return optimization for no filters\nif(!shouldApplyBaseFilter&&Object.keys(filterConfig.urlFilters).length===0){return dataToFilter;}// Apply filters only when necessary\nif(!shouldApplyBaseFilter){return dataToFilter.filter(item=>{// Check all URL filters (AND logic between different fields)\nfor(const[filterKey,filterData]of Object.entries(filterConfig.urlFilters)){const urlFilterFieldId=discoverFieldIdForFilter(propertyControls,filterKey,filterData);if(shouldSkipFilter(filterData,urlFilterFieldId)){continue;// Skip this filter\n}if(filterData.type===\"search\"){if(props.Search?.enableSearch){const searchFilterData={...filterData,searchFields:props.Search?.searchFields||[\"Title\"]};const searchMatch=handleSearchFilter(item,searchFilterData,propertyControls);if(!searchMatch){return false// Early exit\n;}}}else if(urlFilterFieldId){const urlFieldValue=item[urlFilterFieldId];let urlFieldMatch=false;switch(filterData.type){case\"boolean\":urlFieldMatch=handleBooleanFilter(urlFieldValue,filterData);break;case\"unique\":urlFieldMatch=handleUniqueFilter(urlFieldValue,filterData);break;case\"variant\":urlFieldMatch=handleVariantFilter(urlFieldValue,filterData,propertyControls,item);break;case\"price\":urlFieldMatch=handlePriceFilter(urlFieldValue,filterData);break;default:urlFieldMatch=handleRegularFilter(urlFieldValue,filterData);break;}if(!urlFieldMatch){return false// Early exit\n;}}}return true;});}// 🔧 FILTERING LOGIC: Handle both base filter and URL-only filtering scenarios\nlet targetFieldId=null;if(shouldApplyBaseFilter){// We have a base filter - find the field ID\nfor(const[fieldId,field]of Object.entries(propertyControls||{})){if(field.title===filterField){targetFieldId=fieldId;break;}}if(!targetFieldId){// No field found in collection\nreturn[];}}// 🔧 UPDATED: Implement complex filter stacking logic\n// Filter the data array using the complex filter logic\n// Define baseFieldKey outside the conditional block so it's always available\nconst baseFieldKey=shouldApplyBaseFilter?filterConfig.baseFilter.field.toLowerCase().replace(/\\s+/g,\"_\"):\"\";const filtered=dataToFilter.filter(item=>{let baseFieldMatch=false;if(shouldApplyBaseFilter){// 🔧 1. BASE FILTER + SAME FIELD URL FILTERS: Combine with OR logic\nconst fieldValue=item[targetFieldId];if(process.env.NODE_ENV===\"development\"){console.log(`📝 Item ${item.id}: ${filterField} = \"${fieldValue}\"`);}// 1) Evaluate base filter match\nlet baseMatch=true;if(filterConfig.baseFilter.value){const baseFieldValues=fieldValue?fieldValue.toString().split(\",\").map(v=>v.trim().toLowerCase()):[];const baseFilterValues=filterConfig.baseFilter.value.split(\",\").map(v=>v.trim().toLowerCase());baseMatch=baseFieldValues.some(fieldVal=>baseFilterValues.some(filterVal=>fieldVal===filterVal));if(process.env.NODE_ENV===\"development\"){console.log(baseMatch?`  ✅ Base filter \"${filterConfig.baseFilter.value}\" matched`:`  ❌ Base filter \"${filterConfig.baseFilter.value}\" not found`);}}// 2) If URL has same-field filter, require it too (AND)\nlet sameFieldOk=true;const sameFieldUrlFilter=filterConfig.urlFilters[baseFieldKey];if(sameFieldUrlFilter){let urlFieldMatch=false;if(sameFieldUrlFilter.type===\"boolean\"){const hasData=fieldValue&&fieldValue.toString().trim()!==\"\";urlFieldMatch=hasData===sameFieldUrlFilter.value;}else if(sameFieldUrlFilter.type===\"unique\"){if(sameFieldUrlFilter.targetField===\"Compare Price\"){const hasComparePrice=Boolean(fieldValue&&fieldValue.toString().trim());urlFieldMatch=hasComparePrice===sameFieldUrlFilter.value;}}else if(sameFieldUrlFilter.type===\"variant\"){if(sameFieldUrlFilter.targetField===\"Variants\"){const variantMatch=parseVariantData(fieldValue,sameFieldUrlFilter.variantName,sameFieldUrlFilter.values);let customColorMatch=false;if(sameFieldUrlFilter.variantName.toLowerCase()===\"color\"){const customColorField=Object.entries(item).find(([key])=>key.includes(\"custom.fc_color\")||key.includes(\"fc_color\"));if(customColorField){const customColorValue=customColorField[1];if(customColorValue&&typeof customColorValue===\"string\"){customColorMatch=sameFieldUrlFilter.values.some(filterColor=>customColorValue.toLowerCase().includes(filterColor.toLowerCase()));}}}urlFieldMatch=variantMatch||customColorMatch;}}else if(sameFieldUrlFilter.type===\"regular\"){const fieldValues=fieldValue?fieldValue.toString().split(\",\").map(v=>v.trim().toLowerCase()):[];urlFieldMatch=sameFieldUrlFilter.values.some(urlValue=>fieldValues.some(fieldVal=>fieldVal===urlValue.toLowerCase().trim()));}sameFieldOk=urlFieldMatch;}baseFieldMatch=baseMatch&&sameFieldOk;// Base field must match base AND same-field URL (if present)\nif(!baseFieldMatch){if(process.env.NODE_ENV===\"development\"){console.log(`  ❌ Base field \"${filterConfig.baseFilter.field}\" failed all criteria`);}return false;}if(process.env.NODE_ENV===\"development\"){console.log(`  ✅ Base field \"${filterConfig.baseFilter.field}\" passed all criteria`);}}else{// No base filter - all items pass the base filter check\nbaseFieldMatch=true;console.log(`  ✅ No base filter - all items pass base filter check`);}// 🔧 2. URL FILTERS FOR DIFFERENT FIELDS: Additional criteria (AND logic)\nlet allOtherUrlFiltersMatch=true;if(process.env.NODE_ENV===\"development\"){console.log(`🔍 DEBUG: Processing ${Object.keys(filterConfig.urlFilters).length} URL filters`);console.log(`🔍 DEBUG: URL filter keys:`,Object.keys(filterConfig.urlFilters));}// Use for...of loop instead of forEach to properly handle early returns\nfor(const[filterKey,filterData]of Object.entries(filterConfig.urlFilters)){// Skip if this is the same field as base filter (already handled above)\nif(baseFieldKey&&filterKey===baseFieldKey){console.log(`    🔍 Skipping ${filterKey} (same as base filter)`);continue;}console.log(`    🔍 Processing URL filter: ${filterKey} (${filterData.type})`);// 🔧 NEW: Use comprehensive field discovery utility\nconst urlFilterFieldId=discoverFieldIdForFilter(propertyControls,filterKey,filterData);// Check if filter should be skipped\nif(shouldSkipFilter(filterData,urlFilterFieldId)){continue;// Skip this filter\n}// Special handling for search filters - they don't target a specific field\nif(filterData.type===\"search\"){// Only process search filters if search is enabled\nif(props.Search?.enableSearch){console.log(`  🔍 URL Filter ${filterKey}: Search filter processing`);const searchFilterData={...filterData,searchFields:props.Search?.searchFields||[\"Title\"]};const searchMatch=handleSearchFilter(item,searchFilterData,propertyControls);if(!searchMatch){// Search filter not matched\nallOtherUrlFiltersMatch=false;break;// Exit early since this item won't match\n}else{// Search filter matched\n}}else{// Skip search filters when search is not enabled\n// Search filter skipped - search not enabled\n}}else if(urlFilterFieldId){const urlFieldValue=item[urlFilterFieldId];// Processing URL filter\nlet urlFieldMatch=false;// 🔧 NEW: Handle different filter types using imported handler functions\nswitch(filterData.type){case\"boolean\":urlFieldMatch=handleBooleanFilter(urlFieldValue,filterData);break;case\"unique\":urlFieldMatch=handleUniqueFilter(urlFieldValue,filterData);break;case\"variant\":urlFieldMatch=handleVariantFilter(urlFieldValue,filterData,propertyControls,item);break;case\"price\":urlFieldMatch=handlePriceFilter(urlFieldValue,filterData);break;default:urlFieldMatch=handleRegularFilter(urlFieldValue,filterData);break;}if(!urlFieldMatch){// URL filter not matched\nallOtherUrlFiltersMatch=false;break;// Exit early since this item won't match\n}else{// URL filter matched\n}}}return allOtherUrlFiltersMatch;});return filtered;},[allData,collections?.[0]?.data?.propertyControls,filterField,filterConfig.baseFilter,filterConfig.urlFilters,pageType===\"favorites\"?favorites:null,props.Favorites?.enable]);// Trigger transition when filters change\nReact.useEffect(()=>{if(filterConfig.urlFilters&&Object.keys(filterConfig.urlFilters).length>0){// Immediate transition for better performance\ntriggerTransition();}},[filterConfig.urlFilters]);// Cleanup timeout on unmount\nReact.useEffect(()=>{return()=>{if(transitionTimeout){clearTimeout(transitionTimeout);}};},[transitionTimeout]);// TEST: Force trigger transition on mount to see if it works at all (only in development)\nReact.useEffect(()=>{if(process.env.NODE_ENV===\"development\"){console.log(\"🚨 COMPONENT MOUNTED - Testing transition system...\");console.log(\"🚨 Current isTransitioning state:\",isTransitioning);console.log(\"🚨 RenderTarget:\",typeof window!==\"undefined\"?\"browser\":\"server\");// Force trigger transition after 1 second to test if it works\nconst testTimer=setTimeout(()=>{console.log(\"🚨 TEST: Forcing transition to TRUE - You should see YELLOW background now!\");setIsTransitioning(true);setTimeout(()=>{console.log(\"🚨 TEST: Setting transition to FALSE - YELLOW background should disappear!\");setIsTransitioning(false);},3e3)// Keep it visible for 3 seconds so you can see it\n;},1e3);return()=>clearTimeout(testTimer);}},[]);// SIMPLE TEST: Also test immediately on every render to see if state changes work (only in development)\nReact.useEffect(()=>{if(process.env.NODE_ENV===\"development\"){console.log(\"🚨 RENDER TEST: isTransitioning =\",isTransitioning);// Test state change every 5 seconds\nconst interval=setInterval(()=>{console.log(\"🚨 INTERVAL TEST: Toggling transition state\");setIsTransitioning(prev=>!prev);},5e3);return()=>clearInterval(interval);}},[]);// 🔧 NEW: SORTING LOGIC (CMS fields)\nconst sortedData=useMemo(()=>{console.log(\"🔍 [sortedData] useMemo triggered\",{filteredDataLength:filteredData.length,hasWindow:typeof window!==\"undefined\",currentUrl:typeof window!==\"undefined\"?window.location.href:\"no window\"});// 🔧 HYDRATION FIX: Always process sorting consistently for server/client\nif(filteredData.length===0){console.log(\"🔍 [sortedData] Returning early - no filtered data\");return filteredData;}// For SSR, return data without URL-based sorting to prevent hydration mismatch\nif(typeof window===\"undefined\"){console.log(\"🔍 [sortedData] Returning early - SSR\");return filteredData;}const urlParams=new URLSearchParams(window.location.search);const sortParam=urlParams.get(\"sort\");console.log(\"🔍 [sortedData] ===== SORTING LOGIC ENTRY =====\");console.log(\"🔍 [sortedData] URL params\",{sortParam,allParams:Object.fromEntries(urlParams.entries()),fullUrl:window.location.href});// Use URL sort param if provided, otherwise use Sort props\nif(sortParam){console.log(\"🔍 [sortedData] Using URL sort param:\",sortParam);// URL sort param takes precedence\nif(sortParam===\"relevance\"){console.log(\"🔍 [sortedData] Relevance sort - returning filtered data\");return filteredData;}const mainCollection=collections?.[0];const controls=mainCollection?.data?.propertyControls||{};console.log(\"🔍 [sortedData] Calling sortData with URL param\");console.log(\"🔍 [sortedData] sortData function exists:\",typeof sortData);console.log(\"🔍 [sortedData] About to call sortData with:\",{sortParam,dataLength:filteredData?.length,hasControls:!!controls});// Test if sortData is actually a function\nif(typeof sortData!==\"function\"){console.error(\"🚨 [sortedData] sortData is not a function!\",typeof sortData);return filteredData;}// Use inline sorting logic like FC_CatalogDisplay.tsx instead of sortData utility\nconsole.log(\"🔍 [sortedData] Using inline sorting logic for:\",sortParam);let result=[...filteredData]// Create a copy to sort\n;if(sortParam===\"title_asc\"){// Debug: Check what fields are available\nconsole.log(\"🔍 [sortedData] Sample item fields:\",Object.keys(result[0]||{}));console.log(\"🔍 [sortedData] Sample item values:\",result[0]);// Find the title field using CMS field discovery\nconst titleFieldId=findFieldIdByCommonNames(controls,[\"Title\",\"title\",\"Name\",\"name\"]);console.log(\"🔍 [sortedData] Title field ID found:\",titleFieldId);if(titleFieldId){result.sort((a,b)=>{const titleA=(a[titleFieldId]||\"\").toString();const titleB=(b[titleFieldId]||\"\").toString();return titleA.localeCompare(titleB);});console.log(\"🔍 [sortedData] Title ASC sorted:\",result.slice(0,3).map(item=>item[titleFieldId]));}else{console.log(\"🔍 [sortedData] No title field found, using fallback\");result.sort((a,b)=>{const titleA=a.Title||a.title||\"\";const titleB=b.Title||b.title||\"\";return titleA.toString().localeCompare(titleB.toString());});console.log(\"🔍 [sortedData] Title ASC sorted (fallback):\",result.slice(0,3).map(item=>item.Title||item.title));}}else if(sortParam===\"title_desc\"){// Find the title field using CMS field discovery\nconst titleFieldId=findFieldIdByCommonNames(controls,[\"Title\",\"title\",\"Name\",\"name\"]);console.log(\"🔍 [sortedData] Title field ID found (DESC):\",titleFieldId);if(titleFieldId){result.sort((a,b)=>{const titleA=(a[titleFieldId]||\"\").toString();const titleB=(b[titleFieldId]||\"\").toString();return titleB.localeCompare(titleA);});console.log(\"🔍 [sortedData] Title DESC sorted:\",result.slice(0,3).map(item=>item[titleFieldId]));}else{console.log(\"🔍 [sortedData] No title field found, using fallback (DESC)\");result.sort((a,b)=>{const titleA=a.Title||a.title||\"\";const titleB=b.Title||b.title||\"\";return titleB.toString().localeCompare(titleA.toString());});console.log(\"🔍 [sortedData] Title DESC sorted (fallback):\",result.slice(0,3).map(item=>item.Title||item.title));}}else if(sortParam===\"price_asc\"){// Find the price field using CMS field discovery\nconst priceFieldId=findFieldIdByCommonNames(controls,[\"Price\",\"price\",\"Cost\",\"cost\"]);console.log(\"🔍 [sortedData] Price field ID found (ASC):\",priceFieldId);if(priceFieldId){result.sort((a,b)=>{const priceA=parseFloat((a[priceFieldId]||\"0\").toString());const priceB=parseFloat((b[priceFieldId]||\"0\").toString());return priceA-priceB;});console.log(\"🔍 [sortedData] Price ASC sorted:\",result.slice(0,3).map(item=>item[priceFieldId]));}else{console.log(\"🔍 [sortedData] No price field found, using fallback (ASC)\");result.sort((a,b)=>{const priceA=parseFloat(a.Price||a.price||\"0\");const priceB=parseFloat(b.Price||b.price||\"0\");return priceA-priceB;});console.log(\"🔍 [sortedData] Price ASC sorted (fallback):\",result.slice(0,3).map(item=>item.Price||item.price));}}else if(sortParam===\"price_desc\"){// Find the price field using CMS field discovery\nconst priceFieldId=findFieldIdByCommonNames(controls,[\"Price\",\"price\",\"Cost\",\"cost\"]);console.log(\"🔍 [sortedData] Price field ID found (DESC):\",priceFieldId);if(priceFieldId){result.sort((a,b)=>{const priceA=parseFloat((a[priceFieldId]||\"0\").toString());const priceB=parseFloat((b[priceFieldId]||\"0\").toString());return priceB-priceA;});console.log(\"🔍 [sortedData] Price DESC sorted:\",result.slice(0,3).map(item=>item[priceFieldId]));}else{console.log(\"🔍 [sortedData] No price field found, using fallback (DESC)\");result.sort((a,b)=>{const priceA=parseFloat(a.Price||a.price||\"0\");const priceB=parseFloat(b.Price||b.price||\"0\");return priceB-priceA;});console.log(\"🔍 [sortedData] Price DESC sorted (fallback):\",result.slice(0,3).map(item=>item.Price||item.price));}}else if(sortParam===\"newest\"){result.sort((a,b)=>{const idA=parseInt(a[\"Product ID\"]||a.productId||\"0\");const idB=parseInt(b[\"Product ID\"]||b.productId||\"0\");return idB-idA;});console.log(\"🔍 [sortedData] Newest sorted:\",result.slice(0,3).map(item=>item[\"Product ID\"]||item.productId));}else if(/^(.*)_(asc|desc)$/.test(sortParam)){// Generic custom field sorting from URL (?sort=<field>_asc|desc)\nconsole.log(\"🔍 [sortedData] CUSTOM SORT DETECTED:\",sortParam);const match=sortParam.match(/^(.*)_(asc|desc)$/);const base=match?.[1]||\"\";const dir=match?.[2]||\"asc\";console.log(\"🔍 [sortedData] Parsed custom sort - base:\",base,\"dir:\",dir);// Convert underscores to spaces to match CMS field titles\nconst fieldTitle=base.replace(/_/g,\" \");console.log(\"🔍 [sortedData] Looking for CMS field title:\",fieldTitle);console.log(\"🔍 [sortedData] Available controls:\",Object.keys(controls||{}));// Try to resolve field id by exact title match (case-insensitive)\nlet fieldId=null;const normalizedFieldTitle=fieldTitle.toLowerCase().trim();console.log(\"🔍 [sortedData] Normalized field title to match:\",normalizedFieldTitle);for(const[id,field]of Object.entries(controls||{})){const t=field?.title;const normalizedControlTitle=typeof t===\"string\"?t.trim().toLowerCase():\"\";console.log(\"🔍 [sortedData] Checking control:\",id,\"title:\",t,\"normalized:\",normalizedControlTitle);if(normalizedControlTitle===normalizedFieldTitle){fieldId=id;console.log(\"🔍 [sortedData] ✅ MATCHED field ID:\",fieldId,\"for title:\",t);break;}}if(fieldId){console.log(\"🔍 [sortedData] Sorting by field ID:\",fieldId,\"direction:\",dir);// Check if field actually exists in data\nconst sampleItem=result[0];const hasFieldInData=fieldId&&fieldId in(sampleItem||{});const dataKeys=Object.keys(sampleItem||{});const controlIds=Object.keys(controls||{});console.log(\"🔍 [sortedData] Field exists in data?\",hasFieldInData,\"Field ID:\",fieldId,\"Sample item keys (first 15):\",dataKeys.slice(0,15),\"Control IDs include field?\",controlIds.includes(fieldId),\"Data has field?\",dataKeys.includes(fieldId));// Check a few items to see if ANY have this field\nconst itemsWithField=result.slice(0,10).filter(item=>fieldId in item&&item[fieldId]!==undefined&&item[fieldId]!==null);console.log(\"🔍 [sortedData] Items with non-empty field value (out of first 10):\",itemsWithField.length,\"Sample values:\",itemsWithField.slice(0,3).map(item=>({value:item[fieldId],title:item.Title||item.title})));const sampleBefore=result.slice(0,5).map(item=>({fieldValue:item[fieldId],fieldValueRaw:item[fieldId],fieldValueType:typeof item[fieldId],title:item.Title||item.title||\"No Title\",allKeys:Object.keys(item),rawItem:item}));console.log(\"🔍 [sortedData] Sample values BEFORE sort:\",JSON.stringify(sampleBefore,null,2));result.sort((a,b)=>{const aVal=(a[fieldId]||\"\").toString();const bVal=(b[fieldId]||\"\").toString();const compareResult=dir===\"asc\"?aVal.localeCompare(bVal):bVal.localeCompare(aVal);return compareResult;});const sampleAfter=result.slice(0,5).map(item=>({fieldValue:item[fieldId],title:item.Title||item.title||\"No Title\",rawItem:item}));console.log(\"🔍 [sortedData] Custom field sorted successfully:\",fieldTitle,dir);console.log(\"🔍 [sortedData] Sample values AFTER sort:\",JSON.stringify(sampleAfter,null,2));console.log(\"🔍 [sortedData] Full result length:\",result.length,\"First 10 field values:\",result.slice(0,10).map(item=>item[fieldId]));}else{console.log(\"❌ [sortedData] Custom field not found for:\",fieldTitle,\"Available fields:\",Object.entries(controls||{}).map(([id,f])=>({id,title:f?.title})));}}else{console.log(\"🔍 [sortedData] Sort param does not match any pattern:\",sortParam);}console.log(\"🔍 [sortedData] Inline sorting returned:\",{resultLength:result?.length,originalLength:filteredData?.length});return result;}// No URL sort param - use Sort props\nconst sortConfig=props.Sort;console.log(\"🔍 [sortedData] No URL sort param, using Sort props:\",sortConfig);if(!sortConfig){console.log(\"🔍 [sortedData] No sort config - returning filtered data\");return filteredData// No sort config\n;}const{defaultOrder,by,fieldName,order}=sortConfig;console.log(\"🔍 [sortedData] Sort config details:\",{defaultOrder,by,fieldName,order});if(defaultOrder===\"none\"){console.log(\"🔍 [sortedData] Default order is none - returning filtered data\");return filteredData// Use relevancy (no sorting)\n;}if(defaultOrder===\"random\"){// Optimize random sorting - avoid unnecessary copy for small arrays\nif(filteredData.length<=1)return filteredData;// 🔧 HYDRATION FIX: Only shuffle on client-side to prevent server/client mismatch\nif(typeof window===\"undefined\"){return filteredData// Return original order on server\n;}const shuffled=[...filteredData];// Fisher-Yates shuffle algorithm (optimized)\nfor(let i=shuffled.length-1;i>0;i--){const j=Math.floor(Math.random()*(i+1));[shuffled[i],shuffled[j]]=[shuffled[j],shuffled[i]];}return shuffled;}if(defaultOrder===\"sort\"){const{by,fieldName,order}=sortConfig;if(by===\"newest\"){const mainCollection=collections?.[0];const controls=mainCollection?.data?.propertyControls||{};return sortData(filteredData,\"newest\",controls)// No unnecessary copy\n;}if(by===\"price\"){const mainCollection=collections?.[0];const controls=mainCollection?.data?.propertyControls||{};const sortParam=`price_${order===\"ascending\"?\"asc\":\"desc\"}`;return sortData(filteredData,sortParam,controls)// No unnecessary copy\n;}if(by===\"title\"){const mainCollection=collections?.[0];const controls=mainCollection?.data?.propertyControls||{};const sortParam=`title_${order===\"ascending\"?\"asc\":\"desc\"}`;return sortData(filteredData,sortParam,controls)// No unnecessary copy\n;}if(by===\"custom\"&&fieldName){const mainCollection=collections?.[0];const controls=mainCollection?.data?.propertyControls||{};// Slugify fieldName to match URL format (same as dropdown does)\nconst slugifiedFieldName=fieldName.toString().trim().toLowerCase().replace(/[^a-z0-9]+/g,\"_\").replace(/^_+|_+$/g,\"\").replace(/_{2,}/g,\"_\");const customSortParam=`${slugifiedFieldName}_${order===\"ascending\"?\"asc\":\"desc\"}`;console.log(\"🔍 [sortedData] Using Sort props custom field:\",{originalFieldName:fieldName,slugifiedFieldName,customSortParam,order});return sortData(filteredData,customSortParam,controls)// No unnecessary copy\n;}return filteredData// Fallback\n;}return filteredData// Fallback\n;},[filteredData,collections?.[0]?.data?.propertyControls,props.Sort?.defaultOrder,props.Sort?.by,props.Sort?.fieldName,props.Sort?.order,sortConfig?.type,sortConfig?.sortBy,sortConfig?.sortDirection,urlChangeTrigger]);// 🔔 Broadcast total results count for other components (e.g., ResultCounter)\nReact.useEffect(()=>{const count=Array.isArray(sortedData)?sortedData.length:0;const detail={count,// Provide current search term only when search is enabled\nsearch:props?.Search?.enableSearch?searchConfig?.term||\"\":\"\",// Identify source to help other listeners avoid feedback loops if needed\ncomponentId:\"catalog-display-simple\"};try{const evt=new CustomEvent(\"product-search-results\",{detail});document.dispatchEvent(evt);}catch{}},[sortedData?.length,props?.Search?.enableSearch,searchConfig?.term]);// SHOW EMPTY/NO RESULTS (wrapped in collection container for stability)\nif(false&&filteredData.length===0){// Zero-match detected (pre-pagination)\n// Create minimal paginationInfo for pre-pagination empty state case\nconst emptyStatePaginationInfo={currentPage:1,totalPages:1,itemsPerPage:0,totalItems:0,hasNextPage:false,hasPrevPage:false,type:\"load_more\",isLoading:false};// Get the original render structure by calling childrenFunction FIRST\nconst originalRender=typeof childrenFunction===\"function\"?childrenFunction([],emptyStatePaginationInfo,()=>setCurrentPage(prev=>prev+1)):null;const emptyStateInstance=props.displayMode===\"Desktop\"?props.EmptyState?.[0]:props.EmptyStatePhone?.[0];if(emptyStateInstance){const styledEmptyState=/*#__PURE__*/React.cloneElement(emptyStateInstance,{style:{...emptyStateInstance.props?.style||{},width:\"100%\",height:\"100%\",maxWidth:\"100%\",transform:\"none\"}});// Create wrapper element directly without function component\nconst emptyStateElement=/*#__PURE__*/React.createElement(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",padding:props.layout?.padding?`${props.layout.padding}px`:\"0px\",// Override any grid properties\ngridColumn:\"1 / -1\",gridRow:\"1 / -1\",// Ensure it spans the full container\nposition:\"relative\",minWidth:\"100%\",maxWidth:\"100%\"}},styledEmptyState);// Return the empty state element directly instead of complex object literal\nreturn emptyStateElement;}else{// Fallback to Message if no EmptyState instance\nconst messageText=generateNoResultsMessage(filterField,filterConfig,pageType);// Create message element directly without function component\nconst messageElement=/*#__PURE__*/React.createElement(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",padding:props.layout?.padding?`${props.layout.padding}px`:\"0px\",gridColumn:\"1 / -1\",gridRow:\"1 / -1\",position:\"relative\",minWidth:\"100%\",maxWidth:\"100%\"}},/*#__PURE__*/React.createElement(Message,{text:messageText}));// Return the message element directly instead of complex object literal\nreturn messageElement;}}// Favorites page with no results after favorites filter (wrap output for stability)\n// GUARD: Skip this section to prevent React error #300 - now handled in separate render paths below\nif(false&&generateFavoritesMessage(pageType,sortedData.length)){console.log(\"[CMS Simple] Favorites empty; wrapping Message in collection\");// Create minimal paginationInfo for favorites empty case\nconst favoritesPaginationInfo={currentPage:1,totalPages:1,itemsPerPage:0,totalItems:0,hasNextPage:false,hasPrevPage:false,type:\"load_more\",isLoading:false};// Get the original render structure by calling childrenFunction FIRST\nconst originalRender=typeof childrenFunction===\"function\"?childrenFunction([],favoritesPaginationInfo,()=>setCurrentPage(prev=>prev+1)):null;// Create message element directly without function component\nconst messageElement=/*#__PURE__*/React.createElement(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",padding:props.layout?.padding?`${props.layout.padding}px`:\"0px\",gridColumn:\"1 / -1\",gridRow:\"1 / -1\",position:\"relative\",minWidth:\"100%\",maxWidth:\"100%\"}},/*#__PURE__*/React.createElement(Message,{text:generateFavoritesMessage(pageType,sortedData.length)}));if(originalRender&&/*#__PURE__*/React.isValidElement(originalRender)){// DISABLED TO PREVENT REACT ERROR #300\n/*\n            return {\n                ...originalRender,\n                props: {\n                    ...originalRender.props,\n                    style: {\n                        ...(originalRender.props?.style || {}),\n                        display: \"flex\",\n                        gridTemplateColumns: \"none\",\n                        gridAutoColumns: \"none\",\n                        gridTemplateRows: \"none\",\n                        gap: 0,\n                    },\n                    children: messageElement,\n                },\n            };\n            */}return messageElement;}// Apply pagination to sorted data FIRST\nconst paginatedData=React.useMemo(()=>{if(!props.Pagination?.enable||!Array.isArray(sortedData)){return sortedData;}const{type}=props.Pagination;let startIndex,endIndex,paginatedResult;switch(type){case\"load_more\":// For Load More, show all items up to current page\nstartIndex=0;endIndex=currentPage*itemsPerPage;paginatedResult=sortedData.slice(startIndex,endIndex);break;case\"next_prev\":// For Next/Previous, show only current page items\nstartIndex=(currentPage-1)*itemsPerPage;endIndex=startIndex+itemsPerPage;paginatedResult=sortedData.slice(startIndex,endIndex);break;default:return sortedData;}return paginatedResult;},[sortedData,props.Pagination,currentPage,itemsPerPage]);// Handle pagination state updates and events in useEffect (not in useMemo)\nReact.useEffect(()=>{if(!props.Pagination?.enable||!Array.isArray(sortedData)){return;}const{type}=props.Pagination;let hasMore=false;let timeoutId=null;switch(type){case\"load_more\":const endIndex=currentPage*itemsPerPage;hasMore=endIndex<sortedData.length;setHasMore(hasMore);// Dispatch event to hide/show load more button\ntimeoutId=setTimeout(()=>{const hasMoreItemsEvent=new CustomEvent(\"hide-loadmore-button\",{detail:{hasMoreItems:hasMore}});document.dispatchEvent(hasMoreItemsEvent);},100);break;case\"next_prev\":const startIndex=(currentPage-1)*itemsPerPage;const endIndexNextPrev=startIndex+itemsPerPage;hasMore=endIndexNextPrev<sortedData.length;setHasMore(hasMore);// Dispatch event to update next/prev buttons\ntimeoutId=setTimeout(()=>{const updateNextPrevButtonsEvent=new CustomEvent(\"update_next_prev_buttons\",{detail:{hasMoreItems:hasMore,type:props.Pagination?.type,currentPage}});document.dispatchEvent(updateNextPrevButtonsEvent);},100);break;default:break;}// Cleanup function\nreturn()=>{if(timeoutId){clearTimeout(timeoutId);}};},[sortedData,props.Pagination,currentPage,itemsPerPage]);// CREATE PAGINATION INFO (now can use paginatedData info)\nconst paginationInfo=props.Pagination?.enable?{currentPage,totalPages:Math.ceil((sortedData?.length||0)/itemsPerPage),itemsPerPage,totalItems:sortedData?.length||0,hasNextPage:hasMore,hasPrevPage:currentPage>1,type:props.Pagination?.type||\"load_more\",isLoading:false}:{currentPage:1,totalPages:1,itemsPerPage:sortedData?.length||0,totalItems:sortedData?.length||0,hasNextPage:false,hasPrevPage:false,type:\"load_more\",isLoading:false};// Handle zero results state and events in useEffect (not in render body)\nReact.useEffect(()=>{if(!paginatedData||paginatedData.length===0){console.log(\"🔍 ZERO RESULTS DETECTED:\",{paginatedDataLength:paginatedData?.length||0,hasPaginatedData:!!paginatedData,displayMode:props.displayMode,hasEmptyStateProp:!!props.EmptyState,hasEmptyStatePhoneProp:!!props.EmptyStatePhone,emptyStateArray:props.EmptyState,emptyStatePhoneArray:props.EmptyStatePhone,emptyStateArrayLength:props.EmptyState?.length||0,emptyStatePhoneArrayLength:props.EmptyStatePhone?.length||0,emptyStateFirstElement:props.EmptyState?.[0],emptyStatePhoneFirstElement:props.EmptyStatePhone?.[0]});// Additional simple debug\nconsole.log(\"🔍 EMPTY STATE ARRAYS:\",{emptyState:props.EmptyState,emptyStatePhone:props.EmptyStatePhone,emptyStateType:typeof props.EmptyState,emptyStatePhoneType:typeof props.EmptyStatePhone});// Hide pagination buttons when there are no items to show\nif(props.Pagination?.enable){const zeroResultsTimeout=setTimeout(()=>{if(props.Pagination?.type===\"load_more\"){const hasMoreItemsEvent=new CustomEvent(\"hide-loadmore-button\",{detail:{hasMoreItems:false}});document.dispatchEvent(hasMoreItemsEvent);}else if(props.Pagination?.type===\"next_prev\"){const updateNextPrevButtonsEvent=new CustomEvent(\"update_next_prev_buttons\",{detail:{hasMoreItems:false,type:props.Pagination?.type,currentPage:1}});document.dispatchEvent(updateNextPrevButtonsEvent);}},100);return()=>clearTimeout(zeroResultsTimeout);}}},[paginatedData,props.Pagination,props.displayMode,props.EmptyState,props.EmptyStatePhone,currentPage]);// EARLY ZERO-RESULTS HANDLING (prevents transient crashes on in-page filter updates)\nif(!paginatedData||paginatedData.length===0){// Zero-match detected; rendering EmptyState with proper wrapper like FC_CatalogDisplay\n// (Logging moved to useEffect above to prevent render loops)\nconst emptyStateInstance=props.displayMode===\"Desktop\"?props.EmptyState?.[0]:props.EmptyStatePhone?.[0];// 🔧 DEBUG: Log empty state instance availability\n// console.log('🔍 Empty State Debug:', {\n//   displayMode: props.displayMode,\n//   hasEmptyState: !!props.EmptyState?.[0],\n//   hasEmptyStatePhone: !!props.EmptyStatePhone?.[0],\n//   emptyStateInstance: !!emptyStateInstance,\n//   emptyStateProps: emptyStateInstance\n//     ? Object.keys(emptyStateInstance.props || {})\n//     : 'none',\n// });\nif(emptyStateInstance){// 🔧 FIXED: Use wrapper approach like FC_CatalogDisplay instead of returning directly\nconst styledEmptyState=/*#__PURE__*/React.cloneElement(emptyStateInstance,{style:{...emptyStateInstance.props?.style||{},width:\"100%\",height:\"100%\",maxWidth:\"100%\",transform:\"none\"}});// Create a wrapper that completely overrides any grid styles\nconst EmptyStateWrapper=()=>/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\",padding:props.layout?.padding?`${props.layout.padding}px`:\"0px\",// Override any grid properties\n    gridColumn:\"1 / -1\",gridRow:\"1 / -1\",// Ensure it spans the full container\n    position:\"relative\",minWidth:\"100%\",maxWidth:\"100%\"},children:styledEmptyState});// Return the wrapper component directly\nreturn /*#__PURE__*/_jsx(EmptyStateWrapper,{});}console.log(\"🔍 FALLING BACK TO MESSAGE COMPONENT - No empty state instance found\");return /*#__PURE__*/_jsx(Message,{text:generateNoResultsMessage(filterField,filterConfig,pageType)});}// RENDER THE PAGINATED DATA\n// Pass the paginated data to Framer's render function\n// This preserves all your original design and layout\n// console.log('🎭 Preparing to call childrenFunction', {\n//   hasChildrenFunction: typeof childrenFunction === 'function',\n//   paginatedCount: paginatedData?.length || 0,\n//   paginationInfo,\n// });\nlet children=null;// 🔧 FIXED: Use empty function like DefaultEmpty - pagination handled via events\nif(typeof childrenFunction===\"function\"){try{children=childrenFunction(paginatedData,paginationInfo,()=>{});const isRenderable=Array.isArray(children)||/*#__PURE__*/React.isValidElement(children);if(process.env.NODE_ENV===\"development\"){console.log(\"👶 childrenFunction result\",{isRenderable,type:isRenderable?Array.isArray(children)?\"array\":children?.type||typeof children:typeof children});}if(!isRenderable){console.warn(\"[CMS Simple] childrenFunction returned a non-renderable value. Using empty array fallback.\");children=[];}}catch(err){console.error(\"[CMS Simple] childrenFunction threw during render; showing EmptyState fallback\",err);const emptyStateInstance=props.displayMode===\"Desktop\"?props.EmptyState?.[0]:props.EmptyStatePhone?.[0];if(emptyStateInstance){return /*#__PURE__*/React.cloneElement(emptyStateInstance,{style:{...emptyStateInstance.props?.style||{},width:\"100%\",height:\"100%\"}});}return /*#__PURE__*/_jsx(Message,{text:generateNoResultsMessage(filterField,filterConfig,pageType)});}}else{console.warn(\"[CMS Simple] childrenFunction is not callable; returning EmptyState/Message fallback\");const emptyStateInstance=props.displayMode===\"Desktop\"?props.EmptyState?.[0]:props.EmptyStatePhone?.[0];if(emptyStateInstance){return /*#__PURE__*/React.cloneElement(emptyStateInstance,{style:{...emptyStateInstance.props?.style||{},width:\"100%\",height:\"100%\"}});}return /*#__PURE__*/_jsx(Message,{text:generateNoResultsMessage(filterField,filterConfig,pageType)});}// FINAL RENDER\n// Use a more stable approach to avoid hydration issues\n// Rendering filtered children\n// Handle different initial states based on Search configuration\nconst hasItems=paginatedData&&paginatedData.length>0;const searchEnabled=props.Search?.enableSearch;const initialState=props.Search?.initialSearchState;// 🔧 FIXED: Override initial state when there's an active search term - only if search is enabled\nconst hasActiveSearch=props.Search?.enableSearch&&searchConfig?.active&&searchConfig?.term;const shouldOverrideInitialState=hasActiveSearch&&(initialState===\"none\"||initialState===\"custom\");// Choose the appropriate component based on initial state settings\nlet stateComponent=null;if(searchEnabled&&!shouldOverrideInitialState){// Search is enabled - check initial state settings (but only when no active search)\nif(initialState===\"none\"){// Show empty state as initial state\nconst emptyStateInstance=props.displayMode===\"Desktop\"?props.EmptyState?.[0]:props.EmptyStatePhone?.[0];if(emptyStateInstance){stateComponent=/*#__PURE__*/React.cloneElement(emptyStateInstance,{style:{...emptyStateInstance.props?.style||{},width:\"100%\",height:\"100%\"}});}}else if(initialState===\"custom\"){// Show custom initial state\nconst initialStateInstance=props.displayMode===\"Desktop\"?props.CustomInitialState?.[0]:props.CustomInitialStatePhone?.[0];if(initialStateInstance){stateComponent=/*#__PURE__*/React.cloneElement(initialStateInstance,{style:{...initialStateInstance.props?.style||{},width:\"100%\",height:\"100%\"}});}}// For \"all\" or any other case, proceed with normal display\n}else if(!hasItems&&!hasActiveSearch){// No items found and no active search - show empty state\nconst emptyStateInstance=props.displayMode===\"Desktop\"?props.EmptyState?.[0]:props.EmptyStatePhone?.[0];if(emptyStateInstance){stateComponent=/*#__PURE__*/React.cloneElement(emptyStateInstance,{style:{...emptyStateInstance.props?.style||{},width:\"100%\",height:\"100%\"}});}}// If we have a state component to show, return it\nif(stateComponent){const stateType=initialState===\"custom\"?\"custom-initial\":initialState===\"none\"?\"empty-initial\":\"empty\";// Showing state component\nreturn stateComponent;}// Create the final component to render with processed data\n// Use the filtered children from childrenFunction, not just the original collection\nconst finalComponent=/*#__PURE__*/React.cloneElement(collectionList,{style:{...collectionList.props?.style||{},width:\"100%\",height:\"100%\",...layoutStyle},children:children});// Returning final component\nreturn finalComponent;}/**\n * ERROR/STATUS MESSAGE COMPONENT\n *\n * Displays user-friendly messages when something goes wrong or\n * when there are no results to show.\n *\n * @param {string} text - The message to display\n */function Message({text}){return /*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",width:\"100%\",height:\"100%\",placeContent:\"center\",placeItems:\"center\",textAlign:\"center\",backgroundColor:\"rgba(136, 85, 255, 0.1)\",color:\"rgb(136, 85, 255)\",padding:20},children:text});}/**\n * FRAMER PROPERTY CONTROLS\n *\n * These controls appear in the Framer properties panel and allow\n * designers to configure the component without editing code.\n */addPropertyControls(FC_CatalogDisplay_v2,{displayMode:{type:ControlType.Enum,title:\"Responsive\",defaultValue:\"Desktop\",options:[\"Desktop\",\"Phone\"],optionTitles:[\"L\",\"S\"],displaySegmentedControl:true,description:\"Display the *L* or *S* instances connected below. (S optional)\"},CustomInitialState:{type:ControlType.ComponentInstance,title:\"Initial (L)\",hidden:props=>!props.Search?.enableSearch||props.Search?.initialSearchState!==\"custom\"},CustomInitialStatePhone:{type:ControlType.ComponentInstance,title:\"Initial (S)\",description:\"Connect to Initial Search State (off-page).\",hidden:props=>!props.Search?.enableSearch||props.Search?.initialSearchState!==\"custom\"},collectionList:{type:ControlType.ComponentInstance,title:\"CMS (L)\"},phoneInstance:{type:ControlType.ComponentInstance,title:\"CMS (S)\",description:\"Connect to CMS Collection (off-page).\"},EmptyState:{type:ControlType.ComponentInstance,title:\"Empty (L)\"},EmptyStatePhone:{type:ControlType.ComponentInstance,title:\"Empty (S)\",description:\"Connect to Empty State (off-page).\"},filterField:{type:ControlType.String,title:\"Filter: Field\"},filterValue:{type:ControlType.String,title:\"Filter: Value\",description:\"Value to match in the specified field (e.g., 'Summer Collection', 'Best Sellers'). Leave empty for no filtering. \\n\\n Note: Both Field and Value must be set for filtering to work.\"},Favorites:{type:ControlType.Object,title:\"Favorites\",controls:{enable:{type:ControlType.Enum,title:\"Enable\",options:[\"yes\",\"no\"],optionTitles:[\"Yes\",\"No\"],defaultValue:\"no\",displaySegmentedControl:true,description:\"Enabling will limit scope to items favorited by the user.\"}}},Search:{type:ControlType.Object,title:\"Search\",optional:true,controls:{enableSearch:{type:ControlType.Boolean,title:\"Enable\",defaultValue:false},initialSearchState:{type:ControlType.Enum,title:\"Initial State\",options:[\"all\",\"none\",\"custom\"],optionTitles:[\"Full\",\"Empty\",\"Custom\"],defaultValue:\"all\",description:\"Use custom to display product or search suggestions (connect your component instance on the main panel).\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\",hidden:props=>!props.enableSearch},searchFields:{type:ControlType.Array,title:\"Scope\",control:{type:ControlType.String,title:\"Field Name\"},defaultValue:[\"Title\"],description:\"CMS field names to search in (e.g., Title, Vendor, Collections)\",hidden:props=>!props.enableSearch}}},Sort:{type:ControlType.Object,title:\"Sort\",controls:{defaultOrder:{type:ControlType.Enum,title:\"Default\",options:[\"none\",\"random\",\"sort\"],optionTitles:[\"None\",\"Random\",\"Sort\"],defaultValue:\"none\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},by:{type:ControlType.Enum,title:\"By\",options:[\"price\",\"title\",\"newest\",\"custom\"],optionTitles:[\"Price\",\"Title\",\"Newest\",\"Custom\"],defaultValue:\"title\",hidden:({defaultOrder})=>defaultOrder!==\"sort\"},fieldName:{type:ControlType.String,title:\"Field Name\",placeholder:\"Collections\",hidden:({defaultOrder,by})=>defaultOrder!==\"sort\"||by!==\"custom\"},order:{type:ControlType.Enum,title:\"Order\",options:[\"ascending\",\"descending\"],optionTitles:[\"ASC ↑\",\"DESC ↓\"],defaultValue:\"ascending\",displaySegmentedControl:true,hidden:({defaultOrder,by})=>defaultOrder!==\"sort\"||by===\"newest\"}}},Pagination:{type:ControlType.Object,title:\"Pagination\",controls:{enable:{type:ControlType.Boolean,title:\"Enable\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\"},type:{type:ControlType.Enum,title:\"Type\",options:[\"load_more\",\"next_prev\"],optionTitles:[\"Load More\",\"Next/Prev\"],defaultValue:\"load_more\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\",hidden:({enable})=>!enable},items:{type:ControlType.Number,title:\"Items\",defaultValue:12,min:1,step:1,displayStepper:true,hidden:({enable})=>!enable,description:\"Number of items per page.\"}}},layout:{type:ControlType.Object,title:\"Layout\",optional:true,controls:{type:{type:ControlType.Enum,defaultValue:\"grid\",options:[\"stack\",\"grid\"],optionTitles:[\"Stack\",\"Grid\"],displaySegmentedControl:true},// Stack specific controls\ndirection:{type:ControlType.Enum,defaultValue:\"vertical\",options:[\"horizontal\",\"vertical\"],optionTitles:[\"Horizontal\",\"Vertical\"],optionIcons:[\"direction-horizontal\",\"direction-vertical\"],displaySegmentedControl:true,hidden:props=>props.type!==\"stack\"},wrap:{type:ControlType.Boolean,defaultValue:false,title:\"Wrap\",hidden:props=>props.type!==\"stack\"},stackMinWidth:{type:ControlType.Number,defaultValue:200,min:1,max:1e3,step:1,title:\"Min Width\",hidden:props=>props.type!==\"stack\"||!props.wrap},distribute:{type:ControlType.Enum,defaultValue:\"start\",options:[\"start\",\"center\",\"end\",\"space-between\",\"space-around\",\"space-evenly\"],optionTitles:[\"Start\",\"Center\",\"End\",\"Space Between\",\"Space Around\",\"Space Evenly\"],hidden:props=>props.type!==\"stack\"},align:{type:ControlType.Enum,defaultValue:\"start\",options:[\"start\",\"center\",\"end\"],optionTitles:[\"Start\",\"Center\",\"End\"],optionIcons:[\"align-left\",\"align-center\",\"align-right\"],displaySegmentedControl:true,hidden:props=>props.type!==\"stack\"||props.direction!==\"vertical\"},alignH:{type:ControlType.Enum,defaultValue:\"start\",options:[\"start\",\"center\",\"end\"],optionTitles:[\"Top\",\"Center\",\"Bottom\"],optionIcons:[\"align-top\",\"align-middle\",\"align-bottom\"],displaySegmentedControl:true,title:\"Align\",hidden:props=>props.type!==\"stack\"||props.direction!==\"horizontal\"},// Grid specific controls\ncolumns:{type:ControlType.Enum,defaultValue:\"fixed\",options:[\"auto\",\"fixed\"],optionTitles:[\"Auto\",\"Fixed\"],displaySegmentedControl:true,hidden:props=>props.type!==\"grid\"},columnCount:{type:ControlType.Number,defaultValue:3,min:1,step:1,displayStepper:true,title:\"Columns\",hidden:props=>props.type!==\"grid\"||props.columns===\"auto\"},gridWidth:{type:ControlType.Number,defaultValue:300,min:1,max:1e3,step:1,title:\"Min Width\",hidden:props=>props.type!==\"grid\"||props.columns===\"fixed\"},maxColumns:{type:ControlType.Number,defaultValue:4,min:1,step:1,title:\"Max Col\",displayStepper:true,hidden:props=>props.type!==\"grid\"||props.columns===\"fixed\"},gridAlign:{type:ControlType.Enum,defaultValue:\"center\",options:[\"start\",\"center\",\"end\"],optionTitles:[\"Left\",\"Center\",\"Right\"],displaySegmentedControl:true,title:\"Align\",hidden:props=>props.type!==\"grid\"},// Common controls\ngap:{type:ControlType.Number,defaultValue:24,min:0,step:1,title:\"Gap\"},gapY:{type:ControlType.Number,defaultValue:24,min:0,step:1,title:\"Gap Y\",hidden:props=>props.type!==\"grid\"},padding:{type:ControlType.FusedNumber,title:\"Padding\",defaultValue:0,min:0,toggleKey:\"paddingPerSide\",toggleTitles:[\"All\",\"Sides\"],valueKeys:[\"paddingTop\",\"paddingRight\",\"paddingBottom\",\"paddingLeft\"],valueLabels:[\"T\",\"R\",\"B\",\"L\"]},radius:{type:ControlType.FusedNumber,title:\"Radius\",defaultValue:0,min:0,toggleKey:\"radiusPerSide\",toggleTitles:[\"All\",\"Sides\"],valueKeys:[\"radiusTopLeft\",\"radiusTopRight\",\"radiusBottomRight\",\"radiusBottomLeft\"],valueLabels:[\"TL\",\"TR\",\"BR\",\"BL\"]},background:{type:ControlType.Color,title:\"Background\",defaultValue:\"#FFFFFF00\"}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FC_CatalogDisplay_v2\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FC_CatalogDisplay_Beta.map","// Frame component with configurable image position that can be connected to CMS variables\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";/**\n * @framerIntrinsicWidth 200\n * @framerIntrinsicHeight 200\n * \n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function FrameWithImagePosition(props){const{image={src:\"https://framerusercontent.com/images/GfGkADagM4KEibNcIiRUWlfrR0.jpg\",alt:\"Gradient 1 - Blue\"},imagePosition=\"center\",backgroundColor,borderRadius,style}=props;const getBackgroundPosition=position=>{const positionMap={topLeft:\"left top\",topCenter:\"center top\",topRight:\"right top\",left:\"left center\",center:\"center center\",right:\"right center\",bottomLeft:\"left bottom\",bottomCenter:\"center bottom\",bottomRight:\"right bottom\"};return positionMap[position];};return /*#__PURE__*/_jsx(\"div\",{style:{...style,position:\"relative\",width:\"100%\",height:\"100%\",backgroundColor,backgroundImage:`url(${image.src})`,backgroundSize:\"cover\",backgroundPosition:getBackgroundPosition(imagePosition),backgroundRepeat:\"no-repeat\",borderRadius,overflow:\"hidden\"}});}addPropertyControls(FrameWithImagePosition,{image:{type:ControlType.ResponsiveImage,title:\"Image\"},imagePosition:{type:ControlType.Enum,title:\"Image Position\",options:[\"topLeft\",\"topCenter\",\"topRight\",\"left\",\"center\",\"right\",\"bottomLeft\",\"bottomCenter\",\"bottomRight\"],optionTitles:[\"Top Left\",\"Top Center\",\"Top Right\",\"Left\",\"Center\",\"Right\",\"Bottom Left\",\"Bottom Center\",\"Bottom Right\"],defaultValue:\"center\"},backgroundColor:{type:ControlType.Color,title:\"Background\",defaultValue:\"#FFFFFF\"},borderRadius:{type:ControlType.BorderRadius,title:\"Radius\",defaultValue:\"0px\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FrameWithImagePosition\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"200\",\"framerIntrinsicHeight\":\"200\",\"framerSupportedLayoutHeight\":\"any\",\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FrameWithImagePosition.map"],"mappings":"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"}