{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/kjPrzZunq63iVFP0YNVc/gNKnuStQeDDAwO7xyhq0/QuantitySelector.js"],
  "sourcesContent": ["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{motion}from\"framer-motion\";import{useState,useEffect,useRef}from\"react\";export var QuantitySelectorType;(function(QuantitySelectorType){QuantitySelectorType[\"MINUS\"]=\"minus\";QuantitySelectorType[\"INPUT\"]=\"input\";QuantitySelectorType[\"PLUS\"]=\"plus\";})(QuantitySelectorType||(QuantitySelectorType={}));export default function QuantitySelector(props){const{type,shopifyData,variantIndex,initialQuantity,width,height,backgroundColor,border,textColor,customElement,showBorder,cornerRadius,minQuantity,maxQuantity,onChange,font}=props;const[variantId,setVariantId]=useState(\"\");useEffect(()=>{try{if(typeof shopifyData===\"string\"&&shopifyData.trim()){const parsed=JSON.parse(shopifyData);if(parsed&&Array.isArray(parsed.variants)&&parsed.variants.length>0){const variant=parsed.variants[variantIndex]||parsed.variants[0];if(variant&&variant.id){setVariantId(variant.id);}}}else if(shopifyData&&typeof shopifyData===\"object\"){if(shopifyData.variants&&Array.isArray(shopifyData.variants)&&shopifyData.variants.length>0){const variant=shopifyData.variants[variantIndex]||shopifyData.variants[0];if(variant&&variant.id){setVariantId(variant.id);}}}}catch(error){console.error(\"Error parsing Shopify data:\",error);}},[shopifyData,variantIndex]);const inputRef=useRef(null);const[inputValue,setInputValue]=useState(initialQuantity.toString());const[currentQuantity,setCurrentQuantity]=useState(initialQuantity);const findQuantityInputs=()=>{if(!variantId)return[];return document.querySelectorAll(`input[name=\"quantity\"]`);};const updateAllInputs=value=>{const inputs=findQuantityInputs();inputs.forEach(input=>{input.value=value.toString();});};const getCurrentQuantity=()=>{if(!variantId)return initialQuantity;const inputs=findQuantityInputs();if(inputs.length>0){const value=parseInt(inputs[0].value,10);return isNaN(value)?initialQuantity:value;}return initialQuantity;};// Check for changes every 300ms and update the local state\nuseEffect(()=>{const checkForChanges=()=>{const currentQty=getCurrentQuantity();if(currentQty!==currentQuantity){setCurrentQuantity(currentQty);if(type===\"input\"){setInputValue(currentQty.toString());}}};// Run immediately\ncheckForChanges();// Then set up interval\nconst intervalId=setInterval(checkForChanges,300);return()=>clearInterval(intervalId);},[type,variantId,currentQuantity]);// Decrement quantity\nconst handleDecrement=()=>{const currentQty=getCurrentQuantity();if(currentQty>minQuantity){const newQty=currentQty-1;updateAllInputs(newQty);setCurrentQuantity(newQty);if(type===\"input\"){setInputValue(newQty.toString());}if(typeof onChange===\"function\"){onChange(newQty);}}};// Increment quantity\nconst handleIncrement=()=>{const currentQty=getCurrentQuantity();if(currentQty<maxQuantity){const newQty=currentQty+1;updateAllInputs(newQty);setCurrentQuantity(newQty);if(type===\"input\"){setInputValue(newQty.toString());}if(typeof onChange===\"function\"){onChange(newQty);}}};// Handle input change\nconst handleInputChange=e=>{const value=e.target.value;setInputValue(value);// Convert to number and validate\nconst numValue=parseInt(value,10);if(!isNaN(numValue)&&numValue>=minQuantity&&numValue<=maxQuantity){updateAllInputs(numValue);setCurrentQuantity(numValue);if(typeof onChange===\"function\"){onChange(numValue);}}};// Handle input blur\nconst handleInputBlur=()=>{// Validate and fix the input value\nconst numValue=parseInt(inputValue,10);if(isNaN(numValue)||numValue<minQuantity){setInputValue(minQuantity.toString());updateAllInputs(minQuantity);setCurrentQuantity(minQuantity);if(typeof onChange===\"function\"){onChange(minQuantity);}}else if(numValue>maxQuantity){setInputValue(maxQuantity.toString());updateAllInputs(maxQuantity);setCurrentQuantity(maxQuantity);if(typeof onChange===\"function\"){onChange(maxQuantity);}}};// Handle key press (for Enter)\nconst handleKeyDown=e=>{if(e.key===\"Enter\"){handleInputBlur();inputRef.current?.blur();}};// SVG icons for plus and minus\nconst MinusIcon=()=>/*#__PURE__*/_jsx(\"svg\",{width:\"14\",height:\"2\",viewBox:\"0 0 14 2\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M1 1H13\",stroke:textColor,strokeWidth:\"1.5\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})});const PlusIcon=()=>/*#__PURE__*/_jsx(\"svg\",{width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M7 1V13M1 7H13\",stroke:textColor,strokeWidth:\"1.5\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})});// Render based on type\nlet content;let clickHandler=null;let hoverStyle={};let activeStyle={};let isDisabled=false;// Determine if button should be disabled\nisDisabled=type===\"minus\"&&currentQuantity<=minQuantity||type===\"plus\"&&currentQuantity>=maxQuantity;switch(type){case\"minus\":clickHandler=isDisabled?null:handleDecrement;content=customElement||/*#__PURE__*/_jsx(MinusIcon,{});if(!isDisabled){hoverStyle={opacity:.8};activeStyle={scale:.95};}break;case\"plus\":clickHandler=isDisabled?null:handleIncrement;content=customElement||/*#__PURE__*/_jsx(PlusIcon,{});if(!isDisabled){hoverStyle={opacity:.8};activeStyle={scale:.95};}break;case\"input\":content=/*#__PURE__*/_jsx(\"input\",{ref:inputRef,name:\"quantity\",type:\"text\",value:inputValue,onChange:handleInputChange,onBlur:handleInputBlur,onKeyDown:handleKeyDown,style:{width:\"100%\",padding:\"0\",margin:\"0\",border:\"none\",outline:\"none\",textAlign:\"center\",backgroundColor:\"transparent\",color:textColor,fontFamily:font.fontFamily,fontSize:font.fontSize,fontWeight:font.fontWeight,lineHeight:font.lineHeight},min:minQuantity,max:maxQuantity});break;}return /*#__PURE__*/_jsx(motion.div,{style:{display:\"flex\",alignItems:\"center\",justifyContent:\"center\",backgroundColor:backgroundColor,height:\"100%\",border,borderRadius:cornerRadius,color:textColor,opacity:isDisabled?.5:1,cursor:clickHandler?\"pointer\":\"default\",overflow:\"hidden\"},whileHover:hoverStyle,whileTap:activeStyle,onClick:clickHandler,children:content});}// Default props\nQuantitySelector.defaultProps={type:\"input\",shopifyData:\"\",variantIndex:0,initialQuantity:1,height:40,backgroundColor:\"#FFFFFF\",borderColor:\"#E0E0E0\",textColor:\"#000000\",cornerRadius:4,minQuantity:1,maxQuantity:99,showBorder:true,font:{fontSize:14,fontFamily:\"Inter, sans-serif\",fontWeight:500,lineHeight:\"1.5em\",letterSpacing:\"0em\"}};// Property controls\naddPropertyControls(QuantitySelector,{type:{type:ControlType.Enum,title:\"Type\",options:Object.values(QuantitySelectorType),defaultValue:QuantitySelector.defaultProps.type,displaySegmentedControl:true},shopifyData:{type:ControlType.String,title:\"Shopify Data\",defaultValue:QuantitySelector.defaultProps.shopifyData,description:\"JSON data from Shopify product\"},variantIndex:{type:ControlType.Number,title:\"Variant Index\",defaultValue:QuantitySelector.defaultProps.variantIndex,min:0,step:1,displayStepper:true,description:\"Index of the product variant to use\"},initialQuantity:{type:ControlType.Number,title:\"Initial Quantity\",defaultValue:QuantitySelector.defaultProps.initialQuantity,min:1,step:1,displayStepper:true},backgroundColor:{type:ControlType.Color,title:\"Background\",defaultValue:QuantitySelector.defaultProps.backgroundColor},border:{type:ControlType.Border,title:\"Border\"},textColor:{type:ControlType.Color,title:\"Text Color\",defaultValue:QuantitySelector.defaultProps.textColor},cornerRadius:{type:ControlType.BorderRadius,title:\"Corner Radius\"},minQuantity:{type:ControlType.Number,title:\"Min Quantity\",defaultValue:QuantitySelector.defaultProps.minQuantity,min:1,step:1},maxQuantity:{type:ControlType.Number,title:\"Max Quantity\",defaultValue:QuantitySelector.defaultProps.maxQuantity,min:1,step:1},font:{type:ControlType.Font,controls:\"extended\",displayFontSize:true,displayTextAlignment:false,defaultFontType:\"sans-serif\",defaultValue:QuantitySelector.defaultProps.font}});\nexport const __FramerMetadata__ = {\"exports\":{\"QuantitySelectorType\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"QuantitySelector\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./QuantitySelector.map"],
  "mappings": "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",
  "names": ["QuantitySelectorType", "QuantitySelector", "props", "type", "shopifyData", "variantIndex", "initialQuantity", "width", "height", "backgroundColor", "border", "textColor", "customElement", "showBorder", "cornerRadius", "minQuantity", "maxQuantity", "onChange", "font", "variantId", "setVariantId", "ye", "ue", "parsed", "variant", "error", "inputRef", "pe", "inputValue", "setInputValue", "currentQuantity", "setCurrentQuantity", "findQuantityInputs", "updateAllInputs", "value", "input", "getCurrentQuantity", "inputs", "checkForChanges", "currentQty", "intervalId", "handleDecrement", "newQty", "handleIncrement", "handleInputChange", "e", "numValue", "handleInputBlur", "handleKeyDown", "MinusIcon", "p", "PlusIcon", "content", "clickHandler", "hoverStyle", "activeStyle", "isDisabled", "motion", "addPropertyControls", "ControlType"]
}
