kritzel-stencil 0.0.115 → 0.0.116
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.
- package/dist/cjs/{index-C2M4eyxF.js → index-aaWestcD.js} +177 -2
- package/dist/cjs/index-aaWestcD.js.map +1 -0
- package/dist/cjs/index.cjs.js +3 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/kritzel-brush-style_18.cjs.entry.js +76 -222
- package/dist/cjs/kritzel-brush-style_18.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/stencil.cjs.js +1 -1
- package/dist/collection/classes/objects/base-object.class.js +3 -0
- package/dist/collection/classes/objects/base-object.class.js.map +1 -1
- package/dist/collection/classes/objects/path.class.js +2 -2
- package/dist/collection/classes/objects/path.class.js.map +1 -1
- package/dist/collection/classes/registries/icon-registry.class.js +18 -18
- package/dist/collection/classes/registries/icon-registry.class.js.map +1 -1
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +54 -2
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +51 -25
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
- package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.css +1 -1
- package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.css +1 -1
- package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.css +3 -3
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +3 -4
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.css +2 -2
- package/dist/collection/configs/default-engine-state.js +1 -0
- package/dist/collection/configs/default-engine-state.js.map +1 -1
- package/dist/collection/helpers/class.helper.js +6 -0
- package/dist/collection/helpers/class.helper.js.map +1 -0
- package/dist/collection/index.js +2 -0
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
- package/dist/collection/interfaces/object.interface.js.map +1 -1
- package/dist/components/index.js +2 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/kritzel-brush-style.js +1 -1
- package/dist/components/kritzel-context-menu.js +1 -1
- package/dist/components/kritzel-control-brush-config.js +1 -1
- package/dist/components/kritzel-control-text-config.js +1 -1
- package/dist/components/kritzel-controls.js +1 -1
- package/dist/components/kritzel-dropdown.js +1 -1
- package/dist/components/kritzel-editor.js +25 -15
- package/dist/components/kritzel-editor.js.map +1 -1
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/kritzel-font-family.js +1 -1
- package/dist/components/kritzel-icon.js +1 -1
- package/dist/components/kritzel-tooltip.js +1 -1
- package/dist/components/kritzel-utility-panel.js +1 -1
- package/dist/components/{p-DLV-5gE_.js → p-B8nuvSxt.js} +5 -5
- package/dist/components/{p-DLV-5gE_.js.map → p-B8nuvSxt.js.map} +1 -1
- package/dist/components/{p-aZgXbW1r.js → p-BAWNhoRC.js} +72 -56
- package/dist/components/{p-aZgXbW1r.js.map → p-BAWNhoRC.js.map} +1 -1
- package/dist/components/{p-C9ZagG9K.js → p-BBIuV3j1.js} +3 -3
- package/dist/components/{p-C9ZagG9K.js.map → p-BBIuV3j1.js.map} +1 -1
- package/dist/components/{p-BH1Tkwyh.js → p-BV9-NuyD.js} +4 -4
- package/dist/components/{p-BH1Tkwyh.js.map → p-BV9-NuyD.js.map} +1 -1
- package/dist/components/p-C6kzcN4b.js +90 -0
- package/dist/components/p-C6kzcN4b.js.map +1 -0
- package/dist/components/{p-CRiUM-tD.js → p-CYnE3twZ.js} +4 -4
- package/dist/components/p-CYnE3twZ.js.map +1 -0
- package/dist/components/{p-C9FTWNZY.js → p-CtNzxQ7T.js} +3 -3
- package/dist/components/p-CtNzxQ7T.js.map +1 -0
- package/dist/components/{p-BIlVkMTU.js → p-DRuQsvUx.js} +8 -5
- package/dist/components/p-DRuQsvUx.js.map +1 -0
- package/dist/components/{p-BtjtAfGW.js → p-JQA2FRVr.js} +5 -5
- package/dist/components/{p-BtjtAfGW.js.map → p-JQA2FRVr.js.map} +1 -1
- package/dist/components/{p-h3bqYufZ.js → p-LIijWPsT.js} +3 -3
- package/dist/components/p-LIijWPsT.js.map +1 -0
- package/dist/components/{p-B94Na1ee.js → p-eBBOf568.js} +4 -4
- package/dist/components/p-eBBOf568.js.map +1 -0
- package/dist/components/{p-mz1ayKXG.js → p-o2f4ejEa.js} +12 -12
- package/dist/components/p-o2f4ejEa.js.map +1 -0
- package/dist/esm/{index-rckCSz7Y.js → index-Dn7aP72S.js} +176 -3
- package/dist/esm/index-Dn7aP72S.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/kritzel-brush-style_18.entry.js +69 -215
- package/dist/esm/kritzel-brush-style_18.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/stencil.js +1 -1
- package/dist/stencil/index.esm.js +1 -1
- package/dist/stencil/p-Dn7aP72S.js +2 -0
- package/dist/stencil/p-Dn7aP72S.js.map +1 -0
- package/dist/stencil/p-b626c6a2.entry.js +2 -0
- package/dist/stencil/p-b626c6a2.entry.js.map +1 -0
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/classes/objects/base-object.class.d.ts +1 -0
- package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +4 -1
- package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +2 -1
- package/dist/types/components.d.ts +20 -2
- package/dist/types/helpers/class.helper.d.ts +3 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/interfaces/engine-state.interface.d.ts +1 -0
- package/dist/types/interfaces/object.interface.d.ts +1 -0
- package/package.json +4 -7
- package/dist/cjs/index-C2M4eyxF.js.map +0 -1
- package/dist/components/p-B94Na1ee.js.map +0 -1
- package/dist/components/p-BIlVkMTU.js.map +0 -1
- package/dist/components/p-C9FTWNZY.js.map +0 -1
- package/dist/components/p-CRiUM-tD.js.map +0 -1
- package/dist/components/p-h3bqYufZ.js.map +0 -1
- package/dist/components/p-ksTCzgsY.js +0 -90
- package/dist/components/p-ksTCzgsY.js.map +0 -1
- package/dist/components/p-mz1ayKXG.js.map +0 -1
- package/dist/esm/index-rckCSz7Y.js.map +0 -1
- package/dist/stencil/p-9394d74e.entry.js +0 -2
- package/dist/stencil/p-9394d74e.entry.js.map +0 -1
- package/dist/stencil/p-rckCSz7Y.js +0 -2
- package/dist/stencil/p-rckCSz7Y.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["kritzelBrushStyleCss","KritzelBrushStyle","constructor","hostRef","this","type","brushOptions","value","label","handleDropdownValueChange","event","typeChange","emit","detail","render","dropdownOptions","map","option","h","Host","key","options","onValueChanged","class","slot","name","size","kritzelColorCss","KritzelColor","isLightColor","hexColor","r","g","b","sanitizedHex","startsWith","slice","length","parseInt","substring","isNaN","luminance","isColorVeryLight","style","width","height","borderRadius","display","position","white","backgroundColor","top","left","kritzelColorPaletteCss","KritzelColorPalette","colors","selectedColor","isExpanded","isOpaque","handleColorClick","color","colorChange","calculateHeight","colorsPerRow","rowHeight","gap","rowCount","Math","ceil","displayedColors","expandedHeight","expanded","selected","onClick","kritzelContextMenuCss","KritzelContextMenu","handleItemClick","item","isDisabled","disabled","actionSelected","items","indexOf","onTouchStart","icon","kritzelControlBrushConfigCss","KritzelControlBrushConfig","palette","handleToolChange","newTool","palettes","componentWillLoad","tool","handleToggleExpand","handleTypeChange","toolChange","handleColorChange","handleSizeChange","flexDirection","alignItems","justifyContent","onTypeChange","title","visibillity","visibility","onColorChange","selectedSize","onSizeChange","kritzelControlTextConfigCss","KritzelControlTextConfig","handleFamilyChange","fontFamily","fontColor","fontSize","selectedFontFamily","onFontFamilyChange","KritzelBrushTool","KritzelBaseTool","store","super","pen","highlighter","handlePointerDown","cancelable","preventDefault","pointerType","KritzelEventHelper","isLeftClick","_store","state","isDrawing","x","clientX","offsetX","y","clientY","offsetY","currentPath","KritzelPath","create","points","translateX","translateY","scale","fill","strokeWidth","activePointers","Array","from","pointers","values","round","rerender","handlePointerMove","handlePointerUp","zIndex","currentZIndex","history","executeCommand","AddObjectCommand","undefined","KritzelDevicesHelper","isTouchDevice","window","matchMedia","matches","kritzelControlsCss","KritzelControls","controls","activeControl","firstConfig","tooltipVisible","kritzelEngine","handleActiveToolChange","find","control","_a","setFocus","handleClick","element","target","closest","enable","closeTooltip","activeToolAsTextTool","activeToolAsBrushTool","initializeEngine","initializeTools","componentDidLoad","controlsReady","customElements","whenDefined","host","parentElement","querySelector","Error","c","registerTool","config","isDefault","changeActiveTool","console","warn","handleControlClick","handleConfigClick","stopPropagation","disable","Object","assign","hasNoConfig","_b","mobile","bottom","onUndo","undo","onRedo","redo","onDelete","delete","_event","call","isVisible","anchorElement","_c","shadowRoot","onToolChange","cursor","pointerEvents","_d","_e","border","KritzelTextTool","_f","_g","_h","kritzelCursorTrailCss","KritzelCursorTrail","cursorTrailPoints","isLeftButtonDown","TRAIL_DURATION_MS","MAX_TRAIL_POINTS","trailCleanupIntervalId","setInterval","now","Date","newTrailPoints","filter","p","timestamp","disconnectedCallback","clearInterval","handleMouseDown","ev","button","KritzelMouseButton","Left","newPoint","updatedTrail","xmlns","opacity","point","index","prevPoint","age","progress","max","min","baseStrokeWidth","x1","toString","y1","x2","y2","stroke","kritzelDropdownCss","KritzelDropdown","selectStyles","hasSuffixContent","hasPrefixContent","handleSelectChange","newValue","internalValue","valueChanged","evaluateSuffixContent","suffixSlotElement","newHasContent","assignedNodes","flatten","evaluatePrefixContent","prefixSlotElement","updateInternalValue","externalValueChanged","optionsChanged","proposedValue","emitChange","finalValue","isValidValue","some","opt","selectClasses","ref","el","onSlotchange","onInput","KritzelIconRegistry","register","svgContent","registry","has","set","get","registerIcons","icons","prototype","hasOwnProperty","Map","eraser","image","copy","paste","cut","download","BatchCommand","KritzelBaseCommand","initiator","commands","execute","forEach","command","RemoveObjectCommand","object","objectsOctree","remove","id","insert","KritzelEraserTool","touchStartTimeout","isErasing","setTimeout","isScaling","selectedObject","getObjectFromPointerEvent","markedForRemoval","removeCommands","allObjects","clearTimeout","RemoveSelectionGroupCommand","previousSelectionGroup","selectionGroup","MoveSelectionGroupCommand","startX","startY","endX","endY","skipFirstExecution","skipExecution","move","KritzelBaseHandler","KritzelMoveHandler","isResizeHandleSelected","isRotationHandleSelected","isDragging","dragStartX","dragStartY","moveDeltaX","abs","moveDeltaY","moveThreshold","longTouchTimeout","KritzelHandleType","ResizeSelectionGroupCommand","previousSize","newSize","resize","KritzelResizeHandler","initialMouseX","initialMouseY","initialSize","isResizing","firstTouch","dx","dy","resizeHandleType","TopLeft","TopRight","BottomLeft","BottomRight","oneFingerTouch","resizeSelectionGroupCommand","structuredClone","RotateSelectionGroupCommand","rotation","initialRotation","rotate","objects","update","KritzelRotationHandler","isRotating","centerX","centerY","cursorX","cursorY","atan2","groupCenterX","groupCenterY","currentRotation","KritzelGeometryHelper","doPolygonsIntersect","polygon1","polygon2","points1","bottomLeft","bottomRight","topRight","topLeft","points2","isPointInPolygon","i","p1a","p1b","j","p2a","p2b","intersectLines","polygon","inside","xi","yi","xj","yj","intersect","det","t","u","KrtizelSelectionBox","KritzelBaseObject","__class__","generateId","borderColor","borderWidth","AddSelectionGroupCommand","KritzelSelectionHandler","isSelectionClick","selectionBox","isSelectionDrag","touchStartX","touchStartY","startMouseSelection","startTouchSelection","updateTouchSelection","isSelecting","updateMouseSelection","addSelectedObjectAtIndexToSelectionGroup","removeSelectionBox","addSelectedObjectsToSelectionGroup","skipContextMenu","o","KritzelSelectionGroup","currentX","currentY","updateSelectedObjects","objectPolygon","rotatedPolygon","selectionBoxPolygon","selectedObjects","sort","a","addOrRemove","KritzelSelectionTool","selectionHandler","moveHandler","resizeHandler","rotationHandler","isHandleSelected","getHandleType","getSelectedObject","isDifferentObject","onSelectedClick","path","composedPath","objectElement","classList","contains","findObjectById","group","TouchEvent","touches","elementAtPoint","elementFromPoint","handle","KritzelReviver","revive","obj","revivedObj","KritzelText","KritzelImage","KritzelImageTool","newObj","isArray","unchangedObjects","findIndex","push","splice","ObjectHelper","clone","refreshObjectDimensions","deselectAllChildren","updatePosition","deltaX","deltaY","widthScaleFactor","heightScaleFactor","child","updatedWidth","updatedHeight","updatedX","updatedY","totalWidth","totalHeight","angle","cos","sin","unchangedChild","getUnchangedObject","getOffsetXToCenter","getOffsetYToCenter","rotatedX","rotatedY","copiedObject","minX","boundingBox","maxX","minY","maxY","padding","minXRotated","maxXRotated","minYRotated","maxYRotated","objCenterX","objCenterY","objectId","reviver","_mergeNamespaces","e","keys","getOwnPropertyDescriptor","defineProperty","enumerable","freeze","copyExifWithoutOrientation","Promise","getApp1Segment","then","Blob","FileReader","addEventListener","result","DataView","getUint16","s","getUint32","f","l","setUint16","readAsArrayBuffer","exports","UZIP","parse","bin","readUshort","readUint","Uint8Array","d","A","m","_readLocal","readUTF8","csize","buffer","inflateRaw","F","inflate","byteOffset","deflate","level","floor","deflateRaw","adler","encode","writeUint","writeUshort","_noNeed","crc","cpr","usize","file","sizeUTF8","_writeHeader","split","pop","toLowerCase","writeUTF8","table","Uint32Array","readASCII","String","fromCharCode","writeASCII","charCodeAt","pad","decodeURIComponent","U","_goodIndex","_putsE","_","_copyExact","lits","strt","prev","w","v","_hash","E","_writeBlock","_bestMatch","B","of0","lhst","C","df0","dhst","exb","dxb","_howLong","saved","_putsF","getTrees","contSize","fltree","fdtree","ltree","dtree","itree","ihst","I","makeCodes","revCodes","Q","ordr","_codeTiny","M","S","R","T","_writeLit","O","P","H","L","_hufTree","_lenCodes","getSecond","nonZero","lit","setDepth","restrictDepth","log","_bitsF","_bitsE","_decodeTiny","codes2map","_get17","_check","flmap","fdmap","imap","lmap","dmap","ttree","_copyOut","ldef","ddef","bl_count","next_code","rev15","_get25","Uint16Array","pushV","__proto__","default","UPNG","nextZero","readBytes","decodeImage","_getBPP","ctype","depth","tabs","tRNS","PLTE","_decompress","interlace","CgBI","_inflate","_filterZero","_readInterlace","N","n","Z","W","J","X","V","D","q","K","z","$","Y","k","_paeth","_IHDR","compress","_copyTile","decode","frames","num_frames","num_plays","data","rect","delay","dispose","blend","toRGBA8","acTL","_bin","addErr","dither","Int16Array","_main","sRGB","pHYs","iCCP","pako","plte","cimg","loop","compressPNG","bpl","img","bpp","framize","_prepareDiff","_updateFrame","concatRGBA","byteLength","quantize","est","rgba","inds","abuf","_filterLine","getKDtree","getNearest","ind","planeDst","right","i0","i1","bst","tdst","stats","estats","splitPixels","eMq255","dist","eMq","vecDot","random","multVec","sqrt","dot","sml","Cov","encodeLL","toArrayBuffer","getContext","getImageData","ArrayBuffer","set16","set32","setUint32","seek","convert","_dly","toBlob","CHROME","FIREFOX","DESKTOP_SAFARI","IE","IOS","ETC","WorkerGlobalScope","self","cordova","require","CustomFile","getOriginalSymbol","File","CustomFileReader","getFilefromDataUrl","match","globalThis","atob","lastModified","getDataUrlFromFile","onload","onerror","readAsDataURL","loadImage","Image","src","getBrowserName","cachedResult","userAgent","navigator","test","document","documentMode","approximateBelowMaximumCanvasSizeOfBrowser","getNewCanvasAndCtx","OffscreenCanvas","createElement","drawImageInCanvas","fillStyle","fillRect","drawImage","isIOS","includes","platform","drawFileInCanvas","$Try_2_Post","fileType","$Try_2_Catch","$Try_3_Catch","MOBILE_SAFARI","createImageBitmap","canvasToFile","$If_4","$If_5","bind","convertToBlob","quality","$If_6","toDataURL","cleanupCanvasMemory","isAutoOrientationInBrowser","getExifOrientation","handleMaxWidthOrHeight","maxWidthOrHeight","isFinite","followExifOrientation","transform","incProgress","signal","aborted","reason","onProgress","setProgress","maxIteration","maxSizeMB","exifOrientation","$If_2","initialQuality","$Loop_3","alwaysKeepResolution","$Loop_3_exit","compressOnWebWorker","createWorkerScriptURL","URL","createObjectURL","Worker","handler","terminate","error","postMessage","imageCompressionLibUrl","libURL","imageCompression","Number","POSITIVE_INFINITY","useWebWorker","$Try_1_Catch","preserveExif","version","fileInput","maxWidth","maxHeight","maxCompressionSize","setupFileInput","onActivate","openFilePicker","click","accept","handleFileSelect","handleCancel","body","appendChild","input","files","compressedFile","readFile","catch","info","reader","processImage","scaledWidth","scaledHeight","calculateScaledDimensions","createKritzelImage","addImageToStore","widthRatio","heightRatio","scaleRatio","centerInViewport","addImageCommand","addSelectionGroupCommand","setState","KritzelToolRegistry","getTool","DEFAULT_BRUSH_CONFIG","DEFAULT_TEXT_CONFIG","DEFAULT_KRITZEL_CONTROLS","kritzelEditorCss","KritzelEditor","customSvgIcons","hideControls","getObjectById","engineRef","addObject","updateObject","updatedProperties","removeObject","getSelectedObjects","selectObjects","selectAllObjectsInViewport","clearSelection","handleTouchStart","handleKeyDown","controlsRef","onEngineReady","registerCustomSvgIcons","isReady","svg","entries","onIsEngineReady","KritzelViewport","initialTouchDistance","viewportWidth","clientWidth","viewportHeight","clientHeight","handleResize","hasViewportChanged","adjustedClientX","adjustedClientY","Right","isPanning","firstTouchX","firstTouchY","secondTouchX","secondTouchY","pow","currentTouchDistance","midpointX","midpointY","newScale","scaleMax","scaleMin","translateXAdjustment","translateYAdjustment","handleWheel","ctrlKey","isMainMouseWheel","handleZoom","handlePan","getBoundingClientRect","delta","scaleStep","panSpeed","UpdateViewportCommand","previousViewport","currentViewport","KritzelCircularBuffer","capacity","head","tail","add","peek","lastIndex","isEmpty","clear","KritzelHistory","undoStack","historyBufferSize","redoStack","debugInfo","logCommands","KritzelOctree","bounds","children","intersects","rotatedBoundingBox","subdivide","predicate","query","range","results","halfWidth","halfHeight","halfDepth","UpdateObjectCommand","previousProperties","DEFAULT_ENGINE_STATE","activeTool","activeText","copiedObjects","isEnabled","isFocused","isWriting","isCtrlKeyPressed","isContextMenuVisible","contextMenuItems","contextMenuX","contextMenuY","showObjectInfo","showViewportInfo","longTouchDelay","KritzelStore","_history","_state","_listeners","_kritzelEngine","Infinity","viewportBounds","forceUpdate","deselectAllObjects","onStateChange","property","listener","Set","oldValue","deleteSelectedObjectsCommand","removeSelectionGroupCommand","deleteObject","isHistoryUpdated","removeObjectCommand","adjustedX","adjustedY","addCopiedObjectsCommands","addCopiedObjectsAsSelectionGroupCommand","bringForward","increaseZIndexCommands","sendBackward","decreaseZIndexCommands","bringToFront","sendToBack","objectsInViewport","resetActiveText","selector","touch","KritzelKeyHandler","shiftKey","selectAll","insertFromClipboard","handleKeyUp","KritzelContextMenuHandler","globalContextMenuItems","objectContextMenuItems","handleContextMenu","menuWidthEstimate","menuHeightEstimate","margin","innerWidth","innerHeight","KritzelClassHelper","isInstanceOf","className","kritzelEngineCss","KritzelEngine","isSelectionActive","action","moveToTop","moveToBottom","contextMenuElement","contextMenuHandler","keyHandler","activeToolChange","KritzelKeyboardHelper","forceHideKeyboard","viewport","isEngineReady","hideContextMenu","isPointerEventOnContextMenu","onLongTouchPress","setPointerCapture","pointerId","releasePointerCapture","handlePointerCancel","updateFocus","isInside","kritzelEngineElement","isInKritzelEngine","handleContextMenuAction","toolName","toolClass","toolConfig","registeredTool","resolve","onDeactivate","focus","computedStyle","getComputedStyle","baseHandleSizePx","getPropertyValue","trim","baseHandleSize","parseFloat","baseHandleTouchSize","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","transformationMatrix","transformOrigin","rotationDegrees","minHeight","minWidth","borderStyle","overflow","mount","viewBox","userSelect","draggable","onDragStart","onKeyDown","handleInput","rows","outline","whiteSpace","isReadonly","caretColor","strokeLinecap","cx","cy","_u","debugInfoVisible","_v","_w","_x","_y","_z","_0","_1","onActionSelected","_2","kritzelFontCss","KritzelFont","kritzelFontFamilyCss","KritzelFontFamily","fontOptions","fontFamilyChange","isValidCurrentFont","kritzelFontSizeCss","KritzelFontSize","sizes","handleSizeClick","sizeChange","kritzelIconCss","KritzelIcon","styles","role","innerHTML","kritzelStrokeSizeCss","KritzelStrokeSize","kritzelTooltipCss","MOBILE_BREAKPOINT","KritzelTooltip","arrowSize","positionX","arrowOffset","isMobileView","handleWindowResize","calculateAdjustedPosition","componentWillUpdate","anchorRect","tooltipContent","tooltipRect","transition","marginBottom","borderLeft","borderRight","borderTop","kritzelUtilityPanelCss","KritzelUtilityPanel","handleUndo","handleRedo"],"sources":["src/components/shared/kritzel-brush-style/kritzel-brush-style.css?tag=kritzel-brush-style&encapsulation=shadow","src/components/shared/kritzel-brush-style/kritzel-brush-style.tsx","src/components/shared/kritzel-color/kritzel-color.css?tag=kritzel-color&encapsulation=shadow","src/components/shared/kritzel-color/kritzel-color.tsx","src/components/shared/kritzel-color-palette/kritzel-color-palette.css?tag=kritzel-color-palette&encapsulation=shadow","src/components/shared/kritzel-color-palette/kritzel-color-palette.tsx","src/components/ui/kritzel-context-menu/kritzel-context-menu.css?tag=kritzel-context-menu&encapsulation=shadow","src/components/ui/kritzel-context-menu/kritzel-context-menu.tsx","src/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.css?tag=kritzel-control-brush-config&encapsulation=shadow","src/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.tsx","src/components/ui/kritzel-control-text-config/kritzel-control-text-config.css?tag=kritzel-control-text-config&encapsulation=shadow","src/components/ui/kritzel-control-text-config/kritzel-control-text-config.tsx","src/classes/tools/brush-tool.class.ts","src/helpers/devices.helper.ts","src/components/ui/kritzel-controls/kritzel-controls.css?tag=kritzel-controls&encapsulation=shadow","src/components/ui/kritzel-controls/kritzel-controls.tsx","src/components/core/kritzel-cursor-trail/kritzel-cursor-trail.css?tag=kritzel-cursor-trail&encapsulation=shadow","src/components/core/kritzel-cursor-trail/kritzel-cursor-trail.tsx","src/components/shared/kritzel-dropdown/kritzel-dropdown.css?tag=kritzel-dropdown&encapsulation=shadow","src/components/shared/kritzel-dropdown/kritzel-dropdown.tsx","src/classes/registries/icon-registry.class.ts","src/classes/commands/batch.command.ts","src/classes/commands/remove-object.command.ts","src/classes/tools/eraser-tool.class.ts","src/classes/commands/remove-selection-group.command.ts","src/classes/commands/move-selection-group.command.ts","src/classes/handlers/base.handler.ts","src/classes/handlers/move.handler.ts","src/enums/handle-type.enum.ts","src/classes/commands/resize-selection-group.command.ts","src/classes/handlers/resize.handler.ts","src/classes/commands/rotate-selection-group.command.ts","src/classes/handlers/rotation.handler.ts","src/helpers/geometry.helper.ts","src/classes/objects/selection-box.class.ts","src/classes/commands/add-selection-group.command.ts","src/classes/handlers/selection.handler.ts","src/classes/tools/selection-tool.class.ts","src/classes/reviver.class.ts","src/classes/objects/selection-group.class.ts","../../node_modules/browser-image-compression/dist/browser-image-compression.mjs","src/classes/tools/image-tool.class.ts","src/configs/default-toolbar-controls.ts","src/components/core/kritzel-editor/kritzel-editor.css?tag=kritzel-editor","src/components/core/kritzel-editor/kritzel-editor.tsx","src/classes/viewport.class.ts","src/classes/commands/update-viewport.command.ts","src/classes/structures/circular-buffer.structure.ts","src/classes/history.class.ts","src/classes/structures/octree.structure.ts","src/classes/commands/update-object.command.ts","src/configs/default-engine-state.ts","src/classes/store.class.ts","src/classes/handlers/key.handler.ts","src/classes/handlers/context-menu.handler.ts","src/helpers/class.helper.ts","src/components/core/kritzel-engine/kritzel-engine.css?tag=kritzel-engine&encapsulation=shadow","src/components/core/kritzel-engine/kritzel-engine.tsx","src/components/shared/kritzel-font/kritzel-font.css?tag=kritzel-font&encapsulation=shadow","src/components/shared/kritzel-font/kritzel-font.tsx","src/components/shared/kritzel-font-family/kritzel-font-family.css?tag=kritzel-font-family&encapsulation=shadow","src/components/shared/kritzel-font-family/kritzel-font-family.tsx","src/components/shared/kritzel-font-size/kritzel-font-size.css?tag=kritzel-font-size&encapsulation=shadow","src/components/shared/kritzel-font-size/kritzel-font-size.tsx","src/components/shared/kritzel-icon/kritzel-icon.css?tag=kritzel-icon&encapsulation=shadow","src/components/shared/kritzel-icon/kritzel-icon.tsx","src/components/shared/kritzel-stroke-size/kritzel-stroke-size.css?tag=kritzel-stroke-size&encapsulation=shadow","src/components/shared/kritzel-stroke-size/kritzel-stroke-size.tsx","src/components/shared/kritzel-tooltip/kritzel-tooltip.css?tag=kritzel-tooltip&encapsulation=shadow","src/components/shared/kritzel-tooltip/kritzel-tooltip.tsx","src/components/ui/kritzel-utility-panel/kritzel-utility-panel.css?tag=kritzel-utility-panel&encapsulation=shadow","src/components/ui/kritzel-utility-panel/kritzel-utility-panel.tsx"],"sourcesContent":[":host {\r\n display: flex; \r\n align-items: flex-start; \r\n gap: 8px; \r\n padding: 8px; \r\n box-sizing: border-box; \r\n width: 100%;\r\n}\r\n\r\n.brush-style-button {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 42px;\r\n height: 32px;\r\n padding: 0;\r\n border: none;\r\n outline: none;\r\n background: none;\r\n cursor: default;\r\n border-radius: 0; \r\n color: var(--control-text-color);\r\n font-weight: bold;\r\n -webkit-tap-highlight-color: transparent;\r\n}\r\n\r\n.font-style-button:not(:last-child) {\r\n border-right: 1px solid #333333; \r\n}\r\n\r\n.font-style-button:hover {\r\n background-color: var(--control-hover-bg);\r\n}\r\n\r\n.font-style-button:active {\r\n background-color: var(--control-active-bg);\r\n}\r\n\r\n.font-style-button.selected,\r\n.font-style-button.selected:hover,\r\n.font-style-button.selected:active {\r\n background-color: var(--control-selected-bg);\r\n color: var(--control-selected-color);\r\n}","import { Component, Host, h, Prop, EventEmitter, Event } from '@stencil/core';\r\nimport { DropdownOption } from '../kritzel-dropdown/kritzel-dropdown'; // Import DropdownOption\r\n\r\nexport interface BrushStyleOption extends DropdownOption {}\r\n\r\n@Component({\r\n tag: 'kritzel-brush-style',\r\n styleUrl: 'kritzel-brush-style.css',\r\n shadow: true,\r\n})\r\nexport class KritzelBrushStyle {\r\n @Prop()\r\n type: 'pen' | 'highlighter' = 'pen';\r\n\r\n @Prop() brushOptions: BrushStyleOption[] = [\r\n { value: 'pen', label: 'Pen' },\r\n { value: 'highlighter', label: 'Highlighter' },\r\n ];\r\n\r\n @Event()\r\n typeChange: EventEmitter<'pen' | 'highlighter'>;\r\n\r\n handleDropdownValueChange(event: CustomEvent<string>) {\r\n this.typeChange.emit(event.detail as 'pen' | 'highlighter');\r\n }\r\n\r\n render() {\r\n const dropdownOptions: DropdownOption[] = this.brushOptions.map(option => ({\r\n value: option.value,\r\n label: option.label,\r\n }));\r\n\r\n return (\r\n <Host>\r\n <kritzel-dropdown options={dropdownOptions} value={this.type} onValueChanged={event => this.handleDropdownValueChange(event)}>\r\n <button class=\"brush-style-button\" slot=\"prefix\">\r\n <kritzel-icon name={this.type} size={16}></kritzel-icon>\r\n </button>\r\n </kritzel-dropdown>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: flex;\r\n}\r\n\r\n.checkerboard-bg {\r\n background: repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%) 50% / 8px 8px;\r\n position: relative;\r\n overflow: hidden;\r\n}\r\n\r\n.color-circle {\r\n width: 24px;\r\n height: 24px;\r\n border-radius: 50%;\r\n box-sizing: border-box;\r\n display: block;\r\n}\r\n\r\n.color-circle.white {\r\n border: 1px solid var(--kritzel-color-palette-circle-border-color, #dddcdc);\r\n}","import { Component, Host, Prop, h } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'kritzel-color',\r\n styleUrl: 'kritzel-color.css',\r\n shadow: true,\r\n})\r\nexport class KritzelColor {\r\n @Prop()\r\n value: string;\r\n\r\n @Prop()\r\n size: number = 24;\r\n\r\n private isLightColor(hexColor: string): boolean {\r\n if (!hexColor) return false;\r\n\r\n let r = 0,\r\n g = 0,\r\n b = 0;\r\n\r\n let sanitizedHex = hexColor.startsWith('#') ? hexColor.slice(1) : hexColor;\r\n\r\n if (sanitizedHex.length === 3) {\r\n r = parseInt(sanitizedHex[0] + sanitizedHex[0], 16);\r\n g = parseInt(sanitizedHex[1] + sanitizedHex[1], 16);\r\n b = parseInt(sanitizedHex[2] + sanitizedHex[2], 16);\r\n } else if (sanitizedHex.length === 6) {\r\n r = parseInt(sanitizedHex.substring(0, 2), 16);\r\n g = parseInt(sanitizedHex.substring(2, 4), 16);\r\n b = parseInt(sanitizedHex.substring(4, 6), 16);\r\n } else {\r\n return false;\r\n }\r\n\r\n if (isNaN(r) || isNaN(g) || isNaN(b)) {\r\n return false;\r\n }\r\n\r\n const luminance = 0.299 * r + 0.587 * g + 0.114 * b;\r\n\r\n return luminance > 220;\r\n }\r\n\r\n render() {\r\n const isColorVeryLight = this.isLightColor(this.value);\r\n return (\r\n <Host>\r\n <div\r\n class=\"checkerboard-bg\"\r\n style={{\r\n width: `${this.size}px`,\r\n height: `${this.size}px`,\r\n borderRadius: '50%',\r\n display: 'inline-block',\r\n position: 'relative',\r\n }}\r\n >\r\n <div\r\n class={{\r\n 'color-circle': true,\r\n 'white': isColorVeryLight,\r\n }}\r\n style={{\r\n backgroundColor: this.value,\r\n width: `${this.size}px`,\r\n height: `${this.size}px`,\r\n borderRadius: '50%',\r\n position: 'absolute',\r\n top: '0',\r\n left: '0',\r\n display: 'inline-block',\r\n }}\r\n ></div>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 8px;\r\n padding: 8px;\r\n width: 100%;\r\n box-sizing: border-box;\r\n}\r\n\r\n.color-grid {\r\n width: 100%;\r\n display: grid;\r\n grid-template-columns: repeat(6, 32px);\r\n gap: 8px;\r\n justify-items: center;\r\n overflow: hidden;\r\n height: 40px;\r\n transition: height 0.1s ease-in-out;\r\n}\r\n\r\n.color-grid.expanded {\r\n height: 500px;\r\n}\r\n\r\n.color-container {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 32px;\r\n height: 32px;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n border: 2px solid transparent;\r\n box-sizing: border-box;\r\n}\r\n\r\n.color-container:hover {\r\n background-color: var(--kritzel-color-palette-hover-background-color, #f0f0f0);\r\n}\r\n\r\n.color-container.selected {\r\n border-color: var(--kritzel-selection-border-color, #0E1111);\r\n background-color: var(--kritzel-color-palette-selected-background-color);\r\n}\r\n\r\n\r\n","import { Component, Host, h, Prop, EventEmitter, Event } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'kritzel-color-palette',\r\n styleUrl: 'kritzel-color-palette.css',\r\n shadow: true,\r\n})\r\nexport class KritzelColorPalette {\r\n @Prop()\r\n colors: string[] = [];\r\n\r\n @Prop({ mutable: true })\r\n selectedColor: string | null = null;\r\n\r\n @Prop()\r\n isExpanded: boolean = false;\r\n\r\n @Prop()\r\n isOpaque: boolean = false;\r\n\r\n @Event()\r\n colorChange: EventEmitter<string>;\r\n\r\n private handleColorClick(color: string) {\r\n this.selectedColor = color;\r\n this.colorChange.emit(color);\r\n }\r\n\r\n private calculateHeight(): string {\r\n const colorsPerRow = 6;\r\n const rowHeight = 32;\r\n const gap = 8;\r\n const rowCount = Math.ceil(this.colors.length / colorsPerRow);\r\n return `${rowCount * rowHeight + (rowCount - 1) * gap}px`;\r\n }\r\n\r\n render() {\r\n const displayedColors = this.isExpanded ? this.colors : this.colors.slice(0, 6);\r\n const expandedHeight = this.isExpanded ? this.calculateHeight() : '32px';\r\n\r\n return (\r\n <Host>\r\n <div\r\n class={{\r\n 'color-grid': true,\r\n 'expanded': this.isExpanded,\r\n }}\r\n style={{\r\n height: expandedHeight\r\n }}\r\n >\r\n {displayedColors.map(color => (\r\n <div\r\n class={{\r\n 'color-container': true,\r\n 'selected': this.selectedColor === color,\r\n }}\r\n onClick={() => this.handleColorClick(color)}\r\n >\r\n <kritzel-color value={color}></kritzel-color>\r\n </div>\r\n ))}\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: block; \r\n}\r\n\r\n.menu-container {\r\n display: flex;\r\n flex-direction: column;\r\n background-color: var(--kritzel-context-menu-background-color, #ffffff);\r\n border-radius: var(--kritzel-context-menu-border-radius, 12px);\r\n box-shadow: var(--kritzel-context-menu-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12));\r\n border: var(--kritzel-context-menu-border, 1px solid #f0f0f0);\r\n padding: var(--kritzel-context-menu-padding,4px);\r\n}\r\n\r\n.menu-item {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--kritzel-context-menu-item-gap, 8px);\r\n background: none;\r\n border: none;\r\n text-align: left;\r\n padding: var(--kritzel-context-menu-item-padding, 8px);\r\n border-radius: var(--kritzel-context-menu-item-border-radius, 12px);\r\n cursor: pointer;\r\n font-size: var(--kritzel-context-menu-item-font-size, 14px);\r\n color: var(--kritzel-context-menu-item-color, #333333);\r\n white-space: nowrap;\r\n -webkit-tap-highlight-color: transparent;\r\n}\r\n\r\n.menu-item:not(.disabled):hover {\r\n background-color: var(--kritzel-context-menu-item-hover-background-color, hsl(0, 0%, 0%, 4.3%));\r\n}\r\n\r\n.menu-item:not(.disabled):active {\r\n background-color: var(--kritzel-context-menu-item-active-background-color, hsl(0, 0%, 0%, 8.6%));\r\n}\r\n\r\n.menu-item.disabled {\r\n color: var(--kritzel-context-menu-item-disabled-color, #aaaaaa);\r\n cursor: default;\r\n}\r\n\r\n.menu-item kritzel-icon {\r\n opacity: 0.8;\r\n flex-shrink: 0;\r\n}\r\n\r\n.menu-item.disabled kritzel-icon {\r\n opacity: 0.4;\r\n}\r\n\r\n.label {\r\n flex-grow: 1;\r\n}\r\n","import { Component, Host, h, Prop, Event, EventEmitter, Element } from '@stencil/core';\r\nimport { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';\r\n\r\n@Component({\r\n tag: 'kritzel-context-menu',\r\n styleUrl: 'kritzel-context-menu.css',\r\n shadow: true,\r\n})\r\nexport class KritzelContextMenu {\r\n @Prop()\r\n items: ContextMenuItem[];\r\n\r\n @Event()\r\n actionSelected: EventEmitter<ContextMenuItem>;\r\n\r\n @Element()\r\n hostElement: HTMLElement;\r\n\r\n private handleItemClick(item: ContextMenuItem) {\r\n \r\n const isDisabled = typeof item.disabled === 'function' ? item.disabled() : item.disabled;\r\n\r\n if (!isDisabled) {\r\n this.actionSelected.emit(item);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div class=\"menu-container\">\r\n {this.items.map(item => (\r\n <button\r\n key={`${item.label}-${this.items.indexOf(item)}`}\r\n class={{ 'menu-item': true, 'disabled': typeof item.disabled === 'function' ? item.disabled() : item.disabled }}\r\n onClick={() => this.handleItemClick(item)}\r\n onTouchStart={() => this.handleItemClick(item)}\r\n disabled={typeof item.disabled === 'function' ? item.disabled() : item.disabled}\r\n >\r\n {item.icon && <kritzel-icon name={item.icon} size={16}></kritzel-icon>}\r\n <span class=\"label\">{item.label}</span>\r\n </button>\r\n ))}\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n}\r\n\r\n.expand-toggle {\r\n background: none;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 14px;\r\n line-height: 1;\r\n padding: 8px;\r\n color: var(--kritzel-color-palette-expand-toggle-color, #666666);\r\n}\r\n\r\n.expand-toggle:hover {\r\n color: var(--kritzel-color-palette-expand-toggle-hover-color, #333333);\r\n}","import { Component, Host, Prop, h, Event, EventEmitter, Watch, State } from '@stencil/core';\r\nimport { KritzelBrushTool } from '../../../classes/tools/brush-tool.class';\r\n\r\n@Component({\r\n tag: 'kritzel-control-brush-config',\r\n styleUrl: 'kritzel-control-brush-config.css',\r\n shadow: true,\r\n})\r\nexport class KritzelControlBrushConfig {\r\n @Prop({ mutable: true })\r\n tool: KritzelBrushTool;\r\n\r\n @Prop({ mutable: true })\r\n isExpanded: boolean = false;\r\n\r\n @Event()\r\n toolChange: EventEmitter<KritzelBrushTool>;\r\n\r\n @State()\r\n palette: string[] = [];\r\n\r\n @Watch('tool')\r\n handleToolChange(newTool: KritzelBrushTool) {\r\n this.palette = newTool.palettes[newTool.type];\r\n }\r\n\r\n componentWillLoad() {\r\n this.palette = this.tool.palettes[this.tool.type];\r\n }\r\n\r\n handleToggleExpand() {\r\n this.isExpanded = !this.isExpanded;\r\n }\r\n\r\n handleTypeChange(event: CustomEvent<'pen' | 'highlighter'>) {\r\n this.palette = this.tool.palettes[event.detail];\r\n this.tool.type = event.detail;\r\n this.tool.color = this.palette[0];\r\n this.toolChange.emit(this.tool);\r\n }\r\n\r\n handleColorChange(event: CustomEvent<string>) {\r\n this.tool.color = event.detail;\r\n this.toolChange.emit(this.tool);\r\n }\r\n\r\n handleSizeChange(event: CustomEvent<number>) {\r\n this.tool.size = event.detail;\r\n this.toolChange.emit(this.tool);\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n width: '100%',\r\n gap: '8px',\r\n }}\r\n >\r\n <kritzel-brush-style type={this.tool.type} onTypeChange={event => this.handleTypeChange(event)}></kritzel-brush-style>\r\n\r\n <button class=\"expand-toggle\" onClick={() => this.handleToggleExpand()} title={this.isExpanded ? 'Collapse' : 'Expand'} style={this.palette.length > 6 ? { visibillity: 'visible' } : { visibility: 'hidden' }}>\r\n <kritzel-icon name={this.isExpanded ? 'chevron-up' : 'chevron-down'}></kritzel-icon>\r\n </button>\r\n </div>\r\n\r\n <kritzel-color-palette\r\n colors={this.palette}\r\n selectedColor={this.tool.color}\r\n isExpanded={this.isExpanded}\r\n isOpaque={true}\r\n onColorChange={color => this.handleColorChange(color)}\r\n ></kritzel-color-palette>\r\n\r\n <kritzel-stroke-size selectedSize={this.tool.size} onSizeChange={event => this.handleSizeChange(event)}></kritzel-stroke-size>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: block;\r\n flex-direction: column;\r\n width: 100%;\r\n}\r\n\r\n.expand-toggle {\r\n background: none;\r\n border: none;\r\n cursor: pointer;\r\n font-size: 14px;\r\n line-height: 1;\r\n padding: 8px;\r\n color: var(--kritzel-color-palette-expand-toggle-color, #666666);\r\n}\r\n\r\n.expand-toggle:hover {\r\n color: var(--kritzel-color-palette-expand-toggle-hover-color, #333333);\r\n}\r\n","import { Component, Host, Prop, h, Event, EventEmitter } from '@stencil/core';\r\nimport { KritzelTextTool } from '../../../classes/tools/text-tool.class';\r\n\r\n@Component({\r\n tag: 'kritzel-control-text-config',\r\n styleUrl: 'kritzel-control-text-config.css',\r\n shadow: true,\r\n})\r\nexport class KritzelControlTextConfig {\r\n @Prop({ mutable: true })\r\n tool: KritzelTextTool;\r\n\r\n @Prop({ mutable: true })\r\n isExpanded: boolean = false;\r\n\r\n @Event()\r\n toolChange: EventEmitter<KritzelTextTool>;\r\n\r\n handleToggleExpand() {\r\n this.isExpanded = !this.isExpanded;\r\n }\r\n\r\n handleFamilyChange(event: CustomEvent<string>) {\r\n this.tool.fontFamily = event.detail;\r\n this.toolChange.emit(this.tool);\r\n }\r\n\r\n handleColorChange(event: CustomEvent<string>) {\r\n this.tool.fontColor = event.detail;\r\n this.toolChange.emit(this.tool);\r\n }\r\n\r\n handleSizeChange(event: CustomEvent<number>) {\r\n this.tool.fontSize = event.detail;\r\n this.toolChange.emit(this.tool);\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div\r\n style={{\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'flex-start',\r\n width: '100%',\r\n gap: '8px',\r\n }}\r\n >\r\n <kritzel-font-family selectedFontFamily={this.tool.fontFamily} onFontFamilyChange={event => this.handleFamilyChange(event)}></kritzel-font-family>\r\n\r\n <button class=\"expand-toggle\" onClick={() => this.handleToggleExpand()} title={this.isExpanded ? 'Collapse' : 'Expand'}>\r\n <kritzel-icon name={this.isExpanded ? 'chevron-up' : 'chevron-down'}></kritzel-icon>\r\n </button>\r\n </div>\r\n\r\n <kritzel-color-palette\r\n colors={this.tool.palette}\r\n selectedColor={this.tool.fontColor}\r\n isExpanded={this.isExpanded}\r\n onColorChange={event => this.handleColorChange(event)}\r\n ></kritzel-color-palette>\r\n\r\n <kritzel-font-size selectedSize={this.tool.fontSize} fontFamily={this.tool.fontFamily} onSizeChange={event => this.handleSizeChange(event)}></kritzel-font-size>\r\n </Host>\r\n );\r\n }\r\n}\r\n","import { KritzelEventHelper } from '../../helpers/event.helper';\r\nimport { KritzelStore } from '../store.class';\r\nimport { AddObjectCommand } from '../commands/add-object.command';\r\nimport { KritzelPath } from '../objects/path.class';\r\nimport { KritzelBaseTool } from './base-tool.class';\r\n\r\nexport class KritzelBrushTool extends KritzelBaseTool {\r\n type: 'pen' | 'highlighter' = 'pen';\r\n\r\n color: string = '#000000';\r\n\r\n size: number = 6;\r\n\r\n palettes: {\r\n [brushType: string]: string[];\r\n } = {\r\n pen: ['#000000', '#FFFFFF', '#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF', '#00FFFF', '#808080', '#C0C0C0', '#800000', '#008000', '#000080', '#808000', '#800080'],\r\n highlighter: ['#ffff00', '#ffb347', '#b4ffb4'],\r\n };\r\n\r\n constructor(store: KritzelStore) {\r\n super(store);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n if (KritzelEventHelper.isLeftClick(event)) {\r\n this._store.state.isDrawing = true;\r\n const x = event.clientX - this._store.offsetX;\r\n const y = event.clientY - this._store.offsetY;\r\n\r\n this._store.state.currentPath = KritzelPath.create(this._store, {\r\n points: [[x, y]],\r\n translateX: -this._store.state.translateX,\r\n translateY: -this._store.state.translateY,\r\n scale: this._store.state.scale,\r\n fill: this.color,\r\n strokeWidth: this.size,\r\n });\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n\r\n if (activePointers.length === 1) {\r\n const x = Math.round(activePointers[0].clientX - this._store.offsetX);\r\n const y = Math.round(activePointers[0].clientY - this._store.offsetY);\r\n\r\n this._store.state.isDrawing = true;\r\n\r\n this._store.state.currentPath = KritzelPath.create(this._store, {\r\n points: [[x, y]],\r\n translateX: -this._store.state.translateX,\r\n translateY: -this._store.state.translateY,\r\n scale: this._store.state.scale,\r\n fill: this.color,\r\n strokeWidth: this.size,\r\n });\r\n\r\n this._store.rerender();\r\n }\r\n }\r\n }\r\n\r\n handlePointerMove(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n if (this._store.state.isDrawing) {\r\n const x = event.clientX - this._store.offsetX;\r\n const y = event.clientY - this._store.offsetY;\r\n\r\n this._store.state.currentPath = KritzelPath.create(this._store, {\r\n points: [...this._store.state.currentPath.points, [x, y]],\r\n translateX: -this._store.state.translateX,\r\n translateY: -this._store.state.translateY,\r\n scale: this._store.state.scale,\r\n fill: this.color,\r\n strokeWidth: this.size,\r\n });\r\n\r\n this._store.rerender();\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n\r\n if (activePointers.length === 1) {\r\n const x = Math.round(activePointers[0].clientX - this._store.offsetX);\r\n const y = Math.round(activePointers[0].clientY - this._store.offsetY);\r\n\r\n this._store.state.currentPath = KritzelPath.create(this._store, {\r\n points: [...this._store.state.currentPath.points, [x, y]],\r\n translateX: -this._store.state.translateX,\r\n translateY: -this._store.state.translateY,\r\n scale: this._store.state.scale,\r\n fill: this.color,\r\n strokeWidth: this.size,\r\n });\r\n\r\n this._store.rerender();\r\n }\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n if (this._store.state.isDrawing) {\r\n this._store.state.isDrawing = false;\r\n\r\n if (this._store.state.currentPath) {\r\n this._store.state.currentPath.zIndex = this._store.currentZIndex;\r\n this._store.history.executeCommand(new AddObjectCommand(this._store, this, this._store.state.currentPath));\r\n }\r\n\r\n this._store.state.currentPath = undefined;\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n if (this._store.state.isDrawing) {\r\n this._store.state.isDrawing = false;\r\n\r\n if (this._store.state.currentPath) {\r\n this._store.state.currentPath.zIndex = this._store.currentZIndex;\r\n this._store.history.executeCommand(new AddObjectCommand(this._store, this, this._store.state.currentPath));\r\n }\r\n\r\n this._store.state.currentPath = undefined;\r\n\r\n this._store.rerender();\r\n }\r\n }\r\n }\r\n}\r\n","export class KritzelDevicesHelper {\r\n static isTouchDevice(): boolean {\r\n return window.matchMedia('(any-pointer: coarse)').matches;\r\n }\r\n}",":host {\r\n display: flex;\r\n flex-direction: column;\r\n user-select: none;\r\n}\r\n\r\n.kritzel-controls {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: flex-start;\r\n gap: var(--kritzel-controls-gap, 8px);\r\n height: 100%;\r\n padding: var(--kritzel-controls-padding, 8px);\r\n background-color: var(--kritzel-controls-background-color, #ffffff);\r\n border-radius: var(--kritzel-controls-border-radius, 16px);\r\n box-shadow: var(--kritzel-controls-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));\r\n border: var(--kritzel-controls-border, 1px solid #f0f0f0);\r\n z-index: 10000;\r\n position: relative;\r\n}\r\n\r\n.kritzel-control {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: var(--kritzel-controls-control-color, #000000);\r\n border-radius: var(--kritzel-controls-control-border-radius, 12px);\r\n padding: var(--kritzel-controls-control-padding, 8px);\r\n border: none;\r\n outline: none;\r\n background: none;\r\n cursor: pointer;\r\n -webkit-tap-highlight-color: transparent;\r\n font-weight: bold;\r\n}\r\n\r\n.kritzel-control:hover {\r\n background-color: var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%));\r\n}\r\n\r\n:host(.mobile) .kritzel-control:hover {\r\n background-color: unset;\r\n}\r\n\r\n.kritzel-control:active {\r\n background-color: var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%));\r\n}\r\n\r\n:host(.mobile) .kritzel-control:active {\r\n background-color: unset;\r\n}\r\n\r\n.kritzel-control.selected,\r\n.kritzel-control.selected:hover,\r\n.kritzel-control.selected:active {\r\n background-color: var(--kritzel-controls-control-selected-background-color, #0E1111) !important;\r\n color: var(--kritzel-controls-control-selected-color, #ffffff) !important;\r\n}\r\n\r\n.kritzel-divider {\r\n width: var(--kritzel-controls-divider-width, 1px);\r\n height: var(--kritzel-controls-divider-height, 24px);\r\n background-color: var(--kritzel-controls-divider-background-color, hsl(0, 0%, 0%, 4.3%));\r\n}\r\n\r\n.kritzel-config-container {\r\n position: relative;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 40px;\r\n height: 40px;\r\n box-sizing: border-box;\r\n -webkit-tap-highlight-color: transparent;\r\n}\r\n\r\n.kritzel-config {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n cursor: pointer;\r\n}\r\n\r\n.color-container {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 32px;\r\n height: 32px;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n border: 2px solid transparent;\r\n box-sizing: border-box;\r\n background-color: var(--kritzel-color-palette-hover-background-color, #f0f0f0);\r\n}\r\n\r\n.font-container {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 32px;\r\n height: 32px;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n border: 2px solid transparent;\r\n box-sizing: border-box;\r\n background-color: var(--kritzel-color-palette-hover-background-color, #f0f0f0);\r\n}\r\n\r\n.no-config {\r\n height: 24px;\r\n width: 24px;\r\n border-radius: 50%;\r\n border: 1px dashed gray;\r\n}\r\n\r\nkritzel-tooltip {\r\n position: fixed;\r\n bottom: 66px;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n z-index: 10001;\r\n}\r\n","import { Component, h, Prop, State, Element, Host, Listen, Event, EventEmitter, Method } from '@stencil/core';\r\nimport { KritzelBrushTool } from '../../../classes/tools/brush-tool.class';\r\nimport { KritzelTextTool } from '../../../classes/tools/text-tool.class';\r\nimport { KritzelToolbarControl } from '../../../interfaces/toolbar-control.interface';\r\nimport { KritzelBaseTool } from '../../../classes/tools/base-tool.class';\r\nimport { KritzelDevicesHelper } from '../../../helpers/devices.helper';\r\n\r\ntype ToolConfig = Record<string, any>;\r\n\r\n@Component({\r\n tag: 'kritzel-controls',\r\n styleUrl: 'kritzel-controls.css',\r\n shadow: true,\r\n assetsDirs: ['../assets'],\r\n})\r\nexport class KritzelControls {\r\n @Prop()\r\n controls: KritzelToolbarControl[] = [];\r\n\r\n @Prop({ mutable: true })\r\n activeControl: KritzelToolbarControl | null = null;\r\n\r\n @Event()\r\n controlsReady: EventEmitter<void>;\r\n\r\n @State()\r\n firstConfig: ToolConfig | null = null;\r\n\r\n @State()\r\n tooltipVisible: boolean = false;\r\n\r\n @State()\r\n isTouchDevice: boolean = KritzelDevicesHelper.isTouchDevice();\r\n\r\n @Element()\r\n host!: HTMLElement;\r\n\r\n @Listen('activeToolChange', { target: 'document' })\r\n async handleActiveToolChange(event: CustomEvent) {\r\n this.activeControl = this.controls.find(control => control.tool === event.detail) || null;\r\n await this.kritzelEngine?.setFocus();\r\n }\r\n\r\n @Listen('click', { target: 'document' })\r\n handleClick(event: MouseEvent) {\r\n const element = event.target as HTMLElement;\r\n\r\n if (!this.kritzelEngine || element.closest('.kritzel-tooltip')) {\r\n return;\r\n }\r\n\r\n this.tooltipVisible = false;\r\n this.kritzelEngine.enable();\r\n }\r\n\r\n @Method()\r\n async closeTooltip() {\r\n this.tooltipVisible = false;\r\n this.kritzelEngine?.enable();\r\n }\r\n\r\n kritzelEngine: HTMLKritzelEngineElement | null = null;\r\n\r\n get activeToolAsTextTool() {\r\n return this.activeControl?.tool as KritzelTextTool;\r\n }\r\n\r\n get activeToolAsBrushTool() {\r\n return this.activeControl?.tool as KritzelBrushTool;\r\n }\r\n\r\n async componentWillLoad() {\r\n await this.initializeEngine();\r\n await this.initializeTools();\r\n }\r\n\r\n componentDidLoad() {\r\n this.controlsReady.emit();\r\n }\r\n\r\n private async initializeEngine() {\r\n await customElements.whenDefined('kritzel-engine');\r\n this.kritzelEngine = this.host.parentElement.querySelector('kritzel-engine');\r\n\r\n if (!this.kritzelEngine) {\r\n throw new Error('kritzel-engine not found in parent element.');\r\n }\r\n }\r\n\r\n private async initializeTools() {\r\n for (const c of this.controls) {\r\n if (c.type === 'tool' && c.tool) {\r\n c.tool = await this.kritzelEngine.registerTool(c.name, c.tool, c.config);\r\n }\r\n\r\n if (c.type === 'tool' && c.isDefault && c.tool) {\r\n await this.kritzelEngine.changeActiveTool(c.tool as KritzelBaseTool);\r\n this.activeControl = c;\r\n }\r\n\r\n if (c.type === 'config') {\r\n if (this.firstConfig === null) {\r\n this.firstConfig = c;\r\n } else {\r\n console.warn('Only one config control is allowed. The first one will be used.');\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async handleControlClick(control: KritzelToolbarControl) {\r\n this.activeControl = control;\r\n\r\n if (this.activeControl.type === 'tool') {\r\n await this.kritzelEngine.changeActiveTool(this.activeControl.tool as KritzelBaseTool);\r\n }\r\n }\r\n\r\n private handleConfigClick(event: MouseEvent) {\r\n event.stopPropagation();\r\n this.tooltipVisible = !this.tooltipVisible;\r\n this.kritzelEngine.disable();\r\n }\r\n\r\n private async handleToolChange(event: CustomEvent) {\r\n this.activeControl = { ...this.activeControl, tool: event.detail };\r\n await this.kritzelEngine.changeActiveTool((this.activeControl as any).tool);\r\n }\r\n\r\n render() {\r\n const hasNoConfig = this.activeControl?.config === undefined || this.activeControl?.config === null;\r\n\r\n return (\r\n <Host\r\n class={{\r\n mobile: this.isTouchDevice,\r\n }}\r\n >\r\n <kritzel-utility-panel\r\n style={{\r\n position: 'absolute',\r\n bottom: '56px',\r\n left: '12px',\r\n }}\r\n onUndo={() => this.kritzelEngine?.undo()}\r\n onRedo={() => this.kritzelEngine?.redo()}\r\n onDelete={() => this.kritzelEngine?.delete()}\r\n ></kritzel-utility-panel>\r\n\r\n <div class=\"kritzel-controls\">\r\n {this.controls.map(control => {\r\n if (control.type === 'tool') {\r\n return (\r\n <button\r\n class={{\r\n 'kritzel-control': true,\r\n 'selected': this.activeControl?.name === control?.name,\r\n }}\r\n key={control.name}\r\n onClick={_event => this.handleControlClick?.(control)}\r\n >\r\n <kritzel-icon name={control.icon}></kritzel-icon>\r\n </button>\r\n );\r\n }\r\n\r\n if (control.type === 'divider') {\r\n return <div class=\"kritzel-divider\" key={control.name}></div>;\r\n }\r\n\r\n if (control.type === 'config' && control.name === this.firstConfig?.name && this.activeControl) {\r\n return (\r\n <div class=\"kritzel-config-container\" key={control.name}>\r\n <kritzel-tooltip isVisible={this.tooltipVisible} anchorElement={this.host.shadowRoot?.querySelector('.kritzel-config-container') as HTMLElement}>\r\n <div style={{ width: '294px', height: '100%' }}>\r\n {this.activeControl.name === 'brush' && (\r\n <kritzel-control-brush-config tool={this.activeToolAsBrushTool} onToolChange={event => this.handleToolChange?.(event)}></kritzel-control-brush-config>\r\n )}\r\n\r\n {this.activeControl.name === 'text' && (\r\n <kritzel-control-text-config tool={this.activeToolAsTextTool} onToolChange={event => this.handleToolChange?.(event)}></kritzel-control-text-config>\r\n )}\r\n </div>\r\n </kritzel-tooltip>\r\n\r\n <div\r\n class=\"kritzel-config\"\r\n onClick={event => this.handleConfigClick?.(event)}\r\n style={{\r\n cursor: this.activeControl.config ? 'pointer' : 'default',\r\n pointerEvents: hasNoConfig ? 'none' : 'auto',\r\n }}\r\n >\r\n {this.activeControl.tool instanceof KritzelBrushTool && (\r\n <div class=\"color-container\">\r\n <kritzel-color\r\n value={this.activeToolAsBrushTool?.color}\r\n size={this.activeToolAsBrushTool?.size}\r\n style={{\r\n borderRadius: '50%',\r\n border: 'none',\r\n }}\r\n ></kritzel-color>\r\n </div>\r\n )}\r\n\r\n {this.activeControl.tool instanceof KritzelTextTool && (\r\n <div class=\"font-container\">\r\n <kritzel-font\r\n fontFamily={this.activeToolAsTextTool?.fontFamily}\r\n size={this.activeToolAsTextTool?.fontSize}\r\n color={this.activeToolAsTextTool?.fontColor}\r\n ></kritzel-font>\r\n </div>\r\n )}\r\n\r\n {hasNoConfig && <div class=\"no-config\"></div>}\r\n </div>\r\n </div>\r\n );\r\n }\r\n })}\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: block;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n pointer-events: none;\r\n z-index: 9000;\r\n}\r\n","import { Component, Host, Listen, Prop, State, h } from '@stencil/core';\r\nimport { KritzelMouseButton } from '../../../enums/event-button.enum';\r\nimport { KritzelStore } from '../../../classes/store.class';\r\n\r\n@Component({\r\n tag: 'kritzel-cursor-trail',\r\n styleUrl: 'kritzel-cursor-trail.css',\r\n shadow: true,\r\n})\r\nexport class KritzelCursorTrail {\r\n @Prop()\r\n store: KritzelStore;\r\n\r\n @State()\r\n cursorTrailPoints: Array<{ x: number; y: number; timestamp: number }> = [];\r\n\r\n @State()\r\n isLeftButtonDown: boolean = false;\r\n\r\n private trailCleanupIntervalId: number;\r\n\r\n private readonly TRAIL_DURATION_MS = 100;\r\n\r\n private readonly MAX_TRAIL_POINTS = 50;\r\n\r\n componentDidLoad() {\r\n this.trailCleanupIntervalId = window.setInterval(() => {\r\n const now = Date.now();\r\n const newTrailPoints = this.cursorTrailPoints.filter(p => now - p.timestamp < this.TRAIL_DURATION_MS);\r\n if (newTrailPoints.length !== this.cursorTrailPoints.length) {\r\n this.cursorTrailPoints = newTrailPoints;\r\n }\r\n }, 50);\r\n }\r\n\r\n disconnectedCallback() {\r\n if (this.trailCleanupIntervalId) {\r\n window.clearInterval(this.trailCleanupIntervalId);\r\n }\r\n }\r\n\r\n @Listen('pointerdown', { target: 'window', passive: true })\r\n handleMouseDown(ev: PointerEvent) {\r\n if (ev.pointerType === 'mouse') {\r\n if (ev.button === KritzelMouseButton.Left) {\r\n this.isLeftButtonDown = true;\r\n this.cursorTrailPoints = [];\r\n }\r\n }\r\n\r\n if (ev.pointerType === 'touch') {\r\n if (this.store.state.pointers.size === 1) {\r\n this.isLeftButtonDown = true;\r\n this.cursorTrailPoints = [];\r\n }\r\n }\r\n }\r\n\r\n @Listen('pointermove', { target: 'window', passive: true })\r\n handlePointerMove(ev: PointerEvent) {\r\n if (!this.isLeftButtonDown) {\r\n return;\r\n }\r\n const newPoint = { x: ev.clientX, y: ev.clientY, timestamp: Date.now() };\r\n const updatedTrail = [newPoint, ...this.cursorTrailPoints];\r\n if (updatedTrail.length > this.MAX_TRAIL_POINTS) {\r\n this.cursorTrailPoints = updatedTrail.slice(0, this.MAX_TRAIL_POINTS);\r\n } else {\r\n this.cursorTrailPoints = updatedTrail;\r\n }\r\n }\r\n\r\n @Listen('pointerup', { target: 'window', passive: true })\r\n handlePointerUp(ev: PointerEvent) {\r\n if (ev.pointerType === 'mouse') {\r\n if(ev.button === KritzelMouseButton.Left){\r\n this.isLeftButtonDown = false;\r\n this.cursorTrailPoints = [];\r\n }\r\n }\r\n\r\n if (ev.pointerType === 'touch') {\r\n if(this.store.state.pointers.size === 0){\r\n this.isLeftButtonDown = false;\r\n this.cursorTrailPoints = [];\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n {this.cursorTrailPoints.length > 1 && (\r\n <svg\r\n class=\"cursor-trail-svg\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{\r\n position: 'absolute',\r\n left: '0',\r\n top: '0',\r\n width: '100%',\r\n height: '100%',\r\n pointerEvents: 'none',\r\n opacity: 'var(--kritzel-cursor-trail-opacity, 0.6)',\r\n zIndex: '9000',\r\n }}\r\n >\r\n {this.cursorTrailPoints.slice(1).map((point, index) => {\r\n const prevPoint = this.cursorTrailPoints[index];\r\n const now = Date.now();\r\n const age = now - point.timestamp;\r\n const progress = Math.max(0, Math.min(1, age / this.TRAIL_DURATION_MS));\r\n\r\n if (progress >= 1) return null;\r\n\r\n const baseStrokeWidth = Math.max(2, 15 * (1 - progress));\r\n\r\n return (\r\n <line\r\n key={`trail-segment-${point.timestamp}`}\r\n x1={prevPoint.x.toString()}\r\n y1={prevPoint.y.toString()}\r\n x2={point.x.toString()}\r\n y2={point.y.toString()}\r\n stroke=\"var(--kritzel-cursor-trail-color, rgb(228, 228, 228))\"\r\n stroke-width={baseStrokeWidth.toString()}\r\n stroke-linecap=\"round\"\r\n />\r\n );\r\n })}\r\n </svg>\r\n )}\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: inline-flex; /* Ensures the host shrinks/grows with the wrapper */\r\n vertical-align: middle; /* Aligns with other inline-block or inline-flex elements */\r\n width: 100%; /* Ensures the host takes full width of the parent */\r\n}\r\n\r\n.dropdown-wrapper {\r\n display: flex;\r\n align-items: center;\r\n border: 1px solid #333333;\r\n border-radius: var(--kritzel-controls-control-border-radius, 12px);\r\n overflow: hidden;\r\n height: 32px;\r\n width: 100%;\r\n}\r\n\r\n.custom-select {\r\n padding: 0 8px;\r\n padding-right: 30px; \r\n height: 100%;\r\n width: 100%;\r\n box-sizing: border-box;\r\n border-radius: 0; \r\n border: none; \r\n background-color: #fff;\r\n cursor: pointer;\r\n outline: none;\r\n font-size: inherit;\r\n color: var(--kritzel-controls-text-color, #333333); /* Use CSS var with fallback */\r\n -webkit-tap-highlight-color: transparent;\r\n\r\n -webkit-appearance: none;\r\n -moz-appearance: none;\r\n appearance: none;\r\n\r\n background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%23333333\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"6 9 12 15 18 9\"/></svg>');\r\n background-size: 16px 16px;\r\n background-repeat: no-repeat;\r\n background-position: right 8px center; \r\n}\r\n\r\n.custom-select.has-suffix-border {\r\n border-right: 1px solid #333333; \r\n}\r\n\r\n.custom-select.has-prefix-border {\r\n border-left: 1px solid #333333; \r\n}\r\n\r\n::slotted(*) {\r\n height: 100%; \r\n box-sizing: border-box;\r\n}\r\n","import { Component, Host, h, Prop, State, Event, EventEmitter, Watch } from '@stencil/core';\r\n\r\nexport interface DropdownOption {\r\n value: string;\r\n label: string;\r\n style?: any; // For individual option styling, e.g., font family\r\n}\r\n\r\n@Component({\r\n tag: 'kritzel-dropdown',\r\n styleUrl: 'kritzel-dropdown.css',\r\n shadow: true,\r\n})\r\nexport class KritzelDropdown {\r\n @Prop() \r\n options: DropdownOption[] = [];\r\n \r\n @Prop() \r\n value: string;\r\n \r\n @Prop() \r\n width?: string;\r\n \r\n @Prop() \r\n selectStyles?: any = {}; \r\n\r\n @State() \r\n internalValue: string;\r\n\r\n @State() \r\n hasSuffixContent: boolean = false;\r\n\r\n @State()\r\n hasPrefixContent: boolean = false;\r\n\r\n @Event() \r\n valueChanged: EventEmitter<string>;\r\n\r\n private suffixSlotElement?: HTMLSlotElement;\r\n private prefixSlotElement?: HTMLSlotElement;\r\n\r\n componentWillLoad() {\r\n this.updateInternalValue(this.value, false);\r\n this.evaluateSuffixContent();\r\n this.evaluatePrefixContent();\r\n }\r\n\r\n @Watch('value')\r\n externalValueChanged(newValue: string) {\r\n if (newValue !== this.internalValue) {\r\n this.updateInternalValue(newValue, false);\r\n }\r\n }\r\n \r\n @Watch('options')\r\n optionsChanged() {\r\n this.updateInternalValue(this.internalValue, true);\r\n }\r\n\r\n private updateInternalValue(proposedValue: string, emitChange: boolean) {\r\n let finalValue = proposedValue;\r\n if (this.options && this.options.length > 0) {\r\n const isValidValue = this.options.some(opt => opt.value === finalValue);\r\n if (!finalValue || !isValidValue) {\r\n finalValue = this.options[0].value;\r\n }\r\n } else {\r\n finalValue = undefined;\r\n }\r\n\r\n if (this.internalValue !== finalValue) {\r\n this.internalValue = finalValue;\r\n if (emitChange || (proposedValue !== finalValue && proposedValue !== undefined)) {\r\n this.valueChanged.emit(this.internalValue);\r\n }\r\n }\r\n }\r\n\r\n private handleSelectChange = (event: Event) => {\r\n const newValue = (event.target as HTMLSelectElement).value;\r\n if (this.internalValue !== newValue) {\r\n this.internalValue = newValue;\r\n this.valueChanged.emit(this.internalValue);\r\n }\r\n };\r\n\r\n private evaluateSuffixContent = () => {\r\n if (this.suffixSlotElement) {\r\n const newHasContent = this.suffixSlotElement.assignedNodes({ flatten: true }).length > 0;\r\n if (this.hasSuffixContent !== newHasContent) {\r\n this.hasSuffixContent = newHasContent;\r\n }\r\n } else {\r\n if (this.hasSuffixContent !== false) {\r\n this.hasSuffixContent = false;\r\n }\r\n }\r\n }\r\n\r\n private evaluatePrefixContent = () => {\r\n if (this.prefixSlotElement) {\r\n const newHasContent = this.prefixSlotElement.assignedNodes({ flatten: true }).length > 0;\r\n if (this.hasPrefixContent !== newHasContent) {\r\n this.hasPrefixContent = newHasContent;\r\n }\r\n } else {\r\n if (this.hasPrefixContent !== false) {\r\n this.hasPrefixContent = false;\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const selectClasses = {\r\n 'custom-select': true,\r\n 'has-suffix-border': this.hasSuffixContent,\r\n 'has-prefix-border': this.hasPrefixContent,\r\n };\r\n\r\n return (\r\n <Host>\r\n <div class=\"dropdown-wrapper\">\r\n <slot\r\n name=\"prefix\"\r\n ref={el => this.prefixSlotElement = el as HTMLSlotElement}\r\n onSlotchange={this.evaluatePrefixContent}\r\n ></slot>\r\n <select\r\n class={selectClasses}\r\n style={{ ...this.selectStyles, width: this.width }}\r\n onInput={this.handleSelectChange}\r\n >\r\n {this.options.map(option => (\r\n <option\r\n value={option.value}\r\n style={option.style}\r\n selected={option.value === this.internalValue}\r\n >\r\n {option.label}\r\n </option>\r\n ))}\r\n </select>\r\n <slot \r\n name=\"suffix\"\r\n ref={el => this.suffixSlotElement = el as HTMLSlotElement}\r\n onSlotchange={this.evaluateSuffixContent}\r\n ></slot>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n","export class KritzelIconRegistry {\r\n private static registry = new Map<string, string>();\r\n\r\n public static register(name: string, svgContent: string): void {\r\n if (this.registry.has(name)) {\r\n console.warn(`[IconRegistry] Icon \"${name}\" is already registered. It will be overwritten.`);\r\n }\r\n this.registry.set(name, svgContent);\r\n }\r\n\r\n public static get(name: string): string | undefined {\r\n return this.registry.get(name);\r\n }\r\n\r\n public static registerIcons(icons: { [key: string]: string }): void {\r\n for (const name in icons) {\r\n if (Object.prototype.hasOwnProperty.call(icons, name)) {\r\n this.register(name, icons[name]);\r\n }\r\n }\r\n }\r\n\r\n public static has(name: string): boolean {\r\n return this.registry.has(name);\r\n }\r\n}\r\n\r\nKritzelIconRegistry.registerIcons({\r\n 'cursor': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z\"/></svg>',\r\n 'pen': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/></svg>',\r\n 'highlighter': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-highlighter-icon lucide-highlighter\"><path d=\"m9 11-6 6v3h9l3-3\"/><path d=\"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4\"/></svg>',\r\n 'eraser': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21\"/><path d=\"M22 21H7\"/><path d=\"m5 11 9 9\"/></svg>',\r\n 'type': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"4 7 4 4 20 4 20 7\"/><line x1=\"9\" x2=\"15\" y1=\"20\" y2=\"20\"/><line x1=\"12\" x2=\"12\" y1=\"4\" y2=\"20\"/></svg>',\r\n 'image': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"/></svg>',\r\n 'chevron-down': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m6 9 6 6 6-6\"/></svg>',\r\n 'chevron-up': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m18 15-6-6-6 6\"/></svg>',\r\n 'copy': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-copy-icon lucide-copy\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg>',\r\n 'paste': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-clipboard-paste-icon lucide-clipboard-paste\"><path d=\"M11 14h10\"/><path d=\"M16 4h2a2 2 0 0 1 2 2v1.344\"/><path d=\"m17 18 4-4-4-4\"/><path d=\"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 1.793-1.113\"/><rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\"/></svg>',\r\n 'cut': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-scissors-icon lucide-scissors\"><circle cx=\"6\" cy=\"6\" r=\"3\"/><path d=\"M8.12 8.12 12 12\"/><path d=\"M20 4 8.12 15.88\"/><circle cx=\"6\" cy=\"18\" r=\"3\"/><path d=\"M14.8 14.8 20 20\"/></svg>',\r\n 'delete': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-trash2-icon lucide-trash-2\"><path d=\"M3 6h18\"/><path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"/><path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"/><line x1=\"10\" x2=\"10\" y1=\"11\" y2=\"17\"/><line x1=\"14\" x2=\"14\" y1=\"11\" y2=\"17\"/></svg>',\r\n 'bring-to-front': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-up-to-line-icon lucide-arrow-up-to-line\"><path d=\"M5 3h14\"/><path d=\"m18 13-6-6-6 6\"/><path d=\"M12 7v14\"/></svg>',\r\n 'send-to-back': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-down-to-line-icon lucide-arrow-down-to-line\"><path d=\"M12 17V3\"/><path d=\"m6 11 6 6 6-6\"/><path d=\"M19 21H5\"/></svg>',\r\n 'select-all': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-square-mouse-pointer-icon lucide-square-mouse-pointer\"><path d=\"M12.034 12.681a.498.498 0 0 1 .647-.647l9 3.5a.5.5 0 0 1-.033.943l-3.444 1.068a1 1 0 0 0-.66.66l-1.067 3.443a.5.5 0 0 1-.943.033z\"/><path d=\"M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6\"/></svg>',\r\n 'download': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-download-icon lucide-download\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"7 10 12 15 17 10\"/><line x1=\"12\" x2=\"12\" y1=\"15\" y2=\"3\"/></svg>',\r\n 'undo': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-undo-icon lucide-undo\"><path d=\"M3 7v6h6\"/><path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\"/></svg>',\r\n 'redo': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-redo-icon lucide-redo\"><path d=\"M21 7v6h-6\"/><path d=\"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7\"/></svg>'\r\n});","import { KritzelBaseCommand } from \"./base.command\";\r\n\r\nexport class BatchCommand extends KritzelBaseCommand {\r\n private commands: KritzelBaseCommand[];\r\n \r\n constructor(store, initiator: any, commands: KritzelBaseCommand[]) {\r\n super(store, initiator);\r\n this.commands = commands;\r\n }\r\n \r\n execute(): void {\r\n this.commands.forEach(command => command.execute());\r\n }\r\n \r\n undo(): void {\r\n this.commands.forEach(command => command.undo());\r\n }\r\n}","import { KritzelStore } from '../store.class';\r\nimport { KritzelBaseObject } from '../objects/base-object.class';\r\nimport { KritzelBaseCommand } from './base.command';\r\n\r\nexport class RemoveObjectCommand extends KritzelBaseCommand {\r\n private object: KritzelBaseObject<any>;\r\n\r\n constructor(store: KritzelStore, initiator: any, object: KritzelBaseObject<any>) {\r\n super(store, initiator);\r\n this.object = object;\r\n }\r\n\r\n execute(): void {\r\n this._store.state.objectsOctree.remove(object => object.id === this.object.id);\r\n }\r\n\r\n undo(): void {\r\n this._store.state.objectsOctree.insert(this.object);\r\n }\r\n}\r\n","import { KritzelEventHelper } from '../../helpers/event.helper';\r\nimport { KritzelStore } from '../store.class';\r\nimport { BatchCommand } from '../commands/batch.command';\r\nimport { RemoveObjectCommand } from '../commands/remove-object.command';\r\nimport { KritzelBaseTool } from './base-tool.class';\r\n\r\nexport class KritzelEraserTool extends KritzelBaseTool {\r\n touchStartTimeout: any = null;\r\n\r\n constructor(store: KritzelStore) {\r\n super(store);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n if (KritzelEventHelper.isLeftClick(event)) {\r\n this._store.state.isErasing = true;\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n this.touchStartTimeout = setTimeout(() => {\r\n if (this._store.state.pointers.size === 1 && !this._store.state.isScaling) {\r\n this._store.state.isErasing = true;\r\n }\r\n }, 80);\r\n }\r\n }\r\n\r\n handlePointerMove(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n if (this._store.state.isErasing) {\r\n const shadowRoot = this._store.state.host?.shadowRoot;\r\n if (!shadowRoot) return;\r\n\r\n const selectedObject = this._store.getObjectFromPointerEvent(event, '.object');\r\n if (!selectedObject) return;\r\n\r\n selectedObject.markedForRemoval = true;\r\n\r\n this._store.rerender();\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n if (this._store.state.pointers.size === 1 && this._store.state.isErasing) {\r\n const shadowRoot = this._store.state.host?.shadowRoot;\r\n if (!shadowRoot) return;\r\n\r\n const selectedObject = this._store.getObjectFromPointerEvent(event, '.object');\r\n if (!selectedObject) return;\r\n\r\n selectedObject.markedForRemoval = true;\r\n\r\n this._store.rerender();\r\n }\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n if (this._store.state.isErasing) {\r\n const removeCommands = this._store.allObjects\r\n .filter(object => object.markedForRemoval)\r\n .map(object => {\r\n object.markedForRemoval = false;\r\n return new RemoveObjectCommand(this._store, this, object);\r\n });\r\n\r\n if (removeCommands.length > 0) {\r\n this._store.history.executeCommand(new BatchCommand(this._store, this, removeCommands));\r\n }\r\n\r\n this._store.state.isErasing = false;\r\n }\r\n }\r\n\r\n if( event.pointerType === 'touch') {\r\n clearTimeout(this.touchStartTimeout);\r\n\r\n if (this._store.state.isErasing) {\r\n const removeCommands = this._store.allObjects\r\n .filter(object => object.markedForRemoval)\r\n .map(object => {\r\n object.markedForRemoval = false;\r\n return new RemoveObjectCommand(this._store, this, object);\r\n });\r\n\r\n if (removeCommands.length > 0) {\r\n this._store.history.executeCommand(new BatchCommand(this._store, this, removeCommands));\r\n }\r\n\r\n this._store.state.isErasing = false;\r\n }\r\n }\r\n }\r\n}\r\n","import { KritzelStore } from '../store.class';\r\nimport { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelBaseCommand } from './base.command';\r\n\r\nexport class RemoveSelectionGroupCommand extends KritzelBaseCommand {\r\n\r\n private previousSelectionGroup: KritzelSelectionGroup;\r\n\r\n constructor(store: KritzelStore, initiator: any) {\r\n super(store, initiator);\r\n this.previousSelectionGroup = this._store.state.selectionGroup;\r\n }\r\n\r\n execute(): void {\r\n this._store.state.objectsOctree.remove(object => object.id === this.previousSelectionGroup?.id);\r\n this._store.state.selectionGroup = null;\r\n }\r\n\r\n undo(): void {\r\n if(this.previousSelectionGroup) {\r\n this._store.state.objectsOctree.insert(this.previousSelectionGroup);\r\n this._store.state.selectionGroup = this.previousSelectionGroup;\r\n } \r\n }\r\n}\r\n","import { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelBaseCommand } from './base.command';\r\n\r\nexport class MoveSelectionGroupCommand extends KritzelBaseCommand {\r\n private selectionGroup: KritzelSelectionGroup;\r\n\r\n private startX: number;\r\n\r\n private startY: number;\r\n\r\n private endX: number;\r\n\r\n private endY: number;\r\n\r\n private skipExecution: boolean;\r\n\r\n constructor(store, initiator: any, startX: number, startY: number, endX: number, endY: number, skipFirstExecution = false) {\r\n super(store, initiator);\r\n this.startX = startX;\r\n this.startY = startY;\r\n this.endX = endX;\r\n this.endY = endY;\r\n this.skipExecution = skipFirstExecution;\r\n this.selectionGroup = this._store.state.selectionGroup;\r\n }\r\n\r\n execute(): void {\r\n if (this.skipExecution) {\r\n this.skipExecution = false;\r\n return;\r\n }\r\n\r\n this._store.state.selectionGroup = this.selectionGroup;\r\n this._store.state.selectionGroup.move(this.startX, this.startY, this.endX, this.endY);\r\n }\r\n\r\n undo(): void {\r\n this._store.state.selectionGroup = this.selectionGroup;\r\n this._store.state.selectionGroup.move(this.endX, this.endY, this.startX, this.startY);\r\n }\r\n}\r\n","import { KritzelStore } from '../store.class';\r\n\r\nexport class KritzelBaseHandler {\r\n protected readonly _store: KritzelStore;\r\n\r\n constructor(store: KritzelStore) {\r\n this._store = store;\r\n void this._store; // Avoid unused variable warning\r\n }\r\n}","import { KritzelEventHelper } from '../../helpers/event.helper';\r\nimport { KritzelStore } from '../store.class';\r\nimport { MoveSelectionGroupCommand } from '../commands/move-selection-group.command';\r\nimport { KritzelBaseHandler } from './base.handler';\r\n\r\nexport class KritzelMoveHandler extends KritzelBaseHandler {\r\n dragStartX: number;\r\n dragStartY: number;\r\n\r\n startX: number;\r\n startY: number;\r\n\r\n endX: number;\r\n endY: number;\r\n\r\n constructor(store: KritzelStore) {\r\n super(store);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent) {\r\n if (event.pointerType === 'mouse') {\r\n if (KritzelEventHelper.isLeftClick(event)) {\r\n if (this._store.state.selectionGroup?.selected && !this._store.state.isResizeHandleSelected && !this._store.state.isRotationHandleSelected) {\r\n const clientX = event.clientX - this._store.offsetX;\r\n const clientY = event.clientY - this._store.offsetY;\r\n\r\n this._store.state.isDragging = true;\r\n this.dragStartX = clientX;\r\n this.dragStartY = clientY;\r\n this.startX = this.dragStartX;\r\n this.startY = this.dragStartY;\r\n }\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n\r\n if (this._store.state.pointers.size === 1) {\r\n if (this._store.state.selectionGroup?.selected && !this._store.state.isResizeHandleSelected && !this._store.state.isRotationHandleSelected) {\r\n const x = Math.round(activePointers[0].clientX - this._store.offsetX);\r\n const y = Math.round(activePointers[0].clientY - this._store.offsetY);\r\n\r\n this.dragStartX = x;\r\n this.dragStartY = y;\r\n this.startX = x;\r\n this.startY = y;\r\n }\r\n }\r\n }\r\n }\r\n\r\n handlePointerMove(event: PointerEvent) {\r\n if (event.pointerType === 'mouse') {\r\n if (this._store.state.isDragging && this._store.state.selectionGroup) {\r\n const clientX = event.clientX - this._store.offsetX;\r\n const clientY = event.clientY - this._store.offsetY;\r\n\r\n this.endX = clientX;\r\n this.endY = clientY;\r\n this._store.state.selectionGroup.move(clientX, clientY, this.dragStartX, this.dragStartY);\r\n this.dragStartX = clientX;\r\n this.dragStartY = clientY;\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n\r\n if (this._store.state.pointers.size === 1 && this._store.state.selectionGroup && !this._store.state.isResizeHandleSelected && !this._store.state.isRotationHandleSelected) {\r\n const x = Math.round(activePointers[0].clientX - this._store.offsetX);\r\n const y = Math.round(activePointers[0].clientY - this._store.offsetY);\r\n\r\n this._store.state.isDragging = true;\r\n this.endX = x;\r\n this.endY = y;\r\n\r\n const moveDeltaX = Math.abs(x - this.startX);\r\n const moveDeltaY = Math.abs(y - this.startY);\r\n const moveThreshold = 5;\r\n\r\n if (moveDeltaX > moveThreshold || moveDeltaY > moveThreshold) {\r\n clearTimeout(this._store.state.longTouchTimeout);\r\n\r\n this._store.state.selectionGroup.move(x, y, this.dragStartX, this.dragStartY);\r\n this.dragStartX = x;\r\n this.dragStartY = y;\r\n }\r\n }\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent) {\r\n if (event.pointerType === 'mouse') {\r\n if (this._store.state.isDragging) {\r\n this._store.state.isDragging = false;\r\n this._store.history.executeCommand(new MoveSelectionGroupCommand(this._store, this, this.endX, this.endY, this.startX, this.startY, true));\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n if (this._store.state.isDragging) {\r\n this._store.state.isDragging = false;\r\n this._store.history.executeCommand(new MoveSelectionGroupCommand(this._store, this, this.endX, this.endY, this.startX, this.startY, true));\r\n }\r\n }\r\n }\r\n}\r\n","export enum KritzelHandleType {\r\n TopLeft = \"top-left\",\r\n TopRight = \"top-right\",\r\n BottomLeft = \"bottom-left\",\r\n BottomRight = \"bottom-right\"\r\n}","import { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelBaseCommand } from './base.command';\r\n\r\nexport class ResizeSelectionGroupCommand extends KritzelBaseCommand {\r\n\r\n private newSize: {x: number, y: number, width: number, height: number};\r\n\r\n private previousSize: {x: number, y: number, width: number, height: number};\r\n\r\n private selectionGroup: KritzelSelectionGroup;\r\n\r\n constructor(store, initiator: any, previousSize: {x: number, y: number, width: number, height: number}, newSize: {x: number, y: number, width: number, height: number}) {\r\n super(store, initiator);\r\n this.previousSize = previousSize;\r\n this.newSize = newSize;\r\n this.selectionGroup = this._store.state.selectionGroup;\r\n }\r\n\r\n execute(): void {\r\n this._store.state.selectionGroup = this.selectionGroup;\r\n this._store.state.selectionGroup.resize(this.newSize.x, this.newSize.y, this.newSize.width, this.newSize.height);\r\n }\r\n\r\n undo(): void {\r\n this._store.state.selectionGroup = this.selectionGroup;\r\n this._store.state.selectionGroup.resize(this.previousSize.x, this.previousSize.y, this.previousSize.width, this.previousSize.height);\r\n }\r\n}\r\n","import { KritzelHandleType } from '../../enums/handle-type.enum';\r\nimport { KritzelEventHelper } from '../../helpers/event.helper';\r\nimport { ResizeSelectionGroupCommand } from '../commands/resize-selection-group.command';\r\nimport { KritzelStore } from '../store.class';\r\nimport { KritzelBaseHandler } from './base.handler';\r\n\r\nexport class KritzelResizeHandler extends KritzelBaseHandler {\r\n initialMouseX: number = 0;\r\n initialMouseY: number = 0;\r\n\r\n initialSize: { x: number; y: number; width: number; height: number } = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n newSize: { x: number; y: number; width: number; height: number } = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n constructor(store: KritzelStore) {\r\n super(store);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n if (KritzelEventHelper.isLeftClick(event)) {\r\n if (this._store.state.selectionGroup && this._store.state.isResizeHandleSelected) {\r\n const clientX = event.clientX - this._store.offsetX;\r\n const clientY = event.clientY - this._store.offsetY;\r\n\r\n this._store.state.isResizing = true;\r\n this.initialMouseX = clientX;\r\n this.initialMouseY = clientY;\r\n this.initialSize.width = this._store.state.selectionGroup.width;\r\n this.initialSize.height = this._store.state.selectionGroup.height;\r\n this.initialSize.x = this._store.state.selectionGroup.translateX;\r\n this.initialSize.y = this._store.state.selectionGroup.translateY;\r\n }\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n const firstTouch = activePointers[0];\r\n\r\n if (!firstTouch) {\r\n return;\r\n }\r\n\r\n if (activePointers.length === 1) {\r\n if (this._store.state.selectionGroup && this._store.state.isResizeHandleSelected) {\r\n const clientX = Math.round(firstTouch.clientX - this._store.offsetX);\r\n const clientY = Math.round(firstTouch.clientY - this._store.offsetY);\r\n\r\n this._store.state.isResizing = true;\r\n this.initialMouseX = clientX;\r\n this.initialMouseY = clientY;\r\n this.initialSize.width = this._store.state.selectionGroup.width;\r\n this.initialSize.height = this._store.state.selectionGroup.height;\r\n this.initialSize.x = this._store.state.selectionGroup.translateX;\r\n this.initialSize.y = this._store.state.selectionGroup.translateY;\r\n\r\n clearTimeout(this._store.state.longTouchTimeout);\r\n }\r\n }\r\n }\r\n }\r\n\r\n handlePointerMove(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n if (this._store.state.isResizing && this._store.state.selectionGroup) {\r\n const clientX = event.clientX - this._store.offsetX;\r\n const clientY = event.clientY - this._store.offsetY;\r\n\r\n const dx = clientX - this.initialMouseX;\r\n const dy = clientY - this.initialMouseY;\r\n\r\n switch (this._store.state.resizeHandleType) {\r\n case KritzelHandleType.TopLeft:\r\n this.newSize.width = this.initialSize.width - dx;\r\n this.newSize.height = this.initialSize.height - dy;\r\n this.newSize.x = dx / this._store.state.scale + this.initialSize.x;\r\n this.newSize.y = dy / this._store.state.scale + this.initialSize.y;\r\n break;\r\n case KritzelHandleType.TopRight:\r\n this.newSize.width = this.initialSize.width + dx;\r\n this.newSize.height = this.initialSize.height - dy;\r\n this.newSize.x = this.initialSize.x;\r\n this.newSize.y = dy / this._store.state.scale + this.initialSize.y;\r\n break;\r\n case KritzelHandleType.BottomLeft:\r\n this.newSize.width = this.initialSize.width - dx;\r\n this.newSize.height = this.initialSize.height + dy;\r\n this.newSize.x = dx / this._store.state.scale + this.initialSize.x;\r\n this.newSize.y = this.initialSize.y;\r\n break;\r\n case KritzelHandleType.BottomRight:\r\n this.newSize.width = this.initialSize.width + dx;\r\n this.newSize.height = this.initialSize.height + dy;\r\n this.newSize.x = this.initialSize.x;\r\n this.newSize.y = this.initialSize.y;\r\n break;\r\n }\r\n\r\n this._store.state.selectionGroup.resize(this.newSize.x, this.newSize.y, this.newSize.width, this.newSize.height);\r\n this._store.rerender();\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n const oneFingerTouch = activePointers[0];\r\n\r\n if (!oneFingerTouch) {\r\n return;\r\n }\r\n\r\n if (this._store.state.isResizing && this._store.state.selectionGroup) {\r\n const clientX = Math.round(oneFingerTouch.clientX - this._store.offsetX);\r\n const clientY = Math.round(oneFingerTouch.clientY - this._store.offsetY);\r\n\r\n const dx = clientX - this.initialMouseX;\r\n const dy = clientY - this.initialMouseY;\r\n\r\n switch (this._store.state.resizeHandleType) {\r\n case KritzelHandleType.TopLeft:\r\n this.newSize.width = this.initialSize.width - dx;\r\n this.newSize.height = this.initialSize.height - dy;\r\n this.newSize.x = dx / this._store.state.scale + this.initialSize.x;\r\n this.newSize.y = dy / this._store.state.scale + this.initialSize.y;\r\n break;\r\n case KritzelHandleType.TopRight:\r\n this.newSize.width = this.initialSize.width + dx;\r\n this.newSize.height = this.initialSize.height - dy;\r\n this.newSize.x = this.initialSize.x;\r\n this.newSize.y = dy / this._store.state.scale + this.initialSize.y;\r\n break;\r\n case KritzelHandleType.BottomLeft:\r\n this.newSize.width = this.initialSize.width - dx;\r\n this.newSize.height = this.initialSize.height + dy;\r\n this.newSize.x = dx / this._store.state.scale + this.initialSize.x;\r\n this.newSize.y = this.initialSize.y;\r\n break;\r\n case KritzelHandleType.BottomRight:\r\n this.newSize.width = this.initialSize.width + dx;\r\n this.newSize.height = this.initialSize.height + dy;\r\n this.newSize.x = this.initialSize.x;\r\n this.newSize.y = this.initialSize.y;\r\n break;\r\n }\r\n\r\n this._store.state.selectionGroup.resize(this.newSize.x, this.newSize.y, this.newSize.width, this.newSize.height);\r\n\r\n clearTimeout(this._store.state.longTouchTimeout);\r\n }\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n if (this._store.state.isResizing) {\r\n const resizeSelectionGroupCommand = new ResizeSelectionGroupCommand(this._store, this, structuredClone(this.initialSize), structuredClone(this.newSize));\r\n this._store.history.executeCommand(resizeSelectionGroupCommand);\r\n this._store.state.isResizing = false;\r\n this._store.rerender();\r\n }\r\n }\r\n\r\n if( event.pointerType === 'touch') {\r\n if (this._store.state.isResizing) {\r\n const resizeSelectionGroupCommand = new ResizeSelectionGroupCommand(this._store, this, structuredClone(this.initialSize), structuredClone(this.newSize));\r\n this._store.history.executeCommand(resizeSelectionGroupCommand);\r\n this._store.state.isResizing = false;\r\n this._store.rerender();\r\n\r\n clearTimeout(this._store.state.longTouchTimeout);\r\n }\r\n }\r\n }\r\n}\r\n","import { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelBaseCommand } from './base.command';\r\n\r\nexport class RotateSelectionGroupCommand extends KritzelBaseCommand {\r\n\r\n private rotation: number;\r\n\r\n private initialRotation: number;\r\n\r\n private selectionGroup: KritzelSelectionGroup;\r\n\r\n constructor(store, initiator: any, rotation: number) {\r\n super(store, initiator);\r\n this.rotation = rotation;\r\n this.initialRotation = this._store.state.selectionGroup.rotation;\r\n this.selectionGroup = this._store.state.selectionGroup;\r\n }\r\n\r\n execute(): void {\r\n this._store.state.selectionGroup = this.selectionGroup;\r\n this._store.state.selectionGroup.rotate(this.rotation);\r\n this._store.state.selectionGroup.objects.forEach(object => {\r\n this._store.state.objectsOctree.update(object);\r\n });\r\n }\r\n\r\n undo(): void {\r\n this._store.state.selectionGroup = this.selectionGroup;\r\n this._store.state.selectionGroup.rotate(this.rotation - this.initialRotation);\r\n this._store.state.selectionGroup.objects.forEach(object => {\r\n this._store.state.objectsOctree.update(object);\r\n });\r\n }\r\n}\r\n","import { KritzelEventHelper } from '../../helpers/event.helper';\r\nimport { KritzelStore } from '../store.class';\r\nimport { RotateSelectionGroupCommand } from '../commands/rotate-selection-group.command';\r\nimport { KritzelBaseHandler } from './base.handler';\r\n\r\nexport class KritzelRotationHandler extends KritzelBaseHandler {\r\n initialRotation: number = 0;\r\n\r\n rotation: number = 0;\r\n\r\n constructor(store: KritzelStore) {\r\n super(store);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n if (KritzelEventHelper.isLeftClick(event)) {\r\n if (this._store.state.selectionGroup && this._store.state.isRotationHandleSelected) {\r\n const clientX = event.clientX - this._store.offsetX;\r\n const clientY = event.clientY - this._store.offsetY;\r\n\r\n this._store.state.isRotating = true;\r\n\r\n const centerX = this._store.state.selectionGroup.translateX + this._store.state.selectionGroup.width / 2 / this._store.state.scale;\r\n const centerY = this._store.state.selectionGroup.translateY + this._store.state.selectionGroup.height / 2 / this._store.state.scale;\r\n\r\n const cursorX = (clientX - this._store.state.translateX) / this._store.state.scale;\r\n const cursorY = (clientY - this._store.state.translateY) / this._store.state.scale;\r\n\r\n this.initialRotation = Math.atan2(centerY - cursorY, centerX - cursorX) - this._store.state.selectionGroup.rotation;\r\n }\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n const firstTouch = activePointers[0];\r\n\r\n if (!firstTouch) {\r\n return;\r\n }\r\n\r\n if (activePointers.length === 1) {\r\n if (this._store.state.selectionGroup && this._store.state.isRotationHandleSelected) {\r\n const clientX = Math.round(firstTouch.clientX - this._store.offsetX);\r\n const clientY = Math.round(firstTouch.clientY - this._store.offsetY);\r\n\r\n this._store.state.isRotating = true;\r\n\r\n const centerX = this._store.state.selectionGroup.translateX + this._store.state.selectionGroup.width / 2 / this._store.state.scale;\r\n const centerY = this._store.state.selectionGroup.translateY + this._store.state.selectionGroup.height / 2 / this._store.state.scale;\r\n\r\n const cursorX = (clientX - this._store.state.translateX) / this._store.state.scale;\r\n const cursorY = (clientY - this._store.state.translateY) / this._store.state.scale;\r\n\r\n this.initialRotation = Math.atan2(centerY - cursorY, centerX - cursorX) - this._store.state.selectionGroup.rotation;\r\n\r\n clearTimeout(this._store.state.longTouchTimeout);\r\n }\r\n }\r\n }\r\n }\r\n\r\n handlePointerMove(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n if (this._store.state.isRotating && this._store.state.selectionGroup) {\r\n const clientX = event.clientX - this._store.offsetX;\r\n const clientY = event.clientY - this._store.offsetY;\r\n\r\n const groupCenterX = this._store.state.selectionGroup.translateX + this._store.state.selectionGroup.width / 2 / this._store.state.scale;\r\n const groupCenterY = this._store.state.selectionGroup.translateY + this._store.state.selectionGroup.height / 2 / this._store.state.scale;\r\n\r\n const cursorX = (clientX - this._store.state.translateX) / this._store.state.scale;\r\n const cursorY = (clientY - this._store.state.translateY) / this._store.state.scale;\r\n\r\n const currentRotation = Math.atan2(groupCenterY - cursorY, groupCenterX - cursorX);\r\n\r\n this.rotation = currentRotation - this.initialRotation;\r\n\r\n this._store.state.selectionGroup.rotate(this.rotation);\r\n\r\n this._store.rerender();\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n const firstTouch = activePointers[0];\r\n\r\n if (!firstTouch) {\r\n return;\r\n }\r\n\r\n if (this._store.state.isRotating && this._store.state.selectionGroup) {\r\n const clientX = Math.round(firstTouch.clientX - this._store.offsetX);\r\n const clientY = Math.round(firstTouch.clientY - this._store.offsetY);\r\n\r\n const groupCenterX = this._store.state.selectionGroup.translateX + this._store.state.selectionGroup.width / 2 / this._store.state.scale;\r\n const groupCenterY = this._store.state.selectionGroup.translateY + this._store.state.selectionGroup.height / 2 / this._store.state.scale;\r\n\r\n const cursorX = (clientX - this._store.state.translateX) / this._store.state.scale;\r\n const cursorY = (clientY - this._store.state.translateY) / this._store.state.scale;\r\n\r\n const currentRotation = Math.atan2(groupCenterY - cursorY, groupCenterX - cursorX);\r\n\r\n this.rotation = currentRotation - this.initialRotation;\r\n\r\n this._store.state.selectionGroup.rotate(this.rotation);\r\n\r\n this._store.rerender();\r\n\r\n clearTimeout(this._store.state.longTouchTimeout);\r\n }\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n if (this._store.state.isRotating) {\r\n this._store.history.executeCommand(new RotateSelectionGroupCommand(this._store, this, this.rotation));\r\n\r\n this._store.state.isRotating = false;\r\n\r\n this.initialRotation = 0;\r\n this.rotation = 0;\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n if (this._store.state.isRotating) {\r\n this._store.history.executeCommand(new RotateSelectionGroupCommand(this._store, this, this.rotation));\r\n\r\n this._store.state.isRotating = false;\r\n\r\n this.initialRotation = 0;\r\n this.rotation = 0;\r\n\r\n clearTimeout(this._store.state.longTouchTimeout);\r\n }\r\n }\r\n }\r\n}\r\n","import { KritzelPoint } from \"../interfaces/point.interface\";\r\nimport { KritzelPolygon } from \"../interfaces/polygon.interface\";\r\n\r\nexport class KritzelGeometryHelper {\r\n\t static doPolygonsIntersect(polygon1: KritzelPolygon, polygon2: KritzelPolygon): boolean {\r\n\t\t// 1. Convert polygons to array of points for easier processing\r\n\t\tconst points1 = [polygon1.bottomLeft, polygon1.bottomRight, polygon1.topRight, polygon1.topLeft];\r\n\t\tconst points2 = [polygon2.bottomLeft, polygon2.bottomRight, polygon2.topRight, polygon2.topLeft];\r\n\t\r\n\t\t// 2. Check if any point of polygon1 is inside polygon2\r\n\t\tfor (const point of points1) {\r\n\t\t if (this.isPointInPolygon(point, points2)) {\r\n\t\t\treturn true;\r\n\t\t }\r\n\t\t}\r\n\t\r\n\t\t// 3. Check if any point of polygon2 is inside polygon1\r\n\t\tfor (const point of points2) {\r\n\t\t if (this.isPointInPolygon(point, points1)) {\r\n\t\t\treturn true;\r\n\t\t }\r\n\t\t}\r\n\t\r\n\t\t// 4. Check for edge intersections (more complex)\r\n\t\tfor (let i = 0; i < points1.length; i++) {\r\n\t\t const p1a = points1[i];\r\n\t\t const p1b = points1[(i + 1) % points1.length]; // Wrap around to the first point\r\n\t\r\n\t\t for (let j = 0; j < points2.length; j++) {\r\n\t\t\tconst p2a = points2[j];\r\n\t\t\tconst p2b = points2[(j + 1) % points2.length];\r\n\t\r\n\t\t\tif (this.intersectLines(p1a, p1b, p2a, p2b)) {\r\n\t\t\t return true;\r\n\t\t\t}\r\n\t\t }\r\n\t\t}\r\n\t\r\n\t\treturn false; // No intersection found\r\n\t }\r\n\t\r\n\t static isPointInPolygon(point: KritzelPoint, polygon: KritzelPoint[]): boolean {\r\n\t\tlet inside = false;\r\n\t\tfor (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\r\n\t\t const xi = polygon[i].x,\r\n\t\t\tyi = polygon[i].y;\r\n\t\t const xj = polygon[j].x,\r\n\t\t\tyj = polygon[j].y;\r\n\t\r\n\t\t const intersect = yi > point.y !== yj > point.y && point.x < ((xj - xi) * (point.y - yi)) / (yj - yi) + xi;\r\n\t\t if (intersect) inside = !inside;\r\n\t\t}\r\n\t\treturn inside;\r\n\t }\r\n\t\r\n\t static intersectLines(p1a: KritzelPoint, p1b: KritzelPoint, p2a: KritzelPoint, p2b: KritzelPoint): boolean {\r\n\t\tconst det = (p1b.x - p1a.x) * (p2b.y - p2a.y) - (p1b.y - p1a.y) * (p2b.x - p2a.x);\r\n\t\tif (det === 0) {\r\n\t\t return false; // Lines are parallel\r\n\t\t}\r\n\t\r\n\t\tconst t = ((p2a.x - p1a.x) * (p2b.y - p2a.y) - (p2a.y - p1a.y) * (p2b.x - p2a.x)) / det;\r\n\t\tconst u = -((p1a.x - p2a.x) * (p1b.y - p1a.y) - (p1a.y - p2a.y) * (p1b.x - p1a.x)) / det;\r\n\t\r\n\t\treturn t >= 0 && t <= 1 && u >= 0 && u <= 1;\r\n\t }\r\n}\r\n","import { KritzelStore } from '../store.class';\r\nimport { KritzelBaseObject } from './base-object.class';\r\n\r\nexport class KrtizelSelectionBox extends KritzelBaseObject<HTMLElement> {\r\n override __class__: string = 'KrtizelSelectionBox';\r\n\r\n objects: KritzelBaseObject<any>[] = [];\r\n\r\n static override create(store: KritzelStore): KrtizelSelectionBox {\r\n const object = new KrtizelSelectionBox();\r\n\r\n object._store = store;\r\n object.id = object.generateId();\r\n object.scale = store.state.scale;\r\n object.zIndex = 99999;\r\n object.backgroundColor = 'var(--kritzel-selection-box-background-color, rgba(14, 17, 17, 0.2))';\r\n object.borderColor = 'var(--kritzel-selection-box-border-color, rgba(14, 17, 17, 0.5))';\r\n object.borderWidth = 2;\r\n object.height = 0;\r\n object.width = 0;\r\n\r\n return object;\r\n }\r\n}\r\n","import { KrtizelSelectionBox } from '../objects/selection-box.class';\r\nimport { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelBaseCommand } from './base.command';\r\n\r\nexport class AddSelectionGroupCommand extends KritzelBaseCommand {\r\n private selectionGroup: KritzelSelectionGroup;\r\n\r\n constructor(store, initiator: any, selectionGroup: KritzelSelectionGroup) {\r\n super(store, initiator);\r\n this.selectionGroup = selectionGroup;\r\n }\r\n\r\n execute(): void {\r\n this._store.state.objectsOctree.remove(object => object instanceof KrtizelSelectionBox);\r\n this._store.state.objectsOctree.insert(this.selectionGroup);\r\n this._store.state.selectionGroup = this.selectionGroup;\r\n }\r\n\r\n undo(): void {\r\n this._store.state.objectsOctree.remove(object => object.id === this.selectionGroup.id);\r\n this._store.state.selectionGroup = null;\r\n }\r\n}\r\n","import { KritzelEventHelper } from '../../helpers/event.helper';\r\nimport { KritzelGeometryHelper } from '../../helpers/geometry.helper';\r\nimport { KritzelStore } from '../store.class';\r\nimport { AddSelectionGroupCommand } from '../commands/add-selection-group.command';\r\nimport { KrtizelSelectionBox } from '../objects/selection-box.class';\r\nimport { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelBaseHandler } from './base.handler';\r\n\r\nexport class KritzelSelectionHandler extends KritzelBaseHandler {\r\n startX: number;\r\n startY: number;\r\n\r\n touchStartX: number = 0;\r\n touchStartY: number = 0;\r\n\r\n touchStartTimeout: any = null;\r\n\r\n get isSelectionClick() {\r\n return this._store.state.selectionBox && this._store.state.selectionBox.width === 0 && this._store.state.selectionBox.height === 0;\r\n }\r\n\r\n get isSelectionDrag() {\r\n return this._store.state.selectionBox && (this._store.state.selectionBox.width > 0 || this._store.state.selectionBox.height > 0);\r\n }\r\n\r\n constructor(store: KritzelStore) {\r\n super(store);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent) {\r\n if (event.pointerType === 'mouse') {\r\n if (KritzelEventHelper.isLeftClick(event) && !this._store.state.selectionGroup) {\r\n this.startMouseSelection(event);\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n this.touchStartTimeout = setTimeout(() => {\r\n if (this._store.state.pointers.size === 1 && !this._store.state.isScaling && !this._store.state.selectionGroup) {\r\n this.startTouchSelection();\r\n this.updateTouchSelection();\r\n }\r\n }, 80);\r\n }\r\n }\r\n\r\n handlePointerMove(event: PointerEvent) {\r\n if (event.pointerType === 'mouse') {\r\n if (this._store.state.isSelecting) {\r\n this.updateMouseSelection(event);\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n\r\n const x = Math.round(activePointers[0].clientX - this._store.offsetX);\r\n const y = Math.round(activePointers[0].clientY - this._store.offsetY);\r\n\r\n const moveDeltaX = Math.abs(x - this.touchStartX);\r\n const moveDeltaY = Math.abs(y - this.touchStartY);\r\n const moveThreshold = 5;\r\n\r\n if ((moveDeltaX > moveThreshold || moveDeltaY > moveThreshold) && this._store.state.isSelecting) {\r\n this.updateTouchSelection();\r\n\r\n clearTimeout(this._store.state.longTouchTimeout);\r\n }\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent) {\r\n if (event.pointerType === 'mouse') {\r\n if (KritzelEventHelper.isLeftClick(event) && this._store.state.isSelecting) {\r\n if (this.isSelectionClick) {\r\n this.updateMouseSelection(event);\r\n this.addSelectedObjectAtIndexToSelectionGroup(0);\r\n this.removeSelectionBox();\r\n }\r\n\r\n if (this.isSelectionDrag) {\r\n this.updateMouseSelection(event);\r\n this.addSelectedObjectsToSelectionGroup();\r\n this.removeSelectionBox();\r\n }\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n clearTimeout(this.touchStartTimeout);\r\n\r\n if (this._store.state.isSelecting) {\r\n if (this.isSelectionClick) {\r\n this.updateTouchSelection();\r\n this.addSelectedObjectAtIndexToSelectionGroup(0);\r\n this.removeSelectionBox();\r\n }\r\n\r\n if (this.isSelectionDrag) {\r\n this.updateTouchSelection();\r\n this.addSelectedObjectsToSelectionGroup();\r\n this.removeSelectionBox();\r\n }\r\n\r\n this._store.state.skipContextMenu = false;\r\n }\r\n }\r\n }\r\n\r\n private removeSelectionBox(): void {\r\n this._store.state.selectionBox = null;\r\n this._store.state.isSelecting = false;\r\n this._store.state.objectsOctree.remove(o => o instanceof KrtizelSelectionBox);\r\n this._store.rerender();\r\n }\r\n\r\n private startMouseSelection(event: MouseEvent): void {\r\n let clientX, clientY;\r\n\r\n clientX = event.clientX - this._store.offsetX;\r\n clientY = event.clientY - this._store.offsetY;\r\n\r\n const selectionBox = KrtizelSelectionBox.create(this._store);\r\n\r\n this.startX = (clientX - this._store.state.translateX) / this._store.state.scale;\r\n this.startY = (clientY - this._store.state.translateY) / this._store.state.scale;\r\n\r\n selectionBox.translateX = this.startX;\r\n selectionBox.translateY = this.startY;\r\n\r\n this._store.state.selectionGroup = null;\r\n this._store.state.selectionBox = selectionBox;\r\n this._store.state.isSelecting = true;\r\n\r\n this._store.state.objectsOctree.remove(o => o instanceof KrtizelSelectionBox || o instanceof KritzelSelectionGroup);\r\n this._store.state.objectsOctree.insert(selectionBox);\r\n }\r\n\r\n private startTouchSelection(): void {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n const firstTouch = activePointers[0];\r\n\r\n if (!firstTouch) {\r\n return;\r\n }\r\n\r\n let clientX, clientY;\r\n\r\n clientX = Math.round(firstTouch.clientX - this._store.offsetX);\r\n clientY = Math.round(firstTouch.clientY - this._store.offsetY);\r\n this.touchStartX = clientX;\r\n this.touchStartY = clientY;\r\n\r\n const selectionBox = KrtizelSelectionBox.create(this._store);\r\n\r\n this.startX = (clientX - this._store.state.translateX) / this._store.state.scale;\r\n this.startY = (clientY - this._store.state.translateY) / this._store.state.scale;\r\n\r\n selectionBox.translateX = this.startX;\r\n selectionBox.translateY = this.startY;\r\n\r\n this._store.state.selectionGroup = null;\r\n this._store.state.selectionBox = selectionBox;\r\n this._store.state.isSelecting = true;\r\n\r\n this._store.state.objectsOctree.remove(o => o instanceof KrtizelSelectionBox || o instanceof KritzelSelectionGroup);\r\n this._store.state.objectsOctree.insert(selectionBox);\r\n }\r\n\r\n private updateMouseSelection(event: MouseEvent): void {\r\n let clientX, clientY;\r\n\r\n clientX = event.clientX - this._store.offsetX;\r\n clientY = event.clientY - this._store.offsetY;\r\n\r\n const selectionBox = this._store.state.selectionBox;\r\n\r\n if (selectionBox) {\r\n const currentX = (clientX - this._store.state.translateX) / selectionBox.scale;\r\n const currentY = (clientY - this._store.state.translateY) / selectionBox.scale;\r\n\r\n selectionBox.width = Math.abs(currentX - this.startX) * selectionBox.scale;\r\n selectionBox.height = Math.abs(currentY - this.startY) * selectionBox.scale;\r\n selectionBox.translateX = Math.min(currentX, this.startX);\r\n selectionBox.translateY = Math.min(currentY, this.startY);\r\n\r\n this.updateSelectedObjects();\r\n\r\n this._store.rerender();\r\n }\r\n }\r\n\r\n private updateTouchSelection(): void {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n const firstTouch = activePointers[0];\r\n\r\n if (!firstTouch) {\r\n return;\r\n }\r\n\r\n let clientX, clientY;\r\n\r\n clientX = Math.round(firstTouch.clientX - this._store.offsetX);\r\n clientY = Math.round(firstTouch.clientY - this._store.offsetY);\r\n\r\n const selectionBox = this._store.state.selectionBox;\r\n\r\n if (selectionBox) {\r\n const currentX = (clientX - this._store.state.translateX) / selectionBox.scale;\r\n const currentY = (clientY - this._store.state.translateY) / selectionBox.scale;\r\n\r\n selectionBox.width = Math.abs(currentX - this.startX) * selectionBox.scale;\r\n selectionBox.height = Math.abs(currentY - this.startY) * selectionBox.scale;\r\n selectionBox.translateX = Math.min(currentX, this.startX);\r\n selectionBox.translateY = Math.min(currentY, this.startY);\r\n\r\n this.updateSelectedObjects();\r\n }\r\n }\r\n\r\n private updateSelectedObjects(): void {\r\n this._store.allObjects\r\n .filter(o => !(o instanceof KrtizelSelectionBox))\r\n .forEach(object => {\r\n const objectPolygon = object.rotatedPolygon;\r\n const selectionBoxPolygon = this._store.state.selectionBox.rotatedPolygon;\r\n\r\n object.selected = KritzelGeometryHelper.doPolygonsIntersect(objectPolygon, selectionBoxPolygon);\r\n });\r\n }\r\n\r\n private addSelectedObjectAtIndexToSelectionGroup(index: number): void {\r\n const selectedObjects = this._store.selectedObjects.sort((a, b) => b.zIndex - a.zIndex);\r\n const selectedObject = selectedObjects[index];\r\n\r\n if (!selectedObject) {\r\n return;\r\n }\r\n\r\n selectedObjects.forEach(o => (o.selected = false));\r\n\r\n this._store.state.selectionGroup = KritzelSelectionGroup.create(this._store);\r\n this._store.state.selectionGroup.addOrRemove(selectedObject);\r\n this._store.state.selectionGroup.selected = true;\r\n this._store.state.selectionGroup.rotation = this._store.state.selectionGroup.objects[0].rotation;\r\n\r\n this._store.history.executeCommand(new AddSelectionGroupCommand(this._store, this, this._store.state.selectionGroup));\r\n }\r\n\r\n private addSelectedObjectsToSelectionGroup(): void {\r\n const selectedObjects = this._store.selectedObjects;\r\n\r\n if (selectedObjects.length === 0) {\r\n return;\r\n }\r\n\r\n this._store.state.selectionGroup = KritzelSelectionGroup.create(this._store);\r\n selectedObjects.forEach(o => {\r\n o.selected = false;\r\n this._store.state.selectionGroup.addOrRemove(o);\r\n });\r\n this._store.state.selectionGroup.selected = true;\r\n\r\n if (this._store.state.selectionGroup.length === 1) {\r\n this._store.state.selectionGroup.rotation = this._store.state.selectionGroup.objects[0].rotation;\r\n }\r\n\r\n this._store.history.executeCommand(new AddSelectionGroupCommand(this._store, this, this._store.state.selectionGroup));\r\n }\r\n}\r\n","import { KritzelHandleType } from '../../enums/handle-type.enum';\r\nimport { KritzelEventHelper } from '../../helpers/event.helper';\r\nimport { KritzelStore } from '../store.class';\r\nimport { RemoveSelectionGroupCommand } from '../commands/remove-selection-group.command';\r\nimport { KritzelMoveHandler } from '../handlers/move.handler';\r\nimport { KritzelResizeHandler } from '../handlers/resize.handler';\r\nimport { KritzelRotationHandler } from '../handlers/rotation.handler';\r\nimport { KritzelSelectionHandler } from '../handlers/selection.handler';\r\nimport { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelBaseTool } from './base-tool.class';\r\n\r\nexport class KritzelSelectionTool extends KritzelBaseTool {\r\n selectionHandler: KritzelSelectionHandler;\r\n moveHandler: KritzelMoveHandler;\r\n resizeHandler: KritzelResizeHandler;\r\n rotationHandler: KritzelRotationHandler;\r\n\r\n constructor(store: KritzelStore) {\r\n super(store);\r\n this.selectionHandler = new KritzelSelectionHandler(this._store);\r\n this.moveHandler = new KritzelMoveHandler(this._store);\r\n this.resizeHandler = new KritzelResizeHandler(this._store);\r\n this.rotationHandler = new KritzelRotationHandler(this._store);\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n if (KritzelEventHelper.isLeftClick(event)) {\r\n this._store.state.isResizeHandleSelected = this.isHandleSelected(event);\r\n this._store.state.isRotationHandleSelected = this.isRotationHandleSelected(event);\r\n this._store.state.resizeHandleType = this.getHandleType(event);\r\n\r\n const selectedObject = this.getSelectedObject(event);\r\n const isDifferentObject = selectedObject && this._store.state.selectionGroup && selectedObject.id !== this._store.state.selectionGroup.id;\r\n\r\n if (\r\n (selectedObject === null || isDifferentObject) &&\r\n this._store.state.selectionGroup &&\r\n !this._store.state.isResizeHandleSelected &&\r\n !this._store.state.isRotationHandleSelected\r\n ) {\r\n this._store.history.executeCommand(new RemoveSelectionGroupCommand(this._store, this._store.state.selectionGroup));\r\n }\r\n\r\n if (selectedObject && selectedObject.selected && selectedObject.objects.length === 1) {\r\n setTimeout(() => {\r\n if (this._store.state.isDragging === false && this._store.state.isResizing === false && this._store.state.isRotating === false) {\r\n selectedObject.objects[0].onSelectedClick();\r\n }\r\n }, 100);\r\n }\r\n }\r\n\r\n this.moveHandler.handlePointerDown(event);\r\n this.selectionHandler.handlePointerDown(event);\r\n this.resizeHandler.handlePointerDown(event);\r\n this.rotationHandler.handlePointerDown(event);\r\n\r\n this._store.rerender();\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n if (this._store.state.isScaling === true) {\r\n return;\r\n }\r\n\r\n if (this._store.state.pointers.size === 1) {\r\n this._store.state.isResizeHandleSelected = this.isHandleSelected(event);\r\n this._store.state.isRotationHandleSelected = this.isRotationHandleSelected(event);\r\n this._store.state.resizeHandleType = this.getHandleType(event);\r\n\r\n const selectedObject = this.getSelectedObject(event);\r\n const isDifferentObject = selectedObject && this._store.state.selectionGroup && selectedObject.id !== this._store.state.selectionGroup.id;\r\n\r\n if (!this._store.state.selectionGroup && selectedObject) {\r\n this._store.state.skipContextMenu = true;\r\n }\r\n\r\n if (\r\n (selectedObject === null || isDifferentObject) &&\r\n this._store.state.selectionGroup &&\r\n !this._store.state.isResizeHandleSelected &&\r\n !this._store.state.isRotationHandleSelected\r\n ) {\r\n this._store.history.executeCommand(new RemoveSelectionGroupCommand(this._store, this._store.state.selectionGroup));\r\n }\r\n\r\n if (selectedObject && selectedObject.selected && selectedObject.objects.length === 1) {\r\n setTimeout(() => {\r\n if (this._store.state.isDragging === false && this._store.state.isResizing === false && this._store.state.isRotating === false) {\r\n selectedObject.objects[0].onSelectedClick();\r\n }\r\n }, 100);\r\n }\r\n }\r\n\r\n this.rotationHandler.handlePointerDown(event);\r\n this.resizeHandler.handlePointerDown(event);\r\n this.moveHandler.handlePointerDown(event);\r\n this.selectionHandler.handlePointerDown(event);\r\n }\r\n }\r\n\r\n handlePointerMove(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n this.moveHandler.handlePointerMove(event);\r\n this.selectionHandler.handlePointerMove(event);\r\n this.resizeHandler.handlePointerMove(event);\r\n this.rotationHandler.handlePointerMove(event);\r\n\r\n this._store.rerender();\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n if (this._store.state.isScaling === true) {\r\n return;\r\n }\r\n\r\n this.rotationHandler.handlePointerMove(event);\r\n this.resizeHandler.handlePointerMove(event);\r\n this.moveHandler.handlePointerMove(event);\r\n this.selectionHandler.handlePointerMove(event);\r\n\r\n this._store.rerender();\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.pointerType === 'mouse') {\r\n this.moveHandler.handlePointerUp(event);\r\n this.selectionHandler.handlePointerUp(event);\r\n this.resizeHandler.handlePointerUp(event);\r\n this.rotationHandler.handlePointerUp(event);\r\n\r\n this._store.rerender();\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n if (this._store.state.isScaling === true) {\r\n return;\r\n }\r\n\r\n this.rotationHandler.handlePointerUp(event);\r\n this.resizeHandler.handlePointerUp(event);\r\n this.moveHandler.handlePointerUp(event);\r\n this.selectionHandler.handlePointerUp(event);\r\n }\r\n }\r\n\r\n private getSelectedObject(event: MouseEvent | TouchEvent): KritzelSelectionGroup | null {\r\n const path = event.composedPath().slice(1) as HTMLElement[];\r\n const objectElement = path.find(element => element.classList && element.classList.contains('object'));\r\n const object = this._store.findObjectById(objectElement?.id);\r\n\r\n if (!object) {\r\n return null;\r\n }\r\n\r\n if (object instanceof KritzelSelectionGroup) {\r\n return object;\r\n } else {\r\n const group = KritzelSelectionGroup.create(this._store);\r\n group.translateX = 0;\r\n group.translateY = 0;\r\n group.addOrRemove(object);\r\n return group;\r\n }\r\n }\r\n\r\n private getHandleType(event: MouseEvent | TouchEvent): KritzelHandleType {\r\n const shadowRoot = this._store.state.host?.shadowRoot;\r\n if (!shadowRoot) return;\r\n\r\n const point = event instanceof TouchEvent ? event.touches[0] : event;\r\n const elementAtPoint = shadowRoot.elementFromPoint(point.clientX, point.clientY);\r\n\r\n const handle = elementAtPoint.closest('.resize-handle-overlay') as HTMLElement | null;\r\n\r\n return handle?.classList[1] as KritzelHandleType;\r\n }\r\n\r\n private isHandleSelected(event: MouseEvent | TouchEvent): boolean {\r\n const shadowRoot = this._store.state.host?.shadowRoot;\r\n if (!shadowRoot) return false;\r\n\r\n const point = event instanceof TouchEvent ? event.touches[0] : event;\r\n const elementAtPoint = shadowRoot.elementFromPoint(point.clientX, point.clientY);\r\n\r\n return elementAtPoint?.classList.contains('resize-handle-overlay');\r\n }\r\n\r\n private isRotationHandleSelected(event: MouseEvent | TouchEvent): boolean {\r\n const path = event.composedPath() as HTMLElement[];\r\n\r\n return !!path.find(element => element.classList && element.classList.contains('rotation-handle-overlay'));\r\n }\r\n}\r\n","import { KritzelStore } from \"./store.class\";\r\nimport { KritzelImage } from \"./objects/image.class\";\r\nimport { KritzelPath } from \"./objects/path.class\";\r\nimport { KritzelSelectionGroup } from \"./objects/selection-group.class\";\r\nimport { KritzelText } from \"./objects/text.class\";\r\nimport { KritzelBrushTool } from \"./tools/brush-tool.class\";\r\nimport { KritzelEraserTool } from \"./tools/eraser-tool.class\";\r\nimport { KritzelImageTool } from \"./tools/image-tool.class\";\r\nimport { KritzelSelectionTool } from \"./tools/selection-tool.class\";\r\nimport { KritzelTextTool } from \"./tools/text-tool.class\";\r\n\r\nexport class KritzelReviver {\r\n\r\n private readonly _store: KritzelStore;\r\n\r\n constructor(store: KritzelStore) {\r\n this._store = store;\r\n }\r\n \r\n revive<T>(obj: any): T {\r\n if (obj && typeof obj === 'object') {\r\n if (obj.__class__) {\r\n let revivedObj;\r\n \r\n switch (obj.__class__) {\r\n case 'KritzelPath':\r\n revivedObj = KritzelPath.create(this._store).revive(obj);\r\n break;\r\n case 'KritzelText':\r\n revivedObj = KritzelText.create(this._store, obj.fontSize, obj.fontFamily).revive(obj);\r\n break;\r\n case 'KritzelImage':\r\n revivedObj = KritzelImage.create(this._store).revive(obj);\r\n break;\r\n case 'KritzelSelectionGroup':\r\n revivedObj = KritzelSelectionGroup.create(this._store).revive(obj);\r\n break;\r\n case 'KritzelBrushTool':\r\n revivedObj = new KritzelBrushTool(this._store);\r\n break;\r\n case 'KritzelEraserTool':\r\n revivedObj = new KritzelEraserTool(this._store);\r\n break;\r\n case 'KritzelImageTool':\r\n revivedObj = new KritzelImageTool(this._store);\r\n break;\r\n case 'KritzelSelectionTool':\r\n revivedObj = new KritzelSelectionTool(this._store);\r\n break;\r\n case 'KritzelTextTool':\r\n revivedObj = new KritzelTextTool(this._store);\r\n break;\r\n\r\n default:\r\n revivedObj = obj;\r\n }\r\n return revivedObj;\r\n }\r\n\r\n const newObj = Array.isArray(obj) ? [] : {};\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n newObj[key] = this.revive(obj[key]);\r\n }\r\n }\r\n return newObj as T;\r\n }\r\n return obj;\r\n }\r\n\r\n}","import { ObjectHelper } from '../../helpers/object.helper';\r\nimport { KritzelStore } from '../store.class';\r\nimport { KritzelReviver } from '../reviver.class';\r\nimport { KritzelBaseObject } from './base-object.class';\r\nexport class KritzelSelectionGroup extends KritzelBaseObject<HTMLElement> {\r\n override __class__: string = 'KritzelSelectionGroup';\r\n\r\n objects: KritzelBaseObject<any>[] = [];\r\n unchangedObjects: KritzelBaseObject<any>[] = [];\r\n\r\n minX: number;\r\n maxX: number;\r\n\r\n minY: number;\r\n maxY: number;\r\n\r\n get length(): number {\r\n return this.objects.length;\r\n }\r\n\r\n static override create(store: KritzelStore): KritzelSelectionGroup {\r\n const object = new KritzelSelectionGroup();\r\n\r\n object._store = store;\r\n object.id = object.generateId();\r\n object.scale = store.state.scale;\r\n object.zIndex = 99999;\r\n\r\n return object;\r\n }\r\n\r\n addOrRemove(object: KritzelBaseObject<any>) {\r\n \r\n const index = this.objects.findIndex(obj => obj.id === object.id);\r\n if (index === -1) {\r\n this.objects.push(object);\r\n } else {\r\n this.objects.splice(index, 1);\r\n }\r\n\r\n this.unchangedObjects = ObjectHelper.clone(this.objects);\r\n this.refreshObjectDimensions();\r\n }\r\n\r\n deselectAllChildren() {\r\n this.objects.forEach(obj => (obj.selected = false));\r\n }\r\n\r\n updatePosition(x: number, y: number) {\r\n this.objects.forEach(obj => {\r\n const deltaX = obj.translateX - this.translateX;\r\n const deltaY = obj.translateY - this.translateY;\r\n obj.translateX = x + deltaX;\r\n obj.translateY = y + deltaY;\r\n this._store.state.objectsOctree.update(obj);\r\n });\r\n\r\n this.unchangedObjects.forEach(obj => {\r\n const deltaX = obj.translateX - this.translateX;\r\n const deltaY = obj.translateY - this.translateY;\r\n obj.translateX = x + deltaX;\r\n obj.translateY = y + deltaY;\r\n });\r\n\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n this._store.state.objectsOctree.update(this);\r\n }\r\n\r\n override move(startX: number, startY: number, endX: number, endY: number): void {\r\n const deltaX = (startX - endX) / this._store.state.scale;\r\n const deltaY = (startY - endY) / this._store.state.scale;\r\n\r\n this.translateX += deltaX;\r\n this.translateY += deltaY;\r\n this._store.state.objectsOctree.update(this);\r\n\r\n this.objects.forEach(obj => {\r\n obj.translateX += deltaX;\r\n obj.translateY += deltaY;\r\n this._store.state.objectsOctree.update(obj);\r\n });\r\n\r\n this.unchangedObjects.forEach(obj => {\r\n obj.translateX += deltaX;\r\n obj.translateY += deltaY;\r\n });\r\n }\r\n\r\n override resize(x: number, y: number, width: number, height: number): void {\r\n const widthScaleFactor = width / this.width;\r\n const heightScaleFactor = height / this.height;\r\n\r\n const deltaX = x - this.translateX;\r\n const deltaY = y - this.translateY;\r\n\r\n this.objects.forEach(child => {\r\n const updatedWidth = child.width * widthScaleFactor;\r\n const updatedHeight = child.height * heightScaleFactor;\r\n\r\n const updatedX = child.translateX + deltaX + (child.translateX - this.translateX) * (widthScaleFactor - 1);\r\n const updatedY = child.translateY + deltaY + (child.translateY - this.translateY) * (heightScaleFactor - 1);\r\n\r\n child.resize(updatedX, updatedY, updatedWidth, updatedHeight);\r\n\r\n this._store.state.objectsOctree.update(child);\r\n });\r\n\r\n this.refreshObjectDimensions();\r\n this.unchangedObjects = ObjectHelper.clone(this.objects);\r\n }\r\n\r\n override rotate(value: number): void {\r\n this.rotation = value;\r\n\r\n const centerX = this.translateX + this.totalWidth / 2 / this.scale;\r\n const centerY = this.translateY + this.totalHeight / 2 / this.scale;\r\n\r\n const angle = value;\r\n const cos = Math.cos(angle);\r\n const sin = Math.sin(angle);\r\n\r\n this.objects.forEach(child => {\r\n const unchangedChild = this.getUnchangedObject(child.id);\r\n\r\n const offsetX = this.getOffsetXToCenter(unchangedChild);\r\n const offsetY = this.getOffsetYToCenter(unchangedChild);\r\n\r\n const rotatedX = cos * offsetX - sin * offsetY;\r\n const rotatedY = sin * offsetX + cos * offsetY;\r\n\r\n child.translateX = centerX + rotatedX - child.totalWidth / 2 / child.scale;\r\n child.translateY = centerY + rotatedY - child.totalHeight / 2 / child.scale;\r\n\r\n child.rotation = this.objects.length === 1 ? value : value + unchangedChild.rotation;\r\n\r\n this._store.state.objectsOctree.update(child);\r\n });\r\n }\r\n\r\n override copy(): KritzelBaseObject<HTMLElement> {\r\n const selectionGroup = KritzelSelectionGroup.create(this._store);\r\n\r\n let currentZIndex = this._store.currentZIndex;\r\n\r\n this.objects.forEach(obj => {\r\n const copiedObject = obj.copy() as KritzelBaseObject<any>;\r\n copiedObject.zIndex = currentZIndex;\r\n selectionGroup.addOrRemove(copiedObject);\r\n currentZIndex++;\r\n });\r\n\r\n selectionGroup.unchangedObjects = ObjectHelper.clone(selectionGroup.objects);\r\n\r\n if (this.objects.length === 1) {\r\n selectionGroup.rotation = this.objects[0].rotation;\r\n }\r\n\r\n return selectionGroup;\r\n }\r\n\r\n refreshObjectDimensions() {\r\n if (this.objects.length === 1) {\r\n const obj = this.objects[0];\r\n this.minX = obj.boundingBox.x / this.scale;\r\n this.maxX = obj.boundingBox.x / this.scale + obj.boundingBox.width;\r\n this.minY = obj.boundingBox.y / this.scale;\r\n this.maxY = obj.boundingBox.y / this.scale + obj.boundingBox.height;\r\n\r\n this.translateX = (this.minX - this.padding) * this.scale;\r\n this.translateY = (this.minY - this.padding) * this.scale;\r\n\r\n this.width = (this.maxX - this.minX - this.padding) * this.scale;\r\n this.height = (this.maxY - this.minY - this.padding) * this.scale;\r\n } else {\r\n this.minX = Math.min(...this.objects.map(obj => obj.minXRotated));\r\n this.maxX = Math.max(...this.objects.map(obj => obj.maxXRotated));\r\n\r\n this.minY = Math.min(...this.objects.map(obj => obj.minYRotated));\r\n this.maxY = Math.max(...this.objects.map(obj => obj.maxYRotated));\r\n\r\n this.translateX = this.minX - this.padding;\r\n this.translateY = this.minY - this.padding;\r\n\r\n this.width = (this.maxX - this.minX - this.padding) * this.scale;\r\n this.height = (this.maxY - this.minY - this.padding) * this.scale;\r\n }\r\n\r\n this._store.state.objectsOctree.update(this);\r\n }\r\n\r\n private getOffsetXToCenter(obj: KritzelBaseObject<any>): number {\r\n const objCenterX = obj.translateX + obj.totalWidth / obj.scale / 2;\r\n const groupCenterX = this.translateX + this.totalWidth / this.scale / 2;\r\n return objCenterX - groupCenterX;\r\n }\r\n\r\n private getOffsetYToCenter(obj: KritzelBaseObject<any>): number {\r\n const objCenterY = obj.translateY + obj.totalHeight / obj.scale / 2;\r\n const groupCenterY = this.translateY + this.totalHeight / this.scale / 2;\r\n return objCenterY - groupCenterY;\r\n }\r\n\r\n private getUnchangedObject(objectId: string): KritzelBaseObject<any> {\r\n const obj = this.unchangedObjects.find(obj => obj.id === objectId);\r\n const reviver = new KritzelReviver(this._store);\r\n return reviver.revive(obj);\r\n }\r\n}\r\n","/**\n * Browser Image Compression\n * v2.0.2\n * by Donald <donaldcwl@gmail.com>\n * https://github.com/Donaldcwl/browser-image-compression\n */\n\nfunction _mergeNamespaces(e,t){return t.forEach((function(t){t&&\"string\"!=typeof t&&!Array.isArray(t)&&Object.keys(t).forEach((function(r){if(\"default\"!==r&&!(r in e)){var i=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,i.get?i:{enumerable:!0,get:function(){return t[r]}})}}))})),Object.freeze(e)}function copyExifWithoutOrientation(e,t){return new Promise((function(r,i){let o;return getApp1Segment(e).then((function(e){try{return o=e,r(new Blob([t.slice(0,2),o,t.slice(2)],{type:\"image/jpeg\"}))}catch(e){return i(e)}}),i)}))}const getApp1Segment=e=>new Promise(((t,r)=>{const i=new FileReader;i.addEventListener(\"load\",(({target:{result:e}})=>{const i=new DataView(e);let o=0;if(65496!==i.getUint16(o))return r(\"not a valid JPEG\");for(o+=2;;){const a=i.getUint16(o);if(65498===a)break;const s=i.getUint16(o+2);if(65505===a&&1165519206===i.getUint32(o+4)){const a=o+10;let f;switch(i.getUint16(a)){case 18761:f=!0;break;case 19789:f=!1;break;default:return r(\"TIFF header contains invalid endian\")}if(42!==i.getUint16(a+2,f))return r(\"TIFF header contains invalid version\");const l=i.getUint32(a+4,f),c=a+l+2+12*i.getUint16(a+l,f);for(let e=a+l+2;e<c;e+=12){if(274==i.getUint16(e,f)){if(3!==i.getUint16(e+2,f))return r(\"Orientation data type is invalid\");if(1!==i.getUint32(e+4,f))return r(\"Orientation data count is invalid\");i.setUint16(e+8,1,f);break}}return t(e.slice(o,o+2+s))}o+=2+s}return t(new Blob)})),i.readAsArrayBuffer(e)}));var e={},t={get exports(){return e},set exports(t){e=t}};!function(e){var r,i,UZIP={};t.exports=UZIP,UZIP.parse=function(e,t){for(var r=UZIP.bin.readUshort,i=UZIP.bin.readUint,o=0,a={},s=new Uint8Array(e),f=s.length-4;101010256!=i(s,f);)f--;o=f;o+=4;var l=r(s,o+=4);r(s,o+=2);var c=i(s,o+=2),u=i(s,o+=4);o+=4,o=u;for(var h=0;h<l;h++){i(s,o),o+=4,o+=4,o+=4,i(s,o+=4);c=i(s,o+=4);var d=i(s,o+=4),A=r(s,o+=4),g=r(s,o+2),p=r(s,o+4);o+=6;var m=i(s,o+=8);o+=4,o+=A+g+p,UZIP._readLocal(s,m,a,c,d,t)}return a},UZIP._readLocal=function(e,t,r,i,o,a){var s=UZIP.bin.readUshort,f=UZIP.bin.readUint;f(e,t),s(e,t+=4),s(e,t+=2);var l=s(e,t+=2);f(e,t+=2),f(e,t+=4),t+=4;var c=s(e,t+=8),u=s(e,t+=2);t+=2;var h=UZIP.bin.readUTF8(e,t,c);if(t+=c,t+=u,a)r[h]={size:o,csize:i};else{var d=new Uint8Array(e.buffer,t);if(0==l)r[h]=new Uint8Array(d.buffer.slice(t,t+i));else{if(8!=l)throw\"unknown compression method: \"+l;var A=new Uint8Array(o);UZIP.inflateRaw(d,A),r[h]=A}}},UZIP.inflateRaw=function(e,t){return UZIP.F.inflate(e,t)},UZIP.inflate=function(e,t){return e[0],e[1],UZIP.inflateRaw(new Uint8Array(e.buffer,e.byteOffset+2,e.length-6),t)},UZIP.deflate=function(e,t){null==t&&(t={level:6});var r=0,i=new Uint8Array(50+Math.floor(1.1*e.length));i[r]=120,i[r+1]=156,r+=2,r=UZIP.F.deflateRaw(e,i,r,t.level);var o=UZIP.adler(e,0,e.length);return i[r+0]=o>>>24&255,i[r+1]=o>>>16&255,i[r+2]=o>>>8&255,i[r+3]=o>>>0&255,new Uint8Array(i.buffer,0,r+4)},UZIP.deflateRaw=function(e,t){null==t&&(t={level:6});var r=new Uint8Array(50+Math.floor(1.1*e.length)),i=UZIP.F.deflateRaw(e,r,i,t.level);return new Uint8Array(r.buffer,0,i)},UZIP.encode=function(e,t){null==t&&(t=!1);var r=0,i=UZIP.bin.writeUint,o=UZIP.bin.writeUshort,a={};for(var s in e){var f=!UZIP._noNeed(s)&&!t,l=e[s],c=UZIP.crc.crc(l,0,l.length);a[s]={cpr:f,usize:l.length,crc:c,file:f?UZIP.deflateRaw(l):l}}for(var s in a)r+=a[s].file.length+30+46+2*UZIP.bin.sizeUTF8(s);r+=22;var u=new Uint8Array(r),h=0,d=[];for(var s in a){var A=a[s];d.push(h),h=UZIP._writeHeader(u,h,s,A,0)}var g=0,p=h;for(var s in a){A=a[s];d.push(h),h=UZIP._writeHeader(u,h,s,A,1,d[g++])}var m=h-p;return i(u,h,101010256),h+=4,o(u,h+=4,g),o(u,h+=2,g),i(u,h+=2,m),i(u,h+=4,p),h+=4,h+=2,u.buffer},UZIP._noNeed=function(e){var t=e.split(\".\").pop().toLowerCase();return-1!=\"png,jpg,jpeg,zip\".indexOf(t)},UZIP._writeHeader=function(e,t,r,i,o,a){var s=UZIP.bin.writeUint,f=UZIP.bin.writeUshort,l=i.file;return s(e,t,0==o?67324752:33639248),t+=4,1==o&&(t+=2),f(e,t,20),f(e,t+=2,0),f(e,t+=2,i.cpr?8:0),s(e,t+=2,0),s(e,t+=4,i.crc),s(e,t+=4,l.length),s(e,t+=4,i.usize),f(e,t+=4,UZIP.bin.sizeUTF8(r)),f(e,t+=2,0),t+=2,1==o&&(t+=2,t+=2,s(e,t+=6,a),t+=4),t+=UZIP.bin.writeUTF8(e,t,r),0==o&&(e.set(l,t),t+=l.length),t},UZIP.crc={table:function(){for(var e=new Uint32Array(256),t=0;t<256;t++){for(var r=t,i=0;i<8;i++)1&r?r=3988292384^r>>>1:r>>>=1;e[t]=r}return e}(),update:function(e,t,r,i){for(var o=0;o<i;o++)e=UZIP.crc.table[255&(e^t[r+o])]^e>>>8;return e},crc:function(e,t,r){return 4294967295^UZIP.crc.update(4294967295,e,t,r)}},UZIP.adler=function(e,t,r){for(var i=1,o=0,a=t,s=t+r;a<s;){for(var f=Math.min(a+5552,s);a<f;)o+=i+=e[a++];i%=65521,o%=65521}return o<<16|i},UZIP.bin={readUshort:function(e,t){return e[t]|e[t+1]<<8},writeUshort:function(e,t,r){e[t]=255&r,e[t+1]=r>>8&255},readUint:function(e,t){return 16777216*e[t+3]+(e[t+2]<<16|e[t+1]<<8|e[t])},writeUint:function(e,t,r){e[t]=255&r,e[t+1]=r>>8&255,e[t+2]=r>>16&255,e[t+3]=r>>24&255},readASCII:function(e,t,r){for(var i=\"\",o=0;o<r;o++)i+=String.fromCharCode(e[t+o]);return i},writeASCII:function(e,t,r){for(var i=0;i<r.length;i++)e[t+i]=r.charCodeAt(i)},pad:function(e){return e.length<2?\"0\"+e:e},readUTF8:function(e,t,r){for(var i,o=\"\",a=0;a<r;a++)o+=\"%\"+UZIP.bin.pad(e[t+a].toString(16));try{i=decodeURIComponent(o)}catch(i){return UZIP.bin.readASCII(e,t,r)}return i},writeUTF8:function(e,t,r){for(var i=r.length,o=0,a=0;a<i;a++){var s=r.charCodeAt(a);if(0==(4294967168&s))e[t+o]=s,o++;else if(0==(4294965248&s))e[t+o]=192|s>>6,e[t+o+1]=128|s>>0&63,o+=2;else if(0==(4294901760&s))e[t+o]=224|s>>12,e[t+o+1]=128|s>>6&63,e[t+o+2]=128|s>>0&63,o+=3;else{if(0!=(4292870144&s))throw\"e\";e[t+o]=240|s>>18,e[t+o+1]=128|s>>12&63,e[t+o+2]=128|s>>6&63,e[t+o+3]=128|s>>0&63,o+=4}}return o},sizeUTF8:function(e){for(var t=e.length,r=0,i=0;i<t;i++){var o=e.charCodeAt(i);if(0==(4294967168&o))r++;else if(0==(4294965248&o))r+=2;else if(0==(4294901760&o))r+=3;else{if(0!=(4292870144&o))throw\"e\";r+=4}}return r}},UZIP.F={},UZIP.F.deflateRaw=function(e,t,r,i){var o=[[0,0,0,0,0],[4,4,8,4,0],[4,5,16,8,0],[4,6,16,16,0],[4,10,16,32,0],[8,16,32,32,0],[8,16,128,128,0],[8,32,128,256,0],[32,128,258,1024,1],[32,258,258,4096,1]][i],a=UZIP.F.U,s=UZIP.F._goodIndex;UZIP.F._hash;var f=UZIP.F._putsE,l=0,c=r<<3,u=0,h=e.length;if(0==i){for(;l<h;){f(t,c,l+(_=Math.min(65535,h-l))==h?1:0),c=UZIP.F._copyExact(e,l,_,t,c+8),l+=_}return c>>>3}var d=a.lits,A=a.strt,g=a.prev,p=0,m=0,w=0,v=0,b=0,y=0;for(h>2&&(A[y=UZIP.F._hash(e,0)]=0),l=0;l<h;l++){if(b=y,l+1<h-2){y=UZIP.F._hash(e,l+1);var E=l+1&32767;g[E]=A[y],A[y]=E}if(u<=l){(p>14e3||m>26697)&&h-l>100&&(u<l&&(d[p]=l-u,p+=2,u=l),c=UZIP.F._writeBlock(l==h-1||u==h?1:0,d,p,v,e,w,l-w,t,c),p=m=v=0,w=l);var F=0;l<h-2&&(F=UZIP.F._bestMatch(e,l,g,b,Math.min(o[2],h-l),o[3]));var _=F>>>16,B=65535&F;if(0!=F){B=65535&F;var U=s(_=F>>>16,a.of0);a.lhst[257+U]++;var C=s(B,a.df0);a.dhst[C]++,v+=a.exb[U]+a.dxb[C],d[p]=_<<23|l-u,d[p+1]=B<<16|U<<8|C,p+=2,u=l+_}else a.lhst[e[l]]++;m++}}for(w==l&&0!=e.length||(u<l&&(d[p]=l-u,p+=2,u=l),c=UZIP.F._writeBlock(1,d,p,v,e,w,l-w,t,c),p=0,m=0,p=m=v=0,w=l);0!=(7&c);)c++;return c>>>3},UZIP.F._bestMatch=function(e,t,r,i,o,a){var s=32767&t,f=r[s],l=s-f+32768&32767;if(f==s||i!=UZIP.F._hash(e,t-l))return 0;for(var c=0,u=0,h=Math.min(32767,t);l<=h&&0!=--a&&f!=s;){if(0==c||e[t+c]==e[t+c-l]){var d=UZIP.F._howLong(e,t,l);if(d>c){if(u=l,(c=d)>=o)break;l+2<d&&(d=l+2);for(var A=0,g=0;g<d-2;g++){var p=t-l+g+32768&32767,m=p-r[p]+32768&32767;m>A&&(A=m,f=p)}}}l+=(s=f)-(f=r[s])+32768&32767}return c<<16|u},UZIP.F._howLong=function(e,t,r){if(e[t]!=e[t-r]||e[t+1]!=e[t+1-r]||e[t+2]!=e[t+2-r])return 0;var i=t,o=Math.min(e.length,t+258);for(t+=3;t<o&&e[t]==e[t-r];)t++;return t-i},UZIP.F._hash=function(e,t){return(e[t]<<8|e[t+1])+(e[t+2]<<4)&65535},UZIP.saved=0,UZIP.F._writeBlock=function(e,t,r,i,o,a,s,f,l){var c,u,h,d,A,g,p,m,w,v=UZIP.F.U,b=UZIP.F._putsF,y=UZIP.F._putsE;v.lhst[256]++,u=(c=UZIP.F.getTrees())[0],h=c[1],d=c[2],A=c[3],g=c[4],p=c[5],m=c[6],w=c[7];var E=32+(0==(l+3&7)?0:8-(l+3&7))+(s<<3),F=i+UZIP.F.contSize(v.fltree,v.lhst)+UZIP.F.contSize(v.fdtree,v.dhst),_=i+UZIP.F.contSize(v.ltree,v.lhst)+UZIP.F.contSize(v.dtree,v.dhst);_+=14+3*p+UZIP.F.contSize(v.itree,v.ihst)+(2*v.ihst[16]+3*v.ihst[17]+7*v.ihst[18]);for(var B=0;B<286;B++)v.lhst[B]=0;for(B=0;B<30;B++)v.dhst[B]=0;for(B=0;B<19;B++)v.ihst[B]=0;var U=E<F&&E<_?0:F<_?1:2;if(b(f,l,e),b(f,l+1,U),l+=3,0==U){for(;0!=(7&l);)l++;l=UZIP.F._copyExact(o,a,s,f,l)}else{var C,I;if(1==U&&(C=v.fltree,I=v.fdtree),2==U){UZIP.F.makeCodes(v.ltree,u),UZIP.F.revCodes(v.ltree,u),UZIP.F.makeCodes(v.dtree,h),UZIP.F.revCodes(v.dtree,h),UZIP.F.makeCodes(v.itree,d),UZIP.F.revCodes(v.itree,d),C=v.ltree,I=v.dtree,y(f,l,A-257),y(f,l+=5,g-1),y(f,l+=5,p-4),l+=4;for(var Q=0;Q<p;Q++)y(f,l+3*Q,v.itree[1+(v.ordr[Q]<<1)]);l+=3*p,l=UZIP.F._codeTiny(m,v.itree,f,l),l=UZIP.F._codeTiny(w,v.itree,f,l)}for(var M=a,x=0;x<r;x+=2){for(var S=t[x],R=S>>>23,T=M+(8388607&S);M<T;)l=UZIP.F._writeLit(o[M++],C,f,l);if(0!=R){var O=t[x+1],P=O>>16,H=O>>8&255,L=255&O;y(f,l=UZIP.F._writeLit(257+H,C,f,l),R-v.of0[H]),l+=v.exb[H],b(f,l=UZIP.F._writeLit(L,I,f,l),P-v.df0[L]),l+=v.dxb[L],M+=R}}l=UZIP.F._writeLit(256,C,f,l)}return l},UZIP.F._copyExact=function(e,t,r,i,o){var a=o>>>3;return i[a]=r,i[a+1]=r>>>8,i[a+2]=255-i[a],i[a+3]=255-i[a+1],a+=4,i.set(new Uint8Array(e.buffer,t,r),a),o+(r+4<<3)},UZIP.F.getTrees=function(){for(var e=UZIP.F.U,t=UZIP.F._hufTree(e.lhst,e.ltree,15),r=UZIP.F._hufTree(e.dhst,e.dtree,15),i=[],o=UZIP.F._lenCodes(e.ltree,i),a=[],s=UZIP.F._lenCodes(e.dtree,a),f=0;f<i.length;f+=2)e.ihst[i[f]]++;for(f=0;f<a.length;f+=2)e.ihst[a[f]]++;for(var l=UZIP.F._hufTree(e.ihst,e.itree,7),c=19;c>4&&0==e.itree[1+(e.ordr[c-1]<<1)];)c--;return[t,r,l,o,s,c,i,a]},UZIP.F.getSecond=function(e){for(var t=[],r=0;r<e.length;r+=2)t.push(e[r+1]);return t},UZIP.F.nonZero=function(e){for(var t=\"\",r=0;r<e.length;r+=2)0!=e[r+1]&&(t+=(r>>1)+\",\");return t},UZIP.F.contSize=function(e,t){for(var r=0,i=0;i<t.length;i++)r+=t[i]*e[1+(i<<1)];return r},UZIP.F._codeTiny=function(e,t,r,i){for(var o=0;o<e.length;o+=2){var a=e[o],s=e[o+1];i=UZIP.F._writeLit(a,t,r,i);var f=16==a?2:17==a?3:7;a>15&&(UZIP.F._putsE(r,i,s,f),i+=f)}return i},UZIP.F._lenCodes=function(e,t){for(var r=e.length;2!=r&&0==e[r-1];)r-=2;for(var i=0;i<r;i+=2){var o=e[i+1],a=i+3<r?e[i+3]:-1,s=i+5<r?e[i+5]:-1,f=0==i?-1:e[i-1];if(0==o&&a==o&&s==o){for(var l=i+5;l+2<r&&e[l+2]==o;)l+=2;(c=Math.min(l+1-i>>>1,138))<11?t.push(17,c-3):t.push(18,c-11),i+=2*c-2}else if(o==f&&a==o&&s==o){for(l=i+5;l+2<r&&e[l+2]==o;)l+=2;var c=Math.min(l+1-i>>>1,6);t.push(16,c-3),i+=2*c-2}else t.push(o,0)}return r>>>1},UZIP.F._hufTree=function(e,t,r){var i=[],o=e.length,a=t.length,s=0;for(s=0;s<a;s+=2)t[s]=0,t[s+1]=0;for(s=0;s<o;s++)0!=e[s]&&i.push({lit:s,f:e[s]});var f=i.length,l=i.slice(0);if(0==f)return 0;if(1==f){var c=i[0].lit;l=0==c?1:0;return t[1+(c<<1)]=1,t[1+(l<<1)]=1,1}i.sort((function(e,t){return e.f-t.f}));var u=i[0],h=i[1],d=0,A=1,g=2;for(i[0]={lit:-1,f:u.f+h.f,l:u,r:h,d:0};A!=f-1;)u=d!=A&&(g==f||i[d].f<i[g].f)?i[d++]:i[g++],h=d!=A&&(g==f||i[d].f<i[g].f)?i[d++]:i[g++],i[A++]={lit:-1,f:u.f+h.f,l:u,r:h};var p=UZIP.F.setDepth(i[A-1],0);for(p>r&&(UZIP.F.restrictDepth(l,r,p),p=r),s=0;s<f;s++)t[1+(l[s].lit<<1)]=l[s].d;return p},UZIP.F.setDepth=function(e,t){return-1!=e.lit?(e.d=t,t):Math.max(UZIP.F.setDepth(e.l,t+1),UZIP.F.setDepth(e.r,t+1))},UZIP.F.restrictDepth=function(e,t,r){var i=0,o=1<<r-t,a=0;for(e.sort((function(e,t){return t.d==e.d?e.f-t.f:t.d-e.d})),i=0;i<e.length&&e[i].d>t;i++){var s=e[i].d;e[i].d=t,a+=o-(1<<r-s)}for(a>>>=r-t;a>0;){(s=e[i].d)<t?(e[i].d++,a-=1<<t-s-1):i++}for(;i>=0;i--)e[i].d==t&&a<0&&(e[i].d--,a++);0!=a&&console.log(\"debt left\")},UZIP.F._goodIndex=function(e,t){var r=0;return t[16|r]<=e&&(r|=16),t[8|r]<=e&&(r|=8),t[4|r]<=e&&(r|=4),t[2|r]<=e&&(r|=2),t[1|r]<=e&&(r|=1),r},UZIP.F._writeLit=function(e,t,r,i){return UZIP.F._putsF(r,i,t[e<<1]),i+t[1+(e<<1)]},UZIP.F.inflate=function(e,t){var r=Uint8Array;if(3==e[0]&&0==e[1])return t||new r(0);var i=UZIP.F,o=i._bitsF,a=i._bitsE,s=i._decodeTiny,f=i.makeCodes,l=i.codes2map,c=i._get17,u=i.U,h=null==t;h&&(t=new r(e.length>>>2<<3));for(var d,A,g=0,p=0,m=0,w=0,v=0,b=0,y=0,E=0,F=0;0==g;)if(g=o(e,F,1),p=o(e,F+1,2),F+=3,0!=p){if(h&&(t=UZIP.F._check(t,E+(1<<17))),1==p&&(d=u.flmap,A=u.fdmap,b=511,y=31),2==p){m=a(e,F,5)+257,w=a(e,F+5,5)+1,v=a(e,F+10,4)+4,F+=14;for(var _=0;_<38;_+=2)u.itree[_]=0,u.itree[_+1]=0;var B=1;for(_=0;_<v;_++){var U=a(e,F+3*_,3);u.itree[1+(u.ordr[_]<<1)]=U,U>B&&(B=U)}F+=3*v,f(u.itree,B),l(u.itree,B,u.imap),d=u.lmap,A=u.dmap,F=s(u.imap,(1<<B)-1,m+w,e,F,u.ttree);var C=i._copyOut(u.ttree,0,m,u.ltree);b=(1<<C)-1;var I=i._copyOut(u.ttree,m,w,u.dtree);y=(1<<I)-1,f(u.ltree,C),l(u.ltree,C,d),f(u.dtree,I),l(u.dtree,I,A)}for(;;){var Q=d[c(e,F)&b];F+=15&Q;var M=Q>>>4;if(M>>>8==0)t[E++]=M;else{if(256==M)break;var x=E+M-254;if(M>264){var S=u.ldef[M-257];x=E+(S>>>3)+a(e,F,7&S),F+=7&S}var R=A[c(e,F)&y];F+=15&R;var T=R>>>4,O=u.ddef[T],P=(O>>>4)+o(e,F,15&O);for(F+=15&O,h&&(t=UZIP.F._check(t,E+(1<<17)));E<x;)t[E]=t[E++-P],t[E]=t[E++-P],t[E]=t[E++-P],t[E]=t[E++-P];E=x}}}else{0!=(7&F)&&(F+=8-(7&F));var H=4+(F>>>3),L=e[H-4]|e[H-3]<<8;h&&(t=UZIP.F._check(t,E+L)),t.set(new r(e.buffer,e.byteOffset+H,L),E),F=H+L<<3,E+=L}return t.length==E?t:t.slice(0,E)},UZIP.F._check=function(e,t){var r=e.length;if(t<=r)return e;var i=new Uint8Array(Math.max(r<<1,t));return i.set(e,0),i},UZIP.F._decodeTiny=function(e,t,r,i,o,a){for(var s=UZIP.F._bitsE,f=UZIP.F._get17,l=0;l<r;){var c=e[f(i,o)&t];o+=15&c;var u=c>>>4;if(u<=15)a[l]=u,l++;else{var h=0,d=0;16==u?(d=3+s(i,o,2),o+=2,h=a[l-1]):17==u?(d=3+s(i,o,3),o+=3):18==u&&(d=11+s(i,o,7),o+=7);for(var A=l+d;l<A;)a[l]=h,l++}}return o},UZIP.F._copyOut=function(e,t,r,i){for(var o=0,a=0,s=i.length>>>1;a<r;){var f=e[a+t];i[a<<1]=0,i[1+(a<<1)]=f,f>o&&(o=f),a++}for(;a<s;)i[a<<1]=0,i[1+(a<<1)]=0,a++;return o},UZIP.F.makeCodes=function(e,t){for(var r,i,o,a,s=UZIP.F.U,f=e.length,l=s.bl_count,c=0;c<=t;c++)l[c]=0;for(c=1;c<f;c+=2)l[e[c]]++;var u=s.next_code;for(r=0,l[0]=0,i=1;i<=t;i++)r=r+l[i-1]<<1,u[i]=r;for(o=0;o<f;o+=2)0!=(a=e[o+1])&&(e[o]=u[a],u[a]++)},UZIP.F.codes2map=function(e,t,r){for(var i=e.length,o=UZIP.F.U.rev15,a=0;a<i;a+=2)if(0!=e[a+1])for(var s=a>>1,f=e[a+1],l=s<<4|f,c=t-f,u=e[a]<<c,h=u+(1<<c);u!=h;){r[o[u]>>>15-t]=l,u++}},UZIP.F.revCodes=function(e,t){for(var r=UZIP.F.U.rev15,i=15-t,o=0;o<e.length;o+=2){var a=e[o]<<t-e[o+1];e[o]=r[a]>>>i}},UZIP.F._putsE=function(e,t,r){r<<=7&t;var i=t>>>3;e[i]|=r,e[i+1]|=r>>>8},UZIP.F._putsF=function(e,t,r){r<<=7&t;var i=t>>>3;e[i]|=r,e[i+1]|=r>>>8,e[i+2]|=r>>>16},UZIP.F._bitsE=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8)>>>(7&t)&(1<<r)-1},UZIP.F._bitsF=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)&(1<<r)-1},UZIP.F._get17=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)},UZIP.F._get25=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16|e[3+(t>>>3)]<<24)>>>(7&t)},UZIP.F.U=(r=Uint16Array,i=Uint32Array,{next_code:new r(16),bl_count:new r(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new r(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new i(32),flmap:new r(512),fltree:[],fdmap:new r(32),fdtree:[],lmap:new r(32768),ltree:[],ttree:[],dmap:new r(32768),dtree:[],imap:new r(512),itree:[],rev15:new r(32768),lhst:new i(286),dhst:new i(30),ihst:new i(19),lits:new i(15e3),strt:new r(65536),prev:new r(32768)}),function(){for(var e=UZIP.F.U,t=0;t<32768;t++){var r=t;r=(4278255360&(r=(4042322160&(r=(3435973836&(r=(2863311530&r)>>>1|(1431655765&r)<<1))>>>2|(858993459&r)<<2))>>>4|(252645135&r)<<4))>>>8|(16711935&r)<<8,e.rev15[t]=(r>>>16|r<<16)>>>17}function pushV(e,t,r){for(;0!=t--;)e.push(0,r)}for(t=0;t<32;t++)e.ldef[t]=e.of0[t]<<3|e.exb[t],e.ddef[t]=e.df0[t]<<4|e.dxb[t];pushV(e.fltree,144,8),pushV(e.fltree,112,9),pushV(e.fltree,24,7),pushV(e.fltree,8,8),UZIP.F.makeCodes(e.fltree,9),UZIP.F.codes2map(e.fltree,9,e.flmap),UZIP.F.revCodes(e.fltree,9),pushV(e.fdtree,32,5),UZIP.F.makeCodes(e.fdtree,5),UZIP.F.codes2map(e.fdtree,5,e.fdmap),UZIP.F.revCodes(e.fdtree,5),pushV(e.itree,19,0),pushV(e.ltree,286,0),pushV(e.dtree,30,0),pushV(e.ttree,320,0)}()}();var UZIP=_mergeNamespaces({__proto__:null,default:e},[e]);const UPNG=function(){var e={nextZero(e,t){for(;0!=e[t];)t++;return t},readUshort:(e,t)=>e[t]<<8|e[t+1],writeUshort(e,t,r){e[t]=r>>8&255,e[t+1]=255&r},readUint:(e,t)=>16777216*e[t]+(e[t+1]<<16|e[t+2]<<8|e[t+3]),writeUint(e,t,r){e[t]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r},readASCII(e,t,r){let i=\"\";for(let o=0;o<r;o++)i+=String.fromCharCode(e[t+o]);return i},writeASCII(e,t,r){for(let i=0;i<r.length;i++)e[t+i]=r.charCodeAt(i)},readBytes(e,t,r){const i=[];for(let o=0;o<r;o++)i.push(e[t+o]);return i},pad:e=>e.length<2?`0${e}`:e,readUTF8(t,r,i){let o,a=\"\";for(let o=0;o<i;o++)a+=`%${e.pad(t[r+o].toString(16))}`;try{o=decodeURIComponent(a)}catch(o){return e.readASCII(t,r,i)}return o}};function decodeImage(t,r,i,o){const a=r*i,s=_getBPP(o),f=Math.ceil(r*s/8),l=new Uint8Array(4*a),c=new Uint32Array(l.buffer),{ctype:u}=o,{depth:h}=o,d=e.readUshort;if(6==u){const e=a<<2;if(8==h)for(var A=0;A<e;A+=4)l[A]=t[A],l[A+1]=t[A+1],l[A+2]=t[A+2],l[A+3]=t[A+3];if(16==h)for(A=0;A<e;A++)l[A]=t[A<<1]}else if(2==u){const e=o.tabs.tRNS;if(null==e){if(8==h)for(A=0;A<a;A++){var g=3*A;c[A]=255<<24|t[g+2]<<16|t[g+1]<<8|t[g]}if(16==h)for(A=0;A<a;A++){g=6*A;c[A]=255<<24|t[g+4]<<16|t[g+2]<<8|t[g]}}else{var p=e[0];const r=e[1],i=e[2];if(8==h)for(A=0;A<a;A++){var m=A<<2;g=3*A;c[A]=255<<24|t[g+2]<<16|t[g+1]<<8|t[g],t[g]==p&&t[g+1]==r&&t[g+2]==i&&(l[m+3]=0)}if(16==h)for(A=0;A<a;A++){m=A<<2,g=6*A;c[A]=255<<24|t[g+4]<<16|t[g+2]<<8|t[g],d(t,g)==p&&d(t,g+2)==r&&d(t,g+4)==i&&(l[m+3]=0)}}}else if(3==u){const e=o.tabs.PLTE,s=o.tabs.tRNS,c=s?s.length:0;if(1==h)for(var w=0;w<i;w++){var v=w*f,b=w*r;for(A=0;A<r;A++){m=b+A<<2;var y=3*(E=t[v+(A>>3)]>>7-((7&A)<<0)&1);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}}if(2==h)for(w=0;w<i;w++)for(v=w*f,b=w*r,A=0;A<r;A++){m=b+A<<2,y=3*(E=t[v+(A>>2)]>>6-((3&A)<<1)&3);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}if(4==h)for(w=0;w<i;w++)for(v=w*f,b=w*r,A=0;A<r;A++){m=b+A<<2,y=3*(E=t[v+(A>>1)]>>4-((1&A)<<2)&15);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}if(8==h)for(A=0;A<a;A++){var E;m=A<<2,y=3*(E=t[A]);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}}else if(4==u){if(8==h)for(A=0;A<a;A++){m=A<<2;var F=t[_=A<<1];l[m]=F,l[m+1]=F,l[m+2]=F,l[m+3]=t[_+1]}if(16==h)for(A=0;A<a;A++){var _;m=A<<2,F=t[_=A<<2];l[m]=F,l[m+1]=F,l[m+2]=F,l[m+3]=t[_+2]}}else if(0==u)for(p=o.tabs.tRNS?o.tabs.tRNS:-1,w=0;w<i;w++){const e=w*f,i=w*r;if(1==h)for(var B=0;B<r;B++){var U=(F=255*(t[e+(B>>>3)]>>>7-(7&B)&1))==255*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(2==h)for(B=0;B<r;B++){U=(F=85*(t[e+(B>>>2)]>>>6-((3&B)<<1)&3))==85*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(4==h)for(B=0;B<r;B++){U=(F=17*(t[e+(B>>>1)]>>>4-((1&B)<<2)&15))==17*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(8==h)for(B=0;B<r;B++){U=(F=t[e+B])==p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(16==h)for(B=0;B<r;B++){F=t[e+(B<<1)],U=d(t,e+(B<<1))==p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}}return l}function _decompress(e,r,i,o){const a=_getBPP(e),s=Math.ceil(i*a/8),f=new Uint8Array((s+1+e.interlace)*o);return r=e.tabs.CgBI?t(r,f):_inflate(r,f),0==e.interlace?r=_filterZero(r,e,0,i,o):1==e.interlace&&(r=function _readInterlace(e,t){const r=t.width,i=t.height,o=_getBPP(t),a=o>>3,s=Math.ceil(r*o/8),f=new Uint8Array(i*s);let l=0;const c=[0,0,4,0,2,0,1],u=[0,4,0,2,0,1,0],h=[8,8,8,4,4,2,2],d=[8,8,4,4,2,2,1];let A=0;for(;A<7;){const p=h[A],m=d[A];let w=0,v=0,b=c[A];for(;b<i;)b+=p,v++;let y=u[A];for(;y<r;)y+=m,w++;const E=Math.ceil(w*o/8);_filterZero(e,t,l,w,v);let F=0,_=c[A];for(;_<i;){let t=u[A],i=l+F*E<<3;for(;t<r;){var g;if(1==o)g=(g=e[i>>3])>>7-(7&i)&1,f[_*s+(t>>3)]|=g<<7-((7&t)<<0);if(2==o)g=(g=e[i>>3])>>6-(7&i)&3,f[_*s+(t>>2)]|=g<<6-((3&t)<<1);if(4==o)g=(g=e[i>>3])>>4-(7&i)&15,f[_*s+(t>>1)]|=g<<4-((1&t)<<2);if(o>=8){const r=_*s+t*a;for(let t=0;t<a;t++)f[r+t]=e[(i>>3)+t]}i+=o,t+=m}F++,_+=p}w*v!=0&&(l+=v*(1+E)),A+=1}return f}(r,e)),r}function _inflate(e,r){return t(new Uint8Array(e.buffer,2,e.length-6),r)}var t=function(){const e={H:{}};return e.H.N=function(t,r){const i=Uint8Array;let o,a,s=0,f=0,l=0,c=0,u=0,h=0,d=0,A=0,g=0;if(3==t[0]&&0==t[1])return r||new i(0);const p=e.H,m=p.b,w=p.e,v=p.R,b=p.n,y=p.A,E=p.Z,F=p.m,_=null==r;for(_&&(r=new i(t.length>>>2<<5));0==s;)if(s=m(t,g,1),f=m(t,g+1,2),g+=3,0!=f){if(_&&(r=e.H.W(r,A+(1<<17))),1==f&&(o=F.J,a=F.h,h=511,d=31),2==f){l=w(t,g,5)+257,c=w(t,g+5,5)+1,u=w(t,g+10,4)+4,g+=14;let e=1;for(var B=0;B<38;B+=2)F.Q[B]=0,F.Q[B+1]=0;for(B=0;B<u;B++){const r=w(t,g+3*B,3);F.Q[1+(F.X[B]<<1)]=r,r>e&&(e=r)}g+=3*u,b(F.Q,e),y(F.Q,e,F.u),o=F.w,a=F.d,g=v(F.u,(1<<e)-1,l+c,t,g,F.v);const r=p.V(F.v,0,l,F.C);h=(1<<r)-1;const i=p.V(F.v,l,c,F.D);d=(1<<i)-1,b(F.C,r),y(F.C,r,o),b(F.D,i),y(F.D,i,a)}for(;;){const e=o[E(t,g)&h];g+=15&e;const i=e>>>4;if(i>>>8==0)r[A++]=i;else{if(256==i)break;{let e=A+i-254;if(i>264){const r=F.q[i-257];e=A+(r>>>3)+w(t,g,7&r),g+=7&r}const o=a[E(t,g)&d];g+=15&o;const s=o>>>4,f=F.c[s],l=(f>>>4)+m(t,g,15&f);for(g+=15&f;A<e;)r[A]=r[A++-l],r[A]=r[A++-l],r[A]=r[A++-l],r[A]=r[A++-l];A=e}}}}else{0!=(7&g)&&(g+=8-(7&g));const o=4+(g>>>3),a=t[o-4]|t[o-3]<<8;_&&(r=e.H.W(r,A+a)),r.set(new i(t.buffer,t.byteOffset+o,a),A),g=o+a<<3,A+=a}return r.length==A?r:r.slice(0,A)},e.H.W=function(e,t){const r=e.length;if(t<=r)return e;const i=new Uint8Array(r<<1);return i.set(e,0),i},e.H.R=function(t,r,i,o,a,s){const f=e.H.e,l=e.H.Z;let c=0;for(;c<i;){const e=t[l(o,a)&r];a+=15&e;const i=e>>>4;if(i<=15)s[c]=i,c++;else{let e=0,t=0;16==i?(t=3+f(o,a,2),a+=2,e=s[c-1]):17==i?(t=3+f(o,a,3),a+=3):18==i&&(t=11+f(o,a,7),a+=7);const r=c+t;for(;c<r;)s[c]=e,c++}}return a},e.H.V=function(e,t,r,i){let o=0,a=0;const s=i.length>>>1;for(;a<r;){const r=e[a+t];i[a<<1]=0,i[1+(a<<1)]=r,r>o&&(o=r),a++}for(;a<s;)i[a<<1]=0,i[1+(a<<1)]=0,a++;return o},e.H.n=function(t,r){const i=e.H.m,o=t.length;let a,s,f;let l;const c=i.j;for(var u=0;u<=r;u++)c[u]=0;for(u=1;u<o;u+=2)c[t[u]]++;const h=i.K;for(a=0,c[0]=0,s=1;s<=r;s++)a=a+c[s-1]<<1,h[s]=a;for(f=0;f<o;f+=2)l=t[f+1],0!=l&&(t[f]=h[l],h[l]++)},e.H.A=function(t,r,i){const o=t.length,a=e.H.m.r;for(let e=0;e<o;e+=2)if(0!=t[e+1]){const o=e>>1,s=t[e+1],f=o<<4|s,l=r-s;let c=t[e]<<l;const u=c+(1<<l);for(;c!=u;){i[a[c]>>>15-r]=f,c++}}},e.H.l=function(t,r){const i=e.H.m.r,o=15-r;for(let e=0;e<t.length;e+=2){const a=t[e]<<r-t[e+1];t[e]=i[a]>>>o}},e.H.M=function(e,t,r){r<<=7&t;const i=t>>>3;e[i]|=r,e[i+1]|=r>>>8},e.H.I=function(e,t,r){r<<=7&t;const i=t>>>3;e[i]|=r,e[i+1]|=r>>>8,e[i+2]|=r>>>16},e.H.e=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8)>>>(7&t)&(1<<r)-1},e.H.b=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)&(1<<r)-1},e.H.Z=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)},e.H.i=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16|e[3+(t>>>3)]<<24)>>>(7&t)},e.H.m=function(){const e=Uint16Array,t=Uint32Array;return{K:new e(16),j:new e(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new e(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new t(32),J:new e(512),_:[],h:new e(32),$:[],w:new e(32768),C:[],v:[],d:new e(32768),D:[],u:new e(512),Q:[],r:new e(32768),s:new t(286),Y:new t(30),a:new t(19),t:new t(15e3),k:new e(65536),g:new e(32768)}}(),function(){const t=e.H.m;for(var r=0;r<32768;r++){let e=r;e=(2863311530&e)>>>1|(1431655765&e)<<1,e=(3435973836&e)>>>2|(858993459&e)<<2,e=(4042322160&e)>>>4|(252645135&e)<<4,e=(4278255360&e)>>>8|(16711935&e)<<8,t.r[r]=(e>>>16|e<<16)>>>17}function n(e,t,r){for(;0!=t--;)e.push(0,r)}for(r=0;r<32;r++)t.q[r]=t.S[r]<<3|t.T[r],t.c[r]=t.p[r]<<4|t.z[r];n(t._,144,8),n(t._,112,9),n(t._,24,7),n(t._,8,8),e.H.n(t._,9),e.H.A(t._,9,t.J),e.H.l(t._,9),n(t.$,32,5),e.H.n(t.$,5),e.H.A(t.$,5,t.h),e.H.l(t.$,5),n(t.Q,19,0),n(t.C,286,0),n(t.D,30,0),n(t.v,320,0)}(),e.H.N}();function _getBPP(e){return[1,null,3,1,2,null,4][e.ctype]*e.depth}function _filterZero(e,t,r,i,o){let a=_getBPP(t);const s=Math.ceil(i*a/8);let f,l;a=Math.ceil(a/8);let c=e[r],u=0;if(c>1&&(e[r]=[0,0,1][c-2]),3==c)for(u=a;u<s;u++)e[u+1]=e[u+1]+(e[u+1-a]>>>1)&255;for(let t=0;t<o;t++)if(f=r+t*s,l=f+t+1,c=e[l-1],u=0,0==c)for(;u<s;u++)e[f+u]=e[l+u];else if(1==c){for(;u<a;u++)e[f+u]=e[l+u];for(;u<s;u++)e[f+u]=e[l+u]+e[f+u-a]}else if(2==c)for(;u<s;u++)e[f+u]=e[l+u]+e[f+u-s];else if(3==c){for(;u<a;u++)e[f+u]=e[l+u]+(e[f+u-s]>>>1);for(;u<s;u++)e[f+u]=e[l+u]+(e[f+u-s]+e[f+u-a]>>>1)}else{for(;u<a;u++)e[f+u]=e[l+u]+_paeth(0,e[f+u-s],0);for(;u<s;u++)e[f+u]=e[l+u]+_paeth(e[f+u-a],e[f+u-s],e[f+u-a-s])}return e}function _paeth(e,t,r){const i=e+t-r,o=i-e,a=i-t,s=i-r;return o*o<=a*a&&o*o<=s*s?e:a*a<=s*s?t:r}function _IHDR(t,r,i){i.width=e.readUint(t,r),r+=4,i.height=e.readUint(t,r),r+=4,i.depth=t[r],r++,i.ctype=t[r],r++,i.compress=t[r],r++,i.filter=t[r],r++,i.interlace=t[r],r++}function _copyTile(e,t,r,i,o,a,s,f,l){const c=Math.min(t,o),u=Math.min(r,a);let h=0,d=0;for(let r=0;r<u;r++)for(let a=0;a<c;a++)if(s>=0&&f>=0?(h=r*t+a<<2,d=(f+r)*o+s+a<<2):(h=(-f+r)*t-s+a<<2,d=r*o+a<<2),0==l)i[d]=e[h],i[d+1]=e[h+1],i[d+2]=e[h+2],i[d+3]=e[h+3];else if(1==l){var A=e[h+3]*(1/255),g=e[h]*A,p=e[h+1]*A,m=e[h+2]*A,w=i[d+3]*(1/255),v=i[d]*w,b=i[d+1]*w,y=i[d+2]*w;const t=1-A,r=A+w*t,o=0==r?0:1/r;i[d+3]=255*r,i[d+0]=(g+v*t)*o,i[d+1]=(p+b*t)*o,i[d+2]=(m+y*t)*o}else if(2==l){A=e[h+3],g=e[h],p=e[h+1],m=e[h+2],w=i[d+3],v=i[d],b=i[d+1],y=i[d+2];A==w&&g==v&&p==b&&m==y?(i[d]=0,i[d+1]=0,i[d+2]=0,i[d+3]=0):(i[d]=g,i[d+1]=p,i[d+2]=m,i[d+3]=A)}else if(3==l){A=e[h+3],g=e[h],p=e[h+1],m=e[h+2],w=i[d+3],v=i[d],b=i[d+1],y=i[d+2];if(A==w&&g==v&&p==b&&m==y)continue;if(A<220&&w>20)return!1}return!0}return{decode:function decode(r){const i=new Uint8Array(r);let o=8;const a=e,s=a.readUshort,f=a.readUint,l={tabs:{},frames:[]},c=new Uint8Array(i.length);let u,h=0,d=0;const A=[137,80,78,71,13,10,26,10];for(var g=0;g<8;g++)if(i[g]!=A[g])throw\"The input is not a PNG file!\";for(;o<i.length;){const e=a.readUint(i,o);o+=4;const r=a.readASCII(i,o,4);if(o+=4,\"IHDR\"==r)_IHDR(i,o,l);else if(\"iCCP\"==r){for(var p=o;0!=i[p];)p++;a.readASCII(i,o,p-o),i[p+1];const s=i.slice(p+2,o+e);let f=null;try{f=_inflate(s)}catch(e){f=t(s)}l.tabs[r]=f}else if(\"CgBI\"==r)l.tabs[r]=i.slice(o,o+4);else if(\"IDAT\"==r){for(g=0;g<e;g++)c[h+g]=i[o+g];h+=e}else if(\"acTL\"==r)l.tabs[r]={num_frames:f(i,o),num_plays:f(i,o+4)},u=new Uint8Array(i.length);else if(\"fcTL\"==r){if(0!=d)(E=l.frames[l.frames.length-1]).data=_decompress(l,u.slice(0,d),E.rect.width,E.rect.height),d=0;const e={x:f(i,o+12),y:f(i,o+16),width:f(i,o+4),height:f(i,o+8)};let t=s(i,o+22);t=s(i,o+20)/(0==t?100:t);const r={rect:e,delay:Math.round(1e3*t),dispose:i[o+24],blend:i[o+25]};l.frames.push(r)}else if(\"fdAT\"==r){for(g=0;g<e-4;g++)u[d+g]=i[o+g+4];d+=e-4}else if(\"pHYs\"==r)l.tabs[r]=[a.readUint(i,o),a.readUint(i,o+4),i[o+8]];else if(\"cHRM\"==r){l.tabs[r]=[];for(g=0;g<8;g++)l.tabs[r].push(a.readUint(i,o+4*g))}else if(\"tEXt\"==r||\"zTXt\"==r){null==l.tabs[r]&&(l.tabs[r]={});var m=a.nextZero(i,o),w=a.readASCII(i,o,m-o),v=o+e-m-1;if(\"tEXt\"==r)y=a.readASCII(i,m+1,v);else{var b=_inflate(i.slice(m+2,m+2+v));y=a.readUTF8(b,0,b.length)}l.tabs[r][w]=y}else if(\"iTXt\"==r){null==l.tabs[r]&&(l.tabs[r]={});m=0,p=o;m=a.nextZero(i,p);w=a.readASCII(i,p,m-p);const t=i[p=m+1];var y;i[p+1],p+=2,m=a.nextZero(i,p),a.readASCII(i,p,m-p),p=m+1,m=a.nextZero(i,p),a.readUTF8(i,p,m-p);v=e-((p=m+1)-o);if(0==t)y=a.readUTF8(i,p,v);else{b=_inflate(i.slice(p,p+v));y=a.readUTF8(b,0,b.length)}l.tabs[r][w]=y}else if(\"PLTE\"==r)l.tabs[r]=a.readBytes(i,o,e);else if(\"hIST\"==r){const e=l.tabs.PLTE.length/3;l.tabs[r]=[];for(g=0;g<e;g++)l.tabs[r].push(s(i,o+2*g))}else if(\"tRNS\"==r)3==l.ctype?l.tabs[r]=a.readBytes(i,o,e):0==l.ctype?l.tabs[r]=s(i,o):2==l.ctype&&(l.tabs[r]=[s(i,o),s(i,o+2),s(i,o+4)]);else if(\"gAMA\"==r)l.tabs[r]=a.readUint(i,o)/1e5;else if(\"sRGB\"==r)l.tabs[r]=i[o];else if(\"bKGD\"==r)0==l.ctype||4==l.ctype?l.tabs[r]=[s(i,o)]:2==l.ctype||6==l.ctype?l.tabs[r]=[s(i,o),s(i,o+2),s(i,o+4)]:3==l.ctype&&(l.tabs[r]=i[o]);else if(\"IEND\"==r)break;o+=e,a.readUint(i,o),o+=4}var E;return 0!=d&&((E=l.frames[l.frames.length-1]).data=_decompress(l,u.slice(0,d),E.rect.width,E.rect.height)),l.data=_decompress(l,c,l.width,l.height),delete l.compress,delete l.interlace,delete l.filter,l},toRGBA8:function toRGBA8(e){const t=e.width,r=e.height;if(null==e.tabs.acTL)return[decodeImage(e.data,t,r,e).buffer];const i=[];null==e.frames[0].data&&(e.frames[0].data=e.data);const o=t*r*4,a=new Uint8Array(o),s=new Uint8Array(o),f=new Uint8Array(o);for(let c=0;c<e.frames.length;c++){const u=e.frames[c],h=u.rect.x,d=u.rect.y,A=u.rect.width,g=u.rect.height,p=decodeImage(u.data,A,g,e);if(0!=c)for(var l=0;l<o;l++)f[l]=a[l];if(0==u.blend?_copyTile(p,A,g,a,t,r,h,d,0):1==u.blend&&_copyTile(p,A,g,a,t,r,h,d,1),i.push(a.buffer.slice(0)),0==u.dispose);else if(1==u.dispose)_copyTile(s,A,g,a,t,r,h,d,0);else if(2==u.dispose)for(l=0;l<o;l++)a[l]=f[l]}return i},_paeth:_paeth,_copyTile:_copyTile,_bin:e}}();!function(){const{_copyTile:e}=UPNG,{_bin:t}=UPNG,r=UPNG._paeth;var i={table:function(){const e=new Uint32Array(256);for(let t=0;t<256;t++){let r=t;for(let e=0;e<8;e++)1&r?r=3988292384^r>>>1:r>>>=1;e[t]=r}return e}(),update(e,t,r,o){for(let a=0;a<o;a++)e=i.table[255&(e^t[r+a])]^e>>>8;return e},crc:(e,t,r)=>4294967295^i.update(4294967295,e,t,r)};function addErr(e,t,r,i){t[r]+=e[0]*i>>4,t[r+1]+=e[1]*i>>4,t[r+2]+=e[2]*i>>4,t[r+3]+=e[3]*i>>4}function N(e){return Math.max(0,Math.min(255,e))}function D(e,t){const r=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2],a=e[3]-t[3];return r*r+i*i+o*o+a*a}function dither(e,t,r,i,o,a,s){null==s&&(s=1);const f=i.length,l=[];for(var c=0;c<f;c++){const e=i[c];l.push([e>>>0&255,e>>>8&255,e>>>16&255,e>>>24&255])}for(c=0;c<f;c++){let e=4294967295;for(var u=0,h=0;h<f;h++){var d=D(l[c],l[h]);h!=c&&d<e&&(e=d,u=h)}}const A=new Uint32Array(o.buffer),g=new Int16Array(t*r*4),p=[0,8,2,10,12,4,14,6,3,11,1,9,15,7,13,5];for(c=0;c<p.length;c++)p[c]=255*((p[c]+.5)/16-.5);for(let o=0;o<r;o++)for(let w=0;w<t;w++){var m;c=4*(o*t+w);if(2!=s)m=[N(e[c]+g[c]),N(e[c+1]+g[c+1]),N(e[c+2]+g[c+2]),N(e[c+3]+g[c+3])];else{d=p[4*(3&o)+(3&w)];m=[N(e[c]+d),N(e[c+1]+d),N(e[c+2]+d),N(e[c+3]+d)]}u=0;let v=16777215;for(h=0;h<f;h++){const e=D(m,l[h]);e<v&&(v=e,u=h)}const b=l[u],y=[m[0]-b[0],m[1]-b[1],m[2]-b[2],m[3]-b[3]];1==s&&(w!=t-1&&addErr(y,g,c+4,7),o!=r-1&&(0!=w&&addErr(y,g,c+4*t-4,3),addErr(y,g,c+4*t,5),w!=t-1&&addErr(y,g,c+4*t+4,1))),a[c>>2]=u,A[c>>2]=i[u]}}function _main(e,r,o,a,s){null==s&&(s={});const{crc:f}=i,l=t.writeUint,c=t.writeUshort,u=t.writeASCII;let h=8;const d=e.frames.length>1;let A,g=!1,p=33+(d?20:0);if(null!=s.sRGB&&(p+=13),null!=s.pHYs&&(p+=21),null!=s.iCCP&&(A=pako.deflate(s.iCCP),p+=21+A.length+4),3==e.ctype){for(var m=e.plte.length,w=0;w<m;w++)e.plte[w]>>>24!=255&&(g=!0);p+=8+3*m+4+(g?8+1*m+4:0)}for(var v=0;v<e.frames.length;v++){d&&(p+=38),p+=(F=e.frames[v]).cimg.length+12,0!=v&&(p+=4)}p+=12;const b=new Uint8Array(p),y=[137,80,78,71,13,10,26,10];for(w=0;w<8;w++)b[w]=y[w];if(l(b,h,13),h+=4,u(b,h,\"IHDR\"),h+=4,l(b,h,r),h+=4,l(b,h,o),h+=4,b[h]=e.depth,h++,b[h]=e.ctype,h++,b[h]=0,h++,b[h]=0,h++,b[h]=0,h++,l(b,h,f(b,h-17,17)),h+=4,null!=s.sRGB&&(l(b,h,1),h+=4,u(b,h,\"sRGB\"),h+=4,b[h]=s.sRGB,h++,l(b,h,f(b,h-5,5)),h+=4),null!=s.iCCP){const e=13+A.length;l(b,h,e),h+=4,u(b,h,\"iCCP\"),h+=4,u(b,h,\"ICC profile\"),h+=11,h+=2,b.set(A,h),h+=A.length,l(b,h,f(b,h-(e+4),e+4)),h+=4}if(null!=s.pHYs&&(l(b,h,9),h+=4,u(b,h,\"pHYs\"),h+=4,l(b,h,s.pHYs[0]),h+=4,l(b,h,s.pHYs[1]),h+=4,b[h]=s.pHYs[2],h++,l(b,h,f(b,h-13,13)),h+=4),d&&(l(b,h,8),h+=4,u(b,h,\"acTL\"),h+=4,l(b,h,e.frames.length),h+=4,l(b,h,null!=s.loop?s.loop:0),h+=4,l(b,h,f(b,h-12,12)),h+=4),3==e.ctype){l(b,h,3*(m=e.plte.length)),h+=4,u(b,h,\"PLTE\"),h+=4;for(w=0;w<m;w++){const t=3*w,r=e.plte[w],i=255&r,o=r>>>8&255,a=r>>>16&255;b[h+t+0]=i,b[h+t+1]=o,b[h+t+2]=a}if(h+=3*m,l(b,h,f(b,h-3*m-4,3*m+4)),h+=4,g){l(b,h,m),h+=4,u(b,h,\"tRNS\"),h+=4;for(w=0;w<m;w++)b[h+w]=e.plte[w]>>>24&255;h+=m,l(b,h,f(b,h-m-4,m+4)),h+=4}}let E=0;for(v=0;v<e.frames.length;v++){var F=e.frames[v];d&&(l(b,h,26),h+=4,u(b,h,\"fcTL\"),h+=4,l(b,h,E++),h+=4,l(b,h,F.rect.width),h+=4,l(b,h,F.rect.height),h+=4,l(b,h,F.rect.x),h+=4,l(b,h,F.rect.y),h+=4,c(b,h,a[v]),h+=2,c(b,h,1e3),h+=2,b[h]=F.dispose,h++,b[h]=F.blend,h++,l(b,h,f(b,h-30,30)),h+=4);const t=F.cimg;l(b,h,(m=t.length)+(0==v?0:4)),h+=4;const r=h;u(b,h,0==v?\"IDAT\":\"fdAT\"),h+=4,0!=v&&(l(b,h,E++),h+=4),b.set(t,h),h+=m,l(b,h,f(b,r,h-r)),h+=4}return l(b,h,0),h+=4,u(b,h,\"IEND\"),h+=4,l(b,h,f(b,h-4,4)),h+=4,b.buffer}function compressPNG(e,t,r){for(let i=0;i<e.frames.length;i++){const o=e.frames[i];o.rect.width;const a=o.rect.height,s=new Uint8Array(a*o.bpl+a);o.cimg=_filterZero(o.img,a,o.bpp,o.bpl,s,t,r)}}function compress(t,r,i,o,a){const s=a[0],f=a[1],l=a[2],c=a[3],u=a[4],h=a[5];let d=6,A=8,g=255;for(var p=0;p<t.length;p++){const e=new Uint8Array(t[p]);for(var m=e.length,w=0;w<m;w+=4)g&=e[w+3]}const v=255!=g,b=function framize(t,r,i,o,a,s){const f=[];for(var l=0;l<t.length;l++){const h=new Uint8Array(t[l]),A=new Uint32Array(h.buffer);var c;let g=0,p=0,m=r,w=i,v=o?1:0;if(0!=l){const b=s||o||1==l||0!=f[l-2].dispose?1:2;let y=0,E=1e9;for(let e=0;e<b;e++){var u=new Uint8Array(t[l-1-e]);const o=new Uint32Array(t[l-1-e]);let s=r,f=i,c=-1,h=-1;for(let e=0;e<i;e++)for(let t=0;t<r;t++){A[d=e*r+t]!=o[d]&&(t<s&&(s=t),t>c&&(c=t),e<f&&(f=e),e>h&&(h=e))}-1==c&&(s=f=c=h=0),a&&(1==(1&s)&&s--,1==(1&f)&&f--);const v=(c-s+1)*(h-f+1);v<E&&(E=v,y=e,g=s,p=f,m=c-s+1,w=h-f+1)}u=new Uint8Array(t[l-1-y]);1==y&&(f[l-1].dispose=2),c=new Uint8Array(m*w*4),e(u,r,i,c,m,w,-g,-p,0),v=e(h,r,i,c,m,w,-g,-p,3)?1:0,1==v?_prepareDiff(h,r,i,c,{x:g,y:p,width:m,height:w}):e(h,r,i,c,m,w,-g,-p,0)}else c=h.slice(0);f.push({rect:{x:g,y:p,width:m,height:w},img:c,blend:v,dispose:0})}if(o)for(l=0;l<f.length;l++){if(1==(A=f[l]).blend)continue;const e=A.rect,o=f[l-1].rect,s=Math.min(e.x,o.x),c=Math.min(e.y,o.y),u={x:s,y:c,width:Math.max(e.x+e.width,o.x+o.width)-s,height:Math.max(e.y+e.height,o.y+o.height)-c};f[l-1].dispose=1,l-1!=0&&_updateFrame(t,r,i,f,l-1,u,a),_updateFrame(t,r,i,f,l,u,a)}let h=0;if(1!=t.length)for(var d=0;d<f.length;d++){var A;h+=(A=f[d]).rect.width*A.rect.height}return f}(t,r,i,s,f,l),y={},E=[],F=[];if(0!=o){const e=[];for(w=0;w<b.length;w++)e.push(b[w].img.buffer);const t=function concatRGBA(e){let t=0;for(var r=0;r<e.length;r++)t+=e[r].byteLength;const i=new Uint8Array(t);let o=0;for(r=0;r<e.length;r++){const t=new Uint8Array(e[r]),a=t.length;for(let e=0;e<a;e+=4){let r=t[e],a=t[e+1],s=t[e+2];const f=t[e+3];0==f&&(r=a=s=0),i[o+e]=r,i[o+e+1]=a,i[o+e+2]=s,i[o+e+3]=f}o+=a}return i.buffer}(e),r=quantize(t,o);for(w=0;w<r.plte.length;w++)E.push(r.plte[w].est.rgba);let i=0;for(w=0;w<b.length;w++){const e=(B=b[w]).img.length;var _=new Uint8Array(r.inds.buffer,i>>2,e>>2);F.push(_);const t=new Uint8Array(r.abuf,i,e);h&&dither(B.img,B.rect.width,B.rect.height,E,t,_),B.img.set(t),i+=e}}else for(p=0;p<b.length;p++){var B=b[p];const e=new Uint32Array(B.img.buffer);var U=B.rect.width;m=e.length,_=new Uint8Array(m);F.push(_);for(w=0;w<m;w++){const t=e[w];if(0!=w&&t==e[w-1])_[w]=_[w-1];else if(w>U&&t==e[w-U])_[w]=_[w-U];else{let e=y[t];if(null==e&&(y[t]=e=E.length,E.push(t),E.length>=300))break;_[w]=e}}}const C=E.length;C<=256&&0==u&&(A=C<=2?1:C<=4?2:C<=16?4:8,A=Math.max(A,c));for(p=0;p<b.length;p++){(B=b[p]).rect.x,B.rect.y;U=B.rect.width;const e=B.rect.height;let t=B.img;new Uint32Array(t.buffer);let r=4*U,i=4;if(C<=256&&0==u){r=Math.ceil(A*U/8);var I=new Uint8Array(r*e);const o=F[p];for(let t=0;t<e;t++){w=t*r;const e=t*U;if(8==A)for(var Q=0;Q<U;Q++)I[w+Q]=o[e+Q];else if(4==A)for(Q=0;Q<U;Q++)I[w+(Q>>1)]|=o[e+Q]<<4-4*(1&Q);else if(2==A)for(Q=0;Q<U;Q++)I[w+(Q>>2)]|=o[e+Q]<<6-2*(3&Q);else if(1==A)for(Q=0;Q<U;Q++)I[w+(Q>>3)]|=o[e+Q]<<7-1*(7&Q)}t=I,d=3,i=1}else if(0==v&&1==b.length){I=new Uint8Array(U*e*3);const o=U*e;for(w=0;w<o;w++){const e=3*w,r=4*w;I[e]=t[r],I[e+1]=t[r+1],I[e+2]=t[r+2]}t=I,d=2,i=3,r=3*U}B.img=t,B.bpl=r,B.bpp=i}return{ctype:d,depth:A,plte:E,frames:b}}function _updateFrame(t,r,i,o,a,s,f){const l=Uint8Array,c=Uint32Array,u=new l(t[a-1]),h=new c(t[a-1]),d=a+1<t.length?new l(t[a+1]):null,A=new l(t[a]),g=new c(A.buffer);let p=r,m=i,w=-1,v=-1;for(let e=0;e<s.height;e++)for(let t=0;t<s.width;t++){const i=s.x+t,f=s.y+e,l=f*r+i,c=g[l];0==c||0==o[a-1].dispose&&h[l]==c&&(null==d||0!=d[4*l+3])||(i<p&&(p=i),i>w&&(w=i),f<m&&(m=f),f>v&&(v=f))}-1==w&&(p=m=w=v=0),f&&(1==(1&p)&&p--,1==(1&m)&&m--),s={x:p,y:m,width:w-p+1,height:v-m+1};const b=o[a];b.rect=s,b.blend=1,b.img=new Uint8Array(s.width*s.height*4),0==o[a-1].dispose?(e(u,r,i,b.img,s.width,s.height,-s.x,-s.y,0),_prepareDiff(A,r,i,b.img,s)):e(A,r,i,b.img,s.width,s.height,-s.x,-s.y,0)}function _prepareDiff(t,r,i,o,a){e(t,r,i,o,a.width,a.height,-a.x,-a.y,2)}function _filterZero(e,t,r,i,o,a,s){const f=[];let l,c=[0,1,2,3,4];-1!=a?c=[a]:(t*i>5e5||1==r)&&(c=[0]),s&&(l={level:0});const u=UZIP;for(var h=0;h<c.length;h++){for(let a=0;a<t;a++)_filterLine(o,e,a,i,r,c[h]);f.push(u.deflate(o,l))}let d,A=1e9;for(h=0;h<f.length;h++)f[h].length<A&&(d=h,A=f[h].length);return f[d]}function _filterLine(e,t,i,o,a,s){const f=i*o;let l=f+i;if(e[l]=s,l++,0==s)if(o<500)for(var c=0;c<o;c++)e[l+c]=t[f+c];else e.set(new Uint8Array(t.buffer,f,o),l);else if(1==s){for(c=0;c<a;c++)e[l+c]=t[f+c];for(c=a;c<o;c++)e[l+c]=t[f+c]-t[f+c-a]+256&255}else if(0==i){for(c=0;c<a;c++)e[l+c]=t[f+c];if(2==s)for(c=a;c<o;c++)e[l+c]=t[f+c];if(3==s)for(c=a;c<o;c++)e[l+c]=t[f+c]-(t[f+c-a]>>1)+256&255;if(4==s)for(c=a;c<o;c++)e[l+c]=t[f+c]-r(t[f+c-a],0,0)+256&255}else{if(2==s)for(c=0;c<o;c++)e[l+c]=t[f+c]+256-t[f+c-o]&255;if(3==s){for(c=0;c<a;c++)e[l+c]=t[f+c]+256-(t[f+c-o]>>1)&255;for(c=a;c<o;c++)e[l+c]=t[f+c]+256-(t[f+c-o]+t[f+c-a]>>1)&255}if(4==s){for(c=0;c<a;c++)e[l+c]=t[f+c]+256-r(0,t[f+c-o],0)&255;for(c=a;c<o;c++)e[l+c]=t[f+c]+256-r(t[f+c-a],t[f+c-o],t[f+c-a-o])&255}}}function quantize(e,t){const r=new Uint8Array(e),i=r.slice(0),o=new Uint32Array(i.buffer),a=getKDtree(i,t),s=a[0],f=a[1],l=r.length,c=new Uint8Array(l>>2);let u;if(r.length<2e7)for(var h=0;h<l;h+=4){u=getNearest(s,d=r[h]*(1/255),A=r[h+1]*(1/255),g=r[h+2]*(1/255),p=r[h+3]*(1/255)),c[h>>2]=u.ind,o[h>>2]=u.est.rgba}else for(h=0;h<l;h+=4){var d=r[h]*(1/255),A=r[h+1]*(1/255),g=r[h+2]*(1/255),p=r[h+3]*(1/255);for(u=s;u.left;)u=planeDst(u.est,d,A,g,p)<=0?u.left:u.right;c[h>>2]=u.ind,o[h>>2]=u.est.rgba}return{abuf:i.buffer,inds:c,plte:f}}function getKDtree(e,t,r){null==r&&(r=1e-4);const i=new Uint32Array(e.buffer),o={i0:0,i1:e.length,bst:null,est:null,tdst:0,left:null,right:null};o.bst=stats(e,o.i0,o.i1),o.est=estats(o.bst);const a=[o];for(;a.length<t;){let t=0,o=0;for(var s=0;s<a.length;s++)a[s].est.L>t&&(t=a[s].est.L,o=s);if(t<r)break;const f=a[o],l=splitPixels(e,i,f.i0,f.i1,f.est.e,f.est.eMq255);if(f.i0>=l||f.i1<=l){f.est.L=0;continue}const c={i0:f.i0,i1:l,bst:null,est:null,tdst:0,left:null,right:null};c.bst=stats(e,c.i0,c.i1),c.est=estats(c.bst);const u={i0:l,i1:f.i1,bst:null,est:null,tdst:0,left:null,right:null};u.bst={R:[],m:[],N:f.bst.N-c.bst.N};for(s=0;s<16;s++)u.bst.R[s]=f.bst.R[s]-c.bst.R[s];for(s=0;s<4;s++)u.bst.m[s]=f.bst.m[s]-c.bst.m[s];u.est=estats(u.bst),f.left=c,f.right=u,a[o]=c,a.push(u)}a.sort(((e,t)=>t.bst.N-e.bst.N));for(s=0;s<a.length;s++)a[s].ind=s;return[o,a]}function getNearest(e,t,r,i,o){if(null==e.left)return e.tdst=function dist(e,t,r,i,o){const a=t-e[0],s=r-e[1],f=i-e[2],l=o-e[3];return a*a+s*s+f*f+l*l}(e.est.q,t,r,i,o),e;const a=planeDst(e.est,t,r,i,o);let s=e.left,f=e.right;a>0&&(s=e.right,f=e.left);const l=getNearest(s,t,r,i,o);if(l.tdst<=a*a)return l;const c=getNearest(f,t,r,i,o);return c.tdst<l.tdst?c:l}function planeDst(e,t,r,i,o){const{e:a}=e;return a[0]*t+a[1]*r+a[2]*i+a[3]*o-e.eMq}function splitPixels(e,t,r,i,o,a){for(i-=4;r<i;){for(;vecDot(e,r,o)<=a;)r+=4;for(;vecDot(e,i,o)>a;)i-=4;if(r>=i)break;const s=t[r>>2];t[r>>2]=t[i>>2],t[i>>2]=s,r+=4,i-=4}for(;vecDot(e,r,o)>a;)r-=4;return r+4}function vecDot(e,t,r){return e[t]*r[0]+e[t+1]*r[1]+e[t+2]*r[2]+e[t+3]*r[3]}function stats(e,t,r){const i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],o=[0,0,0,0],a=r-t>>2;for(let a=t;a<r;a+=4){const t=e[a]*(1/255),r=e[a+1]*(1/255),s=e[a+2]*(1/255),f=e[a+3]*(1/255);o[0]+=t,o[1]+=r,o[2]+=s,o[3]+=f,i[0]+=t*t,i[1]+=t*r,i[2]+=t*s,i[3]+=t*f,i[5]+=r*r,i[6]+=r*s,i[7]+=r*f,i[10]+=s*s,i[11]+=s*f,i[15]+=f*f}return i[4]=i[1],i[8]=i[2],i[9]=i[6],i[12]=i[3],i[13]=i[7],i[14]=i[11],{R:i,m:o,N:a}}function estats(e){const{R:t}=e,{m:r}=e,{N:i}=e,a=r[0],s=r[1],f=r[2],l=r[3],c=0==i?0:1/i,u=[t[0]-a*a*c,t[1]-a*s*c,t[2]-a*f*c,t[3]-a*l*c,t[4]-s*a*c,t[5]-s*s*c,t[6]-s*f*c,t[7]-s*l*c,t[8]-f*a*c,t[9]-f*s*c,t[10]-f*f*c,t[11]-f*l*c,t[12]-l*a*c,t[13]-l*s*c,t[14]-l*f*c,t[15]-l*l*c],h=u,d=o;let A=[Math.random(),Math.random(),Math.random(),Math.random()],g=0,p=0;if(0!=i)for(let e=0;e<16&&(A=d.multVec(h,A),p=Math.sqrt(d.dot(A,A)),A=d.sml(1/p,A),!(0!=e&&Math.abs(p-g)<1e-9));e++)g=p;const m=[a*c,s*c,f*c,l*c];return{Cov:u,q:m,e:A,L:g,eMq255:d.dot(d.sml(255,m),A),eMq:d.dot(A,m),rgba:(Math.round(255*m[3])<<24|Math.round(255*m[2])<<16|Math.round(255*m[1])<<8|Math.round(255*m[0])<<0)>>>0}}var o={multVec:(e,t)=>[e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7]*t[3],e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11]*t[3],e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]*t[3]],dot:(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],sml:(e,t)=>[e*t[0],e*t[1],e*t[2],e*t[3]]};UPNG.encode=function encode(e,t,r,i,o,a,s){null==i&&(i=0),null==s&&(s=!1);const f=compress(e,t,r,i,[!1,!1,!1,0,s,!1]);return compressPNG(f,-1),_main(f,t,r,o,a)},UPNG.encodeLL=function encodeLL(e,t,r,i,o,a,s,f){const l={ctype:0+(1==i?0:2)+(0==o?0:4),depth:a,frames:[]},c=(i+o)*a,u=c*t;for(let i=0;i<e.length;i++)l.frames.push({rect:{x:0,y:0,width:t,height:r},img:new Uint8Array(e[i]),blend:0,dispose:1,bpp:Math.ceil(c/8),bpl:Math.ceil(u/8)});return compressPNG(l,0,!0),_main(l,t,r,s,f)},UPNG.encode.compress=compress,UPNG.encode.dither=dither,UPNG.quantize=quantize,UPNG.quantize.getKDtree=getKDtree,UPNG.quantize.getNearest=getNearest}();const r={toArrayBuffer(e,t){const i=e.width,o=e.height,a=i<<2,s=e.getContext(\"2d\").getImageData(0,0,i,o),f=new Uint32Array(s.data.buffer),l=(32*i+31)/32<<2,c=l*o,u=122+c,h=new ArrayBuffer(u),d=new DataView(h),A=1<<20;let g,p,m,w,v=A,b=0,y=0,E=0;function set16(e){d.setUint16(y,e,!0),y+=2}function set32(e){d.setUint32(y,e,!0),y+=4}function seek(e){y+=e}set16(19778),set32(u),seek(4),set32(122),set32(108),set32(i),set32(-o>>>0),set16(1),set16(32),set32(3),set32(c),set32(2835),set32(2835),seek(8),set32(16711680),set32(65280),set32(255),set32(4278190080),set32(1466527264),function convert(){for(;b<o&&v>0;){for(w=122+b*l,g=0;g<a;)v--,p=f[E++],m=p>>>24,d.setUint32(w+g,p<<8|m),g+=4;b++}E<f.length?(v=A,setTimeout(convert,r._dly)):t(h)}()},toBlob(e,t){this.toArrayBuffer(e,(e=>{t(new Blob([e],{type:\"image/bmp\"}))}))},_dly:9};var i={CHROME:\"CHROME\",FIREFOX:\"FIREFOX\",DESKTOP_SAFARI:\"DESKTOP_SAFARI\",IE:\"IE\",IOS:\"IOS\",ETC:\"ETC\"},o={[i.CHROME]:16384,[i.FIREFOX]:11180,[i.DESKTOP_SAFARI]:16384,[i.IE]:8192,[i.IOS]:4096,[i.ETC]:8192};const a=\"undefined\"!=typeof window,s=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,f=a&&window.cordova&&window.cordova.require&&window.cordova.require(\"cordova/modulemapper\"),CustomFile=(a||s)&&(f&&f.getOriginalSymbol(window,\"File\")||\"undefined\"!=typeof File&&File),CustomFileReader=(a||s)&&(f&&f.getOriginalSymbol(window,\"FileReader\")||\"undefined\"!=typeof FileReader&&FileReader);function getFilefromDataUrl(e,t,r=Date.now()){return new Promise((i=>{const o=e.split(\",\"),a=o[0].match(/:(.*?);/)[1],s=globalThis.atob(o[1]);let f=s.length;const l=new Uint8Array(f);for(;f--;)l[f]=s.charCodeAt(f);const c=new Blob([l],{type:a});c.name=t,c.lastModified=r,i(c)}))}function getDataUrlFromFile(e){return new Promise(((t,r)=>{const i=new CustomFileReader;i.onload=()=>t(i.result),i.onerror=e=>r(e),i.readAsDataURL(e)}))}function loadImage(e){return new Promise(((t,r)=>{const i=new Image;i.onload=()=>t(i),i.onerror=e=>r(e),i.src=e}))}function getBrowserName(){if(void 0!==getBrowserName.cachedResult)return getBrowserName.cachedResult;let e=i.ETC;const{userAgent:t}=navigator;return/Chrom(e|ium)/i.test(t)?e=i.CHROME:/iP(ad|od|hone)/i.test(t)&&/WebKit/i.test(t)?e=i.IOS:/Safari/i.test(t)?e=i.DESKTOP_SAFARI:/Firefox/i.test(t)?e=i.FIREFOX:(/MSIE/i.test(t)||!0==!!document.documentMode)&&(e=i.IE),getBrowserName.cachedResult=e,getBrowserName.cachedResult}function approximateBelowMaximumCanvasSizeOfBrowser(e,t){const r=getBrowserName(),i=o[r];let a=e,s=t,f=a*s;const l=a>s?s/a:a/s;for(;f>i*i;){const e=(i+a)/2,t=(i+s)/2;e<t?(s=t,a=t*l):(s=e*l,a=e),f=a*s}return{width:a,height:s}}function getNewCanvasAndCtx(e,t){let r,i;try{if(r=new OffscreenCanvas(e,t),i=r.getContext(\"2d\"),null===i)throw new Error(\"getContext of OffscreenCanvas returns null\")}catch(e){r=document.createElement(\"canvas\"),i=r.getContext(\"2d\")}return r.width=e,r.height=t,[r,i]}function drawImageInCanvas(e,t){const{width:r,height:i}=approximateBelowMaximumCanvasSizeOfBrowser(e.width,e.height),[o,a]=getNewCanvasAndCtx(r,i);return t&&/jpe?g/.test(t)&&(a.fillStyle=\"white\",a.fillRect(0,0,o.width,o.height)),a.drawImage(e,0,0,o.width,o.height),o}function isIOS(){return void 0!==isIOS.cachedResult||(isIOS.cachedResult=[\"iPad Simulator\",\"iPhone Simulator\",\"iPod Simulator\",\"iPad\",\"iPhone\",\"iPod\"].includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"undefined\"!=typeof document&&\"ontouchend\"in document),isIOS.cachedResult}function drawFileInCanvas(e,t={}){return new Promise((function(r,o){let a,s;var $Try_2_Post=function(){try{return s=drawImageInCanvas(a,t.fileType||e.type),r([a,s])}catch(e){return o(e)}},$Try_2_Catch=function(t){try{0;var $Try_3_Catch=function(e){try{throw e}catch(e){return o(e)}};try{let t;return getDataUrlFromFile(e).then((function(e){try{return t=e,loadImage(t).then((function(e){try{return a=e,function(){try{return $Try_2_Post()}catch(e){return o(e)}}()}catch(e){return $Try_3_Catch(e)}}),$Try_3_Catch)}catch(e){return $Try_3_Catch(e)}}),$Try_3_Catch)}catch(e){$Try_3_Catch(e)}}catch(e){return o(e)}};try{if(isIOS()||[i.DESKTOP_SAFARI,i.MOBILE_SAFARI].includes(getBrowserName()))throw new Error(\"Skip createImageBitmap on IOS and Safari\");return createImageBitmap(e).then((function(e){try{return a=e,$Try_2_Post()}catch(e){return $Try_2_Catch()}}),$Try_2_Catch)}catch(e){$Try_2_Catch()}}))}function canvasToFile(e,t,i,o,a=1){return new Promise((function(s,f){let l;if(\"image/png\"===t){let c,u,h;return c=e.getContext(\"2d\"),({data:u}=c.getImageData(0,0,e.width,e.height)),h=UPNG.encode([u.buffer],e.width,e.height,4096*a),l=new Blob([h],{type:t}),l.name=i,l.lastModified=o,$If_4.call(this)}{if(\"image/bmp\"===t)return new Promise((t=>r.toBlob(e,t))).then(function(e){try{return l=e,l.name=i,l.lastModified=o,$If_5.call(this)}catch(e){return f(e)}}.bind(this),f);{if(\"function\"==typeof OffscreenCanvas&&e instanceof OffscreenCanvas)return e.convertToBlob({type:t,quality:a}).then(function(e){try{return l=e,l.name=i,l.lastModified=o,$If_6.call(this)}catch(e){return f(e)}}.bind(this),f);{let d;return d=e.toDataURL(t,a),getFilefromDataUrl(d,i,o).then(function(e){try{return l=e,$If_6.call(this)}catch(e){return f(e)}}.bind(this),f)}function $If_6(){return $If_5.call(this)}}function $If_5(){return $If_4.call(this)}}function $If_4(){return s(l)}}))}function cleanupCanvasMemory(e){e.width=0,e.height=0}function isAutoOrientationInBrowser(){return new Promise((function(e,t){let r,i,o,a,s;return void 0!==isAutoOrientationInBrowser.cachedResult?e(isAutoOrientationInBrowser.cachedResult):(r=\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",getFilefromDataUrl(\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",\"test.jpg\",Date.now()).then((function(r){try{return i=r,drawFileInCanvas(i).then((function(r){try{return o=r[1],canvasToFile(o,i.type,i.name,i.lastModified).then((function(r){try{return a=r,cleanupCanvasMemory(o),drawFileInCanvas(a).then((function(r){try{return s=r[0],isAutoOrientationInBrowser.cachedResult=1===s.width&&2===s.height,e(isAutoOrientationInBrowser.cachedResult)}catch(e){return t(e)}}),t)}catch(e){return t(e)}}),t)}catch(e){return t(e)}}),t)}catch(e){return t(e)}}),t))}))}function getExifOrientation(e){return new Promise(((t,r)=>{const i=new CustomFileReader;i.onload=e=>{const r=new DataView(e.target.result);if(65496!=r.getUint16(0,!1))return t(-2);const i=r.byteLength;let o=2;for(;o<i;){if(r.getUint16(o+2,!1)<=8)return t(-1);const e=r.getUint16(o,!1);if(o+=2,65505==e){if(1165519206!=r.getUint32(o+=2,!1))return t(-1);const e=18761==r.getUint16(o+=6,!1);o+=r.getUint32(o+4,e);const i=r.getUint16(o,e);o+=2;for(let a=0;a<i;a++)if(274==r.getUint16(o+12*a,e))return t(r.getUint16(o+12*a+8,e))}else{if(65280!=(65280&e))break;o+=r.getUint16(o,!1)}}return t(-1)},i.onerror=e=>r(e),i.readAsArrayBuffer(e)}))}function handleMaxWidthOrHeight(e,t){const{width:r}=e,{height:i}=e,{maxWidthOrHeight:o}=t;let a,s=e;return isFinite(o)&&(r>o||i>o)&&([s,a]=getNewCanvasAndCtx(r,i),r>i?(s.width=o,s.height=i/r*o):(s.width=r/i*o,s.height=o),a.drawImage(e,0,0,s.width,s.height),cleanupCanvasMemory(e)),s}function followExifOrientation(e,t){const{width:r}=e,{height:i}=e,[o,a]=getNewCanvasAndCtx(r,i);switch(t>4&&t<9?(o.width=i,o.height=r):(o.width=r,o.height=i),t){case 2:a.transform(-1,0,0,1,r,0);break;case 3:a.transform(-1,0,0,-1,r,i);break;case 4:a.transform(1,0,0,-1,0,i);break;case 5:a.transform(0,1,1,0,0,0);break;case 6:a.transform(0,1,-1,0,i,0);break;case 7:a.transform(0,-1,-1,0,i,r);break;case 8:a.transform(0,-1,1,0,0,r)}return a.drawImage(e,0,0,r,i),cleanupCanvasMemory(e),o}function compress(e,t,r=0){return new Promise((function(i,o){let a,s,f,l,c,u,h,d,A,g,p,m,w,v,b,y,E,F,_,B;function incProgress(e=5){if(t.signal&&t.signal.aborted)throw t.signal.reason;a+=e,t.onProgress(Math.min(a,100))}function setProgress(e){if(t.signal&&t.signal.aborted)throw t.signal.reason;a=Math.min(Math.max(e,a),100),t.onProgress(a)}return a=r,s=t.maxIteration||10,f=1024*t.maxSizeMB*1024,incProgress(),drawFileInCanvas(e,t).then(function(r){try{return[,l]=r,incProgress(),c=handleMaxWidthOrHeight(l,t),incProgress(),new Promise((function(r,i){var o;if(!(o=t.exifOrientation))return getExifOrientation(e).then(function(e){try{return o=e,$If_2.call(this)}catch(e){return i(e)}}.bind(this),i);function $If_2(){return r(o)}return $If_2.call(this)})).then(function(r){try{return u=r,incProgress(),isAutoOrientationInBrowser().then(function(r){try{return h=r?c:followExifOrientation(c,u),incProgress(),d=t.initialQuality||1,A=t.fileType||e.type,canvasToFile(h,A,e.name,e.lastModified,d).then(function(r){try{{if(g=r,incProgress(),p=g.size>f,m=g.size>e.size,!p&&!m)return setProgress(100),i(g);var a;function $Loop_3(){if(s--&&(b>f||b>w)){let t,r;return t=B?.95*_.width:_.width,r=B?.95*_.height:_.height,[E,F]=getNewCanvasAndCtx(t,r),F.drawImage(_,0,0,t,r),d*=\"image/png\"===A?.85:.95,canvasToFile(E,A,e.name,e.lastModified,d).then((function(e){try{return y=e,cleanupCanvasMemory(_),_=E,b=y.size,setProgress(Math.min(99,Math.floor((v-b)/(v-f)*100))),$Loop_3}catch(e){return o(e)}}),o)}return[1]}return w=e.size,v=g.size,b=v,_=h,B=!t.alwaysKeepResolution&&p,(a=function(e){for(;e;){if(e.then)return void e.then(a,o);try{if(e.pop){if(e.length)return e.pop()?$Loop_3_exit.call(this):e;e=$Loop_3}else e=e.call(this)}catch(e){return o(e)}}}.bind(this))($Loop_3);function $Loop_3_exit(){return cleanupCanvasMemory(_),cleanupCanvasMemory(E),cleanupCanvasMemory(c),cleanupCanvasMemory(h),cleanupCanvasMemory(l),setProgress(100),i(y)}}}catch(u){return o(u)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}))}const l=\"\\nlet scriptImported = false\\nself.addEventListener('message', async (e) => {\\n const { file, id, imageCompressionLibUrl, options } = e.data\\n options.onProgress = (progress) => self.postMessage({ progress, id })\\n try {\\n if (!scriptImported) {\\n // console.log('[worker] importScripts', imageCompressionLibUrl)\\n self.importScripts(imageCompressionLibUrl)\\n scriptImported = true\\n }\\n // console.log('[worker] self', self)\\n const compressedFile = await imageCompression(file, options)\\n self.postMessage({ file: compressedFile, id })\\n } catch (e) {\\n // console.error('[worker] error', e)\\n self.postMessage({ error: e.message + '\\\\n' + e.stack, id })\\n }\\n})\\n\";let c;function compressOnWebWorker(e,t){return new Promise(((r,i)=>{c||(c=function createWorkerScriptURL(e){const t=[];return\"function\"==typeof e?t.push(`(${e})()`):t.push(e),URL.createObjectURL(new Blob(t))}(l));const o=new Worker(c);o.addEventListener(\"message\",(function handler(e){if(t.signal&&t.signal.aborted)o.terminate();else if(void 0===e.data.progress){if(e.data.error)return i(new Error(e.data.error)),void o.terminate();r(e.data.file),o.terminate()}else t.onProgress(e.data.progress)})),o.addEventListener(\"error\",i),t.signal&&t.signal.addEventListener(\"abort\",(()=>{i(t.signal.reason),o.terminate()})),o.postMessage({file:e,imageCompressionLibUrl:t.libURL,options:{...t,onProgress:void 0,signal:void 0}})}))}function imageCompression(e,t){return new Promise((function(r,i){let o,a,s,f,l,c;if(o={...t},s=0,({onProgress:f}=o),o.maxSizeMB=o.maxSizeMB||Number.POSITIVE_INFINITY,l=\"boolean\"!=typeof o.useWebWorker||o.useWebWorker,delete o.useWebWorker,o.onProgress=e=>{s=e,\"function\"==typeof f&&f(s)},!(e instanceof Blob||e instanceof CustomFile))return i(new Error(\"The file given is not an instance of Blob or File\"));if(!/^image/.test(e.type))return i(new Error(\"The file given is not an image\"));if(c=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,!l||\"function\"!=typeof Worker||c)return compress(e,o).then(function(e){try{return a=e,$If_4.call(this)}catch(e){return i(e)}}.bind(this),i);var u=function(){try{return $If_4.call(this)}catch(e){return i(e)}}.bind(this),$Try_1_Catch=function(t){try{return compress(e,o).then((function(e){try{return a=e,u()}catch(e){return i(e)}}),i)}catch(e){return i(e)}};try{return o.libURL=o.libURL||\"https://cdn.jsdelivr.net/npm/browser-image-compression@2.0.2/dist/browser-image-compression.js\",compressOnWebWorker(e,o).then((function(e){try{return a=e,u()}catch(e){return $Try_1_Catch()}}),$Try_1_Catch)}catch(e){$Try_1_Catch()}function $If_4(){try{a.name=e.name,a.lastModified=e.lastModified}catch(e){}try{o.preserveExif&&\"image/jpeg\"===e.type&&(!o.fileType||o.fileType&&o.fileType===e.type)&&(a=copyExifWithoutOrientation(e,a))}catch(e){}return r(a)}}))}imageCompression.getDataUrlFromFile=getDataUrlFromFile,imageCompression.getFilefromDataUrl=getFilefromDataUrl,imageCompression.loadImage=loadImage,imageCompression.drawImageInCanvas=drawImageInCanvas,imageCompression.drawFileInCanvas=drawFileInCanvas,imageCompression.canvasToFile=canvasToFile,imageCompression.getExifOrientation=getExifOrientation,imageCompression.handleMaxWidthOrHeight=handleMaxWidthOrHeight,imageCompression.followExifOrientation=followExifOrientation,imageCompression.cleanupCanvasMemory=cleanupCanvasMemory,imageCompression.isAutoOrientationInBrowser=isAutoOrientationInBrowser,imageCompression.approximateBelowMaximumCanvasSizeOfBrowser=approximateBelowMaximumCanvasSizeOfBrowser,imageCompression.copyExifWithoutOrientation=copyExifWithoutOrientation,imageCompression.getBrowserName=getBrowserName,imageCompression.version=\"2.0.2\";export{imageCompression as default};\n//# sourceMappingURL=browser-image-compression.mjs.map\n","import { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelImage } from '../objects/image.class';\r\nimport { KritzelStore } from '../store.class';\r\nimport { KritzelBaseTool } from './base-tool.class';\r\nimport { AddObjectCommand } from '../commands/add-object.command';\r\nimport { BatchCommand } from '../commands/batch.command';\r\nimport { AddSelectionGroupCommand } from '../commands/add-selection-group.command';\r\nimport imageCompression from 'browser-image-compression';\r\nimport { KritzelToolRegistry } from '../registries/tool.registry';\r\n\r\nexport class KritzelImageTool extends KritzelBaseTool {\r\n fileInput: HTMLInputElement | null = null;\r\n\r\n maxWidth: number = 300;\r\n maxHeight: number = 300;\r\n\r\n maxCompressionSize: number = 300;\r\n\r\n constructor(store: KritzelStore) {\r\n super(store);\r\n this.setupFileInput();\r\n }\r\n\r\n override onActivate(): void {\r\n this.openFilePicker();\r\n }\r\n\r\n private openFilePicker(): void {\r\n this.fileInput.click();\r\n }\r\n\r\n private setupFileInput(): void {\r\n this.fileInput = document.createElement('input');\r\n this.fileInput.type = 'file';\r\n this.fileInput.accept = 'image/*';\r\n this.fileInput.style.display = 'none';\r\n\r\n this.fileInput.addEventListener('change', this.handleFileSelect.bind(this));\r\n this.fileInput.addEventListener('cancel', this.handleCancel.bind(this));\r\n document.body.appendChild(this.fileInput);\r\n }\r\n\r\n private handleFileSelect(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files && input.files[0]) {\r\n const file = input.files[0];\r\n imageCompression(file, {\r\n maxWidthOrHeight: this.maxCompressionSize,\r\n })\r\n .then(compressedFile => {\r\n this.readFile(compressedFile);\r\n })\r\n .catch(error => {\r\n console.error('Error during image compression or processing:', error);\r\n this.handleCancel();\r\n });\r\n } else {\r\n console.info('File selection cancelled by user.');\r\n this.handleCancel();\r\n }\r\n\r\n if (input) {\r\n input.value = '';\r\n }\r\n }\r\n\r\n private readFile(file: File): void {\r\n const reader = new FileReader();\r\n reader.onload = e => {\r\n const img = new Image();\r\n img.src = e.target?.result as string;\r\n img.onload = () => this.processImage(img);\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n\r\n private processImage(img: HTMLImageElement): void {\r\n const { scaledWidth, scaledHeight } = this.calculateScaledDimensions(img);\r\n const image = this.createKritzelImage(img, scaledWidth, scaledHeight);\r\n this.addImageToStore(image);\r\n }\r\n\r\n private calculateScaledDimensions(img: HTMLImageElement): { scaledWidth: number; scaledHeight: number } {\r\n let scaledWidth = img.width;\r\n let scaledHeight = img.height;\r\n\r\n if (img.width > this.maxWidth || img.height > this.maxHeight) {\r\n const widthRatio = this.maxWidth / img.width;\r\n const heightRatio = this.maxHeight / img.height;\r\n const scaleRatio = Math.min(widthRatio, heightRatio);\r\n\r\n scaledWidth = img.width * scaleRatio;\r\n scaledHeight = img.height * scaleRatio;\r\n }\r\n\r\n return { scaledWidth, scaledHeight };\r\n }\r\n\r\n private createKritzelImage(img: HTMLImageElement, width: number, height: number): KritzelImage {\r\n const image = KritzelImage.create(this._store);\r\n image.src = img.src;\r\n image.width = width;\r\n image.height = height;\r\n image.zIndex = this._store.currentZIndex;\r\n image.centerInViewport();\r\n return image;\r\n }\r\n\r\n private addImageToStore(image: KritzelImage): void {\r\n const selectionGroup = KritzelSelectionGroup.create(this._store);\r\n selectionGroup.addOrRemove(image);\r\n selectionGroup.selected = true;\r\n\r\n const addImageCommand = new AddObjectCommand(this._store, this, image);\r\n const addSelectionGroupCommand = new AddSelectionGroupCommand(this._store, this, selectionGroup);\r\n\r\n this._store.history.executeCommand(new BatchCommand(this._store, this, [addImageCommand, addSelectionGroupCommand]));\r\n\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n }\r\n\r\n private handleCancel(): void {\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n }\r\n}\r\n","import { KritzelBrushTool } from '../classes/tools/brush-tool.class';\r\nimport { KritzelEraserTool } from '../classes/tools/eraser-tool.class';\r\nimport { KritzelImageTool } from '../classes/tools/image-tool.class';\r\nimport { KritzelSelectionTool } from '../classes/tools/selection-tool.class';\r\nimport { KritzelTextTool } from '../classes/tools/text-tool.class';\r\nimport { KritzelBrushToolConfig, KritzelTextToolConfig, KritzelToolbarControl } from '../interfaces/toolbar-control.interface';\r\n\r\nexport const DEFAULT_BRUSH_CONFIG: KritzelBrushToolConfig = {\r\n type: 'pen',\r\n color: '#000000',\r\n size: 16,\r\n palettes: {\r\n pen: [\r\n '#000000',\r\n '#ff5252',\r\n '#ffbc00',\r\n '#00c853',\r\n '#0000FF',\r\n '#d500f9',\r\n '#fafafa',\r\n '#a52714',\r\n '#ee8100',\r\n '#558b2f',\r\n '#01579b',\r\n '#8e24aa',\r\n '#90a4ae',\r\n '#ff4081',\r\n '#ff6e40',\r\n '#aeea00',\r\n '#304ffe',\r\n '#7c4dff',\r\n '#cfd8dc',\r\n '#f8bbd0',\r\n '#ffccbc',\r\n '#f0f4c3',\r\n '#9fa8da',\r\n '#d1c4e9',\r\n ],\r\n highlighter: [\r\n '#0000006e',\r\n '#ff52526e',\r\n '#ffbb006e',\r\n '#00c8536e',\r\n '#0000FF6e',\r\n '#d500f96e',\r\n '#fafafa6e',\r\n '#a527146e',\r\n '#ee81006e',\r\n '#558b2f6e',\r\n '#01579b6e',\r\n '#8e24aa6e',\r\n '#90a4ae6e',\r\n '#ff40816e',\r\n '#ff6e406e',\r\n '#aeea006e',\r\n '#304ffe6e',\r\n '#7c4dff6e',\r\n '#cfd8dc6e',\r\n '#f8bbd06e',\r\n '#ffccbc6e',\r\n '#f0f4c36e',\r\n '#9fa8da6e',\r\n '#d1c4e96e',\r\n ],\r\n },\r\n};\r\n\r\nexport const DEFAULT_TEXT_CONFIG: KritzelTextToolConfig = {\r\n color: '#000000',\r\n size: 8,\r\n fontFamily: 'Arial',\r\n palette: [\r\n '#000000',\r\n '#ff5252',\r\n '#ffbc00',\r\n '#00c853',\r\n '#0000FF',\r\n '#d500f9',\r\n '#fafafa',\r\n '#a52714',\r\n '#ee8100',\r\n '#558b2f',\r\n '#01579b',\r\n '#8e24aa',\r\n '#90a4ae',\r\n '#ff4081',\r\n '#ff6e40',\r\n '#aeea00',\r\n '#304ffe',\r\n '#7c4dff',\r\n '#cfd8dc',\r\n '#f8bbd0',\r\n '#ffccbc',\r\n '#f0f4c3',\r\n '#9fa8da',\r\n '#d1c4e9',\r\n ],\r\n};\r\n\r\nexport const DEFAULT_KRITZEL_CONTROLS: KritzelToolbarControl[] = [\r\n {\r\n name: 'selection',\r\n type: 'tool',\r\n tool: KritzelSelectionTool,\r\n icon: 'cursor',\r\n },\r\n {\r\n name: 'brush',\r\n type: 'tool',\r\n tool: KritzelBrushTool,\r\n isDefault: true,\r\n icon: 'pen',\r\n config: DEFAULT_BRUSH_CONFIG,\r\n },\r\n {\r\n name: 'eraser',\r\n type: 'tool',\r\n tool: KritzelEraserTool,\r\n icon: 'eraser',\r\n },\r\n {\r\n name: 'text',\r\n type: 'tool',\r\n tool: KritzelTextTool,\r\n icon: 'type',\r\n config: DEFAULT_TEXT_CONFIG,\r\n },\r\n {\r\n name: 'image',\r\n type: 'tool',\r\n tool: KritzelImageTool,\r\n icon: 'image',\r\n },\r\n {\r\n name: 'divider',\r\n type: 'divider',\r\n },\r\n {\r\n name: 'config',\r\n type: 'config',\r\n },\r\n];\r\n","kritzel-editor{\r\n display: flex;\r\n margin: 0;\r\n position: relative;\r\n overflow: hidden;\r\n width: 100%;\r\n height: 100%;\r\n align-items: center;\r\n justify-content: center;\r\n touch-action: manipulation;\r\n user-select: none;\r\n -webkit-touch-callout: none;\r\n -webkit-user-select: none;\r\n -khtml-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none; \r\n}\r\n\r\n\r\nkritzel-controls {\r\n position: absolute;\r\n bottom: 28px;\r\n}","import { Component, Host, Listen, Prop, Element, h, Method, Event, EventEmitter } from '@stencil/core';\r\nimport { KritzelIconRegistry } from '../../../classes/registries/icon-registry.class';\r\nimport { KritzelToolbarControl } from '../../../interfaces/toolbar-control.interface';\r\nimport { DEFAULT_KRITZEL_CONTROLS } from '../../../configs/default-toolbar-controls';\r\nimport { KritzelBaseObject } from '../../../classes/objects/base-object.class';\r\n@Component({\r\n tag: 'kritzel-editor',\r\n styleUrl: 'kritzel-editor.css',\r\n shadow: false,\r\n})\r\nexport class KritzelEditor {\r\n @Prop()\r\n controls: KritzelToolbarControl[] = DEFAULT_KRITZEL_CONTROLS;\r\n\r\n @Prop()\r\n customSvgIcons: Record<string, string> = {};\r\n\r\n @Prop()\r\n hideControls: boolean = false;\r\n\r\n @Event()\r\n isReady: EventEmitter<boolean>;\r\n\r\n @Element()\r\n host!: HTMLElement;\r\n\r\n @Method()\r\n async getObjectById<T extends KritzelBaseObject>(id: string): Promise<T | null> {\r\n return this.engineRef.getObjectById(id);\r\n }\r\n\r\n @Method()\r\n async addObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n return this.engineRef.addObject(object);\r\n }\r\n\r\n @Method()\r\n async updateObject<T extends KritzelBaseObject>(object: T, updatedProperties: Partial<T>): Promise<T | null> {\r\n return this.engineRef.updateObject(object, updatedProperties);\r\n }\r\n\r\n @Method()\r\n async removeObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n return this.engineRef.removeObject(object);\r\n }\r\n\r\n @Method()\r\n async getSelectedObjects(): Promise<KritzelBaseObject[]> {\r\n return this.engineRef.getSelectedObjects();\r\n }\r\n\r\n @Method()\r\n async selectObjects(objects: KritzelBaseObject[]) {\r\n return this.engineRef.selectObjects(objects);\r\n }\r\n\r\n @Method()\r\n async selectAllObjectsInViewport() {\r\n return this.engineRef.selectAllObjectsInViewport();\r\n }\r\n\r\n @Method()\r\n async clearSelection() {\r\n this.engineRef.clearSelection();\r\n }\r\n\r\n @Listen('dblclick', { passive: false })\r\n handleTouchStart(event: TouchEvent) {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n @Listen('keydown', { target: 'window' })\r\n handleKeyDown(event) {\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.controlsRef?.closeTooltip();\r\n }\r\n }\r\n\r\n engineRef!: HTMLKritzelEngineElement;\r\n\r\n controlsRef!: HTMLKritzelControlsElement;\r\n\r\n async onEngineReady() {\r\n await customElements.whenDefined('kritzel-editor');\r\n await customElements.whenDefined('kritzel-controls');\r\n await customElements.whenDefined('kritzel-engine');\r\n\r\n this.registerCustomSvgIcons();\r\n\r\n console.log('Editor in stencil is read');\r\n this.isReady.emit();\r\n }\r\n\r\n private registerCustomSvgIcons() {\r\n for (const [name, svg] of Object.entries(this.customSvgIcons)) {\r\n KritzelIconRegistry.register(name, svg);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <kritzel-engine ref={el => (this.engineRef = el)} onIsEngineReady={() => this.onEngineReady()}></kritzel-engine>\r\n <kritzel-controls ref={el => (this.controlsRef = el)} controls={this.controls} style={this.hideControls ? { display: 'none' } : { display: 'flex' }}></kritzel-controls>\r\n </Host>\r\n );\r\n }\r\n}\r\n","import { KritzelMouseButton } from '../enums/event-button.enum';\r\nimport { KritzelEventHelper } from '../helpers/event.helper';\r\nimport { KritzelStore } from './store.class';\r\n\r\nexport class KritzelViewport {\r\n private readonly _store: KritzelStore;\r\n\r\n initialTouchDistance: number = 0;\r\n startX: number = 0;\r\n startY: number = 0;\r\n\r\n constructor(store: KritzelStore, host: HTMLElement) {\r\n this._store = store;\r\n this._store.state.host = host;\r\n this._store.state.viewportWidth = host.clientWidth;\r\n this._store.state.viewportHeight = host.clientHeight;\r\n this._store.state.startX = 0;\r\n this._store.state.startY = 0;\r\n this._store.state.translateX = 0;\r\n this._store.state.translateY = 0;\r\n }\r\n\r\n handleResize(): void {\r\n this._store.state.viewportWidth = this._store.state.host.clientWidth;\r\n this._store.state.viewportHeight = this._store.state.host.clientHeight;\r\n this._store.state.hasViewportChanged = true;\r\n this._store.rerender();\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n const adjustedClientX = event.clientX - this._store.offsetX;\r\n const adjustedClientY = event.clientY - this._store.offsetY;\r\n\r\n if (event.button === KritzelMouseButton.Right) {\r\n this._store.state.isPanning = true;\r\n this._store.state.startX = adjustedClientX;\r\n this._store.state.startY = adjustedClientY;\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n\r\n if (activePointers.length === 2) {\r\n this._store.state.currentPath = null;\r\n this._store.state.isScaling = true;\r\n\r\n const firstTouchX = activePointers[0].clientX - this._store.offsetX;\r\n const firstTouchY = activePointers[0].clientY - this._store.offsetY;\r\n\r\n const secondTouchX = activePointers[1].clientX - this._store.offsetX;\r\n const secondTouchY = activePointers[1].clientY - this._store.offsetY;\r\n\r\n this.initialTouchDistance = Math.sqrt(Math.pow(firstTouchX - secondTouchX, 2) + Math.pow(firstTouchY - secondTouchY, 2));\r\n\r\n this.startX = (firstTouchX + secondTouchX) / 2;\r\n this.startY = (firstTouchY + secondTouchY) / 2;\r\n this._store.rerender();\r\n }\r\n }\r\n }\r\n\r\n handlePointerMove(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n const adjustedClientX = event.clientX - this._store.offsetX;\r\n const adjustedClientY = event.clientY - this._store.offsetY;\r\n\r\n this._store.state.cursorX = adjustedClientX;\r\n this._store.state.cursorY = adjustedClientY;\r\n\r\n if (this._store.state.isPanning) {\r\n this._store.state.translateX -= this._store.state.startX - adjustedClientX;\r\n this._store.state.translateY -= this._store.state.startY - adjustedClientY;\r\n this._store.state.startX = adjustedClientX;\r\n this._store.state.startY = adjustedClientY;\r\n this._store.state.hasViewportChanged = true;\r\n this._store.state.skipContextMenu = true;\r\n this._store.rerender();\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n const activePointers = Array.from(this._store.state.pointers.values());\r\n\r\n if (activePointers.length === 2) {\r\n const firstTouchX = activePointers[0].clientX - this._store.offsetX;\r\n const firstTouchY = activePointers[0].clientY - this._store.offsetY;\r\n\r\n const secondTouchX = activePointers[1].clientX - this._store.offsetX;\r\n const secondTouchY = activePointers[1].clientY - this._store.offsetY;\r\n\r\n const currentTouchDistance = Math.sqrt(Math.pow(firstTouchX - secondTouchX, 2) + Math.pow(firstTouchY - secondTouchY, 2));\r\n\r\n const midpointX = (firstTouchX + secondTouchX) / 2;\r\n const midpointY = (firstTouchY + secondTouchY) / 2;\r\n\r\n const scaleRatio = currentTouchDistance / this.initialTouchDistance!;\r\n const newScale = this._store.state.scale * scaleRatio;\r\n\r\n if (newScale > this._store.state.scaleMax || newScale < this._store.state.scaleMin) {\r\n this._store.state.translateX += midpointX - this.startX;\r\n this._store.state.translateY += midpointY - this.startY;\r\n } else {\r\n const translateXAdjustment = (midpointX - this._store.state.translateX) * (scaleRatio - 1);\r\n const translateYAdjustment = (midpointY - this._store.state.translateY) * (scaleRatio - 1);\r\n\r\n this._store.state.translateX += midpointX - this.startX - translateXAdjustment;\r\n this._store.state.translateY += midpointY - this.startY - translateYAdjustment;\r\n this._store.state.scale = newScale;\r\n\r\n this.initialTouchDistance = currentTouchDistance;\r\n }\r\n\r\n this.startX = midpointX;\r\n this.startY = midpointY;\r\n\r\n this._store.state.hasViewportChanged = true;\r\n\r\n this._store.rerender();\r\n }\r\n }\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (event.pointerType === 'mouse') {\r\n if (this._store.state.isPanning) {\r\n this._store.state.isPanning = false;\r\n this._store.rerender();\r\n }\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n this._store.state.isScaling = false;\r\n this._store.rerender();\r\n }\r\n }\r\n\r\n handleWheel(event: WheelEvent): void {\r\n event.preventDefault();\r\n\r\n if (event.ctrlKey === true && KritzelEventHelper.isMainMouseWheel(event)) {\r\n this.handleZoom(event);\r\n }\r\n\r\n if (!event.ctrlKey) {\r\n this.handlePan(event);\r\n }\r\n }\r\n\r\n private handleZoom(event: WheelEvent): void {\r\n const rect = this._store.state.host.getBoundingClientRect();\r\n this._store.state.cursorX = event.clientX - rect.left;\r\n this._store.state.cursorY = event.clientY - rect.top;\r\n\r\n const delta = event.deltaY > 0 ? -this._store.state.scaleStep * this._store.state.scale : this._store.state.scaleStep * this._store.state.scale;\r\n const newScale = Math.min(this._store.state.scaleMax, Math.max(this._store.state.scaleMin, this._store.state.scale + delta));\r\n\r\n const scaleRatio = newScale / this._store.state.scale;\r\n const translateXAdjustment = (this._store.state.cursorX - this._store.state.translateX) * (scaleRatio - 1);\r\n const translateYAdjustment = (this._store.state.cursorY - this._store.state.translateY) * (scaleRatio - 1);\r\n\r\n this._store.state.scale = newScale;\r\n\r\n this._store.state.translateX -= translateXAdjustment;\r\n this._store.state.translateY -= translateYAdjustment;\r\n\r\n this._store.state.hasViewportChanged = true;\r\n this._store.rerender();\r\n }\r\n\r\n private handlePan(event: WheelEvent): void {\r\n const panSpeed = 0.8;\r\n\r\n this._store.state.translateX -= event.deltaX * panSpeed;\r\n this._store.state.translateY -= event.deltaY * panSpeed;\r\n\r\n this._store.state.hasViewportChanged = true;\r\n this._store.rerender();\r\n }\r\n}\r\n","import { KritzelBaseCommand } from './base.command';\r\n\r\nexport class UpdateViewportCommand extends KritzelBaseCommand {\r\n\r\n currentViewport: {\r\n scale: number;\r\n translateX: number;\r\n translateY: number;\r\n };\r\n\r\n previousViewport: {\r\n scale: number;\r\n translateX: number;\r\n translateY: number;\r\n };\r\n\r\n constructor(store, initiator: any, previousViewport: {\r\n scale: number;\r\n translateX: number;\r\n translateY: number;\r\n }) {\r\n super(store, initiator);\r\n this.previousViewport = previousViewport\r\n this.currentViewport = {\r\n scale: this._store.state.scale,\r\n translateX: this._store.state.translateX,\r\n translateY: this._store.state.translateY,\r\n };\r\n }\r\n\r\n execute(): void {\r\n this._store.state.scale = this.currentViewport.scale;\r\n this._store.state.translateX = this.currentViewport.translateX;\r\n this._store.state.translateY = this.currentViewport.translateY; \r\n }\r\n\r\n undo(): void {\r\n this._store.state.scale = this.previousViewport.scale;\r\n this._store.state.translateX = this.previousViewport.translateX;\r\n this._store.state.translateY = this.previousViewport.translateY;\r\n }\r\n}\r\n","export class KritzelCircularBuffer<T> {\r\n private buffer: (T | null)[];\r\n private capacity: number;\r\n private head: number = 0;\r\n private tail: number = 0;\r\n private size: number = 0;\r\n\r\n constructor(capacity: number) {\r\n this.capacity = capacity;\r\n this.buffer = new Array(capacity).fill(null);\r\n }\r\n\r\n add(item: T): void {\r\n this.buffer[this.head] = item;\r\n this.head = (this.head + 1) % this.capacity;\r\n\r\n if (this.size < this.capacity) {\r\n this.size++;\r\n } else {\r\n this.tail = (this.tail + 1) % this.capacity;\r\n }\r\n }\r\n\r\n pop(): T | null {\r\n if (this.size === 0) {\r\n return null;\r\n }\r\n\r\n this.head = (this.head - 1 + this.capacity) % this.capacity;\r\n const item = this.buffer[this.head];\r\n this.buffer[this.head] = null;\r\n this.size--;\r\n return item;\r\n }\r\n\r\n peek(): T | null {\r\n if (this.size === 0) {\r\n return null;\r\n }\r\n\r\n const lastIndex = (this.head - 1 + this.capacity) % this.capacity;\r\n return this.buffer[lastIndex];\r\n }\r\n\r\n isEmpty(): boolean {\r\n return this.size === 0;\r\n }\r\n\r\n clear(): void {\r\n this.buffer.fill(null);\r\n this.head = 0;\r\n this.tail = 0;\r\n this.size = 0;\r\n }\r\n}\r\n","import { KritzelBaseCommand } from './commands/base.command';\r\nimport { UpdateViewportCommand } from './commands/update-viewport.command';\r\nimport { KritzelStore } from './store.class';\r\nimport { KritzelCircularBuffer } from './structures/circular-buffer.structure';\r\n\r\nexport class KritzelHistory {\r\n private readonly _store: KritzelStore;\r\n\r\n undoStack: KritzelCircularBuffer<KritzelBaseCommand>;\r\n redoStack: KritzelCircularBuffer<KritzelBaseCommand>;\r\n\r\n previousViewport: {\r\n scale: number;\r\n scaleStep: number;\r\n translateX: number;\r\n translateY: number;\r\n };\r\n\r\n constructor(store: KritzelStore) {\r\n this._store = store;\r\n this.undoStack = new KritzelCircularBuffer<KritzelBaseCommand>(this._store.state.historyBufferSize);\r\n this.redoStack = new KritzelCircularBuffer<KritzelBaseCommand>(this._store.state.historyBufferSize);\r\n this.previousViewport = {\r\n scale: this._store.state.scale,\r\n scaleStep: this._store.state.scaleStep,\r\n translateX: this._store.state.translateX,\r\n translateY: this._store.state.translateY,\r\n };\r\n }\r\n\r\n executeCommand(command: KritzelBaseCommand) {\r\n if (this._store.state.hasViewportChanged) {\r\n const command = new UpdateViewportCommand(this._store, this, this.previousViewport);\r\n command.execute();\r\n this.undoStack.add(command);\r\n\r\n if (this.redoStack.isEmpty() === false) {\r\n this.redoStack.clear();\r\n }\r\n\r\n this._store.state.hasViewportChanged = false;\r\n this.previousViewport = {\r\n scale: this._store.state.scale,\r\n scaleStep: this._store.state.scaleStep,\r\n translateX: this._store.state.translateX,\r\n translateY: this._store.state.translateY,\r\n };\r\n }\r\n\r\n command.execute();\r\n if (this._store.state.debugInfo.logCommands) console.info('add', command);\r\n this.undoStack.add(command);\r\n\r\n if (this.redoStack.isEmpty() === false) {\r\n this.redoStack.clear();\r\n }\r\n\r\n this._store.rerender();\r\n }\r\n\r\n undo() {\r\n if (this._store.state.hasViewportChanged) {\r\n const command = new UpdateViewportCommand(this._store, this, this.previousViewport);\r\n command.undo();\r\n this._store.state.hasViewportChanged = false;\r\n this._store.rerender();\r\n return;\r\n }\r\n\r\n const command = this.undoStack.pop();\r\n if (command) {\r\n command.undo();\r\n if (this._store.state.debugInfo.logCommands) console.info('undo', command);\r\n this.redoStack.add(command);\r\n }\r\n\r\n this._store.rerender();\r\n }\r\n\r\n redo() {\r\n const command = this.redoStack.pop();\r\n if (command) {\r\n command.execute();\r\n if (this._store.state.debugInfo.logCommands) console.info('redo', command);\r\n this.undoStack.add(command);\r\n }\r\n\r\n this._store.rerender();\r\n }\r\n}\r\n","import { KritzelBoundingBox } from '../../interfaces/bounding-box.interface';\r\nimport { KritzelBaseObject } from '../objects/base-object.class';\r\n\r\nexport class KritzelOctree<T extends KritzelBaseObject<any>> {\r\n private bounds: KritzelBoundingBox;\r\n private capacity: number;\r\n private objects: T[] = [];\r\n private children: KritzelOctree<T>[] | null = null;\r\n\r\n constructor(bounds: KritzelBoundingBox, capacity: number = 8) {\r\n this.bounds = bounds;\r\n this.capacity = capacity;\r\n }\r\n\r\n insert(object: T): boolean {\r\n if (!this.intersects(object.rotatedBoundingBox, this.bounds)) {\r\n return false;\r\n }\r\n\r\n if (this.objects.length < this.capacity && this.children === null) {\r\n this.objects.push(object);\r\n return true;\r\n }\r\n\r\n if (this.children === null) {\r\n this.subdivide();\r\n }\r\n\r\n for (const child of this.children!) {\r\n if (child.insert(object)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n update(object: T): boolean {\r\n const index = this.objects.findIndex(o => o.id === object.id);\r\n\r\n if (index !== -1) {\r\n this.objects[index] = object;\r\n return true;\r\n }\r\n if (this.children !== null) {\r\n for (const child of this.children) {\r\n if (child.update(object)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n remove(predicate: (object: T) => boolean): void {\r\n const index = this.objects.findIndex(o => predicate(o));\r\n if (index !== -1) {\r\n this.objects.splice(index, 1);\r\n }\r\n\r\n if (this.children !== null) {\r\n for (const child of this.children) {\r\n child.remove(predicate);\r\n }\r\n }\r\n }\r\n\r\n query(range: KritzelBoundingBox): T[] {\r\n const results: T[] = [];\r\n\r\n if (!this.intersects(range, this.bounds)) {\r\n return results;\r\n }\r\n\r\n for (const object of this.objects) {\r\n if (this.intersects(object.rotatedBoundingBox, range)) {\r\n results.push(object);\r\n }\r\n }\r\n\r\n if (this.children !== null) {\r\n for (const child of this.children) {\r\n results.push(...child.query(range));\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n filter(predicate: (object: T) => boolean): T[] {\r\n const results: T[] = this.objects.filter(o => predicate(o));\r\n if (this.children !== null) {\r\n for (const child of this.children) {\r\n results.push(...child.filter(predicate));\r\n }\r\n }\r\n return results;\r\n }\r\n\r\n allObjects(): T[] {\r\n const results: T[] = [...this.objects];\r\n if (this.children !== null) {\r\n for (const child of this.children) {\r\n results.push(...child.allObjects());\r\n }\r\n }\r\n return results;\r\n }\r\n\r\n private subdivide(): void {\r\n const { x, y, z, width, height, depth } = this.bounds;\r\n const halfWidth = width / 2;\r\n const halfHeight = height / 2;\r\n const halfDepth = depth / 2;\r\n\r\n this.children = [\r\n new KritzelOctree<T>({ x, y, z, width: halfWidth, height: halfHeight, depth: halfDepth }, this.capacity),\r\n new KritzelOctree<T>({ x: x + halfWidth, y, z, width: halfWidth, height: halfHeight, depth: halfDepth }, this.capacity),\r\n new KritzelOctree<T>({ x, y: y + halfHeight, z, width: halfWidth, height: halfHeight, depth: halfDepth }, this.capacity),\r\n new KritzelOctree<T>({ x: x + halfWidth, y: y + halfHeight, z, width: halfWidth, height: halfHeight, depth: halfDepth }, this.capacity),\r\n new KritzelOctree<T>({ x, y, z: z + halfDepth, width: halfWidth, height: halfHeight, depth: halfDepth }, this.capacity),\r\n new KritzelOctree<T>({ x: x + halfWidth, y, z: z + halfDepth, width: halfWidth, height: halfHeight, depth: halfDepth }, this.capacity),\r\n new KritzelOctree<T>({ x, y: y + halfHeight, z: z + halfDepth, width: halfWidth, height: halfHeight, depth: halfDepth }, this.capacity),\r\n new KritzelOctree<T>({ x: x + halfWidth, y: y + halfHeight, z: z + halfDepth, width: halfWidth, height: halfHeight, depth: halfDepth }, this.capacity),\r\n ];\r\n }\r\n\r\n private intersects(a: KritzelBoundingBox, b: KritzelBoundingBox): boolean {\r\n return !(\r\n a.x >= b.x + b.width || // a is completely to the right of b\r\n a.x + a.width <= b.x || // a is completely to the left of b\r\n a.y >= b.y + b.height || // a is completely below b\r\n a.y + a.height <= b.y // a is completely above b\r\n );\r\n }\r\n}\r\n","import { KritzelStore } from '../store.class';\r\nimport { KritzelBaseObject } from '../objects/base-object.class';\r\nimport { KritzelBaseCommand } from './base.command';\r\n\r\nexport class UpdateObjectCommand extends KritzelBaseCommand {\r\n private object: KritzelBaseObject<any>;\r\n private updatedProperties: Partial<KritzelBaseObject<any>>;\r\n private previousProperties: Partial<KritzelBaseObject<any>>;\r\n\r\n constructor(\r\n store: KritzelStore,\r\n initiator: any,\r\n object: KritzelBaseObject<any>,\r\n updatedProperties: Partial<KritzelBaseObject<any>>\r\n ) {\r\n super(store, initiator);\r\n this.object = object;\r\n this.updatedProperties = updatedProperties;\r\n\r\n this.previousProperties = {};\r\n for (const key in updatedProperties) {\r\n if (updatedProperties.hasOwnProperty(key)) {\r\n this.previousProperties[key] = this.object[key];\r\n }\r\n }\r\n }\r\n\r\n execute(): void {\r\n for (const key in this.updatedProperties) {\r\n if (this.updatedProperties.hasOwnProperty(key)) {\r\n this.object[key] = this.updatedProperties[key];\r\n }\r\n }\r\n }\r\n\r\n undo(): void {\r\n for (const key in this.previousProperties) {\r\n if (this.previousProperties.hasOwnProperty(key)) {\r\n this.object[key] = this.previousProperties[key];\r\n }\r\n }\r\n }\r\n}","import { KritzelEngineState } from \"../interfaces/engine-state.interface\";\r\n\r\nexport const DEFAULT_ENGINE_STATE: KritzelEngineState = {\r\n activeTool: null,\r\n activeText: null,\r\n currentPath: null,\r\n copiedObjects: null,\r\n objectsOctree: null,\r\n selectionBox: null,\r\n selectionGroup: null,\r\n resizeHandleType: null,\r\n hasViewportChanged: false,\r\n isReady: false,\r\n isEnabled: true,\r\n isScaling: false,\r\n isPanning: false,\r\n isFocused: false,\r\n isSelecting: false,\r\n isResizing: false,\r\n isResizeHandleSelected: false,\r\n isRotating: false,\r\n isRotationHandleSelected: false,\r\n isDragging: false,\r\n isDrawing: false,\r\n isErasing: false,\r\n isWriting: false,\r\n isCtrlKeyPressed: false,\r\n isContextMenuVisible: false,\r\n contextMenuItems: [],\r\n contextMenuX: 0,\r\n contextMenuY: 0,\r\n skipContextMenu: false,\r\n debugInfo: {\r\n showObjectInfo: false,\r\n showViewportInfo: false,\r\n logCommands: false,\r\n },\r\n host: null,\r\n cursorX: 0,\r\n cursorY: 0,\r\n scale: 1,\r\n scaleMax: 1000,\r\n scaleMin: 0.0001,\r\n scaleStep: 0.05,\r\n startX: 0,\r\n startY: 0,\r\n translateX: 0,\r\n translateY: 0,\r\n viewportWidth: 0,\r\n viewportHeight: 0,\r\n historyBufferSize: 1000,\r\n longTouchTimeout: null,\r\n longTouchDelay: 300,\r\n pointers: new Map<number, PointerEvent>()\r\n};","import { KritzelBaseObject } from './objects/base-object.class';\r\nimport { KritzelSelectionGroup } from './objects/selection-group.class';\r\nimport { RemoveSelectionGroupCommand } from './commands/remove-selection-group.command';\r\nimport { KritzelHistory } from './history.class';\r\nimport { KritzelEngineState } from '../interfaces/engine-state.interface';\r\nimport { KritzelOctree } from './structures/octree.structure';\r\nimport { KritzelBoundingBox } from '../interfaces/bounding-box.interface';\r\nimport { KrtizelSelectionBox } from './objects/selection-box.class';\r\nimport { StateChangeListener, StatePropertyKey } from '../types/state.types';\r\nimport { RemoveObjectCommand } from './commands/remove-object.command';\r\nimport { BatchCommand } from './commands/batch.command';\r\nimport { AddObjectCommand } from './commands/add-object.command';\r\nimport { AddSelectionGroupCommand } from './commands/add-selection-group.command';\r\nimport { UpdateObjectCommand } from './commands/update-object.command';\r\nimport { KritzelEngine } from '../components/core/kritzel-engine/kritzel-engine';\r\nimport { KritzelContextMenu } from '../components/ui/kritzel-context-menu/kritzel-context-menu';\r\nimport { KritzelToolRegistry } from './registries/tool.registry';\r\nimport { DEFAULT_ENGINE_STATE } from '../configs/default-engine-state';\r\n\r\nexport class KritzelStore {\r\n private readonly _kritzelEngine: KritzelEngine;\r\n\r\n private readonly _state: KritzelEngineState;\r\n\r\n private readonly _history: KritzelHistory;\r\n\r\n private readonly _listeners: Map<StatePropertyKey, Set<StateChangeListener<any>>> = new Map();\r\n\r\n objects: KritzelBaseObject<any>[] = [];\r\n\r\n get history(): KritzelHistory {\r\n return this._history;\r\n }\r\n\r\n get state(): KritzelEngineState {\r\n return this._state;\r\n }\r\n\r\n get currentZIndex() {\r\n return this._state.objectsOctree.filter(o => !(o instanceof KritzelSelectionGroup) && !(o instanceof KrtizelSelectionBox)).length;\r\n }\r\n\r\n get allObjects() {\r\n return this._state.objectsOctree.allObjects();\r\n }\r\n\r\n get selectedObjects() {\r\n return this.allObjects.filter(o => !(o instanceof KritzelSelectionGroup)).filter(o => o.selected);\r\n }\r\n\r\n get offsetX() {\r\n return this._state.host.getBoundingClientRect().left;\r\n }\r\n\r\n get offsetY() {\r\n return this._state.host.getBoundingClientRect().top;\r\n }\r\n\r\n constructor(kritzelEngine: KritzelEngine) {\r\n this._state = DEFAULT_ENGINE_STATE;\r\n this._kritzelEngine = kritzelEngine;\r\n this._history = new KritzelHistory(this);\r\n this._state.objectsOctree = new KritzelOctree<KritzelBaseObject<any>>({\r\n x: -Infinity,\r\n y: -Infinity,\r\n z: -Infinity,\r\n width: Infinity,\r\n height: Infinity,\r\n depth: Infinity,\r\n });\r\n }\r\n\r\n rerender() {\r\n const viewportBounds: KritzelBoundingBox = {\r\n x: -this._state.translateX / this._state.scale,\r\n y: -this._state.translateY / this._state.scale,\r\n z: this._state.scale,\r\n width: this._state.viewportWidth / this._state.scale,\r\n height: this._state.viewportHeight / this._state.scale,\r\n depth: 100,\r\n };\r\n\r\n this.objects = this._state.objectsOctree.query(viewportBounds);\r\n\r\n if (this._kritzelEngine) {\r\n this._kritzelEngine.forceUpdate++;\r\n }\r\n }\r\n\r\n findObjectById(id: string): KritzelBaseObject<any> | null {\r\n for (const object of this.allObjects) {\r\n if (object.id === id) {\r\n return object;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n deselectAllObjects(): void {\r\n if (this._state.selectionGroup) {\r\n this._history.executeCommand(new RemoveSelectionGroupCommand(this, this));\r\n }\r\n }\r\n\r\n onStateChange<K extends StatePropertyKey>(property: K, listener: StateChangeListener<KritzelEngineState[K]>): void {\r\n if (!this._listeners.has(property)) {\r\n this._listeners.set(property, new Set());\r\n }\r\n this._listeners.get(property).add(listener);\r\n }\r\n\r\n setState<K extends StatePropertyKey>(property: K, value: KritzelEngineState[K]): void {\r\n const oldValue = this._state[property];\r\n\r\n if (oldValue !== value) {\r\n this._state[property] = value;\r\n\r\n if (this._listeners.has(property)) {\r\n this._listeners.get(property).forEach(listener => listener(value, oldValue, String(property)));\r\n }\r\n }\r\n }\r\n\r\n delete() {\r\n if (!this.state.selectionGroup) {\r\n return;\r\n }\r\n\r\n const deleteSelectedObjectsCommand = this.state.selectionGroup.objects.map(obj => new RemoveObjectCommand(this, this.state.selectionGroup, obj));\r\n const removeSelectionGroupCommand = new RemoveSelectionGroupCommand(this, this.state.selectionGroup);\r\n const commands = [...deleteSelectedObjectsCommand, removeSelectionGroupCommand];\r\n\r\n this.history.executeCommand(new BatchCommand(this, this.state.selectionGroup, commands));\r\n }\r\n\r\n deleteObject(id: string, isHistoryUpdated: boolean = true) {\r\n const object = this.findObjectById(id);\r\n if (object) {\r\n if (isHistoryUpdated) {\r\n const removeObjectCommand = new RemoveObjectCommand(this, this, object);\r\n this.history.executeCommand(removeObjectCommand);\r\n } else {\r\n this._state.objectsOctree.remove(obj => obj.id === id);\r\n this.rerender();\r\n }\r\n }\r\n }\r\n\r\n copy() {\r\n this.state.copiedObjects = this.state.selectionGroup.copy() as KritzelSelectionGroup;\r\n }\r\n\r\n paste(x?: number, y?: number) {\r\n this.state.copiedObjects.selected = true;\r\n\r\n const adjustedX = x !== undefined ? x : this.state.copiedObjects.translateX + 25;\r\n const adjustedY = y !== undefined ? y : this.state.copiedObjects.translateY + 25;\r\n\r\n this.state.copiedObjects.updatePosition(adjustedX, adjustedY);\r\n\r\n const commands = [];\r\n if (this.state.selectionGroup !== null) {\r\n commands.push(new RemoveSelectionGroupCommand(this, this.state.selectionGroup));\r\n }\r\n\r\n const addCopiedObjectsCommands = this.state.copiedObjects.objects.map(obj => new AddObjectCommand(this, this, obj));\r\n const addCopiedObjectsAsSelectionGroupCommand = new AddSelectionGroupCommand(this, this, this.state.copiedObjects);\r\n\r\n commands.push(...addCopiedObjectsCommands, addCopiedObjectsAsSelectionGroupCommand);\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, commands));\r\n\r\n this.state.isSelecting = false;\r\n this.state.copiedObjects = this.state.selectionGroup.copy() as KritzelSelectionGroup;\r\n this.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n }\r\n\r\n bringForward(object?: KritzelBaseObject<any>) {\r\n const max = this.allObjects.length + 1;\r\n const objects = object ? [object] : this.state.selectionGroup.objects;\r\n const increaseZIndexCommands = objects.map(obj => {\r\n if (obj.zIndex === max) {\r\n return;\r\n }\r\n return new UpdateObjectCommand(this, this, obj, { zIndex: obj.zIndex + 1 });\r\n });\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, increaseZIndexCommands));\r\n }\r\n\r\n sendBackward(object?: KritzelBaseObject<any>) {\r\n const min = 0;\r\n const objects = object ? [object] : this.state.selectionGroup.objects;\r\n const decreaseZIndexCommands = objects.map(obj => {\r\n if (obj.zIndex === min) {\r\n return;\r\n }\r\n return new UpdateObjectCommand(this, this, obj, { zIndex: obj.zIndex - 1 });\r\n });\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, decreaseZIndexCommands));\r\n }\r\n\r\n bringToFront(object?: KritzelBaseObject<any>) {\r\n const max = this.allObjects.length + 1;\r\n const objects = object ? [object] : this.state.selectionGroup.objects;\r\n const increaseZIndexCommands = objects.map(obj => {\r\n return new UpdateObjectCommand(this, this, obj, { zIndex: max });\r\n });\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, increaseZIndexCommands));\r\n }\r\n\r\n sendToBack(object?: KritzelBaseObject<any>) {\r\n const min = -1;\r\n const objects = object ? [object] : this.state.selectionGroup.objects;\r\n const decreaseZIndexCommands = objects.map(obj => {\r\n return new UpdateObjectCommand(this, this, obj, { zIndex: min });\r\n });\r\n\r\n this.history.executeCommand(new BatchCommand(this, this, decreaseZIndexCommands));\r\n }\r\n\r\n selectObjects(objects: KritzelBaseObject<any>[]) {\r\n if (objects.length === 0) {\r\n return;\r\n }\r\n\r\n const selectionGroup = KritzelSelectionGroup.create(this);\r\n objects.forEach(obj => {\r\n obj.selected = false;\r\n selectionGroup.addOrRemove(obj);\r\n });\r\n\r\n selectionGroup.selected = true;\r\n\r\n this.state.selectionGroup = selectionGroup;\r\n\r\n if (objects.length === 1) {\r\n selectionGroup.rotation = selectionGroup.objects[0].rotation;\r\n }\r\n\r\n this.history.executeCommand(new AddSelectionGroupCommand(this, this, selectionGroup));\r\n }\r\n\r\n selectAllObjectsInViewport() {\r\n const objectsInViewport = this._state.objectsOctree\r\n .query({\r\n x: -this._state.translateX / this._state.scale,\r\n y: -this._state.translateY / this._state.scale,\r\n z: this._state.scale,\r\n width: this._state.viewportWidth / this._state.scale,\r\n height: this._state.viewportHeight / this._state.scale,\r\n depth: 100,\r\n })\r\n .filter(o => !(o instanceof KritzelSelectionGroup) && !(o instanceof KrtizelSelectionBox) && !(o instanceof KritzelContextMenu));\r\n\r\n if (objectsInViewport.length > 0) {\r\n const selectionGroup = KritzelSelectionGroup.create(this);\r\n\r\n objectsInViewport.forEach(obj => {\r\n obj.selected = false;\r\n selectionGroup.addOrRemove(obj);\r\n });\r\n\r\n selectionGroup.selected = true;\r\n\r\n this.state.isSelecting = false;\r\n\r\n if (objectsInViewport.length === 1) {\r\n selectionGroup.rotation = selectionGroup.objects[0].rotation;\r\n }\r\n\r\n this.history.executeCommand(new AddSelectionGroupCommand(this, this, selectionGroup));\r\n this.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n }\r\n }\r\n\r\n clearSelection() {\r\n const command = new RemoveSelectionGroupCommand(this, this.state.selectionGroup);\r\n this.history.executeCommand(command);\r\n\r\n this.state.selectionGroup = null;\r\n this.state.selectionBox = null;\r\n this.state.isSelecting = false;\r\n this.state.isResizeHandleSelected = false;\r\n this.state.isRotationHandleSelected = false;\r\n }\r\n\r\n resetActiveText() {\r\n if (this.state.activeText && this.state.activeText.value === ' ') {\r\n this.deleteObject(this.state.activeText.id, false);\r\n this.history.undoStack.pop();\r\n }\r\n\r\n this.state.activeText = null;\r\n }\r\n\r\n getObjectFromPointerEvent(event: TouchEvent | MouseEvent, selector = '.object'): KritzelBaseObject<any> | null {\r\n const shadowRoot = this.state.host?.shadowRoot;\r\n if (!shadowRoot) return null;\r\n\r\n let clientX: number;\r\n let clientY: number;\r\n\r\n if ('touches' in event) {\r\n const touch = event.touches[0];\r\n if (!touch) return null;\r\n clientX = touch.clientX;\r\n clientY = touch.clientY;\r\n } else {\r\n clientX = event.clientX;\r\n clientY = event.clientY;\r\n }\r\n\r\n const elementAtPoint = shadowRoot.elementFromPoint(clientX, clientY);\r\n if (!elementAtPoint) return null;\r\n\r\n const selectedObject = elementAtPoint.closest(selector) as HTMLElement | null;\r\n\r\n if (selectedObject) {\r\n return this.allObjects.find(object => selectedObject.id === object.id);\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import { KritzelToolRegistry } from '../registries/tool.registry';\r\nimport { KritzelStore } from '../store.class';\r\nimport { KritzelBaseHandler } from './base.handler';\r\n\r\nexport class KritzelKeyHandler extends KritzelBaseHandler {\r\n constructor(store: KritzelStore) {\r\n super(store);\r\n }\r\n\r\n handleKeyDown(event: KeyboardEvent): void {\r\n if(this._store.state.isFocused === false) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n this._store.state.isCtrlKeyPressed = event.ctrlKey;\r\n\r\n if(this._store.state.isCtrlKeyPressed) {\r\n event.preventDefault();\r\n }\r\n\r\n if (event.key === 'Escape' && this._store.state.selectionGroup) {\r\n this._store.clearSelection();\r\n }\r\n\r\n if (event.key === 'Delete' && this._store.state.selectionGroup) {\r\n this._store.delete();\r\n }\r\n\r\n if (event.key === 'z' && event.ctrlKey) {\r\n this._store.history.undo();\r\n }\r\n\r\n if (event.key === 'y' && event.ctrlKey) {\r\n this._store.history.redo();\r\n }\r\n\r\n if (event.key === 's' && event.ctrlKey) {\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this._store.deselectAllObjects();\r\n }\r\n\r\n if (event.key === 'b' && event.ctrlKey) {\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('brush'));\r\n this._store.deselectAllObjects();\r\n }\r\n\r\n if (event.key === 'e' && event.ctrlKey) {\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('eraser'));\r\n this._store.deselectAllObjects();\r\n }\r\n\r\n if (event.key === 'i' && event.ctrlKey) {\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('image'));\r\n this._store.deselectAllObjects();\r\n }\r\n\r\n if (event.key === 'x' && event.ctrlKey) {\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('text'));\r\n this._store.deselectAllObjects();\r\n }\r\n\r\n if (event.key === 'c' && event.ctrlKey && this._store.state.selectionGroup) {\r\n this._store.copy();\r\n this._store.rerender();\r\n }\r\n\r\n if (event.key === 'v' && event.ctrlKey && this._store.state.copiedObjects) {\r\n this._store.paste();\r\n }\r\n\r\n if (event.key === '+' && event.ctrlKey && this._store.state.selectionGroup) {\r\n this._store.bringForward();\r\n }\r\n\r\n if (event.key === '-' && event.ctrlKey && this._store.state.selectionGroup) {\r\n this._store.sendBackward();\r\n }\r\n\r\n if (event.key === '*' && event.shiftKey && this._store.state.selectionGroup) {\r\n this._store.bringToFront();\r\n }\r\n\r\n if (event.key === '_' && event.shiftKey && this._store.state.selectionGroup) {\r\n this._store.sendToBack();\r\n }\r\n\r\n if(event.key === 'a' && event.ctrlKey && this._store.state.activeText) {\r\n this._store.state.activeText.selectAll();\r\n }\r\n\r\n if(event.key === 'v' && event.ctrlKey && this._store.state.activeText) {\r\n this._store.state.activeText.insertFromClipboard();\r\n }\r\n }\r\n\r\n handleKeyUp(event: KeyboardEvent): void {\r\n if(this._store.state.isFocused === false) {\r\n return;\r\n }\r\n \r\n this._store.state.isCtrlKeyPressed = event.ctrlKey;\r\n }\r\n \r\n}\r\n","import { AddSelectionGroupCommand } from '../commands/add-selection-group.command';\r\nimport { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelStore } from '../store.class';\r\nimport { KritzelBaseHandler } from './base.handler';\r\n\r\nexport class KritzelContextMenuHandler extends KritzelBaseHandler {\r\n globalContextMenuItems = [];\r\n\r\n objectContextMenuItems = [];\r\n\r\n constructor(store: KritzelStore, globalContextMenuItems: any[], objectContextMenuItems: any[]) {\r\n super(store);\r\n this.globalContextMenuItems = globalContextMenuItems;\r\n this.objectContextMenuItems = objectContextMenuItems;\r\n }\r\n\r\n handleContextMenu(event: PointerEvent): void {\r\n if(this._store.state.skipContextMenu) {\r\n this._store.state.skipContextMenu = false;\r\n return;\r\n }\r\n\r\n const selectedObject = this._store.getObjectFromPointerEvent(event, '.object');\r\n\r\n if (selectedObject && !(selectedObject instanceof KritzelSelectionGroup)) {\r\n this._store.state.selectionGroup = KritzelSelectionGroup.create(this._store);\r\n this._store.state.selectionGroup.addOrRemove(selectedObject);\r\n this._store.state.selectionGroup.selected = true;\r\n this._store.state.selectionGroup.rotation = selectedObject.rotation;\r\n this._store.state.isSelecting = false;\r\n\r\n this._store.history.executeCommand(new AddSelectionGroupCommand(this._store, this, this._store.state.selectionGroup));\r\n }\r\n\r\n this._store.state.contextMenuItems = this._store.state.selectionGroup ? this.objectContextMenuItems : this.globalContextMenuItems;\r\n\r\n let x: number = event.clientX - this._store.offsetX;\r\n let y: number = event.clientY - this._store.offsetY;\r\n\r\n const menuWidthEstimate = 150;\r\n const menuHeightEstimate = 200;\r\n const margin = 10;\r\n\r\n if (x + menuWidthEstimate > window.innerWidth - margin) {\r\n x = window.innerWidth - menuWidthEstimate - margin;\r\n }\r\n\r\n if (y + menuHeightEstimate > window.innerHeight - margin) {\r\n y = window.innerHeight - menuHeightEstimate - margin;\r\n }\r\n\r\n x = Math.max(margin, x);\r\n y = Math.max(margin, y);\r\n\r\n this._store.state.contextMenuX = x;\r\n this._store.state.contextMenuY = y;\r\n this._store.state.isContextMenuVisible = true;\r\n\r\n this._store.state.isEnabled = false;\r\n\r\n this._store.rerender();\r\n }\r\n}\r\n","export class KritzelClassHelper {\r\n static isInstanceOf<T>(object: any, className: string): object is T {\r\n return object.__class__ === className;\r\n }\r\n}",":host {\r\n display: block;\r\n position: relative;\r\n height: 100%;\r\n width: 100%;\r\n overflow: hidden;\r\n background-color: var(--kritzel-engine-background-color, #ffffff);\r\n}\r\n\r\n:host,\r\n:host * {\r\n touch-action: none;\r\n user-select: none;\r\n}\r\n\r\n.debug-panel {\r\n position: absolute;\r\n pointer-events: none;\r\n top: 0;\r\n right: 0;\r\n}\r\n\r\n.origin {\r\n position: relative;\r\n top: 0;\r\n left: 0;\r\n height: 0;\r\n width: 0;\r\n pointer-events: none;\r\n -webkit-transform-origin: top left;\r\n -moz-transform-origin: top left;\r\n transform-origin: top left;\r\n overflow: visible;\r\n}\r\n\r\n.object {\r\n overflow: visible;\r\n}\r\n\r\ntextarea {\r\n all: unset;\r\n box-sizing: border-box;\r\n outline: none !important;\r\n border: none !important;\r\n overflow: visible;\r\n}\r\n\r\n.resize-handle-overlay.top-left,\r\n.resize-handle-overlay.bottom-right {\r\n cursor: nwse-resize;\r\n}\r\n\r\n.resize-handle-overlay.top-right,\r\n.resize-handle-overlay.bottom-left {\r\n cursor: nesw-resize;\r\n}\r\n\r\n.rotation-handle-overlay {\r\n cursor: grab;\r\n}\r\n","import { Component, Host, h, Listen, Element, Prop, Method, State, Event, EventEmitter } from '@stencil/core';\r\nimport { KritzelTool } from '../../../interfaces/tool.interface';\r\nimport { KritzelViewport } from '../../../classes/viewport.class';\r\nimport { KritzelPath } from '../../../classes/objects/path.class';\r\nimport { KritzelSelectionTool } from '../../../classes/tools/selection-tool.class';\r\nimport { KritzelImage } from '../../../classes/objects/image.class';\r\nimport { KritzelText } from '../../../classes/objects/text.class';\r\nimport { KritzelSelectionGroup } from '../../../classes/objects/selection-group.class';\r\nimport { KrtizelSelectionBox } from '../../../classes/objects/selection-box.class';\r\nimport { KritzelStore } from '../../../classes/store.class';\r\nimport { KritzelKeyHandler } from '../../../classes/handlers/key.handler';\r\nimport { KritzelBaseTool } from '../../../classes/tools/base-tool.class';\r\nimport { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';\r\nimport { KritzelEraserTool } from '../../../classes/tools/eraser-tool.class';\r\nimport { KritzelBrushToolConfig, KritzelTextToolConfig } from '../../../interfaces/toolbar-control.interface';\r\nimport { KritzelKeyboardHelper } from '../../../helpers/keyboard.helper';\r\nimport { KritzelContextMenuHandler } from '../../../classes/handlers/context-menu.handler';\r\nimport { AddObjectCommand } from '../../../classes/commands/add-object.command';\r\nimport { KritzelBaseObject } from '../../../classes/objects/base-object.class';\r\nimport { UpdateObjectCommand } from '../../../classes/commands/update-object.command';\r\nimport { RemoveObjectCommand } from '../../../classes/commands/remove-object.command';\r\nimport { KritzelToolRegistry } from '../../../classes/registries/tool.registry';\r\nimport { KritzelEventHelper } from '../../../helpers/event.helper';\r\nimport { KritzelClassHelper } from '../../../helpers/class.helper';\r\n\r\n@Component({\r\n tag: 'kritzel-engine',\r\n styleUrl: 'kritzel-engine.css',\r\n shadow: true,\r\n})\r\nexport class KritzelEngine {\r\n @Element()\r\n host: HTMLElement;\r\n\r\n @Prop()\r\n activeTool: KritzelTool;\r\n\r\n @Prop()\r\n globalContextMenuItems: ContextMenuItem[] = [\r\n {\r\n label: 'Paste',\r\n icon: 'paste',\r\n disabled: () => this.store.state.copiedObjects === null,\r\n action: () => {\r\n const x = (-this.store.state.translateX + this.store.state.contextMenuX) / this.store.state.scale;\r\n const y = (-this.store.state.translateY + this.store.state.contextMenuY) / this.store.state.scale;\r\n this.paste(x, y);\r\n },\r\n },\r\n { label: 'Select All', icon: 'select-all', action: () => this.selectAllObjectsInViewport() },\r\n ];\r\n\r\n @Prop()\r\n objectContextMenuItems: ContextMenuItem[] = [\r\n { label: 'Copy', icon: 'copy', action: () => this.copy() },\r\n {\r\n label: 'Paste',\r\n icon: 'paste',\r\n disabled: () => this.store.state.copiedObjects === null,\r\n action: () => {\r\n const x = (-this.store.state.translateX + this.store.state.contextMenuX) / this.store.state.scale;\r\n const y = (-this.store.state.translateY + this.store.state.contextMenuY) / this.store.state.scale;\r\n this.paste(x, y);\r\n },\r\n },\r\n { label: 'Delete', icon: 'delete', action: () => this.delete() },\r\n { label: 'Bring to Front', icon: 'bring-to-front', action: () => this.moveToTop() },\r\n { label: 'Send to Back', icon: 'send-to-back', action: () => this.moveToBottom() },\r\n ];\r\n\r\n @State()\r\n forceUpdate: number = 0;\r\n\r\n @Event()\r\n isEngineReady: EventEmitter<void>;\r\n\r\n @Event()\r\n activeToolChange: EventEmitter<KritzelBaseTool>;\r\n\r\n store: KritzelStore;\r\n\r\n viewport: KritzelViewport;\r\n\r\n contextMenuHandler: KritzelContextMenuHandler;\r\n\r\n keyHandler: KritzelKeyHandler;\r\n\r\n contextMenuElement: HTMLKritzelContextMenuElement | null = null;\r\n\r\n get isSelecting() {\r\n return this.store.state.activeTool instanceof KritzelSelectionTool && this.store.state.isSelecting;\r\n }\r\n\r\n get isSelectionActive() {\r\n return this.store.state.activeTool instanceof KritzelSelectionTool && this.store.state.selectionGroup !== null;\r\n }\r\n\r\n constructor() {\r\n this.store = new KritzelStore(this);\r\n this.contextMenuHandler = new KritzelContextMenuHandler(this.store, this.globalContextMenuItems, this.objectContextMenuItems);\r\n this.keyHandler = new KritzelKeyHandler(this.store);\r\n\r\n this.store.onStateChange('activeTool', (activeTool: KritzelBaseTool) => {\r\n if (!(activeTool instanceof KritzelSelectionTool)) {\r\n this.store.clearSelection();\r\n }\r\n\r\n this.store.state.skipContextMenu = false;\r\n this.activeToolChange.emit(activeTool);\r\n KritzelKeyboardHelper.forceHideKeyboard();\r\n });\r\n\r\n this.store.onStateChange('isFocused', (isFocused: boolean) => {\r\n if (!isFocused) {\r\n this.store.resetActiveText();\r\n }\r\n });\r\n }\r\n\r\n componentDidLoad() {\r\n this.viewport = new KritzelViewport(this.store, this.host);\r\n\r\n if (this.store.state.isReady === false) {\r\n this.store.state.isReady = true;\r\n this.isEngineReady.emit();\r\n }\r\n }\r\n\r\n @Listen('wheel', { passive: false })\r\n handleWheel(ev) {\r\n if (this.store.state.isContextMenuVisible) {\r\n this.hideContextMenu();\r\n }\r\n\r\n this.viewport.handleWheel(ev);\r\n this.store.state?.activeTool?.handleWheel(ev);\r\n }\r\n\r\n @Listen('pointerdown', { passive: false })\r\n handlePointerDown(ev: PointerEvent) {\r\n if (KritzelEventHelper.isPointerEventOnContextMenu(ev) === false && this.store.state.isContextMenuVisible) {\r\n this.hideContextMenu();\r\n return;\r\n }\r\n\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n KritzelEventHelper.onLongTouchPress(ev, (event: PointerEvent) => {\r\n if (!(this.store.state.activeTool instanceof KritzelSelectionTool)) {\r\n return;\r\n }\r\n this.contextMenuHandler.handleContextMenu(event);\r\n });\r\n\r\n this.host.setPointerCapture(ev.pointerId);\r\n this.store.state.pointers.set(ev.pointerId, ev);\r\n\r\n this.viewport.handlePointerDown(ev);\r\n this.store.state?.activeTool?.handlePointerDown(ev);\r\n }\r\n\r\n @Listen('pointermove', { passive: false })\r\n handlePointerMove(ev: PointerEvent) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n this.store.state.pointers.set(ev.pointerId, ev);\r\n this.viewport.handlePointerMove(ev);\r\n this.store.state?.activeTool?.handlePointerMove(ev);\r\n }\r\n\r\n @Listen('pointerup', { passive: false })\r\n handlePointerUp(ev: PointerEvent) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n this.store.state.pointers.delete(ev.pointerId);\r\n this.host.releasePointerCapture(ev.pointerId);\r\n this.viewport.handlePointerUp(ev);\r\n this.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('pointercancel', { passive: false })\r\n handlePointerCancel(ev: PointerEvent) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n this.host.releasePointerCapture(ev.pointerId);\r\n this.store.state.pointers.delete(ev.pointerId);\r\n\r\n this.viewport.handlePointerUp(ev);\r\n this.store.state?.activeTool?.handlePointerUp(ev);\r\n }\r\n\r\n @Listen('contextmenu', { capture: false })\r\n handleContextMenu(ev: PointerEvent) {\r\n ev.preventDefault();\r\n\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n if (ev.pointerType === 'touch') {\r\n return;\r\n }\r\n\r\n this.contextMenuHandler.handleContextMenu(ev);\r\n }\r\n\r\n @Listen('resize', { target: 'window' })\r\n handleResize() {\r\n this.viewport.handleResize();\r\n }\r\n\r\n @Listen('keydown', { target: 'window' })\r\n handleKeyDown(ev) {\r\n this.keyHandler.handleKeyDown(ev);\r\n }\r\n\r\n @Listen('keyup', { target: 'window' })\r\n handleKeyUp(ev) {\r\n this.keyHandler.handleKeyUp(ev);\r\n }\r\n\r\n @Listen('mousedown', { target: 'window', passive: true })\r\n updateFocus(ev) {\r\n const rect = this.store.state.host.getBoundingClientRect();\r\n const isInside = ev.clientX >= rect.left && ev.clientX <= rect.right && ev.clientY >= rect.top && ev.clientY <= rect.bottom;\r\n\r\n const path = ev.composedPath();\r\n const kritzelEngineElement = this.host.closest('kritzel-engine');\r\n const isInKritzelEngine = path.includes(kritzelEngineElement || this.host);\r\n\r\n this.store.setState('isFocused', isInside && isInKritzelEngine);\r\n }\r\n\r\n handleContextMenuAction(event: CustomEvent<ContextMenuItem>) {\r\n event.detail.action();\r\n this.hideContextMenu();\r\n }\r\n\r\n @Method()\r\n async registerTool(toolName: string, toolClass: any, toolConfig?: KritzelTextToolConfig | KritzelBrushToolConfig): Promise<KritzelBaseTool> {\r\n if (typeof toolClass !== 'function' || !(toolClass.prototype instanceof KritzelBaseTool)) {\r\n console.error(`Failed to register tool \"${toolName}\": Tool class must be a constructor function`);\r\n return null;\r\n }\r\n\r\n const registeredTool = KritzelToolRegistry.registerTool(toolName, toolClass, this.store);\r\n\r\n if (toolConfig) {\r\n Object.entries(toolConfig).forEach(([key, value]) => {\r\n registeredTool[key] = value;\r\n });\r\n }\r\n\r\n return Promise.resolve(registeredTool);\r\n }\r\n\r\n @Method()\r\n async changeActiveTool(tool: KritzelBaseTool) {\r\n this.store.state.activeTool?.onDeactivate();\r\n this.store.setState('activeTool', tool);\r\n this.store.deselectAllObjects();\r\n tool?.onActivate();\r\n }\r\n\r\n @Method()\r\n async setFocus() {\r\n this.host.focus();\r\n this.store.state.isFocused = true;\r\n }\r\n\r\n @Method()\r\n async disable() {\r\n this.store.state.isEnabled = false;\r\n this.forceUpdate++;\r\n }\r\n\r\n @Method()\r\n async enable() {\r\n this.store.state.isEnabled = true;\r\n this.forceUpdate++;\r\n }\r\n\r\n @Method()\r\n async delete() {\r\n this.store.delete();\r\n }\r\n\r\n @Method()\r\n async copy() {\r\n this.store.copy();\r\n }\r\n\r\n @Method()\r\n async paste(x: number, y: number) {\r\n this.store.paste(x, y);\r\n }\r\n\r\n @Method()\r\n async bringForward(object?: KritzelBaseObject<any>) {\r\n this.store.bringForward(object);\r\n }\r\n\r\n @Method()\r\n async sendBackward(object?: KritzelBaseObject<any>) {\r\n this.store.sendBackward(object);\r\n }\r\n\r\n @Method()\r\n async moveToTop(object?: KritzelBaseObject<any>) {\r\n this.store.bringToFront(object);\r\n }\r\n\r\n @Method()\r\n async moveToBottom(object?: KritzelBaseObject<any>) {\r\n this.store.sendToBack(object);\r\n }\r\n\r\n @Method()\r\n async undo() {\r\n this.store.history.undo();\r\n }\r\n\r\n @Method()\r\n async redo() {\r\n this.store.history.redo();\r\n }\r\n\r\n @Method()\r\n async hideContextMenu() {\r\n this.store.state.pointers.clear();\r\n this.store.state.isContextMenuVisible = false;\r\n this.store.state.selectionBox = null;\r\n this.store.state.isSelecting = false;\r\n }\r\n\r\n @Method()\r\n async getObjectById<T extends KritzelBaseObject>(id: string): Promise<T | null> {\r\n const object = this.store.objects.find(obj => obj.id === id) as T | undefined;\r\n return object || null;\r\n }\r\n\r\n @Method()\r\n async addObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.store.deselectAllObjects();\r\n\r\n object.id = object.generateId();\r\n object._store = this.store;\r\n object.scale = object.scale ? object.scale : this.store.state.scale;\r\n object.zIndex = this.store.currentZIndex;\r\n\r\n const command = new AddObjectCommand(this.store, this, object);\r\n this.store.history.executeCommand(command);\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async updateObject<T extends KritzelBaseObject>(object: T, updatedProperties: Partial<T>): Promise<T | null> {\r\n this.store.deselectAllObjects();\r\n\r\n const command = new UpdateObjectCommand(this.store, this, object, updatedProperties);\r\n this.store.history.executeCommand(command);\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async removeObject<T extends KritzelBaseObject>(object: T): Promise<T | null> {\r\n this.store.deselectAllObjects();\r\n\r\n const command = new RemoveObjectCommand(this.store, this, object);\r\n this.store.history.executeCommand(command);\r\n\r\n return object;\r\n }\r\n\r\n @Method()\r\n async getSelectedObjects(): Promise<KritzelBaseObject<any>[]> {\r\n return this.store.state.selectionGroup ? this.store.state.selectionGroup.objects : [];\r\n }\r\n\r\n @Method()\r\n async selectObjects(objects: KritzelBaseObject[]) {\r\n this.store.state.activeTool?.onDeactivate();\r\n this.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.store.deselectAllObjects();\r\n this.store.selectObjects(objects);\r\n console.log('Selected objects:', objects);\r\n }\r\n\r\n @Method()\r\n async selectAllObjectsInViewport() {\r\n this.store.state.activeTool?.onDeactivate();\r\n this.store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n this.store.deselectAllObjects();\r\n this.store.selectAllObjectsInViewport();\r\n }\r\n\r\n @Method()\r\n async clearSelection() {\r\n this.store.clearSelection();\r\n }\r\n\r\n render() {\r\n const computedStyle = window.getComputedStyle(this.host);\r\n const baseHandleSizePx = computedStyle.getPropertyValue('--kritzel-selection-handle-size').trim() || '6px';\r\n const baseHandleSize = parseFloat(baseHandleSizePx);\r\n const baseHandleTouchSize = baseHandleSize * 2 < 14 ? 14 : baseHandleSize;\r\n\r\n return (\r\n <Host>\r\n <div class=\"debug-panel\" style={{ display: this.store.state.debugInfo.showViewportInfo ? 'block' : 'none' }}>\r\n <div>TranslateX: {this.store.state?.translateX}</div>\r\n <div>TranslateY: {this.store.state?.translateY}</div>\r\n <div>ViewportWidth: {this.store.state?.viewportWidth}</div>\r\n <div>ViewportHeight: {this.store.state?.viewportHeight}</div>\r\n <div>ObjectsInViewport. {this.store.objects.length}</div>\r\n <div>Scale: {this.store.state?.scale}</div>\r\n <div>ActiveTool: {this.store.state?.activeTool?.name}</div>\r\n <div>HasViewportChanged: {this.store.state?.hasViewportChanged ? 'true' : 'false'}</div>\r\n <div>IsEnabled: {this.store.state?.isEnabled ? 'true' : 'false'}</div>\r\n <div>IsScaling: {this.store.state?.isScaling ? 'true' : 'false'}</div>\r\n <div>IsPanning: {this.store.state?.isPanning ? 'true' : 'false'}</div>\r\n <div>IsFocused: {this.store.state.isFocused ? 'true' : 'false'}</div>\r\n <div>IsSelecting: {this.isSelecting ? 'true' : 'false'}</div>\r\n <div>IsSelectionActive: {this.isSelectionActive ? 'true' : 'false'}</div>\r\n <div>IsResizeHandleSelected: {this.store.state.isResizeHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsRotationHandleSelected: {this.store.state.isRotationHandleSelected ? 'true' : 'false'}</div>\r\n <div>IsDrawing: {this.store.state.isDrawing ? 'true' : 'false'}</div>\r\n <div>IsWriting: {this.store.state.isWriting ? 'true' : 'false'}</div>\r\n <div>CursorX: {this.store.state?.cursorX}</div>\r\n <div>CursorY: {this.store.state?.cursorY}</div>\r\n </div>\r\n\r\n <div\r\n class=\"origin\"\r\n style={{\r\n transform: `matrix(${this.store.state?.scale}, 0, 0, ${this.store.state?.scale}, ${this.store.state?.translateX}, ${this.store.state?.translateY})`,\r\n }}\r\n >\r\n {this.store.objects?.map(object => {\r\n return (\r\n <div style={{ transform: object?.transformationMatrix, transformOrigin: 'top left', zIndex: object.zIndex.toString(), position: 'absolute' }}>\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n key={object.id}\r\n id={object.id}\r\n class=\"object\"\r\n style={{\r\n height: object?.totalHeight.toString(),\r\n width: object?.totalWidth.toString(),\r\n left: '0',\r\n top: '0',\r\n position: 'absolute',\r\n transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\r\n opacity: object.markedForRemoval ? '0.5' : object.opacity.toString(),\r\n pointerEvents: object.markedForRemoval ? 'none' : 'auto',\r\n }}\r\n >\r\n <foreignObject\r\n x=\"0\"\r\n y=\"0\"\r\n width={object.totalWidth.toString()}\r\n height={object.totalHeight.toString()}\r\n style={{\r\n minHeight: '0',\r\n minWidth: '0',\r\n backgroundColor: object.backgroundColor,\r\n borderColor: object.borderColor,\r\n borderWidth: object.borderWidth + 'px',\r\n borderStyle: 'solid',\r\n padding: object.padding + 'px',\r\n overflow: 'visible',\r\n }}\r\n >\r\n {KritzelClassHelper.isInstanceOf<KritzelPath>(object, 'KritzelPath') && (\r\n <svg\r\n ref={el => object.mount(el)}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{\r\n height: object?.height.toString(),\r\n width: object?.width.toString(),\r\n position: 'absolute',\r\n overflow: 'visible',\r\n }}\r\n viewBox={object?.viewBox}\r\n >\r\n <path d={object?.d} fill={object.fill} stroke={object?.stroke} />\r\n </svg>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelImage>(object, 'KritzelImage') && (\r\n <img\r\n ref={el => object.mount(el)}\r\n src={object.src}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n userSelect: 'none',\r\n pointerEvents: 'none',\r\n }}\r\n draggable={false}\r\n onDragStart={e => e.preventDefault()}\r\n />\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelText>(object, 'KritzelText') && (\r\n <textarea\r\n ref={el => object.mount(el)}\r\n value={object.value}\r\n onKeyDown={event => object.handleKeyDown(event)}\r\n onInput={event => object.handleInput(event)}\r\n rows={object.rows}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n color: object.fontColor,\r\n fontSize: object.fontSize?.toString() + 'px',\r\n fontFamily: object.fontFamily,\r\n border: 'none',\r\n outline: 'none',\r\n resize: 'none',\r\n overflow: 'hidden',\r\n display: 'block',\r\n padding: '1px',\r\n whiteSpace: 'nowrap',\r\n pointerEvents: object.isReadonly ? 'none' : 'auto',\r\n cursor: object.isReadonly ? 'default' : 'text',\r\n caretColor: object.isReadonly ? 'transparent' : 'auto',\r\n }}\r\n ></textarea>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KritzelSelectionGroup>(object, 'KritzelSelectionGroup') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n }}\r\n ></div>\r\n )}\r\n\r\n {KritzelClassHelper.isInstanceOf<KrtizelSelectionBox>(object, 'KrtizelSelectionBox') && (\r\n <div\r\n ref={el => object.mount(el)}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n }}\r\n ></div>\r\n )}\r\n </foreignObject>\r\n\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2=\"0\"\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #0e1111)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n visibility={object.selected ? 'visible' : 'hidden'}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1=\"0\"\r\n x2=\"0\"\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #0e1111)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n visibility={object.selected ? 'visible' : 'hidden'}\r\n />\r\n <line\r\n x1=\"0\"\r\n y1={object.totalHeight}\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #0e1111)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n visibility={object.selected ? 'visible' : 'hidden'}\r\n />\r\n <line\r\n x1={object.totalWidth}\r\n y1=\"0\"\r\n x2={object.totalWidth}\r\n y2={object.totalHeight}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #0e1111)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.store.state?.scale})`,\r\n strokeLinecap: 'square',\r\n }}\r\n visibility={object.selected ? 'visible' : 'hidden'}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.selected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-left\"\r\n cx=\"0\"\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n }}\r\n visibility={object.selected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleSize * object.scale) / this.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.selected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay top-right\"\r\n cx={object.totalWidth}\r\n cy=\"0\"\r\n r={`${(baseHandleTouchSize * object.scale) / this.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n }}\r\n visibility={object.selected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.selected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-left\"\r\n cx=\"0\"\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n }}\r\n visibility={object.selected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <circle\r\n class=\"resize-handle bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleSize * object.scale) / this.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.selected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"resize-handle-overlay bottom-right\"\r\n cx={object.totalWidth}\r\n cy={object.totalHeight}\r\n r={`${(baseHandleTouchSize * object.scale) / this.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n }}\r\n visibility={object.selected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <line\r\n x1={object.totalWidth / 2}\r\n y1=\"0\"\r\n x2={object.totalWidth / 2}\r\n y2={-((15 * object.scale) / this.store.state?.scale)}\r\n style={{\r\n stroke: 'var(--kritzel-selection-border-color, #0e1111)',\r\n strokeWidth: `calc(var(--kritzel-selection-border-width, 2px) * ${object.scale} / ${this.store.state?.scale})`,\r\n }}\r\n visibility={object.selected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"rotation-handle\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.store.state?.scale)}\r\n r={`${(baseHandleSize * object.scale) / this.store.state?.scale}`}\r\n style={{\r\n fill: 'var(--kritzel-selection-handle-color, #000000)',\r\n }}\r\n visibility={object.selected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n <circle\r\n class=\"rotation-handle-overlay\"\r\n cx={object.totalWidth / 2}\r\n cy={-((15 * object.scale) / this.store.state?.scale)}\r\n r={`${(baseHandleTouchSize * object.scale) / this.store.state?.scale}`}\r\n style={{\r\n fill: 'transparent',\r\n cursor: 'grab',\r\n }}\r\n visibility={object.selected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n\r\n <g style={{ display: this.store.state.debugInfo.showObjectInfo ? 'block' : 'none', pointerEvents: 'none' }}>\r\n <foreignObject\r\n x={object.totalWidth.toString()}\r\n y=\"0\"\r\n width=\"400px\"\r\n height=\"160px\"\r\n style={{ minHeight: '0', minWidth: '0', display: object.debugInfoVisible ? 'block' : 'none' }}\r\n >\r\n <div style={{ width: '100%', height: '100%' }}>\r\n <div style={{ whiteSpace: 'nowrap' }}>zIndex: {object.zIndex}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>translateX: {object.translateX}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>translateY: {object.translateY}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>width: {object.width}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>height: {object.height}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>scale: {object.scale}</div>\r\n <div style={{ whiteSpace: 'nowrap' }}>rotation: {object.rotation}</div>\r\n </div>\r\n </foreignObject>\r\n </g>\r\n </svg>\r\n </div>\r\n );\r\n })}\r\n\r\n <svg\r\n class=\"object\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n style={{\r\n height: this.store.state.currentPath?.height.toString(),\r\n width: this.store.state.currentPath?.width.toString(),\r\n left: '0',\r\n top: '0',\r\n zIndex: this.store.state.currentPath?.zIndex.toString(),\r\n position: 'absolute',\r\n transform: this.store.state.currentPath?.transformationMatrix,\r\n transformOrigin: 'top left',\r\n overflow: 'visible',\r\n }}\r\n viewBox={this.store.state.currentPath?.viewBox}\r\n >\r\n <path d={this.store.state.currentPath?.d} fill={this.store.state.currentPath?.fill} stroke={this.store.state.currentPath?.stroke} />\r\n </svg>\r\n </div>\r\n\r\n {this.store.state.isContextMenuVisible && (\r\n <kritzel-context-menu\r\n class=\"context-menu\"\r\n ref={el => (this.contextMenuElement = el)}\r\n items={this.store.state.contextMenuItems}\r\n style={{\r\n position: 'fixed',\r\n left: `${this.store.state.contextMenuX}px`,\r\n top: `${this.store.state.contextMenuY}px`,\r\n zIndex: '10000',\r\n }}\r\n onActionSelected={event => this.handleContextMenuAction(event)}\r\n ></kritzel-context-menu>\r\n )}\r\n\r\n {this.store.state?.activeTool instanceof KritzelEraserTool && !this.store.state.isScaling && <kritzel-cursor-trail store={this.store}></kritzel-cursor-trail>}\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: block;\r\n}\r\n\r\n.font-preview {\r\n color: var(--kritzel-font-size-text-color, #333333);\r\n line-height: 1;\r\n text-align: center;\r\n font-weight: bold;\r\n}\r\n","import { Component, Host, Prop, h } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'kritzel-font',\r\n styleUrl: 'kritzel-font.css',\r\n shadow: true,\r\n})\r\nexport class KritzelFont {\r\n @Prop()\r\n fontFamily: string = 'Arial, sans-serif';\r\n\r\n @Prop()\r\n size: number = 24;\r\n\r\n @Prop()\r\n color: string = '#000000';\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div\r\n class=\"font-preview\"\r\n style={{\r\n fontFamily: this.fontFamily,\r\n fontSize: `${this.size}px`,\r\n color: this.color\r\n }}\r\n >\r\n A\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: flex; \r\n align-items: flex-start; \r\n gap: 8px; \r\n padding: 8px; \r\n box-sizing: border-box; \r\n width: 100%;\r\n}\r\n\r\n.font-style-button {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 42px;\r\n height: 32px;\r\n padding: 0;\r\n border: none;\r\n outline: none;\r\n background: none;\r\n cursor: pointer;\r\n border-radius: 0; \r\n color: var(--control-text-color);\r\n font-weight: bold;\r\n -webkit-tap-highlight-color: transparent;\r\n}\r\n\r\n.font-style-button:not(:last-child) {\r\n border-right: 1px solid #333333; \r\n}\r\n\r\n.font-style-button:hover {\r\n background-color: var(--control-hover-bg);\r\n}\r\n\r\n.font-style-button:active {\r\n background-color: var(--control-active-bg);\r\n}\r\n\r\n.font-style-button.selected,\r\n.font-style-button.selected:hover,\r\n.font-style-button.selected:active {\r\n background-color: var(--control-selected-bg);\r\n color: var(--control-selected-color);\r\n}\r\n\r\n.font-style-button.italic-text {\r\n font-style: italic;\r\n}\r\n","import { Component, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\r\n\r\nexport interface FontOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\n@Component({\r\n tag: 'kritzel-font-family',\r\n styleUrl: 'kritzel-font-family.css',\r\n shadow: true,\r\n})\r\nexport class KritzelFontFamily {\r\n @Prop() \r\n fontOptions: FontOption[] = [\r\n { value: 'arial', label: 'Arial' },\r\n { value: 'verdana', label: 'Verdana' },\r\n { value: 'helvetica', label: 'Helvetica' },\r\n { value: 'tahoma', label: 'Tahoma' },\r\n { value: 'trebuchet ms', label: 'Trebuchet MS' },\r\n { value: 'times new roman', label: 'Times New Roman' },\r\n { value: 'georgia', label: 'Georgia' },\r\n { value: 'garamond', label: 'Garamond' },\r\n { value: 'courier new', label: 'Courier New' },\r\n { value: 'brush script mt', label: 'Brush Script MT' },\r\n ];\r\n\r\n @Prop({ mutable: true }) \r\n selectedFontFamily: string;\r\n\r\n @Event()\r\n fontFamilyChange: EventEmitter<string>;\r\n\r\n componentWillLoad() {\r\n if (this.fontOptions && this.fontOptions.length > 0) {\r\n const isValidCurrentFont = this.fontOptions.some(opt => opt.value === this.selectedFontFamily);\r\n if (!this.selectedFontFamily || !isValidCurrentFont) {\r\n this.selectedFontFamily = this.fontOptions[0].value;\r\n }\r\n }\r\n }\r\n\r\n private handleDropdownValueChange = (event: CustomEvent<string>) => {\r\n this.fontFamilyChange.emit(event.detail);\r\n };\r\n\r\n render() {\r\n const dropdownOptions = this.fontOptions.map(option => ({\r\n value: option.value,\r\n label: option.label,\r\n style: { fontFamily: option.value },\r\n }));\r\n\r\n return (\r\n <Host>\r\n <kritzel-dropdown\r\n options={dropdownOptions}\r\n value={this.selectedFontFamily}\r\n onValueChanged={this.handleDropdownValueChange}\r\n selectStyles={{ fontFamily: this.selectedFontFamily }}\r\n >\r\n <button class=\"font-style-button\" slot=\"suffix\">B</button>\r\n <button class=\"font-style-button italic-text\" slot=\"suffix\">I</button>\r\n </kritzel-dropdown>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 8px;\r\n padding: 8px;\r\n box-sizing: border-box;\r\n}\r\n\r\n.size-container {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 32px;\r\n height: 32px;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n border: 2px solid transparent;\r\n box-sizing: border-box;\r\n border-radius: 50%;\r\n}\r\n\r\n.size-container:hover {\r\n background-color: var(--kritzel-font-size-hover-background-color, #f0f0f0);\r\n}\r\n\r\n.size-container.selected {\r\n border-color: var(--kritzel-selection-border-color, #0E1111);\r\n background-color: var(--kritzel-font-size-selected-background-color, #e0e0e0);\r\n}\r\n\r\n","import { Component, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'kritzel-font-size',\r\n styleUrl: 'kritzel-font-size.css',\r\n shadow: true,\r\n})\r\nexport class KritzelFontSize {\r\n @Prop()\r\n sizes: number[] = [8, 10, 12, 16, 20, 24];\r\n\r\n @Prop({ mutable: true })\r\n selectedSize: number | null = null;\r\n\r\n @Prop()\r\n fontFamily: string = 'Arial';\r\n\r\n @Event()\r\n sizeChange: EventEmitter<number>;\r\n\r\n private handleSizeClick(size: number) {\r\n this.selectedSize = size;\r\n this.sizeChange.emit(size);\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n {this.sizes.map(size => (\r\n <div\r\n class={{\r\n 'size-container': true,\r\n 'selected': this.selectedSize === size,\r\n }}\r\n onClick={() => this.handleSizeClick(size)}\r\n >\r\n <kritzel-font fontFamily={this.fontFamily} size={size}></kritzel-font>\r\n </div>\r\n ))}\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: inline-flex; /* Changed from block to inline-flex for better alignment */\r\n justify-content: center; /* Center content horizontally */\r\n align-items: center; /* Center content vertically */\r\n}\r\n\r\nspan {\r\n display: flex;\r\n align-items: center;\r\n width: 100%; /* Make span fill host width */\r\n height: 100%; /* Make span fill host height */\r\n}\r\n\r\nspan > svg { /* Ensure SVG scales within the span */\r\n width: 100%;\r\n height: 100%;\r\n}\r\n","import { Component, h, Prop, Host } from '@stencil/core';\r\nimport { KritzelIconRegistry } from '../../../classes/registries/icon-registry.class';\r\n\r\n@Component({\r\n tag: 'kritzel-icon',\r\n styleUrl: 'kritzel-icon.css',\r\n shadow: true,\r\n})\r\nexport class KritzelIcon {\r\n @Prop()\r\n name: string;\r\n\r\n @Prop()\r\n label?: string;\r\n\r\n @Prop()\r\n size: number = 24;\r\n\r\n render() {\r\n const svgContent = KritzelIconRegistry.get(this.name);\r\n\r\n if (!svgContent) {\r\n console.error(`[kritzel-icon] Icon \"${this.name}\" not found in registry.`);\r\n return <span class=\"error-icon\" aria-label={`Error: Icon ${this.name} not found`}>?</span>;\r\n }\r\n\r\n const styles = {\r\n width: `${this.size}px`,\r\n height: `${this.size}px`,\r\n };\r\n\r\n return (\r\n <Host style={styles}>\r\n <span\r\n aria-hidden={!this.label}\r\n role={this.label ? 'img' : undefined}\r\n aria-label={this.label}\r\n innerHTML={svgContent}\r\n ></span>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 8px;\r\n padding: 8px;\r\n box-sizing: border-box;\r\n}\r\n\r\n.size-container {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 32px;\r\n height: 32px;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n border: 2px solid transparent;\r\n box-sizing: border-box;\r\n}\r\n\r\n.size-container:hover {\r\n background-color: var(--kritzel-stroke-size-hover-background-color, #f0f0f0);\r\n}\r\n\r\n.size-container.selected {\r\n border-color: var(--kritzel-selection-border-color, #0E1111);\r\n background-color: var(--kritzel-stroke-size-selected-background-color, #f0f0f0);\r\n}\r\n","import { Component, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'kritzel-stroke-size',\r\n styleUrl: 'kritzel-stroke-size.css',\r\n shadow: true,\r\n})\r\nexport class KritzelStrokeSize {\r\n @Prop() \r\n sizes: number[] = [4, 6, 8, 12, 16, 24];\r\n\r\n @Prop({ mutable: true }) \r\n selectedSize: number | null = null;\r\n\r\n @Event() \r\n sizeChange: EventEmitter<number>;\r\n\r\n private handleSizeClick(size: number) {\r\n this.selectedSize = size;\r\n this.sizeChange.emit(size);\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n {this.sizes.map(size => (\r\n <div\r\n class={{\r\n 'size-container': true,\r\n 'selected': this.selectedSize === size,\r\n }}\r\n onClick={() => this.handleSizeClick(size)}\r\n >\r\n <kritzel-color value='#000000' size={size}></kritzel-color>\r\n </div>\r\n ))}\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n width: auto;\r\n}\r\n\r\n.tooltip-content {\r\n position: relative;\r\n padding: 8px 12px;\r\n border-radius: 4px;\r\n width: fit-content;\r\n background-color: var(--kritzel-controls-tooltip-background-color, #ffffff);\r\n color: var(--kritzel-controls-tooltip-color, #000000);\r\n padding: var(--kritzel-controls-tooltip-padding, 8px);\r\n border-radius: var(--kritzel-controls-tooltip-border-radius, 16px);\r\n white-space: nowrap;\r\n box-shadow: var(--kritzel-controls-tooltip-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12));\r\n}\r\n\r\n","import { Component, Host, Prop, h, Element, State, Listen } from '@stencil/core';\r\n\r\nconst MOBILE_BREAKPOINT = 768;\r\n\r\n@Component({\r\n tag: 'kritzel-tooltip',\r\n styleUrl: 'kritzel-tooltip.css',\r\n shadow: true,\r\n})\r\nexport class KritzelTooltip {\r\n @Prop()\r\n isVisible: boolean = false;\r\n\r\n @Prop()\r\n anchorElement: HTMLElement;\r\n\r\n @Prop()\r\n arrowSize: number = 8;\r\n\r\n @Prop()\r\n offsetY: number = 24;\r\n\r\n @Element()\r\n el: HTMLElement;\r\n\r\n @State()\r\n positionX: number = 0;\r\n\r\n @State()\r\n arrowOffset: string = '0px';\r\n\r\n @State()\r\n private isMobileView: boolean = window.innerWidth < MOBILE_BREAKPOINT;\r\n\r\n @Listen('resize', { target: 'window' })\r\n handleWindowResize() {\r\n this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;\r\n this.calculateAdjustedPosition();\r\n }\r\n\r\n componentWillLoad() {\r\n this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;\r\n this.calculateAdjustedPosition();\r\n }\r\n\r\n componentWillUpdate() {\r\n this.calculateAdjustedPosition();\r\n }\r\n\r\n private calculateAdjustedPosition() {\r\n if (this.isVisible && this.anchorElement) {\r\n const anchorRect = this.anchorElement.getBoundingClientRect();\r\n const tooltipContent = this.el.shadowRoot?.querySelector('.tooltip-content') as HTMLElement;\r\n\r\n if (!this.isMobileView) {\r\n this.positionX = anchorRect.left + anchorRect.width / 2;\r\n this.arrowOffset = `calc(${50}% - ${this.arrowSize}px)`; \r\n } else {\r\n const tooltipRect = tooltipContent.getBoundingClientRect();\r\n this.positionX = anchorRect.left + anchorRect.width / 2 - tooltipRect.width / 2;\r\n this.arrowOffset = `${anchorRect.left + anchorRect.width / 2 - tooltipRect.left - this.arrowSize}px`;\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Host\r\n style={{\r\n position: 'fixed',\r\n zIndex: '9999',\r\n transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out',\r\n visibility: this.isVisible ? 'visible' : 'hidden',\r\n left: !this.isMobileView ? `${this.positionX}px` : '50%',\r\n marginBottom: `${this.offsetY + this.arrowSize}px`,\r\n }}\r\n >\r\n <div class=\"tooltip-content\" onClick={event => event.stopPropagation()}>\r\n <slot></slot>\r\n <div\r\n class=\"tooltip-arrow-wrapper\"\r\n style={{\r\n position: 'fixed',\r\n left: this.arrowOffset,\r\n bottom: `-${this.arrowSize * 2}px`,\r\n }}\r\n >\r\n <div\r\n class=\"tooltip-arrow\"\r\n style={{\r\n borderLeft: `${this.arrowSize}px solid transparent`,\r\n borderRight: `${this.arrowSize}px solid transparent`,\r\n borderTop: `${this.arrowSize}px solid var(--kritzel-controls-tooltip-background-color, #ffffff)`,\r\n filter: 'drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2))',\r\n }}\r\n ></div>\r\n <div\r\n class=\"tooltip-arrow-rect\"\r\n style={{\r\n position: 'relative',\r\n width: `${this.arrowSize * 2}px`,\r\n height: `${this.arrowSize}px`,\r\n backgroundColor: 'var(--kritzel-controls-tooltip-background-color, #ffffff)',\r\n bottom: `${this.arrowSize * 2}px`,\r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n padding: 4px;\r\n gap: 8px;\r\n border-top-left-radius: 12px;\r\n border-top-right-radius: 12px;\r\n background-color: rgb(226, 226, 226);\r\n width: fit-content;\r\n user-select: none;\r\n}\r\n\r\n.utility-button {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 28px;\r\n height: 28px;\r\n padding: 8px 4px;\r\n border: none;\r\n outline: none;\r\n background: none;\r\n cursor: pointer;\r\n color: #333333;\r\n -webkit-tap-highlight-color: transparent;\r\n}\r\n\r\n.utility-separator {\r\n width: 1px;\r\n height: 16px;\r\n background-color: hsl(0, 0%, 0%, 4.3%);\r\n}","import { Component, Host, h, Event, EventEmitter } from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'kritzel-utility-panel',\r\n styleUrl: 'kritzel-utility-panel.css',\r\n shadow: true,\r\n})\r\nexport class KritzelUtilityPanel {\r\n @Event()\r\n undo: EventEmitter<void>;\r\n\r\n @Event()\r\n redo: EventEmitter<void>;\r\n\r\n @Event()\r\n delete: EventEmitter<void>;\r\n\r\n handleUndo(event: Event) {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.undo.emit();\r\n }\r\n }\r\n\r\n handleRedo(event: Event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.redo.emit();\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <button class=\"utility-button\" onClick={event => this.handleUndo(event)}>\r\n <kritzel-icon name=\"undo\"></kritzel-icon>\r\n </button>\r\n <button class=\"utility-button\" onClick={event => this.handleRedo(event)}>\r\n <kritzel-icon name=\"redo\"></kritzel-icon>\r\n </button>\r\n\r\n <div class=\"utility-separator\"></div>\r\n\r\n <button class=\"utility-button\">\r\n <kritzel-icon name=\"delete\" onClick={() => this.delete.emit()}></kritzel-icon>\r\n </button>\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|