{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/JfW6EfEeJnrqM1YQCYmc/3By4VvLRRlsqmHmoICUC/Masonry.js", "ssg:https://framer.com/m/framer/store.js@^1.0.0"],
  "sourcesContent": ["// Code from Nikolay Goncharuk on GitHub:\n// https://github.com/GoncharukBro/react-smart-masonry/blob/master/src/Masonry.tsx\n// https://github.com/GoncharukBro/react-smart-masonry/blob/master/src/useResize.ts\n//\n// Modified by Isaac Roberts\n// https://framestack.co/components/masonry-layout\n//\n// Copyright (c) 2021 Nikolay Goncharuk\n// MIT License\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useState,useLayoutEffect,useMemo,useRef,Children,isValidElement}from\"react\";const DEFAULT_COLUMNS=1;const DEFAULT_GAP=0;export default function Masonry({breakpoints,columns=DEFAULT_COLUMNS,gap=DEFAULT_GAP,reverse=false,autoArrange=false,alignment=\"center\",children,style,...otherProps},forwardedRef){const elements=useRef([]);const[arrange,setArrange]=useState(false);// eslint-disable-next-line react-hooks/exhaustive-deps\nuseLayoutEffect(()=>{if(autoArrange&&!arrange)setArrange(true);return()=>{if(autoArrange&&arrange)setArrange(false);};});const layout=useMemo(()=>{if(columns<1)return[];const arrayOfChildren=Children.toArray(children);if(reverse)arrayOfChildren.reverse();const newLayout=Array.from({length:columns},()=>{return[];});const columnHeights=newLayout.map(()=>0);const getcolumnIndex=index=>{if(autoArrange&&arrange&&elements.current.length>0){const columnIndex=columnHeights.findIndex(item=>{return item===Math.min(...columnHeights);});const element=elements.current.find(item=>item.index===index);const elementHeight=element===null||element===void 0?void 0:element.element.getBoundingClientRect().height;columnHeights[columnIndex]+=elementHeight||0;return columnIndex;}return index%columns;};arrayOfChildren.forEach((child,index)=>{if(child&&/*#__PURE__*/isValidElement(child)){newLayout[getcolumnIndex(index)].push({element:child,index});}});return newLayout;},[arrange,autoArrange,children,columns,reverse]);const temporaryElements=[];const addElement=index=>element=>{if(element!==null){temporaryElements.push({element,index});elements.current=temporaryElements;}};return /*#__PURE__*/_jsx(\"div\",{ref:forwardedRef,style:{display:\"flex\",gap,...style},...otherProps,children:layout.map((column,columnIndex)=>/*#__PURE__*/_jsx(\"div\",{style:{flex:1,display:\"flex\",flexDirection:\"column\",alignItems:alignment,gap},children:column.map((item,itemIndex)=>/*#__PURE__*/_jsx(\"div\",{ref:addElement(item.index),children:item.element},itemIndex))},columnIndex))});}Masonry.displayName=\"Superfields/Masonry\";\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Masonry\",\"slots\":[\"children\"],\"annotations\":{\"framerContractVersion\":\"1\"}},\"MasonryProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Masonry.map", "import{useState,useEffect}from\"react\";import{Data,useObserveData}from\"framer\";export function createStore(state1){// Use Data so that a Preview reload resets the state\nconst dataStore=Data({state:Object.freeze({...state1})});// Create a set function that updates the state\nconst setDataStore=newState=>{// If the state is an object, make sure we copy it\nif(typeof newState===\"function\"){newState=newState(dataStore.state);}dataStore.state=Object.freeze({...dataStore.state,...newState});};// Store the initial state, copy the object if it's an object\nlet storeState=typeof state1===\"object\"?Object.freeze({...state1}):state1;// Keep a list of all the listeners, in the form of React hook setters\nconst storeSetters=new Set();// Create a set function that updates all the listeners / setters\nconst setStoreState=newState=>{// If the state is an object, make sure we copy it\nif(typeof newState===\"function\"){newState=newState(storeState);}storeState=typeof newState===\"object\"?Object.freeze({...storeState,...newState}):newState;// Update all the listeners / setters with the new value\nstoreSetters.forEach(setter=>setter(storeState));};// Create the actual hook based on everything above\nfunction useStore(){// Create the hook we are going to use as a listener\nconst[state,setState]=useState(storeState);// If we unmount the component using this hook, we need to remove the listener\n// @ts-ignore\nuseEffect(()=>{// But right now, we need to add the listener\nstoreSetters.add(setState);return()=>storeSetters.delete(setState);},[]);// If Data context exists, use Data, otherwise use vanilla React state\nif(useObserveData()===true){useObserveData();return[dataStore.state,setDataStore];}else{// Return the state and a function to update the central store\nreturn[state,setStoreState];}}return useStore;}\nexport const __FramerMetadata__ = {\"exports\":{\"createStore\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./createStore.map"],
  "mappings": "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",
  "names": ["DEFAULT_COLUMNS", "DEFAULT_GAP", "Masonry", "breakpoints", "columns", "gap", "reverse", "autoArrange", "alignment", "children", "style", "otherProps", "forwardedRef", "elements", "pe", "arrange", "setArrange", "ye", "fe", "layout", "se", "arrayOfChildren", "j", "newLayout", "columnHeights", "getcolumnIndex", "index", "columnIndex", "item", "element", "elementHeight", "child", "J", "temporaryElements", "addElement", "p", "column", "itemIndex", "createStore", "state1", "dataStore", "Data", "setDataStore", "newState", "storeState", "storeSetters", "setStoreState", "setter", "useStore", "state", "setState", "ye", "ue", "useObserveData"]
}
