{"version":3,"file":"shared.CZVCASoW.mjs","names":["mapRange","useRef","useMemo"],"sources":["https:/framerusercontent.com/modules/QbIURI1CrWibjjH7k1PR/2vNdLnvQNPcA8uP12d7k/FollowCursor_Prod.js","https:/framerusercontent.com/modules/Z7W0nR93oDA0ww3oOjR8/Ek6hdyC7N0hvEfTgS47e/ShimmerGrid_Prod.js","https:/framerusercontent.com/modules/rS9t13HU3akx9AtKwaUg/ub5wKqpptPfKDQPeM5zc/siteMetadata.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useRef,useMemo}from\"react\";import{useMotionValue,useSpring,animate}from\"framer-motion\";const ALIGNMENT={left:0,top:0,center:.5,right:1,bottom:1};/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n *\n * @framerDisableUnlink\n *\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 200\n */export default function FollowCursor(props){const{smoothing,enabled,horizontalAlignment,verticalAlignment,transition}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const id=generateInstanceId();const movementTransition={damping:100,stiffness:mapRange(smoothing,0,100,2e3,50)};const mouseX=useMotionValue(0);const mouseY=useMotionValue(0);const springX=useSpring(mouseX,movementTransition);const springY=useSpring(mouseY,movementTransition);const ref=useRef(null);const parentRef=useRef(null);const transformRef=useRef(null);const styleRef=useRef(null);const hasSpringRef=useRef(smoothing!==0);const previousXRef=useRef(null);const previousYRef=useRef(null);const previousStyleTransformRef=useRef(null);const isInitializedRef=useRef(false);const previousScrollXRef=useRef(0);const previousScrollYRef=useRef(0);const opacityRef=useRef(1);const currentOpacityRef=useRef(0);useEffect(()=>{hasSpringRef.current=smoothing!==0;},[smoothing]);useEffect(()=>{let animationFrameId;const updateTransform=()=>{if(isCanvas)return;animationFrameId=requestAnimationFrame(updateTransform);if(!parentRef.current||!styleRef.current){return;}const xValue=(hasSpringRef.current?springX.get():mouseX.get()).toFixed(3);const yValue=(hasSpringRef.current?springY.get():mouseY.get()).toFixed(3);// Get computed styles to capture all existing transforms\nconst computedStyle=window.getComputedStyle(parentRef.current);const transform=calculateTransform(parentRef.current,computedStyle,xValue,yValue,previousXRef.current,previousYRef.current,previousStyleTransformRef.current);const opacity=currentOpacityRef.current*opacityRef.current;transformRef.current=transform;styleRef.current.textContent=`\n\t\t\t\t[data-followcursor=\"${id}\"] { \n\t\t\t\t\ttransform: ${transform} !important;\n\t\t\t\t\t${opacity<.995?`opacity: ${opacity} !important;`:\"\"}\n\t\t\t\t}\n\t\t\t`;previousXRef.current=xValue;previousYRef.current=yValue;previousStyleTransformRef.current=parentRef.current.style.transform;};if(ref.current){const container=ref.current.parentElement;if(container){const parent=container.parentElement;if(parent){parentRef.current=parent;parent.setAttribute(\"data-followcursor\",id);}}}// Start the animation loop\nupdateTransform();// Cleanup function\nreturn()=>{if(animationFrameId){cancelAnimationFrame(animationFrameId);}};},[]);useEffect(()=>{const handleMouseMove=event=>{if(!parentRef.current)return;let setSpringsInstantly=false;// When initialized for the first time, animate opacity\nif(!isInitializedRef.current){isInitializedRef.current=true;animate(currentOpacityRef.current,enabled?1:0,{...transition,onUpdate:latest=>{currentOpacityRef.current=latest;}});setSpringsInstantly=true;}// Get the element's position without transforms\nconst computedStyle=window.getComputedStyle(parentRef.current);const matrix=new DOMMatrix(computedStyle.transform);const rect=parentRef.current.getBoundingClientRect();// Subtract the transform translation to get the original position\nconst originalLeft=rect.left-matrix.m41;const originalTop=rect.top-matrix.m42;// Add scroll offsets to mouse position\nconst scrollX=window.pageXOffset||document.documentElement.scrollLeft;const scrollY=window.pageYOffset||document.documentElement.scrollTop;// Update previous scroll positions\npreviousScrollXRef.current=scrollX;previousScrollYRef.current=scrollY;const mouseXPos=event.clientX+scrollX-(originalLeft+scrollX)-ALIGNMENT[horizontalAlignment]*rect.width;const mouseYPos=event.clientY+scrollY-(originalTop+scrollY)-ALIGNMENT[verticalAlignment]*rect.height;mouseX.set(mouseXPos);mouseY.set(mouseYPos);if(setSpringsInstantly){springX.jump(mouseXPos);springY.jump(mouseYPos);}};// Add scroll event handler to update position\nconst handleScroll=()=>{if(!parentRef.current||!isInitializedRef.current)return;const scrollX=window.scrollX||window.pageXOffset||document.documentElement.scrollLeft;const scrollY=window.scrollY||window.pageYOffset||document.documentElement.scrollTop;// Calculate scroll delta\nconst deltaX=scrollX-previousScrollXRef.current;const deltaY=scrollY-previousScrollYRef.current;// Update previous scroll positions\npreviousScrollXRef.current=scrollX;previousScrollYRef.current=scrollY;// Update position using scroll delta\nmouseX.set(mouseX.get()+deltaX);mouseY.set(mouseY.get()+deltaY);};window.addEventListener(\"mousemove\",handleMouseMove);window.addEventListener(\"scroll\",handleScroll);return()=>{window.removeEventListener(\"mousemove\",handleMouseMove);window.removeEventListener(\"scroll\",handleScroll);};},[enabled]);useEffect(()=>{if(!styleRef.current||!parentRef.current)return;const computedStyle=window.getComputedStyle(parentRef.current);opacityRef.current=parseFloat(computedStyle.opacity)||1;animate(currentOpacityRef.current,enabled&&isInitializedRef.current?1:0,{...transition,onUpdate:latest=>{currentOpacityRef.current=latest;}});},[enabled,transition]);return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{...props.style},children:/*#__PURE__*/_jsx(\"style\",{ref:styleRef})});}FollowCursor.displayName=\"Follow Cursor\";addPropertyControls(FollowCursor,{enabled:{type:ControlType.Boolean,defaultValue:true},smoothing:{type:ControlType.Number,defaultValue:0,min:0,max:100,step:1},horizontalAlignment:{type:ControlType.Enum,defaultValue:\"center\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"],displaySegmentedControl:true,title:\"Alignment\"},verticalAlignment:{type:ControlType.Enum,defaultValue:\"center\",options:[\"top\",\"center\",\"bottom\"],optionTitles:[\"Top\",\"Center\",\"Bottom\"],displaySegmentedControl:true,title:\" \"},transition:{type:ControlType.Transition,defaultValue:{type:\"spring\",duration:.2,bounce:0},description:\"More components at [Framer University](https://frameruni.link/cc).\"}});const CHARACTERS=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";const generateInstanceId=()=>{const id=useMemo(()=>{let result=\"\";for(let i=0;i<13;i++){result+=CHARACTERS.charAt(Math.floor(Math.random()*CHARACTERS.length));}return result;},[]);return id;};function mapRange(value,fromLow,fromHigh,toLow,toHigh){if(fromLow===fromHigh){return toLow;}const percentage=(value-fromLow)/(fromHigh-fromLow);return toLow+percentage*(toHigh-toLow);}function calculateTransform(element,computedStyle,xValue,yValue,previousX,previousY,previousStyleTransform){xValue=xValue||0;yValue=yValue||0;previousX=previousX||0;previousY=previousY||0;// Get transform\nconst computedTransform=computedStyle.transform;const styleTransform=element.style.transform;// Subtract previous values from current values for a single transform\nconst finalX=xValue-previousX;const finalY=yValue-previousY;const translateTransform=`translate(${finalX}px, ${finalY}px)`;let transform=translateTransform;if(styleTransform&&styleTransform!==\"none\"){if(previousStyleTransform&&previousStyleTransform!==\"none\"){transform=`${translateTransform} ${invertTransform(previousStyleTransform)} ${styleTransform}`;}else{transform=`${translateTransform} ${styleTransform}`;}}return computedTransform&&computedTransform!==\"none\"?`${transform} ${computedTransform}`:transform;}function invertTransform(transformString){const transforms=transformString.match(/\\w+\\([^)]+\\)/g)||[];const invertedTransforms=transforms.reverse().map(transform=>{const[func,valuesString]=transform.match(/(\\w+)\\(([^)]+)\\)/).slice(1);const values=valuesString.split(\",\").map(v=>v.trim());const invertNumber=v=>{const[_,sign,num,unit]=v.match(/^(-?)(\\d*\\.?\\d+)(\\D*)$/);return`${sign?\"\":\"-\"}${num}${unit}`;};switch(func.toLowerCase()){case\"translate\":case\"translate3d\":case\"translatex\":case\"translatey\":case\"translatez\":return`${func}(${values.map(invertNumber).join(\", \")})`;case\"scale\":case\"scale3d\":return`${func}(${values.map(v=>1/parseFloat(v)).join(\", \")})`;case\"scalex\":case\"scaley\":case\"scalez\":return`${func}(${1/parseFloat(values[0])})`;case\"rotate\":case\"rotatex\":case\"rotatey\":case\"rotatez\":return`${func}(${invertNumber(values[0])})`;case\"rotate3d\":const rotateValues=values.map(parseFloat);return`${func}(${rotateValues[0]}, ${rotateValues[1]}, ${rotateValues[2]}, ${invertNumber(values[3])})`;case\"skew\":case\"skewx\":case\"skewy\":return`${func}(${values.map(invertNumber).join(\", \")})`;case\"matrix\":case\"matrix3d\":console.warn(`Inverting ${func} is not supported. Returning original.`);return transform;default:console.warn(`Unknown transform function: ${func}. Returning original.`);return transform;}});return invertedTransforms.join(\" \");}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FollowCursor\",\"slots\":[],\"annotations\":{\"framerDisableUnlink\":\"*\",\"framerContractVersion\":\"1\",\"framerIntrinsicWidth\":\"400\",\"framerSupportedLayoutHeight\":\"any\",\"framerIntrinsicHeight\":\"200\",\"framerSupportedLayoutWidth\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FollowCursor_Prod.map","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import FollowCursor from\"https://framerusercontent.com/modules/QbIURI1CrWibjjH7k1PR/2vNdLnvQNPcA8uP12d7k/FollowCursor_Prod.js\";import{cubicBezier}from\"framer-motion\";const ease=cubicBezier(.7,0,.7,1);var Pattern;(function(Pattern){Pattern[\"Grid\"]=\"grid\";Pattern[\"Checkerboard\"]=\"checkerboard\";Pattern[\"HorizontalLines\"]=\"horizontalLines\";Pattern[\"VerticalLines\"]=\"verticalLines\";Pattern[\"DiagonalLines\"]=\"diagonalLines\";Pattern[\"Dots\"]=\"dots\";Pattern[\"Triangles\"]=\"triangles\";Pattern[\"Custom\"]=\"custom\";})(Pattern||(Pattern={}));const IMAGE_SIZING_MAP={fill:\"cover\",fit:\"contain\",stretch:\"100% 100%\"};const POSITION_MAP={topLeft:\"0 0\",topCenter:\"50% 0\",topRight:\"100% 0\",left:\"0 50%\",center:\"50% 50%\",right:\"100% 50%\",bottomLeft:\"0 100%\",bottomCenter:\"50% 100%\",bottomRight:\"100% 100%\"};/**\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n *\n * @framerDisableUnlink\n *\n * @framerIntrinsicWidth 400\n * @framerIntrinsicHeight 400\n */export default function ShimmerGrid({color,hoverColor,hoverSize,hoverShape,patternPreset,flip,lineWidth,customPatternImage,customPatternSizing,tileSize,customPatternMode,customPatternPosition,dotSize,radius,smoothing,style}){const isCanvas=RenderTarget.current()===RenderTarget.canvas;const isCustom=patternPreset===\"custom\";const bgPosition=isCustom&&customPatternSizing!==\"stretch\"?POSITION_MAP[customPatternPosition]:POSITION_MAP.center;let bgImage=\"\";let bgSize=`${tileSize}px ${tileSize}px`;let bgRepeat=\"repeat\";switch(patternPreset){case\"grid\":bgImage=`repeating-conic-gradient(at ${lineWidth}px ${lineWidth}px, [color] 0deg 90deg, transparent 90deg 180deg, [color] 180deg 360deg)`;break;case\"checkerboard\":bgImage=flip?`repeating-conic-gradient([color] 0% 25%, transparent 0% 50%)`:`repeating-conic-gradient(transparent 0% 25%, [color] 0% 50%)`;break;case\"horizontalLines\":bgImage=`linear-gradient(to top, [color] ${lineWidth}px, transparent ${lineWidth}px)`;break;case\"verticalLines\":bgImage=`linear-gradient(to left, [color] ${lineWidth}px, transparent ${lineWidth}px)`;break;case\"diagonalLines\":const w=lineWidth/2;const sideLength=getSideLength(tileSize*2);bgImage=`linear-gradient(to top ${flip?\"left\":\"right\"}, [color] ${w}px, transparent ${w}px, transparent calc(50% - ${w}px), [color] calc(50% - ${w}px), [color] calc(50% + ${w}px), transparent calc(50% + ${w}px), transparent calc(100% - ${w}px), [color] calc(100% - ${w}px), [color] 100%)`;bgSize=`${sideLength}px ${sideLength}px`;break;case\"dots\":bgImage=`radial-gradient([color] ${dotSize/2-.4}px, transparent ${dotSize/2+.4}px)`;break;case\"triangles\":bgImage=`linear-gradient(${flip?-45:45}deg, transparent calc(50% - 0.1px), [color] calc(50% + 0.1px))`;break;case\"custom\":bgImage=`url(\"${customPatternImage?.src}\")`;if(customPatternSizing!==\"tile\"){bgRepeat=\"no-repeat\";bgSize=IMAGE_SIZING_MAP[customPatternSizing];}break;}let hoverStyle={};let hoverSizeValue=hoverSize;if(hoverShape===\"glow\"){const gradientPoints=[];for(let i=0;i<15;i++){const normalized=mapRange(i,0,14,0,1);gradientPoints.push(`rgba(255, 255, 255, ${ease(1-normalized)}) ${mapRange(i,0,14,0,100)}%`);}hoverStyle={maskImage:`radial-gradient(closest-side, ${gradientPoints.join(\", \")})`};hoverSizeValue=hoverSize*2;}else if(hoverShape===\"circle\"){hoverStyle={borderRadius:\"50%\"};}return /*#__PURE__*/_jsxs(\"div\",{style:{position:\"relative\",borderRadius:radius,overflow:\"hidden\",backgroundImage:isCustom?\"\":bgImage.replace(/\\[color\\]/g,color),backgroundSize:bgSize,backgroundPosition:bgPosition,backgroundRepeat:bgRepeat,...style},children:[isCustom&&/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,backgroundColor:color,maskImage:bgImage,maskSize:bgSize,maskPosition:bgPosition,maskRepeat:bgRepeat,maskMode:customPatternMode}}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,maskImage:isCustom?bgImage:bgImage.replace(/\\[color\\]/g,\"white\"),maskSize:bgSize,maskPosition:bgPosition,maskRepeat:bgRepeat,maskMode:isCustom?customPatternMode:undefined,WebkitMaskImage:isCustom?bgImage:bgImage.replace(/\\[color\\]/g,\"white\"),WebkitMaskSize:bgSize,WebkitMaskPosition:bgPosition,WebkitMaskRepeat:bgRepeat,WebkitMaskMode:isCustom?customPatternMode:undefined},children:/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",top:isCanvas?\"50%\":0,left:isCanvas?\"50%\":0,transform:isCanvas?\"translate(-50%, -50%)\":undefined,width:hoverSizeValue,height:hoverSizeValue,backgroundColor:hoverColor,...hoverStyle},children:/*#__PURE__*/_jsx(\"div\",{style:{display:\"contents\"},children:/*#__PURE__*/_jsx(FollowCursor,{enabled:true,smoothing:smoothing,horizontalAlignment:\"center\",verticalAlignment:\"center\"})})})})]});}ShimmerGrid.displayName=\"Shimmer Grid\";addPropertyControls(ShimmerGrid,{color:{type:ControlType.Color,defaultValue:\"rgba(153, 153, 153, 0.5)\"},hoverColor:{type:ControlType.Color,defaultValue:\"#FFF\"},hoverSize:{type:ControlType.Number,defaultValue:400,min:1,max:2e3,step:1},hoverShape:{type:ControlType.Enum,defaultValue:\"glow\",options:[\"glow\",\"circle\"],optionTitles:[\"Glow\",\"Circle\"],displaySegmentedControl:true,title:\"Shape\"},patternPreset:{type:ControlType.Enum,defaultValue:\"grid\",options:Object.values(Pattern),optionTitles:[\"Grid\",\"Checkerboard\",\"Horizontal Lines\",\"Vertical Lines\",\"Diagonal Lines\",\"Dots\",\"Triangles\",\"Custom\"],title:\"Pattern\"},customPatternImage:{type:ControlType.ResponsiveImage,title:\"Image\",hidden:props=>props.patternPreset!==\"custom\"},customPatternSizing:{type:ControlType.Enum,defaultValue:\"tile\",options:[\"fill\",\"fit\",\"stretch\",\"tile\"],optionTitles:[\"Fill\",\"Fit\",\"Stretch\",\"Tile\"],title:\"Sizing\",hidden:props=>props.patternPreset!==\"custom\"},flip:{type:ControlType.Boolean,defaultValue:false,hidden:props=>props.patternPreset!==\"checkerboard\"&&props.patternPreset!==\"triangles\"&&props.patternPreset!==\"diagonalLines\"},lineWidth:{type:ControlType.Number,defaultValue:2,min:1,step:1,displayStepper:true,hidden:props=>props.patternPreset!==\"horizontalLines\"&&props.patternPreset!==\"verticalLines\"&&props.patternPreset!==\"diagonalLines\"&&props.patternPreset!==\"grid\"},tileSize:{type:ControlType.Number,defaultValue:50,min:1,step:1,hidden:props=>props.patternPreset===\"custom\"&&props.customPatternSizing!==\"tile\"},dotSize:{type:ControlType.Number,defaultValue:10,min:1,step:1,displayStepper:true,hidden:props=>props.patternPreset!==\"dots\"},customPatternPosition:{type:ControlType.Enum,defaultValue:\"center\",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\"],title:\"Position\",hidden:props=>props.patternPreset!==\"custom\"||props.customPatternSizing===\"stretch\"},customPatternMode:{type:ControlType.Enum,defaultValue:\"alpha\",options:[\"alpha\",\"luminance\"],optionTitles:[\"Alpha\",\"Luminance\"],title:\"Mode\",hidden:props=>props.patternPreset!==\"custom\"},smoothing:{type:ControlType.Number,defaultValue:0,min:0,max:100,step:1},radius:{type:ControlType.BorderRadius,defaultValue:\"0px\",description:\"More components at [Framer University](https://frameruni.link/cc).\"}});function getSideLength(hypotenuseLength){// Check if input is a valid number\nif(typeof hypotenuseLength!==\"number\"||isNaN(hypotenuseLength)||hypotenuseLength<=0){return hypotenuseLength;}// Calculate the side length using the Pythagorean theorem\n// In a right isosceles triangle: side² + side² = hypotenuse²\n// So, side² = hypotenuse² / 2\nconst sideLength=Math.sqrt(Math.pow(hypotenuseLength,2)/2);// Round the result to 2 decimal places\nreturn Number(sideLength.toFixed(2));}function mapRange(value,fromLow,fromHigh,toLow,toHigh){if(fromLow===fromHigh){return toLow;}const percentage=(value-fromLow)/(fromHigh-fromLow);return toLow+percentage*(toHigh-toLow);}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"ShimmerGrid\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"400\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"fixed\",\"framerDisableUnlink\":\"*\",\"framerIntrinsicHeight\":\"400\",\"framerSupportedLayoutHeight\":\"fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./ShimmerGrid_Prod.map","// Generated by Framer (0da2bc6)\nexport default function metadata(params,activeLocale){return{description:\"DotAI 係香港首個專注 AI 應用落地的平台，致力以貼地策略提升企業與個人競爭力。提供 5 大 AI 應用服務：AI 公眾課程、AI 企業導入、AI 營銷服務、AI 工具開發同顧問服務，幫你掌握「唔止 AI 工具操作」，而係點樣落地用得着！已獲多間中小企至大型企業採用，全面支援數碼 AI 轉型!\",favicon:\"https://framerusercontent.com/assets/L5tQJUJrsf5mw955S76X8Ty6N5Y.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/AO9ICfsyNWvy4JipPbdbG7tAiM.jpg\",title:\"DotAI | 香港首個 AI 實用教學及應用平台\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}