@snowcone-app/canvas 0.1.10 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/{CanvasStateV1-BmE5V6me.cjs → CanvasStateV1-C4hC1MCe.cjs} +5 -5
  2. package/dist/{CanvasStateV1-BmE5V6me.cjs.map → CanvasStateV1-C4hC1MCe.cjs.map} +1 -1
  3. package/dist/{CanvasStateV1-CD3Q94F4.js → CanvasStateV1-CJU_xYW5.js} +3 -3
  4. package/dist/{CanvasStateV1-CD3Q94F4.js.map → CanvasStateV1-CJU_xYW5.js.map} +1 -1
  5. package/dist/{HybridHistoryManager-BV6XV0nD.js → HybridHistoryManager-jBBnVim8.js} +54 -54
  6. package/dist/{HybridHistoryManager-BV6XV0nD.js.map → HybridHistoryManager-jBBnVim8.js.map} +1 -1
  7. package/dist/{ElementFactory-Ckv6sSev.js → ImportManager-Oqu2yB54.js} +595 -378
  8. package/dist/ImportManager-Oqu2yB54.js.map +1 -0
  9. package/dist/{ElementFactory-DEjwp-Wg.cjs → ImportManager-W1eWhfyM.cjs} +5 -5
  10. package/dist/ImportManager-W1eWhfyM.cjs.map +1 -0
  11. package/dist/ThemeContext-BMNQKl1c.cjs +2 -0
  12. package/dist/{ThemeContext-4mJ_y0Me.cjs.map → ThemeContext-BMNQKl1c.cjs.map} +1 -1
  13. package/dist/ThemeContext-wj-wSO7J.js +1158 -0
  14. package/dist/{ThemeContext-H0Z-MqqR.js.map → ThemeContext-wj-wSO7J.js.map} +1 -1
  15. package/dist/advanced.js +5 -32
  16. package/dist/advanced.js.map +1 -1
  17. package/dist/advanced.mjs +588 -15069
  18. package/dist/advanced.mjs.map +1 -1
  19. package/dist/components/embed/KitLayout.d.ts +22 -0
  20. package/dist/components/embed/UndoRedoControls.d.ts +3 -0
  21. package/dist/compose-Dqh2f8tS.js +22222 -0
  22. package/dist/compose-Dqh2f8tS.js.map +1 -0
  23. package/dist/compose-HDJp4Z_d.cjs +60 -0
  24. package/dist/compose-HDJp4Z_d.cjs.map +1 -0
  25. package/dist/index.js +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.mjs +600 -516
  28. package/dist/index.mjs.map +1 -1
  29. package/dist/internals.js +1 -1
  30. package/dist/internals.js.map +1 -1
  31. package/dist/internals.mjs +101 -102
  32. package/dist/internals.mjs.map +1 -1
  33. package/dist/style.css.d.ts +4 -0
  34. package/dist/testing.js +1 -1
  35. package/dist/testing.mjs +11 -11
  36. package/package.json +8 -4
  37. package/dist/ElementFactory-Ckv6sSev.js.map +0 -1
  38. package/dist/ElementFactory-DEjwp-Wg.cjs.map +0 -1
  39. package/dist/ImportManager-64OYjELO.js +0 -222
  40. package/dist/ImportManager-64OYjELO.js.map +0 -1
  41. package/dist/ImportManager-wSzrR-5a.cjs +0 -2
  42. package/dist/ImportManager-wSzrR-5a.cjs.map +0 -1
  43. package/dist/ThemeContext-4mJ_y0Me.cjs +0 -2
  44. package/dist/ThemeContext-H0Z-MqqR.js +0 -1077
  45. package/dist/compose-DHBRwi_A.cjs +0 -33
  46. package/dist/compose-DHBRwi_A.cjs.map +0 -1
  47. package/dist/compose-DIPiisIw.js +0 -7690
  48. package/dist/compose-DIPiisIw.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ "use strict";const D=require("react/jsx-runtime"),t=require("react"),S=require("./HybridHistoryManager-BXD93pp8.cjs"),re=S.createLogger("useCommandHistory");function We(o,e,r,s){const c=t.useRef(new S.HybridHistoryManager(r)),[n,d]=t.useState({canUndo:!1,canRedo:!1,canUndoActiveArtboard:!1,canRedoActiveArtboard:!1}),i=t.useCallback(()=>{const a=c.current,f=r.getActiveArtboardId();d({canUndo:a.canUndo(),canRedo:a.canRedo(),canUndoActiveArtboard:f?a.canUndoArtboard(f):!1,canRedoActiveArtboard:f?a.canRedoArtboard(f):!1})},[r]),g=t.useCallback((a,f)=>{const F=new S.UpdateElementCommand(f.id,a||null,f,T=>{e(N=>N.map(z=>z.id===T.id?T:z))}),y=r.getArtboardIdForElement(f.id);if(y)c.current.executeOnArtboard(y,F);else{const T=r.getActiveArtboardId();T&&c.current.executeOnArtboard(T,F)}i()},[e,r,i]),R=t.useCallback((a,f,F,y)=>{const T=f||r.getActiveArtboardId();if(!T){re.warn("No active artboard to add element to");return}const N=new S.AddElementCommand(a,z=>{const L=z;e(O=>{if(y){const H=O.findIndex(P=>P.id===y);if(H!==-1){const P=[...O];return P.splice(H,0,L),P}}if(F){const H=O.findIndex(P=>P.id===F);if(H!==-1){const P=[...O];return P.splice(H+1,0,L),P}for(let P=0;P<O.length;P++){const Z=O[P];if(Z instanceof S.GroupElement&&Z.children){const G=Z.children.findIndex(M=>M.id===F);if(G!==-1){const M=Z.clone();M.children.splice(G+1,0,L);const $=[...O];return $[P]=M,$}}}}return[...O,L]}),r.addElementToArtboard(z.id,T)},z=>{e(L=>L.filter(O=>O.id!==z)),r.removeElementFromArtboard(z)});c.current.executeOnArtboard(T,N),i()},[e,r,i]),U=t.useCallback(a=>{const f=r.getArtboardIdForElement(a.id);if(!f){re.warn("Element not found in any artboard");return}const F=new S.RemoveElementCommand(a,y=>{e(T=>[...T,y]),r.addElementToArtboard(y.id,f)},y=>{e(T=>T.filter(N=>N.id!==y)),r.removeElementFromArtboard(y)});c.current.executeOnArtboard(f,F),i()},[e,r,i]),x=t.useCallback(a=>{const f=new S.CreateArtboardCommand(a,r);c.current.executeGlobal(f),i(),s==null||s()},[r,i,s]),A=t.useCallback(a=>{const f=new S.DeleteArtboardCommand(a,r);c.current.executeGlobal(f),i(),s==null||s()},[r,i,s]),E=t.useCallback((a,f,F)=>{const y=new S.UpdateArtboardCommand(a,f,F,r);c.current.executeGlobal(y),i(),s==null||s()},[r,i,s]),b=t.useCallback(a=>{if(a.length===0)return;const f=r.getActiveArtboardId();if(!f){re.warn("No active artboard for batch execution");return}const F=a.map(y=>new class extends Object{execute(){y.execute()}undo(){y.undo()}});c.current.executeBatchOnArtboard(f,F),i()},[r,i]),u=t.useCallback(()=>{c.current.undo()&&(i(),s==null||s())},[i,s]),m=t.useCallback(()=>{c.current.redo()&&(i(),s==null||s())},[i,s]),v=t.useCallback(()=>{const a=r.getActiveArtboardId();a&&c.current.undoArtboard(a)&&(i(),s==null||s())},[r,i,s]),h=t.useCallback(()=>{const a=r.getActiveArtboardId();a&&c.current.redoArtboard(a)&&(i(),s==null||s())},[r,i,s]),C=t.useCallback(()=>{c.current.clear(),i()},[i]),_=t.useCallback(a=>{c.current.clearArtboardHistory(a),i()},[i]),V=t.useRef(null);t.useEffect(()=>{const a=r.getActiveArtboardId();a!==V.current&&(V.current=a,i())});const j=t.useCallback((a,f,F)=>{const y=o.map(z=>z.id),T=r.getArtboardIdForElement(a);if(!T){re.warn("Element not found in any artboard");return}const N=new S.ReorderElementCommand(a,f,F,y,z=>{e(L=>{const O=new Map(L.map(H=>[H.id,H]));return z.map(H=>O.get(H)).filter(Boolean)})});c.current.executeOnArtboard(T,N),i()},[o,e,r,i]);return{executeElementUpdate:g,executeAddElement:R,executeRemoveElement:U,executeReorderElement:j,executeCommandBatch:b,executeCreateArtboard:x,executeDeleteArtboard:A,executeUpdateArtboard:E,undo:u,redo:m,undoActiveArtboard:v,redoActiveArtboard:h,clearHistory:C,clearArtboardHistory:_,canUndo:n.canUndo,canRedo:n.canRedo,canUndoActiveArtboard:n.canUndoActiveArtboard,canRedoActiveArtboard:n.canRedoActiveArtboard,historyManager:c.current}}function q(o){return o&&"fontSize"in o&&"color"in o&&"fontFamily"in o}function _e(o,e){const[r,s]=t.useState(32),[c,n]=t.useState("#333333"),[d,i]=t.useState("Arial"),[g,R]=t.useState("center");t.useEffect(()=>{if(o&&q(o)){const u=o.transformType==="circle"&&"getEffectiveFontSize"in o?Math.round(o.getEffectiveFontSize()):Math.round(o.fontSize),m=o.color,v=o.fontFamily,h=o.textAlign;s(C=>C!==u?u:C),n(C=>C!==m?m:C),i(C=>C!==v?v:C),R(C=>C!==h?h:C)}},[o]);const U=t.useCallback(u=>{if(!o||!q(o))return;const m=Math.max(S.MIN_FONT_SIZE,Math.min(S.MAX_FONT_SIZE,r+u));s(m);const v=o.clone();v.transformType==="circle"&&"setEffectiveFontSize"in v?v.setEffectiveFontSize(m):v.setFontSize(m),e(v)},[o,r,e]),x=t.useCallback(u=>{if(!o||!q(o))return;s(u);const m=o.clone();m.transformType==="circle"&&"setEffectiveFontSize"in m?m.setEffectiveFontSize(u):m.setFontSize(u),e(m)},[o,e]),A=t.useCallback(u=>{if(!o||!q(o))return;n(u);const m=o.clone();if(m.color=u,m.richText)for(const v of m.richText.spans)v.style.color=void 0;e(m)},[o,e]),E=t.useCallback(u=>{if(!o||!q(o))return;const m=o.fontFamily;m!==u&&S.FontAnalyzer.clearCache(m),i(u);const v=o.clone();v.fontFamily=u,e(v)},[o,e]),b=t.useCallback(u=>{if(!o||!q(o))return;R(u);const m=o.clone();m.textAlign=u,e(m)},[o,e]);return{fontSize:r,fontColor:c,fontFamily:d,textAlign:g,setFontSize:s,setFontColor:n,setFontFamily:i,setTextAlign:R,updateFontSize:U,setFontSizeValue:x,updateFontColor:A,updateFontFamily:E,updateTextAlign:b}}const Ee="data-preserve-selection";function Te(o){if(!(o instanceof Element))return!1;let e=o;const r=[];for(;e;){const s=e.id?`#${e.id}`:"",c=e.className?`.${String(e.className).split(" ").slice(0,2).join(".")}`:"";if(r.push(`${e.tagName.toLowerCase()}${s}${c}`),e.hasAttribute(Ee))return!0;const n=e.getAttribute("role");if(n==="dialog"||n==="alertdialog"||n==="menu"||n==="listbox")return!0;const d=e.getAttribute("data-slot");if(d&&(d.includes("popover")||d.includes("dialog"))||e.hasAttribute("data-radix-popper-content-wrapper"))return!0;e=e.parentElement}return!1}const Be={[Ee]:""},Ie=t.createContext(null),Ze=.1,Me=4,we=.25,$e=({children:o,artboardManager:e,canvasRef:r,viewPadding:s=.9})=>{const[c,n]=t.useState(1),[d,i]=t.useState({x:0,y:0}),[g,R]=t.useState(!1),[U,x]=t.useState(1),A=t.useCallback(()=>{x(1),i({x:0,y:0})},[]),E=t.useCallback(()=>{n(h=>Math.min(h+we,Me))},[]),b=t.useCallback(()=>{n(h=>Math.max(h-we,Ze))},[]),u=t.useCallback(()=>{const h=e.getActiveArtboard();if(!h||!r.current)return;let C=r.current.parentElement,_=0,V=0;for(;C&&(_=C.clientWidth,V=C.clientHeight,!(_>0&&V>0));)C=C.parentElement;if(!_||!V)return;const j=Math.min(_*s/h.width,V*s/h.height,1);n(j),i({x:0,y:0})},[e,r,s]),m=t.useCallback(()=>{n(1),i({x:0,y:0})},[]),v=t.useMemo(()=>({zoom:c,panOffset:d,isPanning:g,zoomIn:E,zoomOut:b,zoomToFit:u,resetView:m,setZoom:n,setPanOffset:i,setIsPanning:R,userZoom:U,setUserZoom:x,resetUserView:A}),[c,d,g,E,b,u,m,U,A]);return D.jsx(Ie.Provider,{value:v,children:o})};function ke(){const o=t.useContext(Ie);if(!o)throw new Error("useViewportContext must be used within a ViewportProvider (or EditorProvider)");return o}const Re=t.createContext(null),Ge=({children:o})=>{const[e,r]=t.useState(null),[s,c]=t.useState([]),[n,d]=t.useState(null),[i,g]=t.useState(null),[R,U]=t.useState(!1),x=t.useCallback(b=>{r(b)},[]),A=t.useCallback(b=>{d(b)},[]),E=t.useMemo(()=>({selectedId:e,multiSelection:s,activeChildElement:n,hoveredElementId:i,hideHandles:R,setSelectedId:r,setMultiSelection:c,setHoveredElementId:g,setHideHandles:U,handleSelectionChange:x,handleActiveChildChange:A}),[e,s,n,i,R,x,A]);return D.jsx(Re.Provider,{value:E,children:o})};function ve(){const o=t.useContext(Re);if(!o)throw new Error("useSelectionContext must be used within a SelectionProvider (or EditorProvider)");return o}const Pe=t.createContext(null),Xe=({children:o,value:e})=>{const r=t.useMemo(()=>({undo:e.undo,redo:e.redo,canUndo:e.canUndo,canRedo:e.canRedo,undoActiveArtboard:e.undoActiveArtboard,redoActiveArtboard:e.redoActiveArtboard,canUndoActiveArtboard:e.canUndoActiveArtboard,canRedoActiveArtboard:e.canRedoActiveArtboard}),[e.undo,e.redo,e.canUndo,e.canRedo,e.undoActiveArtboard,e.redoActiveArtboard,e.canUndoActiveArtboard,e.canRedoActiveArtboard]);return D.jsx(Pe.Provider,{value:r,children:o})};function qe(){const o=t.useContext(Pe);if(!o)throw new Error("useHistoryContext must be used within a HistoryProvider (or EditorProvider)");return o}const ge=t.createContext(null),Je=({children:o})=>{const[e,r]=t.useState(null),[s,c]=t.useState(!1),[n,d]=t.useState(0),[i,g]=t.useState(!1),[R,U]=t.useState(!1),x=t.useMemo(()=>({expandedPanelType:e,setExpandedPanelType:r,isToolbarMenuOpen:s,setIsToolbarMenuOpen:c,textSelectionVersion:n,setTextSelectionVersion:d,isCanvasReady:i,setCanvasReady:g,isRotating:R,setIsRotating:U}),[e,s,n,i,R]);return D.jsx(ge.Provider,{value:x,children:o})};function Fe(){const o=t.useContext(ge);if(!o)throw new Error("useToolStateContext must be used within a ToolStateProvider (or EditorProvider)");return o}const ze=t.createContext(null),Ye=({children:o,value:e})=>{const r=t.useMemo(()=>({elements:e.elements,elementStore:e.elementStore,artboards:e.artboards,artboardManager:e.artboardManager,artboardVersion:e.artboardVersion,setElements:e.setElements,refreshArtboards:e.refreshArtboards,getElementById:e.getElementById,handleAddElement:e.handleAddElement,handleElementUpdate:e.handleElementUpdate,handleLoadWorkspace:e.handleLoadWorkspace,handleCopyElements:e.handleCopyElements,handlePasteElements:e.handlePasteElements,fontSize:e.fontSize,fontColor:e.fontColor,fontFamily:e.fontFamily,textAlign:e.textAlign,updateFontSize:e.updateFontSize,setFontSizeValue:e.setFontSizeValue,updateFontColor:e.updateFontColor,updateFontFamily:e.updateFontFamily,updateTextAlign:e.updateTextAlign,canvasRef:e.canvasRef,canvasEditorRef:e.canvasEditorRef}),[e.elements,e.elementStore,e.artboards,e.artboardManager,e.artboardVersion,e.setElements,e.refreshArtboards,e.getElementById,e.handleAddElement,e.handleElementUpdate,e.handleLoadWorkspace,e.handleCopyElements,e.handlePasteElements,e.fontSize,e.fontColor,e.fontFamily,e.textAlign,e.updateFontSize,e.setFontSizeValue,e.updateFontColor,e.updateFontFamily,e.updateTextAlign,e.canvasRef,e.canvasEditorRef]);return D.jsx(ze.Provider,{value:r,children:o})};function Qe(){const o=t.useContext(ze);if(!o)throw new Error("useElementsContext must be used within an ElementsProvider (or EditorProvider)");return o}const Oe=t.createContext(null),Ke=({children:o,value:e})=>{const r=t.useMemo(()=>({executeElementUpdate:e.executeElementUpdate,executeAddElement:e.executeAddElement,executeRemoveElement:e.executeRemoveElement,executeReorderElement:e.executeReorderElement,executeCreateArtboard:e.executeCreateArtboard,executeDeleteArtboard:e.executeDeleteArtboard,executeUpdateArtboard:e.executeUpdateArtboard,executeCommandBatch:e.executeCommandBatch,undo:e.undo,redo:e.redo,canUndo:e.canUndo,canRedo:e.canRedo,undoActiveArtboard:e.undoActiveArtboard,redoActiveArtboard:e.redoActiveArtboard,canUndoActiveArtboard:e.canUndoActiveArtboard,canRedoActiveArtboard:e.canRedoActiveArtboard,historyManager:e.historyManager}),[e.executeElementUpdate,e.executeAddElement,e.executeRemoveElement,e.executeReorderElement,e.executeCreateArtboard,e.executeDeleteArtboard,e.executeUpdateArtboard,e.executeCommandBatch,e.undo,e.redo,e.canUndo,e.canRedo,e.undoActiveArtboard,e.redoActiveArtboard,e.canUndoActiveArtboard,e.canRedoActiveArtboard,e.historyManager]);return D.jsx(Oe.Provider,{value:r,children:o})};function et(){const o=t.useContext(Oe);if(!o)throw new Error("useCommandContext must be used within a CommandProvider (or EditorProvider)");return o}const tt=S.createLogger("EditorContext"),Ue=t.createContext(null),ot=({children:o,artboardManager:e,canvasRef:r,canvasEditorRef:s})=>{const c=ke(),n=ve(),d=Fe(),[i,g]=t.useState(()=>e.getAllArtboards()),[R,U]=t.useState(0),[x,A]=t.useState(()=>new S.ElementStore),E=t.useMemo(()=>x.toArray(),[x]),b=t.useCallback(l=>{A(p=>{const w=p.toArray(),I=typeof l=="function"?l(w):l;return I===w?p:S.ElementStore.fromArray(I)})},[]),u=t.useCallback(l=>x.get(l),[x]),[m,v]=t.useState([]),h=n.selectedId?x.get(n.selectedId):void 0,C=t.useCallback(()=>{g([...e.getAllArtboards()]),U(l=>l+1)},[e]),{historyManager:_,executeElementUpdate:V,executeAddElement:j,executeRemoveElement:a,executeReorderElement:f,executeCommandBatch:F,executeCreateArtboard:y,executeDeleteArtboard:T,executeUpdateArtboard:N,undo:z,redo:L,canUndo:O,canRedo:H,undoActiveArtboard:P,redoActiveArtboard:Z,canUndoActiveArtboard:G,canRedoActiveArtboard:M}=We(E,b,e,C),$=t.useCallback(l=>{const p=x.get(l.id);V(p,l)},[x,V]),He=t.useCallback(l=>{if(!h||!(h instanceof S.GroupElement))return;const p=h.clone(),w=p.children.findIndex(I=>I.id===l.id);w>=0&&(p.children[w]=l,$(p))},[h,$]),De=n.activeChildElement||h,Le=n.activeChildElement?He:$,{fontSize:ce,fontColor:ie,fontFamily:de,textAlign:ae,updateFontSize:le,setFontSizeValue:ue,updateFontColor:me,updateFontFamily:fe,updateTextAlign:he}=_e(De,Le),Ae=t.useCallback(async(l,p)=>{var ye;const w=e.getActiveArtboardId();if(!w){alert("Please create or select an artboard first");return}const I=`element-${Date.now()}`,k=e.getActiveArtboard(),J=k?k.x+k.width/2:window.innerWidth/2,Y=k?k.y+k.height/2:window.innerHeight/2,W=((ye=s.current)==null?void 0:ye.getZoom())||c.zoom||1;if(l==="image"){const oe="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",X=new S.ImageElement({id:I,x:J,y:Y,imageUrl:oe,transformData:{type:"image",width:200/W,height:200/W,cropX:0,cropY:0,cropWidth:1,cropHeight:1,flipHorizontal:!1,flipVertical:!1,borderRadius:0}});j(X,w),n.setSelectedId(X.id);return}let Q;const B={text:"custom",circle:"circle",wave:"wave",arch:"arch",shape:"shape"}[l]||"custom",ee=S.getTransformById(B);if(!ee||!ee.Component)return;const te=e.getActiveArtboard(),Ne=te?Math.min(te.width,te.height)*.1:80,be=te?te.width*.5:300;if(l==="shape"){const oe=(p==null?void 0:p.shapeType)??"rectangle";let X=200/W,Ce=200/W;oe==="ellipse"?(X=150/W,Ce=250/W):oe==="line"&&(X=300/W,Ce=8/W),Q=new S.ShapeElement({id:I,x:J,y:Y,transformData:{type:"shape",shapeType:oe,width:X,height:Ce,fillColor:"#3b82f6",fillOpacity:1}})}else Q=new ee.Component({id:I,text:"New Text",x:J,y:Y,fontSize:Ne,fontFamily:"Poppins",color:"#000000",transformData:B==="arch"?{type:"arch",width:be,archHeight:S.ARCH_DEFAULTS.archHeight}:B==="wave"?{type:"wave",width:be,amplitude:S.WAVE_DEFAULTS.amplitude,frequency:S.WAVE_DEFAULTS.frequency}:B==="circle"?{type:"circle",radius:be/2}:void 0});e.addElementToArtboard(I,w),j(Q,w,n.selectedId||void 0),n.setSelectedId(I)},[e,j,n,c.zoom,s]),xe=t.useCallback(()=>{const l=[];if(n.multiSelection.length>0){const p=E.filter(w=>n.multiSelection.includes(w.id));l.push(...p)}else h&&l.push(h);if(l.length>0){const p=l.map(w=>w.clone());v(p)}},[h,n.multiSelection,E]),pe=t.useCallback(()=>{if(m.length===0)return;const l=[],p=30,w=30;m.forEach(I=>{const k=x.get(I.id),J=k?k.x:I.x,Y=k?k.y:I.y,W=I.toJSON();delete W.id;const Q=I.constructor,K=new Q(W);K.x=J+p,K.y=Y+w;let B=null;if(k&&(B=e.getArtboardIdForElement(k.id)),B||(B=e.getActiveArtboardId()),!B){tt.warn("[handlePasteElements] No artboard found for pasting");return}const ee=k?k.id:void 0;j(K,B,ee),l.push(K.id)}),l.length===1?n.handleSelectionChange(l[0]):l.length>1&&n.setMultiSelection(l)},[m,x,e,j,n]),ne=t.useCallback(()=>{if(d.expandedPanelType==="crop"&&(h==null?void 0:h.transformType)==="image"){const l=h;if(l.isCropping){const p=l.clone();p.exitCropMode(),V(l,p)}}d.setExpandedPanelType(null)},[d.expandedPanelType,d.setExpandedPanelType,h,V]);t.useEffect(()=>{const l=p=>{const w=p.target;if(w.tagName==="CANVAS"||Te(w))return;const k=document.activeElement;if(k!=null&&k.hasAttribute("data-preserve-selection")){k.blur();return}if(d.expandedPanelType!==null){ne();return}n.setSelectedId(null),n.setMultiSelection([])};return document.addEventListener("pointerdown",l),()=>document.removeEventListener("pointerdown",l)},[d.expandedPanelType,ne,n]);const Se=t.useCallback((l,p,w)=>{e.clear(),l.forEach(I=>{e.createArtboard(I.toJSON())}),w&&e.setActiveArtboard(w),g([...e.getAllArtboards()]),U(I=>I+1),b(p),n.setSelectedId(null)},[e,n,b]),je=t.useMemo(()=>({zoom:c.zoom,panOffset:c.panOffset,isPanning:c.isPanning,zoomIn:c.zoomIn,zoomOut:c.zoomOut,zoomToFit:c.zoomToFit,resetView:c.resetView,setZoom:c.setZoom,setPanOffset:c.setPanOffset,setIsPanning:c.setIsPanning,selectedId:n.selectedId,multiSelection:n.multiSelection,activeChildElement:n.activeChildElement,hoveredElementId:n.hoveredElementId,hideHandles:n.hideHandles,setSelectedId:n.setSelectedId,setMultiSelection:n.setMultiSelection,setHoveredElementId:n.setHoveredElementId,setHideHandles:n.setHideHandles,handleSelectionChange:n.handleSelectionChange,handleActiveChildChange:n.handleActiveChildChange,expandedPanelType:d.expandedPanelType,setExpandedPanelType:d.setExpandedPanelType,isToolbarMenuOpen:d.isToolbarMenuOpen,setIsToolbarMenuOpen:d.setIsToolbarMenuOpen,textSelectionVersion:d.textSelectionVersion,setTextSelectionVersion:d.setTextSelectionVersion,isCanvasReady:d.isCanvasReady,setCanvasReady:d.setCanvasReady,isRotating:d.isRotating,setIsRotating:d.setIsRotating,clearExpandedPanel:ne,artboardManager:e,artboards:i,elements:E,elementStore:x,getElementById:u,selectedElement:h,canvasRef:r,canvasEditorRef:s,setElements:b,artboardVersion:R,refreshArtboards:C,handleElementUpdate:$,handleAddElement:Ae,handleLoadWorkspace:Se,handleCopyElements:xe,handlePasteElements:pe,historyManager:_,executeElementUpdate:V,executeAddElement:j,executeRemoveElement:a,executeReorderElement:f,executeCommandBatch:F,executeCreateArtboard:y,executeDeleteArtboard:T,executeUpdateArtboard:N,undo:z,redo:L,canUndo:O,canRedo:H,undoActiveArtboard:P,redoActiveArtboard:Z,canUndoActiveArtboard:G,canRedoActiveArtboard:M,fontSize:ce,fontColor:ie,fontFamily:de,textAlign:ae,updateFontSize:le,setFontSizeValue:ue,updateFontColor:me,updateFontFamily:fe,updateTextAlign:he}),[c.zoom,c.panOffset,c.isPanning,c.zoomIn,c.zoomOut,c.zoomToFit,c.resetView,c.setZoom,c.setPanOffset,c.setIsPanning,n.selectedId,n.multiSelection,n.activeChildElement,n.hoveredElementId,n.hideHandles,n.setSelectedId,n.setMultiSelection,n.setHoveredElementId,n.setHideHandles,n.handleSelectionChange,n.handleActiveChildChange,d.expandedPanelType,d.setExpandedPanelType,d.isToolbarMenuOpen,d.setIsToolbarMenuOpen,d.textSelectionVersion,d.setTextSelectionVersion,d.isCanvasReady,d.setCanvasReady,d.isRotating,d.setIsRotating,ne,e,i,E,x,u,h,r,s,b,R,C,$,Ae,Se,xe,pe,_,V,j,a,f,F,y,T,N,z,L,O,H,P,Z,G,M,ce,ie,de,ae,le,ue,me,fe,he]);return D.jsx(Xe,{value:{undo:z,redo:L,canUndo:O,canRedo:H,undoActiveArtboard:P,redoActiveArtboard:Z,canUndoActiveArtboard:G,canRedoActiveArtboard:M},children:D.jsx(Ye,{value:{elements:E,elementStore:x,artboards:i,artboardManager:e,artboardVersion:R,setElements:b,refreshArtboards:C,getElementById:u,handleAddElement:Ae,handleElementUpdate:$,handleLoadWorkspace:Se,handleCopyElements:xe,handlePasteElements:pe,fontSize:ce,fontColor:ie,fontFamily:de,textAlign:ae,updateFontSize:le,setFontSizeValue:ue,updateFontColor:me,updateFontFamily:fe,updateTextAlign:he,canvasRef:r,canvasEditorRef:s},children:D.jsx(Ke,{value:{executeElementUpdate:V,executeAddElement:j,executeRemoveElement:a,executeReorderElement:f,executeCommandBatch:F,executeCreateArtboard:y,executeDeleteArtboard:T,executeUpdateArtboard:N,undo:z,redo:L,canUndo:O,canRedo:H,undoActiveArtboard:P,redoActiveArtboard:Z,canUndoActiveArtboard:G,canRedoActiveArtboard:M,historyManager:_},children:D.jsx(Ue.Provider,{value:je,children:o})})})})},nt=({children:o,initialArtboardConfig:e={},viewPadding:r=.9})=>{const[s]=t.useState(()=>{const d=new S.ArtboardManager,i={name:e.name||"Artboard 1",x:e.x??0,y:e.y??0,width:e.width??1e3,height:e.height??1e3,backgroundColor:e.backgroundColor||S.DEFAULT_ARTBOARD_COLOR};return d.createArtboard(i),d}),c=t.useRef(null),n=t.useRef(null);return D.jsx($e,{artboardManager:s,canvasRef:c,viewPadding:r,children:D.jsx(Ge,{children:D.jsx(Je,{children:D.jsx(ot,{artboardManager:s,canvasRef:c,canvasEditorRef:n,children:o})})})})},rt=()=>{const o=t.useContext(Ue);if(!o)throw new Error("useEditor must be used within EditorProvider");return o},Ve=t.createContext(void 0);function se(){if(typeof window>"u")return{theme:"light",resolvedTheme:"light",isDark:!1};const o=document.documentElement.classList.contains("dark"),e=document.documentElement.getAttribute("data-theme");let r=o?"dark":"light";e&&["light","dark","axis-light","axis-dark","ocean-light","ocean-dark","sunset-light","sunset-dark"].includes(e)&&(r=e);let s=o?"dark":"light";return r.startsWith("axis")?s="axis":r.startsWith("ocean")?s="ocean":r.startsWith("sunset")&&(s="sunset"),{theme:s,resolvedTheme:r,isDark:o}}const st=({children:o,defaultTheme:e="light",passive:r=!1})=>{const s=()=>typeof window>"u"?e:r?se().theme:localStorage.getItem("snowcone-theme")||e,c=()=>typeof window>"u"?"light":r?se().resolvedTheme:"light",[n,d]=t.useState(s),[i,g]=t.useState(c);t.useEffect(()=>{if(!r||typeof window>"u")return;const{resolvedTheme:A,theme:E}=se();g(A),d(E);const b=new MutationObserver(()=>{const{resolvedTheme:u,theme:m}=se();g(u),d(m)});return b.observe(document.documentElement,{attributes:!0,attributeFilter:["class","data-theme"]}),()=>b.disconnect()},[r]),t.useEffect(()=>{if(r||typeof window>"u")return;const A=window.matchMedia("(prefers-color-scheme: dark)"),E=b=>{let u;if(n==="auto")u=b.matches?"dark":"light";else{if(n==="light"||n==="dark")return;u=b.matches?`${n}-dark`:`${n}-light`}g(u),document.documentElement.setAttribute("data-theme",u),u==="dark"||u.endsWith("-dark")?(document.documentElement.classList.add("dark"),document.body.classList.add("dark")):(document.documentElement.classList.remove("dark"),document.body.classList.remove("dark"))};return A.addEventListener("change",E),()=>A.removeEventListener("change",E)},[n,r]),t.useEffect(()=>{if(r||typeof window>"u")return;let A;const E=window.matchMedia("(prefers-color-scheme: dark)").matches;n==="auto"?A=E?"dark":"light":n==="light"||n==="dark"?A=n:A=E?`${n}-dark`:`${n}-light`,g(A),document.documentElement.setAttribute("data-theme",A),A==="dark"||A.endsWith("-dark")?(document.documentElement.classList.add("dark"),document.body.classList.add("dark")):(document.documentElement.classList.remove("dark"),document.body.classList.remove("dark")),localStorage.setItem("snowcone-theme",n)},[n,r]);const R=A=>{r||d(A)},U=i==="dark"||i.endsWith("-dark"),x={theme:n,resolvedTheme:i,setTheme:R,isDark:U};return D.jsx(Ve.Provider,{value:x,children:o})},ct=()=>{const o=t.useContext(Ve);if(!o)throw new Error("useTheme must be used within ThemeProvider");return o};exports.EditorProvider=nt;exports.PRESERVE_SELECTION_ATTR=Ee;exports.ThemeProvider=st;exports.preserveSelectionProps=Be;exports.shouldPreserveSelection=Te;exports.useCommandContext=et;exports.useEditor=rt;exports.useElementsContext=Qe;exports.useHistoryContext=qe;exports.useSelectionContext=ve;exports.useTheme=ct;exports.useToolStateContext=Fe;exports.useViewportContext=ke;
2
+ //# sourceMappingURL=ThemeContext-BMNQKl1c.cjs.map