kritzel-stencil 0.0.112 → 0.0.113

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/dist/cjs/kritzel-brush-style_18.cjs.entry.js +12 -10
  2. package/dist/cjs/kritzel-brush-style_18.cjs.entry.js.map +1 -1
  3. package/dist/collection/classes/handlers/key.handler.js +4 -1
  4. package/dist/collection/classes/handlers/key.handler.js.map +1 -1
  5. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +4 -4
  6. package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
  7. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +4 -5
  8. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -1
  9. package/dist/components/kritzel-controls.js +1 -1
  10. package/dist/components/kritzel-editor.js +6 -6
  11. package/dist/components/kritzel-editor.js.map +1 -1
  12. package/dist/components/kritzel-engine.js +1 -1
  13. package/dist/components/{p-BnsTGnvc.js → p-CFwf2KYj.js} +6 -7
  14. package/dist/components/p-CFwf2KYj.js.map +1 -0
  15. package/dist/components/{p--2WHhuBI.js → p-DieKGjdj.js} +6 -3
  16. package/dist/components/{p--2WHhuBI.js.map → p-DieKGjdj.js.map} +1 -1
  17. package/dist/esm/kritzel-brush-style_18.entry.js +12 -10
  18. package/dist/esm/kritzel-brush-style_18.entry.js.map +1 -1
  19. package/dist/stencil/{p-65e86254.entry.js → p-dc26eb80.entry.js} +2 -2
  20. package/dist/stencil/p-dc26eb80.entry.js.map +1 -0
  21. package/dist/stencil/stencil.esm.js +1 -1
  22. package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +1 -1
  23. package/package.json +1 -1
  24. package/dist/components/p-BnsTGnvc.js.map +0 -1
  25. package/dist/stencil/p-65e86254.entry.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","KritzelMouseButton","KritzelEventHelper","isRightClick","ev","button","Right","isLeftClick","Left","isMainMouseWheel","abs","deltaY","deltaX","Number","isInteger","isPointerEventOnContextMenu","path","composedPath","contextMenu","find","element","classList","contains","onLongTouchPress","onSuccess","onCancel","pointerType","longPressTimeout","moveThreshold","startX","clientX","startY","clientY","target","timer","setTimeout","removeListeners","cancel","clearTimeout","onPointerMove","e","onPointerUp","onPointerCancel","removeEventListener","addEventListener","passive","once","KritzelBaseCommand","store","initiator","_store","_b","_a","isUndoable","execute","Error","undo","AddObjectCommand","object","super","state","objectsOctree","insert","remove","id","pe","Object","defineProperty","ge","de","t","s","get","enumerable","exports","default","ve","getStroke","ne","getStrokeOutlinePoints","te","getStrokePoints","re","$","x","ce","l","a","xe","R","B","me","Se","hypot","Pe","A","G","ae","L","sin","cos","y","n","f","d","K","ee","min","C","PI","ke","le","V","smoothing","thinning","simulatePressure","easing","start","end","last","D","cap","S","j","q","c","p","runningLength","taper","max","T","oe","pow","_","M","H","reduce","i","o","pressure","u","distance","W","m","U","X","vector","z","point","F","O","E","J","I","v","Z","fe","be","se","Y","he","ue","w","push","ie","P","k","Q","N","concat","reverse","streamline","Array","isArray","KritzelMathHelper","average","ObjectHelper","generateUUID","random","toString","substr","clone","objOrObjs","cloneObject","obj","remainingProps","__rest","structuredClone","isEmpty","undefined","keys","KritzelBaseObject","totalWidth","padding","totalHeight","elementRef","_elementRef","boundingBox","translateX","translateY","scale","depth","rotatedBoundingBox","minXRotated","minYRotated","maxXRotated","maxYRotated","rotatedPolygon","cx","cy","angle","rotation","adjustedWidth","adjustedHeight","corners","topLeft","topRight","bottomRight","bottomLeft","rotatedCorners","acc","corner","rotatedX","rotatedY","transformationMatrix","rotationDegrees","centerX","centerY","__class__","visible","borderWidth","opacity","resizing","markedForRemoval","isMounted","zIndex","debugInfoVisible","generateId","create","currentZIndex","mount","isInViewport","viewportBounds","viewportWidth","viewportHeight","centerInViewport","move","endX","endY","resize","rotate","copy","copiedObject","getPrototypeOf","assign","onSelectedClick","revive","KritzelPath","stroke","lineSlack","viewBox","points","_c","_d","strokeWidth","_e","fill","_f","generateSvgPath","updateDimensions","scaleX","scaleY","rotatedPoints","minX","minY","maxX","maxY","getStrokeFromPoints","getSvgPathFromStroke","closed","len","result","toFixed","KritzelBaseTool","onActivate","onDeactivate","handlePointerDown","_event","handlePointerMove","handlePointerUp","handleWheel","KritzelBrushTool","pen","highlighter","cancelable","preventDefault","isDrawing","offsetX","offsetY","currentPath","activePointers","from","pointers","values","round","rerender","history","executeCommand","KritzelToolRegistry","registerTool","toolName","toolInstance","registry","getTool","console","warn","KritzelText","isReadonly","activeTool","KritzelTextTool","config","initialWidth","isNew","rows","scaleFactor","handleKeyDown","stopPropagation","handleInput","selectionStart","selectionEnd","trim","adjustTextareaSize","span","document","createElement","whiteSpace","window","getComputedStyle","innerHTML","replace","body","appendChild","textWidth","offsetWidth","textHeight","offsetHeight","removeChild","focus","selectAll","select","insertFromClipboard","navigator","clipboard","readText","then","text","err","error","setState","selectionGroup","selectionBox","activeText","KritzelKeyboardHelper","forceHideKeyboard","activeElement","HTMLElement","blur","enableInteractiveWidget","meta","querySelector","currentContent","getAttribute","includes","setAttribute","disableInteractiveWidget","newContent","objectElement","findObjectById","resetActiveText","KritzelDevicesHelper","isTouchDevice","matchMedia","matches","kritzelControlsCss","KritzelControls","controls","activeControl","firstConfig","tooltipVisible","kritzelEngine","handleActiveToolChange","control","setFocus","handleClick","closest","enable","closeTooltip","activeToolAsTextTool","activeToolAsBrushTool","initializeEngine","initializeTools","componentDidLoad","controlsReady","customElements","whenDefined","host","parentElement","isDefault","changeActiveTool","handleControlClick","handleConfigClick","disable","hasNoConfig","mobile","bottom","onUndo","onRedo","redo","onDelete","delete","call","isVisible","anchorElement","shadowRoot","onToolChange","cursor","pointerEvents","border","_g","_h","kritzelCursorTrailCss","KritzelCursorTrail","cursorTrailPoints","isLeftButtonDown","TRAIL_DURATION_MS","MAX_TRAIL_POINTS","trailCleanupIntervalId","setInterval","now","Date","newTrailPoints","filter","timestamp","disconnectedCallback","clearInterval","handleMouseDown","newPoint","updatedTrail","xmlns","index","prevPoint","age","progress","baseStrokeWidth","x1","y1","x2","y2","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","has","set","registerIcons","icons","prototype","hasOwnProperty","Map","eraser","image","paste","cut","download","BatchCommand","commands","forEach","command","RemoveObjectCommand","KritzelEraserTool","touchStartTimeout","isErasing","isScaling","selectedObject","getObjectFromPointerEvent","removeCommands","allObjects","KritzelImage","src","RemoveSelectionGroupCommand","previousSelectionGroup","MoveSelectionGroupCommand","skipFirstExecution","skipExecution","KritzelBaseHandler","KritzelMoveHandler","isResizeHandleSelected","isRotationHandleSelected","isDragging","dragStartX","dragStartY","moveDeltaX","moveDeltaY","longTouchTimeout","KritzelHandleType","ResizeSelectionGroupCommand","previousSize","newSize","KritzelResizeHandler","initialMouseX","initialMouseY","initialSize","isResizing","firstTouch","dx","dy","resizeHandleType","TopLeft","TopRight","BottomLeft","BottomRight","oneFingerTouch","resizeSelectionGroupCommand","RotateSelectionGroupCommand","initialRotation","objects","update","KritzelRotationHandler","isRotating","cursorX","cursorY","atan2","groupCenterX","groupCenterY","currentRotation","KritzelGeometryHelper","doPolygonsIntersect","polygon1","polygon2","points1","points2","isPointInPolygon","p1a","p1b","p2a","p2b","intersectLines","polygon","inside","xi","yi","xj","yj","intersect","det","KrtizelSelectionBox","borderColor","AddSelectionGroupCommand","KritzelSelectionHandler","isSelectionClick","isSelectionDrag","touchStartX","touchStartY","startMouseSelection","startTouchSelection","updateTouchSelection","isSelecting","updateMouseSelection","addSelectedObjectAtIndexToSelectionGroup","removeSelectionBox","addSelectedObjectsToSelectionGroup","skipContextMenu","KritzelSelectionGroup","currentX","currentY","updateSelectedObjects","objectPolygon","selectionBoxPolygon","selectedObjects","sort","addOrRemove","KritzelSelectionTool","selectionHandler","moveHandler","resizeHandler","rotationHandler","isHandleSelected","getHandleType","getSelectedObject","isDifferentObject","group","TouchEvent","touches","elementAtPoint","elementFromPoint","handle","KritzelReviver","revivedObj","KritzelImageTool","newObj","unchangedObjects","findIndex","splice","refreshObjectDimensions","deselectAllChildren","updatePosition","widthScaleFactor","heightScaleFactor","child","updatedWidth","updatedHeight","updatedX","updatedY","unchangedChild","getUnchangedObject","getOffsetXToCenter","getOffsetYToCenter","objCenterX","objCenterY","objectId","reviver","_mergeNamespaces","getOwnPropertyDescriptor","freeze","copyExifWithoutOrientation","Promise","getApp1Segment","Blob","FileReader","DataView","getUint16","getUint32","setUint16","readAsArrayBuffer","UZIP","parse","bin","readUshort","readUint","Uint8Array","_readLocal","readUTF8","csize","buffer","inflateRaw","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","_goodIndex","_putsE","_copyExact","lits","strt","prev","_hash","_writeBlock","_bestMatch","of0","lhst","df0","dhst","exb","dxb","_howLong","saved","_putsF","getTrees","contSize","fltree","fdtree","ltree","dtree","itree","ihst","makeCodes","revCodes","ordr","_codeTiny","_writeLit","_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__","UPNG","nextZero","readBytes","decodeImage","_getBPP","ctype","tabs","tRNS","PLTE","_decompress","interlace","CgBI","_inflate","_filterZero","_readInterlace","_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","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","getBrowserName","cachedResult","userAgent","test","documentMode","approximateBelowMaximumCanvasSizeOfBrowser","getNewCanvasAndCtx","OffscreenCanvas","drawImageInCanvas","fillStyle","fillRect","drawImage","isIOS","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","postMessage","imageCompressionLibUrl","libURL","imageCompression","POSITIVE_INFINITY","useWebWorker","$Try_1_Catch","preserveExif","version","fileInput","maxWidth","maxHeight","maxCompressionSize","setupFileInput","openFilePicker","click","accept","handleFileSelect","handleCancel","input","files","compressedFile","readFile","catch","info","reader","processImage","scaledWidth","scaledHeight","calculateScaledDimensions","createKritzelImage","addImageToStore","widthRatio","heightRatio","scaleRatio","addImageCommand","addSelectionGroupCommand","DEFAULT_BRUSH_CONFIG","DEFAULT_TEXT_CONFIG","DEFAULT_KRITZEL_CONTROLS","kritzelEditorCss","KritzelEditor","customSvgIcons","hideControls","handleTouchStart","controlsRef","registerCustomSvgIcons","svg","entries","engineRef","KritzelViewport","initialTouchDistance","clientWidth","clientHeight","handleResize","hasViewportChanged","adjustedClientX","adjustedClientY","isPanning","firstTouchX","firstTouchY","secondTouchX","secondTouchY","currentTouchDistance","midpointX","midpointY","newScale","scaleMax","scaleMin","translateXAdjustment","translateYAdjustment","ctrlKey","handleZoom","handlePan","getBoundingClientRect","delta","scaleStep","panSpeed","UpdateViewportCommand","previousViewport","currentViewport","KritzelCircularBuffer","capacity","head","tail","add","peek","lastIndex","clear","KritzelHistory","undoStack","historyBufferSize","redoStack","debugInfo","logCommands","KritzelOctree","bounds","children","intersects","subdivide","predicate","query","range","results","halfWidth","halfHeight","halfDepth","UpdateObjectCommand","updatedProperties","previousProperties","DEFAULT_ENGINE_STATE","copiedObjects","isEnabled","isFocused","isWriting","isCtrlKeyPressed","isContextMenuVisible","contextMenuItems","contextMenuX","contextMenuY","showObjectInfo","showViewportInfo","longTouchDelay","KritzelStore","_history","_state","_listeners","_kritzelEngine","Infinity","forceUpdate","deselectAllObjects","onStateChange","property","listener","Set","oldValue","deleteSelectedObjectsCommand","removeSelectionGroupCommand","deleteObject","isHistoryUpdated","removeObjectCommand","adjustedX","adjustedY","addCopiedObjectsCommands","addCopiedObjectsAsSelectionGroupCommand","moveUp","increaseZIndexCommands","moveDown","decreaseZIndexCommands","moveToTop","moveToBottom","selectObjects","selectAllObjectsInViewport","objectsInViewport","clearSelection","selector","touch","KritzelKeyHandler","shiftKey","handleKeyUp","KritzelContextMenuHandler","globalContextMenuItems","objectContextMenuItems","handleContextMenu","menuWidthEstimate","menuHeightEstimate","margin","innerWidth","innerHeight","kritzelEngineCss","KritzelEngine","isSelectionActive","action","contextMenuElement","contextMenuHandler","keyHandler","activeToolChange","viewport","engineReady","hideContextMenu","setPointerCapture","pointerId","releasePointerCapture","handlePointerCancel","updateFocus","isInside","kritzelEngineElement","isInKritzelEngine","handleContextMenuAction","toolClass","toolConfig","registeredTool","resolve","getObjectById","addObject","updateObject","removeObject","computedStyle","baseHandleSizePx","getPropertyValue","baseHandleSize","parseFloat","baseHandleTouchSize","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","transformOrigin","minHeight","minWidth","borderStyle","overflow","userSelect","draggable","onDragStart","onKeyDown","outline","caretColor","strokeLinecap","_u","_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","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/enums/event-button.enum.ts","src/helpers/event.helper.ts","src/classes/commands/base.command.ts","src/classes/commands/add-object.command.ts","../../node_modules/perfect-freehand/dist/cjs/index.js","src/helpers/math.helper.ts","src/helpers/object.helper.ts","src/classes/objects/base-object.class.ts","src/classes/objects/path.class.ts","src/classes/tools/base-tool.class.ts","src/classes/tools/brush-tool.class.ts","src/classes/registries/tool.registry.ts","src/classes/objects/text.class.ts","src/helpers/keyboard.helper.ts","src/classes/tools/text-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/objects/image.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/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, 8px);\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 hsl(0, 0%, 0%, 4.3%));\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, 8px);\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","export enum KritzelMouseButton {\r\n Left = 0,\r\n Middle = 1,\r\n Right = 2\r\n}\r\n","import { KritzelMouseButton } from '../enums/event-button.enum';\r\n\r\nexport class KritzelEventHelper {\r\n public static isRightClick(ev: MouseEvent): boolean {\r\n return ev.button === KritzelMouseButton.Right;\r\n }\r\n\r\n public static isLeftClick(ev: MouseEvent): boolean {\r\n return ev.button === KritzelMouseButton.Left;\r\n }\r\n\r\n public static isMainMouseWheel(event: WheelEvent): boolean {\r\n return Math.abs(event.deltaY) > 0 && Math.abs(event.deltaX) === 0 && Number.isInteger(event.deltaY);\r\n }\r\n\r\n public static isPointerEventOnContextMenu(event: PointerEvent): boolean {\r\n const path = event.composedPath() as HTMLElement[];\r\n const contextMenu = path.find(element => element.classList && element.classList.contains('context-menu'));\r\n return !!contextMenu;\r\n }\r\n\r\n public static onLongTouchPress(\r\n event: PointerEvent,\r\n onSuccess: (event: PointerEvent) => void,\r\n onCancel?: () => void\r\n ): () => void {\r\n if (event.pointerType !== 'touch') {\r\n onCancel?.();\r\n return () => {};\r\n }\r\n\r\n const longPressTimeout = 400;\r\n const moveThreshold = 10;\r\n\r\n const startX = event.clientX;\r\n const startY = event.clientY;\r\n const target = event.target as HTMLElement;\r\n\r\n const timer = setTimeout(() => {\r\n removeListeners();\r\n onSuccess(event);\r\n }, longPressTimeout);\r\n\r\n const cancel = () => {\r\n clearTimeout(timer);\r\n removeListeners();\r\n onCancel?.();\r\n };\r\n\r\n const onPointerMove = (e: PointerEvent) => {\r\n if (Math.abs(e.clientX - startX) > moveThreshold || Math.abs(e.clientY - startY) > moveThreshold) {\r\n cancel();\r\n }\r\n };\r\n\r\n const onPointerUp = () => {\r\n cancel();\r\n };\r\n\r\n const onPointerCancel = () => {\r\n cancel();\r\n };\r\n\r\n const removeListeners = () => {\r\n target.removeEventListener('pointermove', onPointerMove);\r\n target.removeEventListener('pointerup', onPointerUp);\r\n target.removeEventListener('pointercancel', onPointerCancel);\r\n };\r\n\r\n target.addEventListener('pointermove', onPointerMove, { passive: true });\r\n target.addEventListener('pointerup', onPointerUp, { once: true });\r\n target.addEventListener('pointercancel', onPointerCancel, { once: true });\r\n\r\n return cancel;\r\n }\r\n\r\n}\r\n","import { KritzelCommand } from '../../interfaces/command.interface';\r\nimport { KritzelStore } from '../store.class';\r\n\r\nexport class KritzelBaseCommand implements KritzelCommand {\r\n protected _store: KritzelStore;\r\n\r\n initiator: string;\r\n isUndoable;\r\n\r\n constructor(store: KritzelStore, initiator: any) {\r\n this._store = store;\r\n this.initiator = initiator?.constructor?.name ?? 'Unknown';\r\n this.isUndoable = true;\r\n }\r\n\r\n execute(): void {\r\n throw new Error('Method not implemented.');\r\n }\r\n\r\n undo(): void {\r\n throw new Error('Method not implemented.');\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 AddObjectCommand 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.insert(this.object);\r\n }\r\n\r\n undo(): void {\r\n this._store.state.objectsOctree.remove(object => object.id === this.object.id);\r\n }\r\n}\r\n","var pe=Object.defineProperty;var ge=e=>pe(e,\"__esModule\",{value:!0});var de=(e,t)=>{ge(e);for(var s in t)pe(e,s,{get:t[s],enumerable:!0})};de(exports,{default:()=>ve,getStroke:()=>ne,getStrokeOutlinePoints:()=>te,getStrokePoints:()=>re});function $(e,t,s,x=h=>h){return e*x(.5-t*(.5-s))}function ce(e){return[-e[0],-e[1]]}function l(e,t){return[e[0]+t[0],e[1]+t[1]]}function a(e,t){return[e[0]-t[0],e[1]-t[1]]}function b(e,t){return[e[0]*t,e[1]*t]}function xe(e,t){return[e[0]/t,e[1]/t]}function R(e){return[e[1],-e[0]]}function B(e,t){return e[0]*t[0]+e[1]*t[1]}function me(e,t){return e[0]===t[0]&&e[1]===t[1]}function Se(e){return Math.hypot(e[0],e[1])}function Pe(e){return e[0]*e[0]+e[1]*e[1]}function A(e,t){return Pe(a(e,t))}function G(e){return xe(e,Se(e))}function ae(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function L(e,t,s){let x=Math.sin(s),h=Math.cos(s),y=e[0]-t[0],n=e[1]-t[1],f=y*h-n*x,d=y*x+n*h;return[f+t[0],d+t[1]]}function K(e,t,s){return l(e,b(a(t,e),s))}function ee(e,t,s){return l(e,b(t,s))}var{min:C,PI:ke}=Math,le=.275,V=ke+1e-4;function te(e,t={}){let{size:s=16,smoothing:x=.5,thinning:h=.5,simulatePressure:y=!0,easing:n=r=>r,start:f={},end:d={},last:D=!1}=t,{cap:S=!0,easing:j=r=>r*(2-r)}=f,{cap:q=!0,easing:c=r=>--r*r*r+1}=d;if(e.length===0||s<=0)return[];let p=e[e.length-1].runningLength,g=f.taper===!1?0:f.taper===!0?Math.max(s,p):f.taper,T=d.taper===!1?0:d.taper===!0?Math.max(s,p):d.taper,oe=Math.pow(s*x,2),_=[],M=[],H=e.slice(0,10).reduce((r,i)=>{let o=i.pressure;if(y){let u=C(1,i.distance/s),W=C(1,1-u);o=C(1,r+(W-r)*(u*le))}return(r+o)/2},e[0].pressure),m=$(s,h,e[e.length-1].pressure,n),U,X=e[0].vector,z=e[0].point,F=z,O=z,E=F,J=!1;for(let r=0;r<e.length;r++){let{pressure:i}=e[r],{point:o,vector:u,distance:W,runningLength:I}=e[r];if(r<e.length-1&&p-I<3)continue;if(h){if(y){let v=C(1,W/s),Z=C(1,1-v);i=C(1,H+(Z-H)*(v*le))}m=$(s,h,i,n)}else m=s/2;U===void 0&&(U=m);let fe=I<g?j(I/g):1,be=p-I<T?c((p-I)/T):1;m=Math.max(.01,m*Math.min(fe,be));let se=(r<e.length-1?e[r+1]:e[r]).vector,Y=r<e.length-1?B(u,se):1,he=B(u,X)<0&&!J,ue=Y!==null&&Y<0;if(he||ue){let v=b(R(X),m);for(let Z=1/13,w=0;w<=1;w+=Z)O=L(a(o,v),o,V*w),_.push(O),E=L(l(o,v),o,V*-w),M.push(E);z=O,F=E,ue&&(J=!0);continue}if(J=!1,r===e.length-1){let v=b(R(u),m);_.push(a(o,v)),M.push(l(o,v));continue}let ie=b(R(K(se,u,Y)),m);O=a(o,ie),(r<=1||A(z,O)>oe)&&(_.push(O),z=O),E=l(o,ie),(r<=1||A(F,E)>oe)&&(M.push(E),F=E),H=i,X=u}let P=e[0].point.slice(0,2),k=e.length>1?e[e.length-1].point.slice(0,2):l(e[0].point,[1,1]),Q=[],N=[];if(e.length===1){if(!(g||T)||D){let r=ee(P,G(R(a(P,k))),-(U||m)),i=[];for(let o=1/13,u=o;u<=1;u+=o)i.push(L(r,P,V*2*u));return i}}else{if(!(g||T&&e.length===1))if(S)for(let i=1/13,o=i;o<=1;o+=i){let u=L(M[0],P,V*o);Q.push(u)}else{let i=a(_[0],M[0]),o=b(i,.5),u=b(i,.51);Q.push(a(P,o),a(P,u),l(P,u),l(P,o))}let r=R(ce(e[e.length-1].vector));if(T||g&&e.length===1)N.push(k);else if(q){let i=ee(k,r,m);for(let o=1/29,u=o;u<1;u+=o)N.push(L(i,k,V*3*u))}else N.push(l(k,b(r,m)),l(k,b(r,m*.99)),a(k,b(r,m*.99)),a(k,b(r,m)))}return _.concat(N,M.reverse(),Q)}function re(e,t={}){var q;let{streamline:s=.5,size:x=16,last:h=!1}=t;if(e.length===0)return[];let y=.15+(1-s)*.85,n=Array.isArray(e[0])?e:e.map(({x:c,y:p,pressure:g=.5})=>[c,p,g]);if(n.length===2){let c=n[1];n=n.slice(0,-1);for(let p=1;p<5;p++)n.push(K(n[0],c,p/4))}n.length===1&&(n=[...n,[...l(n[0],[1,1]),...n[0].slice(2)]]);let f=[{point:[n[0][0],n[0][1]],pressure:n[0][2]>=0?n[0][2]:.25,vector:[1,1],distance:0,runningLength:0}],d=!1,D=0,S=f[0],j=n.length-1;for(let c=1;c<n.length;c++){let p=h&&c===j?n[c].slice(0,2):K(S.point,n[c],y);if(me(S.point,p))continue;let g=ae(p,S.point);if(D+=g,c<j&&!d){if(D<x)continue;d=!0}S={point:p,pressure:n[c][2]>=0?n[c][2]:.5,vector:G(a(S.point,p)),distance:g,runningLength:D},f.push(S)}return f[0].vector=((q=f[1])==null?void 0:q.vector)||[0,0],f}function ne(e,t={}){return te(re(e,t),t)}var ve=ne;\n","export class KritzelMathHelper {\r\n public static average(a: number, b: number): number {\r\n return (a + b) / 2;\r\n }\r\n}\r\n","import { KritzelBaseObject } from '../classes/objects/base-object.class';\r\n\r\nexport class ObjectHelper {\r\n\r\n static generateUUID(): string {\r\n return Math.random().toString(36).substr(2, 9);\r\n }\r\n\r\n static clone(objOrObjs: KritzelBaseObject<any> | KritzelBaseObject<any>[]): any {\r\n const cloneObject = (obj: KritzelBaseObject<any>) => {\r\n const { _store, _elementRef, totalWidth, totalHeight, ...remainingProps } = obj;\r\n return structuredClone(remainingProps);\r\n };\r\n\r\n if (Array.isArray(objOrObjs)) {\r\n return objOrObjs.map(cloneObject);\r\n }\r\n\r\n return cloneObject(objOrObjs);\r\n }\r\n\r\n static isEmpty(obj: any): boolean {\r\n if (obj === null || obj === undefined) {\r\n return true;\r\n }\r\n return Object?.keys(obj).length === 0 && obj?.constructor === Object;\r\n }\r\n\r\n}\r\n","import { KritzelBoundingBox } from '../../interfaces/bounding-box.interface';\r\nimport { KritzelObject } from '../../interfaces/object.interface';\r\nimport { KritzelPolygon } from '../../interfaces/polygon.interface';\r\nimport { KritzelSerializable } from '../../interfaces/serializable.interface';\r\nimport { KritzelStore } from '../store.class';\r\nimport { ObjectHelper } from '../../helpers/object.helper';\r\n\r\nexport class KritzelBaseObject<T extends Element = HTMLElement> implements KritzelObject<T>, KritzelSerializable {\r\n __class__: string = 'KritzelBaseObject';\r\n id: string;\r\n visible: boolean = true;\r\n x: number;\r\n y: number;\r\n translateX: number;\r\n translateY: number;\r\n height: number;\r\n width: number;\r\n backgroundColor: string;\r\n borderColor: string;\r\n borderWidth: number = 0;\r\n opacity: number = 1;\r\n padding: number = 0;\r\n scale: number;\r\n selected: boolean = false;\r\n resizing: boolean = false;\r\n rotation: number = 0;\r\n markedForRemoval: boolean = false;\r\n isMounted: boolean = false;\r\n zIndex: number = 0;\r\n\r\n debugInfoVisible: boolean = false;\r\n\r\n _store: KritzelStore;\r\n _elementRef: T;\r\n\r\n get totalWidth(): number {\r\n return this.width + this.padding * 2;\r\n }\r\n\r\n get totalHeight(): number {\r\n return this.height + this.padding * 2;\r\n }\r\n\r\n set elementRef(element: T) {\r\n this._elementRef = element;\r\n }\r\n\r\n get elementRef(): T {\r\n return this._elementRef;\r\n }\r\n\r\n get boundingBox(): KritzelBoundingBox {\r\n return {\r\n x: this.translateX,\r\n y: this.translateY,\r\n z: this.scale,\r\n width: this.totalWidth / this.scale,\r\n height: this.totalHeight / this.scale,\r\n depth: 0,\r\n };\r\n }\r\n\r\n get rotatedBoundingBox(): KritzelBoundingBox {\r\n return {\r\n x: this.minXRotated,\r\n y: this.minYRotated,\r\n z: this.scale,\r\n width: this.maxXRotated - this.minXRotated,\r\n height: this.maxYRotated - this.minYRotated,\r\n depth: 0,\r\n };\r\n }\r\n\r\n get rotatedPolygon(): KritzelPolygon {\r\n const cx = (this.translateX + this.totalWidth / 2 / this.scale);\r\n const cy = (this.translateY + this.totalHeight / 2 / this.scale);\r\n const angle = this.rotation;\r\n\r\n const adjustedWidth = this.totalWidth / this.scale;\r\n const adjustedHeight = this.totalHeight / this.scale;\r\n\r\n const corners = {\r\n topLeft: { x: this.translateX, y: this.translateY },\r\n topRight: { x: this.translateX + adjustedWidth, y: this.translateY },\r\n bottomRight: { x: this.translateX + adjustedWidth, y: this.translateY + adjustedHeight },\r\n bottomLeft: { x: this.translateX, y: this.translateY + adjustedHeight },\r\n };\r\n\r\n const rotatedCorners = Object.keys(corners).reduce((acc, key) => {\r\n const corner = corners[key];\r\n const rotatedX = Math.cos(angle) * (corner.x - cx) - Math.sin(angle) * (corner.y - cy) + cx;\r\n const rotatedY = Math.sin(angle) * (corner.x - cx) + Math.cos(angle) * (corner.y - cy) + cy;\r\n acc[key] = { x: rotatedX, y: rotatedY };\r\n return acc;\r\n }, {});\r\n\r\n return rotatedCorners as KritzelPolygon;\r\n }\r\n \r\n\r\n get minXRotated(): number {\r\n const corners = [\r\n this.rotatedPolygon.topLeft.x,\r\n this.rotatedPolygon.topRight.x,\r\n this.rotatedPolygon.bottomRight.x,\r\n this.rotatedPolygon.bottomLeft.x,\r\n ];\r\n\r\n return Math.min(...corners);\r\n }\r\n\r\n get minYRotated(): number {\r\n const corners = [\r\n this.rotatedPolygon.topLeft.y,\r\n this.rotatedPolygon.topRight.y,\r\n this.rotatedPolygon.bottomRight.y,\r\n this.rotatedPolygon.bottomLeft.y,\r\n ];\r\n\r\n return Math.min(...corners);\r\n }\r\n\r\n get maxXRotated(): number {\r\n const corners = [\r\n this.rotatedPolygon.topLeft.x,\r\n this.rotatedPolygon.topRight.x,\r\n this.rotatedPolygon.bottomRight.x,\r\n this.rotatedPolygon.bottomLeft.x,\r\n ];\r\n\r\n return Math.max(...corners);\r\n }\r\n\r\n get maxYRotated(): number {\r\n const corners = [\r\n this.rotatedPolygon.topLeft.y,\r\n this.rotatedPolygon.topRight.y,\r\n this.rotatedPolygon.bottomRight.y,\r\n this.rotatedPolygon.bottomLeft.y,\r\n ];\r\n\r\n return Math.max(...corners);\r\n }\r\n\r\n get transformationMatrix(): string {\r\n const scale = 1 / this.scale;\r\n const translateX = this.translateX;\r\n const translateY = this.translateY;\r\n\r\n return `matrix(${scale}, 0, 0, ${scale}, ${translateX}, ${translateY})`;\r\n }\r\n\r\n get rotationDegrees(): number {\r\n return this.rotation * (180 / Math.PI);\r\n }\r\n\r\n get centerX(): number {\r\n return this.translateX + this.totalWidth / 2;\r\n }\r\n\r\n get centerY(): number {\r\n return this.translateY + this.totalHeight / 2;\r\n }\r\n\r\n constructor() {\r\n this.id = this.generateId();\r\n }\r\n\r\n static create(store: KritzelStore): KritzelBaseObject<Element> {\r\n const object = new KritzelBaseObject();\r\n \r\n object._store = store;\r\n object.zIndex = store.currentZIndex;\r\n \r\n return object;\r\n }\r\n\r\n mount(element: T): void {\r\n if (this.isMounted) {\r\n return;\r\n }\r\n\r\n this.elementRef = element;\r\n this.isMounted = true;\r\n }\r\n\r\n generateId(): string {\r\n return ObjectHelper.generateUUID();\r\n }\r\n\r\n isInViewport(): boolean {\r\n const viewportBounds: KritzelBoundingBox = {\r\n x: -this._store.state.translateX / this._store.state.scale,\r\n y: -this._store.state.translateY / this._store.state.scale,\r\n z: this._store.state.scale,\r\n width: this._store.state.viewportWidth / this._store.state.scale,\r\n height: this._store.state.viewportHeight / this._store.state.scale,\r\n depth: 100,\r\n };\r\n\r\n return this.boundingBox.x < viewportBounds.x + viewportBounds.width &&\r\n this.boundingBox.x + this.boundingBox.width > viewportBounds.x &&\r\n this.boundingBox.y < viewportBounds.y + viewportBounds.height &&\r\n this.boundingBox.y + this.boundingBox.height > viewportBounds.y;\r\n }\r\n\r\n centerInViewport(): void {\r\n const scale = this._store.state.scale;\r\n this.translateX = (this._store.state.viewportWidth / 2 - this.totalWidth / 2 - this._store.state.translateX) / scale;\r\n this.translateY = (this._store.state.viewportHeight / 2 - this.totalHeight / 2 - this._store.state.translateY) / scale;\r\n }\r\n\r\n 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 }\r\n\r\n resize(x: number, y: number, width: number, height: number): void {\r\n if (width <= 1 || height <= 1) {\r\n return;\r\n }\r\n\r\n this.width = width;\r\n this.height = height;\r\n this.translateX = x;\r\n this.translateY = y;\r\n }\r\n\r\n rotate(value: number): void {\r\n this.rotation = value;\r\n }\r\n\r\n copy(): KritzelBaseObject<T> {\r\n const copiedObject: KritzelBaseObject<T> = Object.create(Object.getPrototypeOf(this));\r\n Object.assign(copiedObject, this);\r\n copiedObject.id = this.generateId();\r\n copiedObject.isMounted = false;\r\n return copiedObject;\r\n }\r\n\r\n onSelectedClick(): void {\r\n // This method can be overridden by subclasses to handle click events when the object is selected.\r\n }\r\n\r\n revive(object: any): KritzelBaseObject<T> {\r\n Object.assign(this, object);\r\n return this;\r\n }\r\n\r\n}\r\n","import { getStroke } from 'perfect-freehand';\r\nimport { KritzelMathHelper } from '../../helpers/math.helper';\r\nimport { KritzelPathOptions } from '../../interfaces/path-options.interface';\r\nimport { KritzelBaseObject } from './base-object.class';\r\nimport { KritzelStore } from '../store.class';\r\n\r\nexport class KritzelPath extends KritzelBaseObject<SVGElement> {\r\n override __class__: string = 'KritzelPath';\r\n\r\n points: number[][];\r\n d: string;\r\n stroke: string = 'none';\r\n strokeWidth: number;\r\n lineSlack: number = 0.5;\r\n fill: string;\r\n x: number = 0;\r\n y: number = 0;\r\n translateX: number;\r\n translateY: number;\r\n height: number = 0;\r\n width: number = 0;\r\n scale: number = 1;\r\n visible: boolean = true;\r\n options: KritzelPathOptions | undefined;\r\n\r\n debugInfoVisible: boolean = true;\r\n\r\n get viewBox(): string {\r\n return `${this.x} ${this.y} ${this.width} ${this.height}`;\r\n }\r\n\r\n static override create(store: KritzelStore, options?: KritzelPathOptions): KritzelPath {\r\n const object = new KritzelPath();\r\n\r\n object._store = store;\r\n object.id = object.generateId();\r\n object.options = options;\r\n object.points = options?.points ?? [];\r\n object.translateX = options?.translateX ?? 0;\r\n object.translateY = options?.translateY ?? 0;\r\n object.scale = options?.scale ?? 1;\r\n object.strokeWidth = options?.strokeWidth ?? 8;\r\n object.fill = options?.fill ?? '#000000';\r\n object.zIndex = store.currentZIndex;\r\n object.d = object.generateSvgPath();\r\n object.updateDimensions();\r\n\r\n return object;\r\n }\r\n\r\n resize(x: number | null, y: number | null, width: number, height: number): void {\r\n if (width <= 1 || height <= 1) {\r\n return;\r\n }\r\n\r\n const scaleX = width / this.width;\r\n const scaleY = height / this.height;\r\n\r\n this.width = width;\r\n this.height = height;\r\n\r\n this.points = this.points.map(([x, y]) => [x * scaleX, y * scaleY]);\r\n this.d = this.generateSvgPath();\r\n\r\n this.width = Math.max(...this.points.map(p => p[0])) - Math.min(...this.points.map(p => p[0])) + this.strokeWidth;\r\n this.height = Math.max(...this.points.map(p => p[1])) - Math.min(...this.points.map(p => p[1])) + this.strokeWidth;\r\n\r\n this.x = Math.min(...this.points.map(p => p[0])) - this.strokeWidth / 2;\r\n this.y = Math.min(...this.points.map(p => p[1])) - this.strokeWidth / 2;\r\n\r\n this.translateX = x;\r\n this.translateY = y;\r\n }\r\n\r\n override rotate(value: number): void {\r\n super.rotate(value);\r\n this.updateDimensions();\r\n }\r\n\r\n private updateDimensions(): void {\r\n const rotatedPoints = this.points.map(([x, y]) => {\r\n const rotatedX = x * Math.cos(this.rotation) - y * Math.sin(this.rotation);\r\n const rotatedY = x * Math.sin(this.rotation) + y * Math.cos(this.rotation);\r\n return [rotatedX, rotatedY];\r\n });\r\n\r\n const minX = Math.min(...rotatedPoints.map(p => p[0] - this.strokeWidth / 2));\r\n const minY = Math.min(...rotatedPoints.map(p => p[1] - this.strokeWidth / 2));\r\n\r\n const maxX = Math.max(...rotatedPoints.map(p => p[0] + this.strokeWidth / 2));\r\n const maxY = Math.max(...rotatedPoints.map(p => p[1] + this.strokeWidth / 2));\r\n\r\n this.width = maxX - minX + this.lineSlack; // Add 0.5 to avoid rounding issues\r\n this.height = maxY - minY + this.lineSlack; // Add 0.5 to avoid rounding issues\r\n\r\n this.x = minX;\r\n this.y = minY;\r\n\r\n this.translateX = (this.x + this.translateX) / this.scale;\r\n this.translateY = (this.y + this.translateY) / this.scale;\r\n }\r\n\r\n private generateSvgPath(): string {\r\n const stroke = this.getStrokeFromPoints(this.points, this.strokeWidth);\r\n return this.getSvgPathFromStroke(stroke);\r\n }\r\n\r\n private getStrokeFromPoints(points: number[][], strokeWidth: number): number[][] {\r\n return getStroke(points, {\r\n size: strokeWidth,\r\n thinning: 0.5,\r\n smoothing: 0.5,\r\n streamline: 0.5,\r\n easing: t => t,\r\n simulatePressure: true,\r\n last: true,\r\n start: {\r\n cap: true,\r\n taper: 0,\r\n easing: t => t,\r\n },\r\n end: {\r\n cap: true,\r\n taper: 0,\r\n easing: t => t,\r\n },\r\n });\r\n }\r\n\r\n private getSvgPathFromStroke(points: number[][], closed = true) {\r\n const len = points.length;\r\n\r\n if (len < 4) {\r\n return ``;\r\n }\r\n\r\n let a = points[0];\r\n let b = points[1];\r\n const c = points[2];\r\n\r\n let result = `M${a[0].toFixed(2)},${a[1].toFixed(2)} Q${b[0].toFixed(2)},${b[1].toFixed(2)} ${KritzelMathHelper.average(b[0], c[0]).toFixed(\r\n 2,\r\n )},${KritzelMathHelper.average(b[1], c[1]).toFixed(2)} T`;\r\n\r\n for (let i = 2, max = len - 1; i < max; i++) {\r\n a = points[i];\r\n b = points[i + 1];\r\n result += `${KritzelMathHelper.average(a[0], b[0]).toFixed(2)},${KritzelMathHelper.average(a[1], b[1]).toFixed(2)} `;\r\n }\r\n\r\n if (closed) {\r\n result += 'Z';\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import { KritzelTool } from '../../components';\r\nimport { KritzelSerializable } from '../../interfaces/serializable.interface';\r\nimport { KritzelStore } from '../store.class';\r\n\r\nexport class KritzelBaseTool implements KritzelTool, KritzelSerializable {\r\n __class__: string = this.constructor.name;\r\n\r\n name: string = 'base-tool';\r\n\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\r\n onActivate(): void {\r\n // default implementation\r\n }\r\n\r\n onDeactivate(): void {\r\n // default implementation\r\n }\r\n\r\n handlePointerDown(_event: PointerEvent): void {\r\n // default implementation\r\n }\r\n\r\n handlePointerMove(_event: PointerEvent): void {\r\n // default implementation\r\n }\r\n\r\n handlePointerUp(_event: PointerEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleWheel(_event: WheelEvent): void {\r\n // default implementation\r\n }\r\n\r\n revive(object: any): KritzelSerializable {\r\n Object.assign(this, object);\r\n return this;\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","import { KritzelStore } from \"../store.class\";\r\nimport { KritzelBaseTool } from \"../tools/base-tool.class\";\r\n\r\nexport class KritzelToolRegistry {\r\nprivate static registry: Record<string, KritzelBaseTool> = {};\r\n\r\n static registerTool(toolName: string, constructor: new (store: KritzelStore) => KritzelBaseTool, store: KritzelStore): KritzelBaseTool {\r\n const toolInstance = new constructor(store);\r\n toolInstance.name = toolName;\r\n this.registry[toolName] = toolInstance;\r\n return toolInstance;\r\n }\r\n\r\n static getTool(toolName: string): KritzelBaseTool | null {\r\n const toolInstance = this.registry[toolName];\r\n\r\n if (!toolInstance) {\r\n console.warn(`Unknown tool: ${toolName}`);\r\n return null;\r\n }\r\n\r\n return toolInstance;\r\n }\r\n}\r\n","import { KritzelToolRegistry } from '../registries/tool.registry';\r\nimport { KritzelStore } from '../store.class';\r\nimport { KritzelTextTool } from '../tools/text-tool.class';\r\nimport { KritzelBaseObject } from './base-object.class';\r\n\r\nexport class KritzelText extends KritzelBaseObject<HTMLTextAreaElement> {\r\n override __class__: string = 'KritzelText';\r\n\r\n value: string = '';\r\n\r\n fontFamily: string = 'Arial';\r\n\r\n fontSize: number = 8;\r\n\r\n fontColor: string = '#000000';\r\n\r\n initialWidth: number = 3;\r\n\r\n isNew: boolean = true;\r\n\r\n override debugInfoVisible: boolean = true;\r\n\r\n readonly rows: number = 1;\r\n\r\n get isReadonly(): boolean {\r\n return !(this._store.state.activeTool instanceof KritzelTextTool);\r\n }\r\n\r\n constructor(config?: {\r\n value: string;\r\n translateX?: number;\r\n translateY?: number;\r\n fontSize?: number;\r\n fontFamily?: string;\r\n fontColor?: string;\r\n height?: number;\r\n width?: number;\r\n scale?: number;\r\n }) {\r\n super();\r\n\r\n if (config) {\r\n this.value = config.value || ' ';\r\n this.translateX = config.translateX || 0;\r\n this.translateY = config.translateY || 0;\r\n this.fontSize = config.fontSize || 8;\r\n this.fontFamily = config.fontFamily || 'Arial';\r\n this.fontColor = config.fontColor || '#000000';\r\n this.height = config.height || this.fontSize * 1.2;\r\n this.width = config.width || 0;\r\n this.scale = config.scale || 1;\r\n }\r\n }\r\n\r\n static override create(store: KritzelStore, fontSize?: number, fontFamily?: string): KritzelText {\r\n const object = new KritzelText();\r\n\r\n object._store = store;\r\n object.fontSize = fontSize;\r\n object.fontFamily = fontFamily;\r\n object.translateX = 0;\r\n object.translateY = 0;\r\n object.width = object.initialWidth / (object._store.state.scale < 0 ? object._store.state.scale : 1);\r\n object.height = (object.fontSize * 1.2) / (object._store.state.scale < 0 ? object._store.state.scale : 1);\r\n object.padding = 5;\r\n object.backgroundColor = 'transparent';\r\n object.scale = object._store.state.scale;\r\n object.value = ' ';\r\n object.zIndex = store.currentZIndex;\r\n\r\n return object;\r\n }\r\n\r\n override mount(element: HTMLTextAreaElement): void {\r\n if ((this.isMounted && this.elementRef === element) || this.isInViewport() === false) {\r\n return;\r\n }\r\n\r\n this.elementRef = element;\r\n this.isMounted = true;\r\n }\r\n\r\n override resize(x: number, y: number, width: number, height: number): void {\r\n if (width <= 1 || height <= 1) {\r\n return;\r\n }\r\n\r\n const scaleFactor = height / this.height;\r\n\r\n this.fontSize = this.fontSize * scaleFactor;\r\n this.width = this.width * scaleFactor;\r\n this.height = height;\r\n this.translateX = x;\r\n this.translateY = y;\r\n }\r\n\r\n handleKeyDown(event: KeyboardEvent): void {\r\n if (this.isReadonly) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n handleInput(event: InputEvent): void {\r\n const target = event.target as HTMLTextAreaElement;\r\n if (target.value === '') {\r\n this.value = ' ';\r\n target.value = ' ';\r\n target.selectionStart = target.selectionEnd = target.value.length;\r\n } else {\r\n this.value = target.value.trim();\r\n }\r\n\r\n this.adjustTextareaSize();\r\n }\r\n\r\n adjustTextareaSize() {\r\n if (this.elementRef) {\r\n const span = document.createElement('span');\r\n span.style.position = 'absolute';\r\n span.style.whiteSpace = 'pre-wrap';\r\n span.style.visibility = 'hidden';\r\n span.style.fontSize = window.getComputedStyle(this.elementRef).fontSize;\r\n span.style.fontFamily = window.getComputedStyle(this.elementRef).fontFamily;\r\n\r\n span.innerHTML = this.elementRef.value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\\n/g, '<br>') + '<br>';\r\n\r\n document.body.appendChild(span);\r\n const textWidth = span.offsetWidth;\r\n const textHeight = span.offsetHeight;\r\n document.body.removeChild(span);\r\n\r\n this.width = textWidth;\r\n this.height = textHeight;\r\n\r\n this._store.rerender();\r\n }\r\n }\r\n\r\n focus(): void {\r\n if (this.elementRef) {\r\n this.elementRef.focus();\r\n }\r\n }\r\n\r\n selectAll(): void {\r\n if (this.elementRef) {\r\n this.elementRef.select();\r\n }\r\n }\r\n\r\n insertFromClipboard(): void {\r\n if (this.elementRef) {\r\n this.elementRef.focus();\r\n try {\r\n navigator.clipboard.readText().then(text => {\r\n const start = this.elementRef.selectionStart;\r\n const end = this.elementRef.selectionEnd;\r\n const value = this.elementRef.value;\r\n\r\n this.elementRef.value = value.substring(0, start) + text + value.substring(end);\r\n\r\n this.elementRef.selectionStart = this.elementRef.selectionEnd = start + text.length;\r\n this.value = this.elementRef.value;\r\n this.adjustTextareaSize();\r\n });\r\n } catch (err) {\r\n console.error('Failed to read clipboard contents:', err);\r\n }\r\n }\r\n }\r\n\r\n onSelectedClick(): void {\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('text'));\r\n this._store.state.selectionGroup = null;\r\n this._store.state.selectionBox = null;\r\n this._store.state.activeText = this;\r\n \r\n setTimeout(() => {\r\n this.focus();\r\n }, 300);\r\n }\r\n}\r\n","export class KritzelKeyboardHelper {\r\n static forceHideKeyboard(): void {\r\n if (document.activeElement instanceof HTMLElement) {\r\n document.activeElement.blur();\r\n }\r\n }\r\n\r\n static enableInteractiveWidget(): void {\r\n const meta = document.querySelector('meta[name=\"viewport\"][content*=\"interactive-widget=resizes-content\"]');\r\n if (meta) {\r\n let currentContent = meta.getAttribute('content');\r\n if (!currentContent.includes('interactive-widget=resizes-content')) {\r\n currentContent += ', interactive-widget=resizes-content';\r\n }\r\n meta.setAttribute('content', currentContent);\r\n }\r\n }\r\n\r\n static disableInteractiveWidget(): void {\r\n const meta = document.querySelector('meta[name=\"viewport\"][content*=\"interactive-widget=resizes-content\"]');\r\n if (meta) {\r\n let currentContent = meta.getAttribute('content');\r\n let newContent = currentContent.replace(/\\s*interactive-widget=resizes-content\\s*[,;]?/g, '');\r\n newContent = newContent\r\n .replace(/,(\\s*,)+/g, ',')\r\n .replace(/^,/, '')\r\n .replace(/,$/, '')\r\n .trim();\r\n meta.setAttribute('content', newContent);\r\n }\r\n }\r\n}\r\n","import { KritzelText } from '../objects/text.class';\r\nimport { KritzelStore } from '../store.class';\r\nimport { KritzelBaseTool } from './base-tool.class';\r\nimport { AddObjectCommand } from '../commands/add-object.command';\r\nimport { KritzelEventHelper } from '../../helpers/event.helper';\r\nimport { KritzelToolRegistry } from '../registries/tool.registry';\r\nimport { KritzelKeyboardHelper } from '../../helpers/keyboard.helper';\r\n\r\nexport class KritzelTextTool extends KritzelBaseTool {\r\n fontFamily: string = 'Arial';\r\n fontSize: number = 16;\r\n fontColor: string = '#000000';\r\n\r\n palette: string[] = [\r\n '#000000',\r\n '#FFFFFF',\r\n '#FF0000',\r\n '#00FF00',\r\n '#0000FF',\r\n '#FFFF00',\r\n '#FF00FF',\r\n '#00FFFF',\r\n '#808080',\r\n '#C0C0C0',\r\n '#800000',\r\n '#008000',\r\n '#000080',\r\n '#808000',\r\n '#800080',\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 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 (this._store.state.activeText === null && object && object instanceof KritzelText) {\r\n this._store.state.activeText = object;\r\n object.focus();\r\n return;\r\n }\r\n\r\n if (this._store.state.activeText !== null && object instanceof KritzelText) {\r\n object.focus();\r\n return;\r\n }\r\n\r\n if (this._store.state.activeText !== null) {\r\n this._store.resetActiveText();\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n return;\r\n }\r\n\r\n if (KritzelEventHelper.isLeftClick(event) === false) {\r\n return;\r\n }\r\n\r\n const clientX = event.clientX - this._store.offsetX;\r\n const clientY = event.clientY - this._store.offsetY;\r\n const text = KritzelText.create(this._store, this.fontSize, this.fontFamily);\r\n\r\n text.fontColor = this.fontColor;\r\n text.translateX = (clientX - this._store.state.translateX) / this._store.state.scale;\r\n text.translateY = (clientY - this._store.state.translateY) / this._store.state.scale;\r\n text.zIndex = this._store.currentZIndex;\r\n\r\n this._store.state.activeText = text;\r\n\r\n this._store.history.executeCommand(new AddObjectCommand(this._store, this, text));\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 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 (this._store.state.activeText === null && object && object instanceof KritzelText) {\r\n this._store.state.activeText = object;\r\n object.focus();\r\n return;\r\n }\r\n\r\n if (this._store.state.activeText !== null && object instanceof KritzelText) {\r\n object.focus();\r\n return;\r\n }\r\n\r\n if (this._store.state.activeText !== null) {\r\n this._store.resetActiveText();\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n return;\r\n }\r\n\r\n if (activePointers.length > 1) {\r\n return;\r\n }\r\n\r\n KritzelKeyboardHelper.disableInteractiveWidget();\r\n\r\n const clientX = Math.round(activePointers[0].clientX - this._store.offsetX);\r\n const clientY = Math.round(activePointers[0].clientY - this._store.offsetY);\r\n const text = KritzelText.create(this._store, this.fontSize, this.fontFamily);\r\n\r\n text.fontColor = this.fontColor;\r\n text.translateX = (clientX - this._store.state.translateX) / this._store.state.scale;\r\n text.translateY = (clientY - this._store.state.translateY) / this._store.state.scale;\r\n text.zIndex = this._store.currentZIndex;\r\n\r\n this._store.state.activeText = text;\r\n\r\n this._store.history.executeCommand(new AddObjectCommand(this._store, this, text));\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._store.state.activeText?.adjustTextareaSize();\r\n this._store.state.activeText?.focus();\r\n }\r\n\r\n if (event.pointerType === 'touch') {\r\n this._store.state.activeText?.adjustTextareaSize();\r\n this._store.state.activeText?.focus();\r\n\r\n KritzelKeyboardHelper.enableInteractiveWidget();\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, 8px);\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 hsl(0, 0%, 0%, 4.3%));\r\n border-radius: var(--kritzel-controls-border-radius, 8px);\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, 8px);\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, 8px);\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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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=\"2\" 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 { KritzelBaseObject } from './base-object.class';\r\n\r\nexport class KritzelImage extends KritzelBaseObject<HTMLImageElement> {\r\n override __class__: string = 'KritzelImage';\r\n\r\n src: string = '';\r\n\r\n override debugInfoVisible: boolean = true;\r\n\r\n static override create(store: KritzelStore): KritzelImage {\r\n const object = new KritzelImage();\r\n\r\n object._store = store;\r\n object.id = object.generateId();\r\n object.x = 0;\r\n object.y = 0;\r\n object.translateX = 0;\r\n object.translateY = 0;\r\n object.scale = object._store.state.scale;\r\n object.zIndex = store.currentZIndex;\r\n\r\n return object;\r\n }\r\n\r\n override resize(x: number, y: number, width: number, height: number): void {\r\n if (width <= 1 || height <= 1) {\r\n return;\r\n }\r\n\r\n const scaleFactor = height / this.height;\r\n\r\n this.width = this.width * scaleFactor;\r\n this.height = this.height * scaleFactor;\r\n this.translateX = x;\r\n this.translateY = y;\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 } 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\n\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 @Element()\r\n host!: HTMLElement;\r\n\r\n engineRef!: HTMLKritzelEngineElement;\r\n\r\n controlsRef!: HTMLKritzelControlsElement;\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 componentWillLoad() {\r\n this.registerCustomSvgIcons();\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)}></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 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 moveUp() {\r\n const max = this.allObjects.length + 1;\r\n const increaseZIndexCommands = this.state.selectionGroup.objects.map(obj => {\r\n if (obj.zIndex === max) {\r\n return;\r\n }\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 moveDown() {\r\n const min = 0;\r\n const decreaseZIndexCommands = this.state.selectionGroup.objects.map(obj => {\r\n if (obj.zIndex === min) {\r\n return;\r\n }\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 moveToTop() {\r\n const max = this.allObjects.length + 1;\r\n const increaseZIndexCommands = this.state.selectionGroup.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 moveToBottom() {\r\n const min = -1;\r\n const decreaseZIndexCommands = this.state.selectionGroup.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\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\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\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.moveUp();\r\n }\r\n\r\n if (event.key === '-' && event.ctrlKey && this._store.state.selectionGroup) {\r\n this._store.moveDown();\r\n }\r\n\r\n if (event.key === '*' && event.shiftKey && this._store.state.selectionGroup) {\r\n this._store.moveToTop();\r\n }\r\n\r\n if (event.key === '_' && event.shiftKey && this._store.state.selectionGroup) {\r\n this._store.moveToBottom();\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}\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",":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\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 engineReady: 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 this.engineReady.emit();\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 moveToTop() {\r\n this.store.moveToTop();\r\n }\r\n\r\n @Method()\r\n async moveToBottom() {\r\n this.store.moveToBottom();\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.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 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 }\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 {object instanceof 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 {object instanceof 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 {object instanceof 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 {object instanceof 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 {object instanceof 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, 8px);\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: 6px;\r\n border-top-right-radius: 6px;\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":[]}