{"version":3,"file":"StickerDrag_prod.BwKBWWIG.mjs","names":["React.useContext","React.useMemo","React.Fragment","React.forwardRef","React.useRef","React.useId","SVG","RichText","UtilsComponentMessage","useRef","useState","useCallback","React"],"sources":["https:/framerusercontent.com/modules/fMDE7Cqb2uOvQFAHEP2m/cRfVFRl0izzBulKFjOAe/W7oLCU4_B.js","https:/framer.com/m/Utils-Component-Message-ZVoG.js@cRfVFRl0izzBulKFjOAe","https:/framerusercontent.com/modules/aej5zpwxBpkMdzOteBwy/DWeAZ5wauvGM5oFwVdgS/Utils.js","https:/framer.com/m/Utils-FINc.js","https:/framerusercontent.com/modules/EwsosyUWyFy0lyKZ0Qej/zppIW0Ev7n21xwa4VsNp/StickerDrag_prod.js"],"sourcesContent":["// Generated by Framer (0b8b5e5)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ControlType,cx,RichText,SVG,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";const serializationHash=\"framer-q8Ttd\";const variantClassNames={XvqTw0Be9:\"framer-v-jjcw9a\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants===null||variants===void 0?void 0:variants.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={bounce:.2,delay:0,duration:.4,type:\"spring\"};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value!==null&&value!==void 0?value:config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion(React.Fragment);const getProps=({height,id,subtitle,title,width,...props})=>{var _ref,_ref1;return{...props,WuF2iG84P:(_ref=subtitle!==null&&subtitle!==void 0?subtitle:props.WuF2iG84P)!==null&&_ref!==void 0?_ref:\"Set up the component by adding background and bouncer elements to the component properties.\",yeAnKbEUZ:(_ref1=title!==null&&title!==void 0?title:props.yeAnKbEUZ)!==null&&_ref1!==void 0?_ref1:\"Screen Saver\"};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{activeLocale,setLocale}=useLocaleInfo();const{style,className,layoutId,variant,yeAnKbEUZ,WuF2iG84P,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({defaultVariant:\"XvqTw0Be9\",variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const ref1=React.useRef(null);const defaultLayoutId=React.useId();const sharedStyleClassNames=[];const componentViewport=useComponentViewport();return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId!==null&&layoutId!==void 0?layoutId:defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsx(motion.div,{...restProps,...gestureHandlers,className:cx(serializationHash,...sharedStyleClassNames,\"framer-jjcw9a\",className,classNames),\"data-framer-name\":\"Default\",layoutDependency:layoutDependency,layoutId:\"XvqTw0Be9\",ref:ref!==null&&ref!==void 0?ref:ref1,style:{backgroundColor:\"rgba(136, 85, 255, 0.1)\",...style},children:/*#__PURE__*/_jsxs(motion.div,{className:\"framer-uh2i08\",layoutDependency:layoutDependency,layoutId:\"aM7oiNoFL\",children:[/*#__PURE__*/_jsx(SVG,{className:\"framer-flw0dh\",\"data-framer-name\":\"Logo\",layout:\"position\",layoutDependency:layoutDependency,layoutId:\"GthLmGmBt\",opacity:1,svg:'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 28 28\"><g id=\"ss11036020200_1\"><path d=\"M 0 0 L 28 0 L 28 28 L 0 28 Z\" fill=\"transparent\"></path><path d=\"M 21 7.113 C 21 7.041 21.029 6.971 21.079 6.921 L 27.534 0.465 C 27.613 0.388 27.73 0.365 27.831 0.407 C 27.933 0.449 28 0.548 28 0.658 L 28 13.888 C 28 13.96 27.971 14.028 27.921 14.079 L 21 21 Z M 7 21 L 7 7.658 C 7 7.548 6.933 7.449 6.831 7.407 C 6.73 7.365 6.613 7.388 6.534 7.465 L 0.079 13.921 C 0.028 13.972 0 14.041 0 14.113 L 0 27.728 C 0 27.877 0.122 28 0.273 28 L 13.888 28 C 13.96 28 14.028 27.971 14.079 27.921 L 21 21 Z\" fill=\"rgb(153, 102, 255)\"></path></g></svg>',svgContentId:11036020200,withExternalLayout:true}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-k3ullq\",layoutDependency:layoutDependency,layoutId:\"E3DQBYSAf\",children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"SW50ZXItQm9sZA==\",\"--framer-font-family\":'\"Inter\", \"Inter Placeholder\", sans-serif',\"--framer-font-size\":\"11px\",\"--framer-font-weight\":\"700\",\"--framer-letter-spacing\":\"-0.02em\",\"--framer-line-height\":\"1em\",\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(153, 102, 255))\"},children:\"Screen Saver\"})}),className:\"framer-q0gs4u\",\"data-framer-name\":\"Title\",fonts:[\"Inter-Bold\"],layoutDependency:layoutDependency,layoutId:\"UqJwZqJjg\",style:{\"--extracted-r6o4lv\":\"rgb(153, 102, 255)\",\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},text:yeAnKbEUZ,verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--framer-font-size\":\"11px\",\"--framer-letter-spacing\":\"-0.03em\",\"--framer-line-height\":\"1.4em\",\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgba(153, 102, 255, 0.7))\"},children:\"Set up the component by adding background and bouncer elements to the component properties.\"})}),className:\"framer-g5dqhc\",\"data-framer-name\":\"Subtitle\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"RJ7UF99m8\",style:{\"--extracted-r6o4lv\":\"rgba(153, 102, 255, 0.7)\",\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},text:WuF2iG84P,verticalAlignment:\"top\",withExternalLayout:true})]})]})})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-q8Ttd.framer-qanqo2, .framer-q8Ttd .framer-qanqo2 { display: block; }\",\".framer-q8Ttd.framer-jjcw9a { align-content: center; align-items: center; display: flex; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: 200px; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 400px; }\",\".framer-q8Ttd .framer-uh2i08 { align-content: center; align-items: center; display: flex; flex: 1 0 0px; flex-direction: column; flex-wrap: nowrap; gap: 16px; height: min-content; justify-content: center; overflow: hidden; padding: 0px 20px 0px 20px; position: relative; width: 1px; }\",\".framer-q8Ttd .framer-flw0dh { flex: none; height: 28px; position: relative; width: 28px; }\",\".framer-q8Ttd .framer-k3ullq { align-content: center; align-items: center; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 12px; height: min-content; justify-content: center; max-width: 200px; overflow: hidden; padding: 0px; position: relative; width: 100%; }\",\".framer-q8Ttd .framer-q0gs4u, .framer-q8Ttd .framer-g5dqhc { flex: none; height: auto; position: relative; white-space: pre-wrap; width: 100%; word-break: break-word; word-wrap: break-word; }\",\"@supports (background: -webkit-named-image(i)) and (not (font-palette:dark)) { .framer-q8Ttd.framer-jjcw9a, .framer-q8Ttd .framer-uh2i08, .framer-q8Ttd .framer-k3ullq { gap: 0px; } .framer-q8Ttd.framer-jjcw9a > * { margin: 0px; margin-left: calc(10px / 2); margin-right: calc(10px / 2); } .framer-q8Ttd.framer-jjcw9a > :first-child { margin-left: 0px; } .framer-q8Ttd.framer-jjcw9a > :last-child { margin-right: 0px; } .framer-q8Ttd .framer-uh2i08 > * { margin: 0px; margin-bottom: calc(16px / 2); margin-top: calc(16px / 2); } .framer-q8Ttd .framer-uh2i08 > :first-child, .framer-q8Ttd .framer-k3ullq > :first-child { margin-top: 0px; } .framer-q8Ttd .framer-uh2i08 > :last-child, .framer-q8Ttd .framer-k3ullq > :last-child { margin-bottom: 0px; } .framer-q8Ttd .framer-k3ullq > * { margin: 0px; margin-bottom: calc(12px / 2); margin-top: calc(12px / 2); } }\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 200\n * @framerIntrinsicWidth 400\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"fixed\"]}}}\n * @framerVariables {\"yeAnKbEUZ\":\"title\",\"WuF2iG84P\":\"subtitle\"}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerComponentViewportWidth true\n */const FramerW7oLCU4_B=withCSS(Component,css,\"framer-q8Ttd\");export default FramerW7oLCU4_B;FramerW7oLCU4_B.displayName=\"Utils/Component Message\";FramerW7oLCU4_B.defaultProps={height:200,width:400};addPropertyControls(FramerW7oLCU4_B,{yeAnKbEUZ:{defaultValue:\"Screen Saver\",displayTextArea:false,title:\"Title\",type:ControlType.String},WuF2iG84P:{defaultValue:\"Set up the component by adding background and bouncer elements to the component properties.\",displayTextArea:false,title:\"Subtitle\",type:ControlType.String}});addFonts(FramerW7oLCU4_B,[{explicitInter:true,fonts:[{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/DpPBYI0sL4fYLgAkX8KXOPVt7c.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/4RAEQdEOrcnDkhHiiCbJOw92Lk.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/1K3W8DizY3v4emK8Mb08YHxTbs.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/tUSCtfYVM1I1IchuyCwz9gDdQ.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/VgYFWiwsAC5OYxAycRXXvhze58.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/DXD0Q7LSl7HEvDzucnyLnGBHM.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/GIryZETIX4IFypco5pYZONKhJIo.woff2\",weight:\"700\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/5vvr9Vy74if2I6bQbJvbw7SY1pQ.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/EOr0mi4hNtlgWNn9if640EZzXCo.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/Y9k9QrlZAqio88Klkmbd8VoMQc.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/OYrD2tBIBPvoJXiIHnLoOXnY9M.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/JeYwfuaPfZHQhEG8U5gtPDZ7WQ.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/vQyevYAyHtARFwPqUzQGpnDs.woff2\",weight:\"400\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/b6Y37FthZeALduNqHicBT6FutY.woff2\",weight:\"400\"}]}],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerW7oLCU4_B\",\"slots\":[],\"annotations\":{\"framerImmutableVariables\":\"true\",\"framerComponentViewportWidth\":\"true\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]}}}\",\"framerVariables\":\"{\\\"yeAnKbEUZ\\\":\\\"title\\\",\\\"WuF2iG84P\\\":\\\"subtitle\\\"}\",\"framerIntrinsicWidth\":\"400\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"200\",\"framerDisplayContentsDiv\":\"false\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./W7oLCU4_B.map","/*\n * Utils/Component Message\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/fMDE7Cqb2uOvQFAHEP2m/cRfVFRl0izzBulKFjOAe/W7oLCU4_B.js\"\nexport { default } from \"https://framerusercontent.com/modules/fMDE7Cqb2uOvQFAHEP2m/cRfVFRl0izzBulKFjOAe/W7oLCU4_B.js\"\n","import{jsx as _jsx}from\"react/jsx-runtime\";import{cloneElement}from\"react\";import UtilsComponentMessage from\"https://framer.com/m/Utils-Component-Message-ZVoG.js@cRfVFRl0izzBulKFjOAe\";export const ComponentMessage=({title,subtitle,style})=>{return /*#__PURE__*/_jsx(UtilsComponentMessage,{yeAnKbEUZ:title,WuF2iG84P:subtitle,style:{width:\"100%\",height:\"100%\",...style}});};/* \n    This function is also used many times to make sure components work even if we set a color style like \"Accent\" on their color properties. We can make this into a utility function.\n*/export const extractRGBColorFromString=str=>{const rgbRegex=/(rgba|rgb)\\(.*?\\)/g;const match=str.match(rgbRegex);return match?match[0]:str;};/*\n    This function makes a connected layer use the sizing of the component it is inside,\n    preventing it from being larger or smaller than the component's size.\n    Use this on layers connected with ControlType.ComponentInstance.\n*/export function styleLayer(layer,style={}){layer=Array.isArray(layer)?layer[0]:layer;let newLayer=layer;const{width,height,...otherStyle}=style;if(layer&&layer.props&&style&&(width||height)){if(typeof layer.type===\"function\"&&typeof layer.props.children===\"object\"){newLayer=/*#__PURE__*/cloneElement(layer,{children:{...layer.props.children,props:{...layer.props.children.props,style:{...layer.props.children.props.style,...width&&{width},...height&&{height},...otherStyle}}}});}else{newLayer=/*#__PURE__*/cloneElement(layer,{style:{...layer.props.style,...width&&{width},...height&&{height},...otherStyle}});}}return newLayer;}\nexport const __FramerMetadata__ = {\"exports\":{\"ComponentMessage\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"extractRGBColorFromString\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"styleLayer\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Utils.map","/*\n * Utils\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/aej5zpwxBpkMdzOteBwy/DWeAZ5wauvGM5oFwVdgS/Utils.js\"\n","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import React,{useEffect,useRef,useCallback,useState}from\"react\";import{addPropertyControls,ControlType}from\"framer\";// @ts-expect-error Framer resolves its component utility module at runtime.\nimport{ComponentMessage}from\"https://framer.com/m/Utils-FINc.js\";// ============================================================================\n// CONSTANTS (matching original source exactly)\n// ============================================================================\nconst RENDER_SCALE=2;const PAD_BASE=20// Base padding in pixels\n;const MESH_GRID_SIZE=32// Must use grid for smooth wave deformation\n;const DRAG_Z_INDEX_BASE=1e3// Base z-index for dragged stickers\n;const DEFAULT_IMAGE={src:\"https://framerusercontent.com/images/TMvwIYx1D64taEFWH2PRXshqhyI.png?width=200&height=200\",alt:\"\"};// Global counter to ensure each dragged sticker gets a unique, incrementing z-index\nlet zIndexCounter=DRAG_Z_INDEX_BASE;/**\n * Get the next z-index value for a dragged sticker\n * Increments the global counter so the most recently dragged sticker is always on top\n */function getNextZIndex(){zIndexCounter+=1;return zIndexCounter;}// Tweakables from original\nconst DRAG_TILT_SENSITIVITY=3;const DRAG_MAX_TILT_DEG=30;const DRAG_TILT_SMOOTHING=.05;const SHEEN_STRENGTH=.6;const SHEEN_TILT_SHIFT=.05;const SHEEN_TILT_DEADZONE=.035;const ANIM_SPEED=1.92;const HOLO_MOTION_BUMP=.15;const HOLO_MOTION_DECAY=.88;// ============================================================================\n// WebGL Shaders (from original source)\n// ============================================================================\nconst VERTEX_SHADER=`\nattribute vec2 aPos;\nattribute vec2 aUV;\nuniform float uPeel;\nuniform float uLift;\nuniform float uPeelAngle;\nuniform float uPasting;\nuniform float uScale;\nuniform float uElevation;\nvarying vec2 vUV;\nvarying float vHi;\nvarying float vSh;\n\nvoid main() {\n    vUV = aUV;\n    vec2 p = aPos;\n    vHi = 0.0;\n    vSh = 0.0;\n    \n    if (uPeel > 0.0) {\n        vec2 peelAxis = vec2(cos(uPeelAngle), sin(uPeelAngle));\n        vec2 uvCentered = aUV - vec2(0.5);\n        float proj = dot(uvCentered, peelAxis);\n        float diag = 0.5 - proj;\n        \n        // Peel line travels across sticker and EXITS completely\n        float peelLine = -0.3 + uPeel * 2.0;\n        \n        // How \"lifted\" is this vertex? 0 = flat, 1 = fully lifted\n        float rampWidth = 0.6;\n        float lifted = smoothstep(peelLine - rampWidth, peelLine, diag);\n        lifted = 1.0 - lifted;\n        \n        // Scale based on how lifted (uElevation controls magnitude)\n        float scale = 1.0 + lifted * uElevation;\n        p *= scale;\n        \n        // Curve outward at the ramp (creates the bent paper look)\n        float inRamp = smoothstep(peelLine - rampWidth, peelLine - rampWidth * 0.5, diag) *\n                       smoothstep(peelLine + 0.05, peelLine - rampWidth * 0.3, diag);\n        \n        float curveAmount = uPasting > 0.5 ? 0.06 : 0.12;\n        p += (-peelAxis) * inRamp * curveAmount;\n        \n        // Shading on the curved ramp\n        float t = smoothstep(peelLine - rampWidth, peelLine, diag);\n        vHi = inRamp * 0.75 * pow(1.0 - t, 1.2);\n        vSh = inRamp * 0.75 * pow(t, 1.2);\n    }\n    \n    // Apply scale to fit within padded canvas area\n    gl_Position = vec4(p * uScale, 0.0, 1.0);\n}\n`;const FRAGMENT_SHADER=`\nprecision mediump float;\nuniform sampler2D uTex;\nuniform vec2 uTilt;\nuniform float uSheenStrength;\nuniform float uSheenTiltShift;\nuniform float uSheenTiltDeadzone;\nuniform float uMaxTiltDeg;\nuniform float uHoloMode;\nuniform float uHoloMotion;\nvarying vec2 vUV;\nvarying float vHi;\nvarying float vSh;\n\nvec3 overlayBlend(vec3 base, vec3 blend) {\n    return mix(2.0 * base * blend, 1.0 - 2.0 * (1.0 - base) * (1.0 - blend), step(0.5, base));\n}\n\nvec3 hsl2rgb(float h, float s, float l) {\n    float c = (1.0 - abs(2.0 * l - 1.0)) * s;\n    float x = c * (1.0 - abs(mod(h * 6.0, 2.0) - 1.0));\n    float m = l - c * 0.5;\n    vec3 rgb;\n    if (h < 1.0/6.0) rgb = vec3(c, x, 0.0);\n    else if (h < 2.0/6.0) rgb = vec3(x, c, 0.0);\n    else if (h < 3.0/6.0) rgb = vec3(0.0, c, x);\n    else if (h < 4.0/6.0) rgb = vec3(0.0, x, c);\n    else if (h < 5.0/6.0) rgb = vec3(x, 0.0, c);\n    else rgb = vec3(c, 0.0, x);\n    return rgb + m;\n}\n\nvoid main() {\n    vec4 tex = texture2D(uTex, vUV);\n    if (tex.a < 0.01) discard;\n    \n    vec3 c = tex.rgb * 0.95;\n    \n    // Sheen/holo effect\n    float maxTilt = max(0.001, uMaxTiltDeg);\n    float tiltMag = clamp(length(uTilt) / maxTilt, 0.0, 1.0);\n    float tiltGate = smoothstep(uSheenTiltDeadzone, 1.0, tiltMag);\n    \n    float gradient = fract(vUV.x * 0.5 + vUV.y * 0.5 + uTilt.x * uSheenTiltShift + uTilt.y * uSheenTiltShift);\n    \n    if (uHoloMode > 0.5) {\n        float holoStrength = uSheenStrength * uHoloMotion;\n        float distFromWhite = length(tex.rgb - vec3(1.0));\n        float nonWhiteMask = smoothstep(0.06, 0.22, distFromWhite);\n        vec3 rainbow = hsl2rgb(gradient, 0.8, 0.55);\n        c = mix(c, rainbow, holoStrength * nonWhiteMask * tex.a);\n    } else {\n        float effectStrength = uSheenStrength * tiltGate;\n        float sheen = smoothstep(0.2, 0.5, gradient) * (1.0 - smoothstep(0.5, 0.8, gradient));\n        c = mix(c, vec3(1.0), sheen * effectStrength * tex.a);\n    }\n    \n    // Peel/paste lighting\n    float hiW = clamp(vHi, 0.0, 1.0) * 0.55;\n    float shW = clamp(vSh, 0.0, 1.0) * 0.60;\n\n    vec3 hi = overlayBlend(c, vec3(1.0));\n    c = mix(c, hi, hiW);\n\n    vec3 sh = overlayBlend(c, vec3(0.0));\n    c = mix(c, sh, shW);\n    c *= (1.0 - shW * 0.35);\n    \n    c = clamp(c, 0.0, 1.0);\n    gl_FragColor = vec4(c, tex.a);\n}\n`;// ============================================================================\n// UTILITIES\n// ============================================================================\nconst resolveImageSource=input=>{if(!input)return undefined;if(typeof input===\"string\")return input.trim()||undefined;return input.src||input.url||input.asset?.url||undefined;};/**\n * Calculates contained dimensions (like CSS object-fit: contain)\n * Maintains image aspect ratio while fitting within container bounds\n */function calculateContainedDimensions(containerWidth,containerHeight,imageAspectRatio){// If no image aspect ratio yet, use container dimensions\nif(!imageAspectRatio){return{width:containerWidth,height:containerHeight};}const containerAspect=containerWidth/containerHeight;if(containerAspect>imageAspectRatio){// Container is wider than image: fit to height\nreturn{width:containerHeight*imageAspectRatio,height:containerHeight};}else{// Container is taller than image: fit to width\nreturn{width:containerWidth,height:containerWidth/imageAspectRatio};}}const ELEVATION_DEFAULT=.12// how much the sticker scales/lifts during peel animation\n;const STATIC_SHADOW_DEFAULT=\"0px 1px 2px 0px rgba(0, 0, 0, 0.60)\";const DYNAMIC_SHADOW_DEFAULT=\"0px 13px 14px 0px rgba(0, 0, 0, 0.60)\";// Property panel uses 0–1 (elevation) and 0.1–1 (tilt); map to internal ranges\nconst TILT_DISPLAY_MIN=.1;const TILT_DISPLAY_MAX=1;const TILT_INTERNAL_MIN=.5;const TILT_INTERNAL_MAX=20;const ELEVATION_INTERNAL_MAX=.3;function mapTiltDisplayToInternal(display){const d=Math.max(TILT_DISPLAY_MIN,Math.min(TILT_DISPLAY_MAX,display));const t=(d-TILT_DISPLAY_MIN)/(TILT_DISPLAY_MAX-TILT_DISPLAY_MIN);return TILT_INTERNAL_MIN+t*(TILT_INTERNAL_MAX-TILT_INTERNAL_MIN);}function mapElevationDisplayToInternal(display){const d=Math.max(0,Math.min(1,display));return d*ELEVATION_INTERNAL_MAX;}// Default display values for property controls (map from internal defaults)\nconst TILT_DEFAULT_DISPLAY=TILT_DISPLAY_MIN+(DRAG_TILT_SENSITIVITY-TILT_INTERNAL_MIN)/(TILT_INTERNAL_MAX-TILT_INTERNAL_MIN)*(TILT_DISPLAY_MAX-TILT_DISPLAY_MIN);const ELEVATION_DEFAULT_DISPLAY=ELEVATION_DEFAULT/ELEVATION_INTERNAL_MAX;function parseBoxShadow(shadow){// Default values\nconst result={x:0,y:0,blur:0,color:\"rgba(0,0,0,0.3)\"};if(!shadow)return result;// Extract color (rgba, rgb, or hex)\nconst colorMatch=shadow.match(/(rgba?\\([^)]+\\)|#[0-9a-fA-F]{3,8}|\\b[a-z]+\\b(?=\\s*$))/i);if(colorMatch){result.color=colorMatch[0];}// Extract numeric values (px values)\nconst numbers=shadow.match(/-?\\d+(\\.\\d+)?(px)?/g);if(numbers){const vals=numbers.map(n=>parseFloat(n));if(vals.length>=1)result.x=vals[0];if(vals.length>=2)result.y=vals[1];if(vals.length>=3)result.blur=vals[2];// vals[3] would be spread, which we ignore for drop-shadow\n}return result;}function lerpShadow(a,b,t){const x=a.x+(b.x-a.x)*t;const y=a.y+(b.y-a.y)*t;const blur=a.blur+(b.blur-a.blur)*t;// Use the dynamic shadow's color when t > 0.5, otherwise static\nconst color=t>.5?b.color:a.color;return`drop-shadow(${x.toFixed(2)}px ${y.toFixed(2)}px ${blur.toFixed(2)}px ${color})`;}// ============================================================================\n// COMPONENT\n// ============================================================================\n/**\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n * @framerIntrinsicWidth 200\n * @framerIntrinsicHeight 200\n * @framerDisableUnlink\n */export default function StickerDrag({image=DEFAULT_IMAGE,tiltSensitivity:tiltSensitivityDisplay=.5,tiltSmoothing=DRAG_TILT_SMOOTHING,sheenStrength=SHEEN_STRENGTH,sheenMode=\"sheen\",elevation:elevationDisplay=.4,staticShadow=STATIC_SHADOW_DEFAULT,dynamicShadow=DYNAMIC_SHADOW_DEFAULT,refresh=false,style}){// Map property panel values (0–1, 0.1–1) to internal ranges\nconst tiltSensitivity=mapTiltDisplayToInternal(tiltSensitivityDisplay);const elevation=mapElevationDisplayToInternal(elevationDisplay);const imageSrc=resolveImageSource(image);const hasImage=!!imageSrc;const containerRef=useRef(null);const stickerRef=useRef(null);const innerRef=useRef(null);const canvasRef=useRef(null);// Sizing div prevents collapse if the instance is nested in a fit container.\nconst[sizingDimensions,setSizingDimensions]=useState({width:200,height:200});// WebGL context lost (too many stickers in canvas); refresh toggle re-initializes\nconst[contextLost,setContextLost]=useState(false);const[webglInitKey,setWebglInitKey]=useState(0);const previousRefreshRef=useRef(undefined);// When user toggles Refresh: clear context-lost message and trigger WebGL re-init.\n// We must set contextLost(false) first so the canvas is rendered again; then bump\n// webglInitKey so the WebGL effect runs after the canvas is in the DOM.\nuseEffect(()=>{if(previousRefreshRef.current===undefined){previousRefreshRef.current=refresh;return;}if(previousRefreshRef.current===refresh)return;previousRefreshRef.current=refresh;setContextLost(false);setWebglInitKey(k=>k+1);},[refresh]);// WebGL refs\nconst glRef=useRef(null);const programRef=useRef(null);const textureRef=useRef(null);const vboRef=useRef(null);const iboRef=useRef(null);const indexCountRef=useRef(0);// State refs (using refs instead of state for animation performance)\nconst stateRef=useRef({// Position\nx:0,y:0,width:200,height:200,// Image aspect ratio for contained sizing\nimageAspectRatio:null,// Scale factor for fitting content within padded canvas\nscale:1,// Drag state\nheld:false,peeling:false,sticking:false,dragStartX:0,dragStartY:0,dragOrigX:0,dragOrigY:0,// Peel/wave animation\npeel:0,lift:0,peelAngle:-Math.PI/4,// Tilt (CSS 3D transform)\ndragTiltX:0,dragTiltY:0,currentTiltX:0,currentTiltY:0,prevTiltX:0,prevTiltY:0,// Holo: only visible while cursor is moving (tilt changing)\nholoMotion:0,// Velocity tracking\nlastMoveX:0,lastMoveY:0,lastMoveT:0,// Animation\ntexReady:false});const animationRef=useRef(null);const lastTickTRef=useRef(null);// Draw function\nconst draw=useCallback(()=>{const gl=glRef.current;const program=programRef.current;const texture=textureRef.current;const state=stateRef.current;if(!gl||!program||!texture||!state.texReady)return;gl.viewport(0,0,gl.canvas.width,gl.canvas.height);gl.clearColor(0,0,0,0);gl.clear(gl.COLOR_BUFFER_BIT);gl.enable(gl.BLEND);gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);gl.useProgram(program);gl.bindBuffer(gl.ARRAY_BUFFER,vboRef.current);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,iboRef.current);const aPos=gl.getAttribLocation(program,\"aPos\");const aUV=gl.getAttribLocation(program,\"aUV\");gl.enableVertexAttribArray(aPos);gl.enableVertexAttribArray(aUV);gl.vertexAttribPointer(aPos,2,gl.FLOAT,false,16,0);gl.vertexAttribPointer(aUV,2,gl.FLOAT,false,16,8);// Set uniforms\ngl.uniform1f(gl.getUniformLocation(program,\"uPeel\"),state.peel);gl.uniform1f(gl.getUniformLocation(program,\"uLift\"),state.lift);gl.uniform1f(gl.getUniformLocation(program,\"uPeelAngle\"),state.peelAngle);gl.uniform1f(gl.getUniformLocation(program,\"uPasting\"),state.sticking?1:0);gl.uniform1f(gl.getUniformLocation(program,\"uScale\"),state.scale);gl.uniform1f(gl.getUniformLocation(program,\"uElevation\"),elevation);gl.uniform2f(gl.getUniformLocation(program,\"uTilt\"),state.currentTiltX,state.currentTiltY);gl.uniform1f(gl.getUniformLocation(program,\"uSheenStrength\"),sheenStrength);gl.uniform1f(gl.getUniformLocation(program,\"uSheenTiltShift\"),SHEEN_TILT_SHIFT);gl.uniform1f(gl.getUniformLocation(program,\"uSheenTiltDeadzone\"),SHEEN_TILT_DEADZONE);gl.uniform1f(gl.getUniformLocation(program,\"uMaxTiltDeg\"),DRAG_MAX_TILT_DEG);gl.uniform1f(gl.getUniformLocation(program,\"uHoloMode\"),sheenMode===\"holo\"?1:0);gl.uniform1f(gl.getUniformLocation(program,\"uHoloMotion\"),state.holoMotion);gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,texture);gl.uniform1i(gl.getUniformLocation(program,\"uTex\"),0);gl.drawElements(gl.TRIANGLES,indexCountRef.current,gl.UNSIGNED_SHORT,0);},[sheenStrength,sheenMode,elevation]);// Parse shadow props once (memoized)\nconst parsedStaticShadow=React.useMemo(()=>parseBoxShadow(staticShadow),[staticShadow]);const parsedDynamicShadow=React.useMemo(()=>parseBoxShadow(dynamicShadow),[dynamicShadow]);// Update shadow CSS based on peel/lift, interpolating between static and dynamic\nconst updateShadowCSS=useCallback(()=>{const canvas=canvasRef.current;const state=stateRef.current;if(!canvas)return;const tRaw=Math.max(state.lift,state.peel);const t=tRaw*tRaw*(3-2*tRaw)// smoothstep easing\n;canvas.style.filter=lerpShadow(parsedStaticShadow,parsedDynamicShadow,t);},[parsedStaticShadow,parsedDynamicShadow]);// Animation tick (from original source)\nconst tick=useCallback(timestamp=>{const state=stateRef.current;if(lastTickTRef.current===null){lastTickTRef.current=timestamp;}const dt=Math.min((timestamp-lastTickTRef.current)/1e3,.1);lastTickTRef.current=timestamp;const step=ANIM_SPEED*dt;let changed=false;if(state.peeling){// Peel and lift animate up together\nif(state.peel<1||state.lift<1){state.peel=Math.min(1,state.peel+step);state.lift=Math.min(1,state.lift+step);changed=true;}}if(state.sticking){// Paste animation: peel and lift animate down together\nif(state.peel>0||state.lift>0){state.peel=Math.max(0,state.peel-step);state.lift=Math.max(0,state.lift-step);changed=true;}else{state.sticking=false;}}// In holo mode, decay motion so effect fades when cursor stops moving\nconst holoDecayActive=sheenMode===\"holo\"&&state.holoMotion>.005;if(holoDecayActive){state.holoMotion*=HOLO_MOTION_DECAY;if(state.holoMotion<.005)state.holoMotion=0;changed=true;}if(changed){updateShadowCSS();}// Redraw while held, animating, or holo fading\nif(changed||state.held||holoDecayActive){draw();}// Continue ticking if needed\nif(state.held||state.peeling||state.sticking||holoDecayActive){animationRef.current=requestAnimationFrame(tick);}else{animationRef.current=null;lastTickTRef.current=null;}},[draw,updateShadowCSS,sheenMode]);// Start animation loop\nconst ensureTickRunning=useCallback(()=>{if(animationRef.current!==null)return;lastTickTRef.current=null;animationRef.current=requestAnimationFrame(tick);},[tick]);// Initialize WebGL (re-runs when refresh toggles or context restored)\nuseEffect(()=>{const canvas=canvasRef.current;if(!canvas)return;setContextLost(false);const gl=canvas.getContext(\"webgl\",{alpha:true,antialias:true,premultipliedAlpha:false});if(!gl)return;glRef.current=gl;const handleContextLost=event=>{event.preventDefault();console.warn(\"WebGL context lost. Too many Sticker Drag components in Canvas. Use Refresh to see the sticker again.\");setContextLost(true);};const handleContextRestored=()=>{setContextLost(false);setWebglInitKey(k=>k+1);};canvas.addEventListener(\"webglcontextlost\",handleContextLost,false);canvas.addEventListener(\"webglcontextrestored\",handleContextRestored,false);// Compile shaders\nconst compileShader=(source,type)=>{const shader=gl.createShader(type);if(!shader)return null;gl.shaderSource(shader,source);gl.compileShader(shader);if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){console.error(\"Shader compile error:\",gl.getShaderInfoLog(shader));gl.deleteShader(shader);return null;}return shader;};const vs=compileShader(VERTEX_SHADER,gl.VERTEX_SHADER);const fs=compileShader(FRAGMENT_SHADER,gl.FRAGMENT_SHADER);if(!vs||!fs)return;const program=gl.createProgram();if(!program)return;gl.attachShader(program,vs);gl.attachShader(program,fs);gl.linkProgram(program);if(!gl.getProgramParameter(program,gl.LINK_STATUS)){console.error(\"Program link error:\",gl.getProgramInfoLog(program));return;}programRef.current=program;// Create grid mesh (32x32 for smooth wave deformation)\nconst N=MESH_GRID_SIZE;const verts=[];const inds=[];for(let j=0;j<=N;j++){for(let i=0;i<=N;i++){// Position: -1 to 1\n// UV: 0 to 1 (flip V coordinate so image is right-side up)\nverts.push(i/N*2-1,j/N*2-1,i/N,1-j/N// Flip V coordinate\n);}}for(let j=0;j<N;j++){for(let i=0;i<N;i++){const a=j*(N+1)+i;inds.push(a,a+1,a+N+1,a+1,a+N+2,a+N+1);}}const vbo=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,vbo);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(verts),gl.STATIC_DRAW);vboRef.current=vbo;const ibo=gl.createBuffer();gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,ibo);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,new Uint16Array(inds),gl.STATIC_DRAW);iboRef.current=ibo;indexCountRef.current=inds.length;// Clear immediately\ngl.viewport(0,0,canvas.width,canvas.height);gl.clearColor(0,0,0,0);gl.clear(gl.COLOR_BUFFER_BIT);return()=>{canvas.removeEventListener(\"webglcontextlost\",handleContextLost);canvas.removeEventListener(\"webglcontextrestored\",handleContextRestored);if(animationRef.current){cancelAnimationFrame(animationRef.current);}gl.deleteShader(vs);gl.deleteShader(fs);gl.deleteProgram(program);if(vboRef.current)gl.deleteBuffer(vboRef.current);if(iboRef.current)gl.deleteBuffer(iboRef.current);if(textureRef.current)gl.deleteTexture(textureRef.current);textureRef.current=null;glRef.current=null;programRef.current=null;vboRef.current=null;iboRef.current=null;stateRef.current.texReady=false;};},[refresh,webglInitKey]);// Resize handler\nconst handleResize=useCallback(()=>{const container=containerRef.current;const canvas=canvasRef.current;const sticker=stickerRef.current;const gl=glRef.current;const state=stateRef.current;if(!container||!canvas||!sticker||!gl)return;const containerWidth=container.clientWidth||200;const containerHeight=container.clientHeight||200;// Calculate contained dimensions (maintain aspect ratio)\nconst{width,height}=calculateContainedDimensions(containerWidth,containerHeight,state.imageAspectRatio);// Add padding to canvas for extra space to prevent clipping during animations\n// Padding scales with elevation to accommodate the lift/scale effect\nconst maxDim=Math.max(width,height);const elevationPad=maxDim*elevation*.6// extra padding based on elevation\n;const effectivePad=PAD_BASE+elevationPad;const canvasWidth=width+effectivePad*2;const canvasHeight=height+effectivePad*2;// Calculate scale factor to fit content within padded canvas\n// Use the smaller scale to ensure content fits in both dimensions\nconst scaleX=width/canvasWidth;const scaleY=height/canvasHeight;const scale=Math.min(scaleX,scaleY);// Center the sticker within the container\nconst x=(containerWidth-width)/2;const y=(containerHeight-height)/2;// Update canvas size (larger with padding)\ncanvas.width=Math.round(canvasWidth*RENDER_SCALE);canvas.height=Math.round(canvasHeight*RENDER_SCALE);canvas.style.width=`${canvasWidth}px`;canvas.style.height=`${canvasHeight}px`;// Center canvas within sticker element (canvas is larger due to padding)\ncanvas.style.position=\"absolute\";canvas.style.left=`${-effectivePad}px`;canvas.style.top=`${-effectivePad}px`;// Update sticker element size and position (centered, visible size without padding)\nsticker.style.width=`${width}px`;sticker.style.height=`${height}px`;sticker.style.left=`${x}px`;sticker.style.top=`${y}px`;// Update state\nstate.width=width;state.height=height;state.x=x;state.y=y;state.scale=scale;// Update WebGL viewport\ngl.viewport(0,0,canvas.width,canvas.height);// Redraw if texture is ready\nif(state.texReady){draw();}},[draw,elevation]);// Load image\nuseEffect(()=>{const imageSrc=resolveImageSource(image);if(!imageSrc)return;const gl=glRef.current;if(!gl||!programRef.current)return;const img=new Image;let disposed=false;img.crossOrigin=\"anonymous\";img.onload=()=>{if(disposed)return;const state=stateRef.current;// Store image aspect ratio for contained sizing\nstate.imageAspectRatio=img.width/img.height;// Load texture\nif(textureRef.current){gl.deleteTexture(textureRef.current);}const texture=gl.createTexture();if(!texture)return;gl.bindTexture(gl.TEXTURE_2D,texture);gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,false);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,img);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);textureRef.current=texture;state.texReady=true;// Resize with contained dimensions\nhandleResize();updateShadowCSS();};img.onerror=()=>{if(disposed)return;console.error(\"Failed to load image\");};img.src=imageSrc;return()=>{disposed=true;img.onload=null;img.onerror=null;stateRef.current.texReady=false;};},[image,handleResize,updateShadowCSS,webglInitKey]);// Handle container resize\n// Debounced apply: avoid feedback loop (fit = grow forever) and perf storms\nconst applyResizeRef=useRef(null);const SIZING_THRESHOLD=5// only update sizing when container changed by this much (stops fit feedback loop)\n;const RESIZE_DEBOUNCE_MS=180;const scheduleResize=useCallback((measuredW,measuredH)=>{if(applyResizeRef.current)clearTimeout(applyResizeRef.current);applyResizeRef.current=setTimeout(()=>{applyResizeRef.current=null;setSizingDimensions(prev=>{const w=Math.max(1,Math.round(measuredW))||prev.width;const h=Math.max(1,Math.round(measuredH))||prev.height;// Only update if change is significant (prevents fit feedback + jitter)\nconst dw=Math.abs(w-prev.width);const dh=Math.abs(h-prev.height);if(dw<SIZING_THRESHOLD&&dh<SIZING_THRESHOLD)return prev;return{width:w,height:h};});handleResize();},RESIZE_DEBOUNCE_MS);},[handleResize]);// Resize only when layout geometry changes. Editor zoom does not change client sizes,\n// so a ResizeObserver avoids the previous always-running Canvas polling loop.\nuseEffect(()=>{const container=containerRef.current;if(!container)return;handleResize();const ro=new ResizeObserver(()=>{const w=container.clientWidth||container.offsetWidth||200;const h=container.clientHeight||container.offsetHeight||200;scheduleResize(w,h);});ro.observe(container);return()=>{ro.disconnect();if(applyResizeRef.current)clearTimeout(applyResizeRef.current);};},[handleResize,scheduleResize]);// Mouse down handler\nconst handleMouseDown=useCallback(e=>{e.preventDefault();const state=stateRef.current;const container=containerRef.current;const sticker=stickerRef.current;const inner=innerRef.current;if(!container||!sticker||!inner)return;const rect=sticker.getBoundingClientRect();// Calculate grab point for tilt pivot\nconst grabOffsetX=e.clientX-rect.left;const grabOffsetY=e.clientY-rect.top;inner.style.transformOrigin=`${grabOffsetX}px ${grabOffsetY}px`;// Calculate angle from sticker center to click point\nconst centerX=rect.left+rect.width/2;const centerY=rect.top+rect.height/2;const dx=e.clientX-centerX;const dy=e.clientY-centerY// Y goes down in screen coords, matches flipped UV\n;state.peelAngle=Math.atan2(dy,dx);// Store drag start\nstate.dragStartX=e.clientX;state.dragStartY=e.clientY;state.dragOrigX=state.x;state.dragOrigY=state.y;// Reset state for new peel\nstate.peel=0;state.lift=0;state.held=true;state.peeling=true;state.sticking=false;// Reset velocity tracking\nstate.lastMoveX=e.clientX;state.lastMoveY=e.clientY;state.lastMoveT=performance.now();// Bring container to front by setting incrementing z-index\ncontainer.style.zIndex=`${getNextZIndex()}`;// Start animation loop\nensureTickRunning();},[ensureTickRunning]);// Mouse move handler\nuseEffect(()=>{const handleMouseMove=e=>{const state=stateRef.current;if(!state.held)return;const sticker=stickerRef.current;const inner=innerRef.current;if(!sticker||!inner)return;// Update position\nstate.x=state.dragOrigX+(e.clientX-state.dragStartX);state.y=state.dragOrigY+(e.clientY-state.dragStartY);sticker.style.left=`${state.x}px`;sticker.style.top=`${state.y}px`;// Calculate velocity\nconst now=performance.now();const dt=Math.max(1,now-state.lastMoveT);const velX=(e.clientX-state.lastMoveX)/dt*16// normalize to ~60fps\n;const velY=(e.clientY-state.lastMoveY)/dt*16;state.lastMoveX=e.clientX;state.lastMoveY=e.clientY;state.lastMoveT=now;// Tilt based on velocity (clamped)\nconst targetTiltY=Math.max(-DRAG_MAX_TILT_DEG,Math.min(DRAG_MAX_TILT_DEG,velX*tiltSensitivity));const targetTiltX=Math.max(-DRAG_MAX_TILT_DEG,Math.min(DRAG_MAX_TILT_DEG,-velY*tiltSensitivity));// Smooth toward target\nstate.dragTiltX+=(targetTiltX-state.dragTiltX)*tiltSmoothing;state.dragTiltY+=(targetTiltY-state.dragTiltY)*tiltSmoothing;// Store for shader\nstate.currentTiltX=state.dragTiltX;state.currentTiltY=state.dragTiltY;// In holo mode, show effect only while tilting (cursor moving)\nif(sheenMode===\"holo\"){const tiltDelta=Math.abs(state.dragTiltX-state.prevTiltX)+Math.abs(state.dragTiltY-state.prevTiltY);state.holoMotion=Math.min(1,state.holoMotion+tiltDelta*HOLO_MOTION_BUMP);state.prevTiltX=state.dragTiltX;state.prevTiltY=state.dragTiltY;}// Apply CSS 3D transform for tilt\ninner.style.transform=`rotateX(${state.dragTiltX}deg) rotateY(${state.dragTiltY}deg)`;};const handleMouseUp=()=>{const state=stateRef.current;if(!state.held)return;const inner=innerRef.current;state.held=false;state.peeling=false;state.sticking=true;// Reverse peel angle for paste if peel completed\nif(state.peel>=.95&&inner){const rect=inner.getBoundingClientRect();const centerX=rect.left+rect.width/2;const centerY=rect.top+rect.height/2;const dx=state.lastMoveX-centerX;const dy=state.lastMoveY-centerY// Y goes down in screen coords\n;state.peelAngle=Math.atan2(-dy,-dx);state.peel=1;}// Animate tilt back to zero\nconst settleTilt=()=>{state.dragTiltX*=.9;state.dragTiltY*=.9;state.currentTiltX=state.dragTiltX;state.currentTiltY=state.dragTiltY;if(inner){inner.style.transform=`rotateX(${state.dragTiltX}deg) rotateY(${state.dragTiltY}deg)`;}if(Math.abs(state.dragTiltX)>.1||Math.abs(state.dragTiltY)>.1){requestAnimationFrame(settleTilt);}else{state.dragTiltX=0;state.dragTiltY=0;state.currentTiltX=0;state.currentTiltY=0;state.prevTiltX=0;state.prevTiltY=0;if(inner){inner.style.transform=\"\";}}};settleTilt();// Continue animation for paste (and holo fade in holo mode)\nensureTickRunning();};window.addEventListener(\"mousemove\",handleMouseMove);window.addEventListener(\"mouseup\",handleMouseUp);return()=>{window.removeEventListener(\"mousemove\",handleMouseMove);window.removeEventListener(\"mouseup\",handleMouseUp);};},[tiltSensitivity,tiltSmoothing,ensureTickRunning,sheenMode]);// Touch handlers\nconst handleTouchStart=useCallback(e=>{e.preventDefault();const touch=e.touches[0];if(!touch)return;const state=stateRef.current;const container=containerRef.current;const sticker=stickerRef.current;const inner=innerRef.current;if(!container||!sticker||!inner)return;const rect=sticker.getBoundingClientRect();const grabOffsetX=touch.clientX-rect.left;const grabOffsetY=touch.clientY-rect.top;inner.style.transformOrigin=`${grabOffsetX}px ${grabOffsetY}px`;const centerX=rect.left+rect.width/2;const centerY=rect.top+rect.height/2;const dx=touch.clientX-centerX;const dy=touch.clientY-centerY// Y goes down in screen coords, matches flipped UV\n;state.peelAngle=Math.atan2(dy,dx);state.dragStartX=touch.clientX;state.dragStartY=touch.clientY;state.dragOrigX=state.x;state.dragOrigY=state.y;state.peel=0;state.lift=0;state.held=true;state.peeling=true;state.sticking=false;state.lastMoveX=touch.clientX;state.lastMoveY=touch.clientY;state.lastMoveT=performance.now();// Bring container to front by setting incrementing z-index\ncontainer.style.zIndex=`${getNextZIndex()}`;ensureTickRunning();},[ensureTickRunning]);useEffect(()=>{const handleTouchMove=e=>{const touch=e.touches[0];if(!touch)return;const state=stateRef.current;if(!state.held)return;const sticker=stickerRef.current;const inner=innerRef.current;if(!sticker||!inner)return;state.x=state.dragOrigX+(touch.clientX-state.dragStartX);state.y=state.dragOrigY+(touch.clientY-state.dragStartY);sticker.style.left=`${state.x}px`;sticker.style.top=`${state.y}px`;const now=performance.now();const dt=Math.max(1,now-state.lastMoveT);const velX=(touch.clientX-state.lastMoveX)/dt*16;const velY=(touch.clientY-state.lastMoveY)/dt*16;state.lastMoveX=touch.clientX;state.lastMoveY=touch.clientY;state.lastMoveT=now;const targetTiltY=Math.max(-DRAG_MAX_TILT_DEG,Math.min(DRAG_MAX_TILT_DEG,velX*tiltSensitivity));const targetTiltX=Math.max(-DRAG_MAX_TILT_DEG,Math.min(DRAG_MAX_TILT_DEG,-velY*tiltSensitivity));state.dragTiltX+=(targetTiltX-state.dragTiltX)*tiltSmoothing;state.dragTiltY+=(targetTiltY-state.dragTiltY)*tiltSmoothing;state.currentTiltX=state.dragTiltX;state.currentTiltY=state.dragTiltY;if(sheenMode===\"holo\"){const tiltDelta=Math.abs(state.dragTiltX-state.prevTiltX)+Math.abs(state.dragTiltY-state.prevTiltY);state.holoMotion=Math.min(1,state.holoMotion+tiltDelta*HOLO_MOTION_BUMP);state.prevTiltX=state.dragTiltX;state.prevTiltY=state.dragTiltY;}inner.style.transform=`rotateX(${state.dragTiltX}deg) rotateY(${state.dragTiltY}deg)`;};const handleTouchEnd=()=>{const state=stateRef.current;if(!state.held)return;const inner=innerRef.current;state.held=false;state.peeling=false;state.sticking=true;if(state.peel>=.95&&inner){const rect=inner.getBoundingClientRect();const centerX=rect.left+rect.width/2;const centerY=rect.top+rect.height/2;const dx=state.lastMoveX-centerX;const dy=state.lastMoveY-centerY// Y goes down in screen coords\n;state.peelAngle=Math.atan2(-dy,-dx);state.peel=1;}const settleTilt=()=>{state.dragTiltX*=.9;state.dragTiltY*=.9;state.currentTiltX=state.dragTiltX;state.currentTiltY=state.dragTiltY;if(inner){inner.style.transform=`rotateX(${state.dragTiltX}deg) rotateY(${state.dragTiltY}deg)`;}if(Math.abs(state.dragTiltX)>.1||Math.abs(state.dragTiltY)>.1){requestAnimationFrame(settleTilt);}else{state.dragTiltX=0;state.dragTiltY=0;state.currentTiltX=0;state.currentTiltY=0;state.prevTiltX=0;state.prevTiltY=0;if(inner){inner.style.transform=\"\";}}};settleTilt();ensureTickRunning();};window.addEventListener(\"touchmove\",handleTouchMove,{passive:false});window.addEventListener(\"touchend\",handleTouchEnd);return()=>{window.removeEventListener(\"touchmove\",handleTouchMove);window.removeEventListener(\"touchend\",handleTouchEnd);};},[tiltSensitivity,tiltSmoothing,ensureTickRunning,sheenMode]);if(!hasImage){return /*#__PURE__*/_jsx(\"div\",{style:{position:\"relative\",width:\"100%\",height:\"100%\",...style},children:/*#__PURE__*/_jsx(ComponentMessage,{style:{position:\"absolute\",inset:0},title:\"Sticker Drag\",subtitle:\"Add an image to create an interactive draggable sticker with 3D effects\"})});}// Show warning when WebGL context is lost (too many stickers in canvas)\nif(contextLost){return /*#__PURE__*/_jsx(ComponentMessage,{title:\"⚠️ Don't worry, this is normal.\",subtitle:\"There are currently more stickers in Canvas than Browsers can handle. Tweak Refresh to see the sticker re-appear. If you don't add too many stickers, you won't have issues in preview or deployed website.\"});}return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,style:{position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"visible\",perspective:\"800px\",...style},children:[/*#__PURE__*/_jsx(\"div\",{style:{position:\"relative\",width:sizingDimensions.width,height:sizingDimensions.height,minWidth:sizingDimensions.width,minHeight:sizingDimensions.height,opacity:0,pointerEvents:\"none\",userSelect:\"none\"}}),/*#__PURE__*/_jsx(\"div\",{ref:stickerRef,style:{position:\"absolute\",width:\"100%\",height:\"100%\",cursor:\"grab\",userSelect:\"none\",perspective:\"800px\",transformStyle:\"preserve-3d\",willChange:\"transform\",overflow:\"visible\"},onMouseDown:handleMouseDown,onTouchStart:handleTouchStart,children:/*#__PURE__*/_jsx(\"div\",{ref:innerRef,style:{position:\"absolute\",width:\"100%\",height:\"100%\",transformStyle:\"preserve-3d\",overflow:\"visible\"},children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{display:\"block\",pointerEvents:\"none\",position:\"absolute\"}})})})]});}// ============================================================================\n// PROPERTY CONTROLS\n// ============================================================================\naddPropertyControls(StickerDrag,{refresh:{type:ControlType.Boolean,title:\"Refresh\",defaultValue:false,enabledTitle:\"•\",disabledTitle:\"•\",description:\"Toggle if the sticker is showing an error to see it again\"},image:{type:ControlType.ResponsiveImage,title:\"Image\",// @ts-expect-error Framer Playground supports this seed before its public type does.\ndefaultValue:DEFAULT_IMAGE},tiltSensitivity:{type:ControlType.Number,title:\"Tilt\",min:TILT_DISPLAY_MIN,max:TILT_DISPLAY_MAX,step:.1,defaultValue:.5},sheenStrength:{type:ControlType.Number,title:\"Lighting\",min:0,max:1,step:.1,defaultValue:SHEEN_STRENGTH},sheenMode:{type:ControlType.Enum,title:\"Sheen\",options:[\"sheen\",\"holo\"],optionTitles:[\"Sheen\",\"Holographic\"],defaultValue:\"sheen\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},elevation:{type:ControlType.Number,title:\"Elevation\",min:0,max:1,step:.1,defaultValue:.4},staticShadow:{//@ts-ignore\ntype:ControlType.BoxShadow,title:\"Static\",defaultValue:STATIC_SHADOW_DEFAULT},dynamicShadow:{//@ts-ignore\ntype:ControlType.BoxShadow,title:\"Elevated\",defaultValue:DYNAMIC_SHADOW_DEFAULT,description:\"More components at [Framer University](https://frameruni.link/cc).\"}});StickerDrag.displayName=\"Sticker Drag\";\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"StickerDrag\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"fixed\",\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerIntrinsicWidth\":\"200\",\"framerIntrinsicHeight\":\"200\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./StickerDrag_prod.map"],"mappings":"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"}