kritzel-stencil 0.0.103 → 0.0.104
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/kritzel-brush-style_18.cjs.entry.js +10 -40
- package/dist/cjs/kritzel-brush-style_18.cjs.entry.js.map +1 -1
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.css +2 -3
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +9 -39
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
- package/dist/components/kritzel-editor.js +1 -1
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/{p-Bu6ZrM9f.js → p-DMSOfO6k.js} +12 -42
- package/dist/components/{p-Bu6ZrM9f.js.map → p-DMSOfO6k.js.map} +1 -1
- package/dist/esm/kritzel-brush-style_18.entry.js +10 -40
- package/dist/esm/kritzel-brush-style_18.entry.js.map +1 -1
- package/dist/stencil/{p-95c7a63e.entry.js → p-f059fbff.entry.js} +2 -2
- package/dist/stencil/{p-95c7a63e.entry.js.map → p-f059fbff.entry.js.map} +1 -1
- package/dist/stencil/stencil.esm.js +1 -1
- package/package.json +1 -1
|
@@ -1 +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","detectDoubleTap","currentTime","Date","now","tapLength","lastTapTimestamp","tapTimeoutId","clearTimeout","doubleTapTimeout","setTimeout","KritzelBaseCommand","store","initiator","_store","_b","_a","isUndoable","execute","Error","undo","AddObjectCommand","object","super","state","objectsOctree","insert","remove","id","pe","Object","defineProperty","ge","e","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","freeGlobal","global","freeSelf","self","root","Function","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","isObject","asyncTag","funcTag","genTag","proxyTag","isFunction","coreJsData","maskSrcKey","uid","exec","keys","IE_PROTO","isMasked","func","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","RegExp","replace","baseIsNative","pattern","test","getValue","getNative","WeakMap","objectCreate","create","baseCreate","proto","arrayEach","array","iteratee","index","MAX_SAFE_INTEGER","reIsUint","isIndex","baseAssignValue","configurable","writable","eq","other","assignValue","objValue","isLength","isArrayLike","isPrototype","Ctor","baseTimes","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","arguments","stubFalse","freeExports","nodeType","freeModule","module","moduleExports","Buffer","nativeIsBuffer","isBuffer","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","String","overArg","transform","arg","nativeKeys","baseKeys","nativeCreate","hashClear","__data__","hashDelete","has","HASH_UNDEFINED","hashGet","data","hashHas","hashSet","Hash","entries","clear","entry","set","listCacheClear","assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","pop","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","mapCacheClear","hash","string","isKeyable","getMapData","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","arrayPush","values","offset","getPrototype","getPrototypeOf","stackClear","stackDelete","stackGet","stackHas","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","cloneBuffer","buffer","isDeep","arrayFilter","predicate","resIndex","stubArray","nativeGetSymbols","getOwnPropertySymbols","getSymbols","symbol","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","DataView","Promise","Set","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","resolve","ctorString","initCloneArray","input","Uint8Array","cloneArrayBuffer","arrayBuffer","byteLength","cloneDataView","dataView","byteOffset","reFlags","cloneRegExp","regexp","source","symbolProto","symbolValueOf","valueOf","cloneSymbol","cloneTypedArray","typedArray","symbolTag","initCloneByTag","initCloneObject","baseIsMap","nodeIsMap","isMap","baseIsSet","nodeIsSet","isSet","cloneableTags","baseClone","bitmask","customizer","stack","isFunc","stacked","forEach","subValue","add","props","CLONE_DEEP_FLAG","CLONE_SYMBOLS_FLAG","cloneDeep","ObjectHelper","safeStringify","obj","indent","seen","WeakSet","JSON","stringify","_key","generateUUID","random","substr","clone","objOrObjs","cloneObject","rest","__rest","isEmpty","KritzelBaseObject","totalWidth","padding","totalHeight","elementRef","element","_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","mount","isInViewport","viewportBounds","viewportWidth","viewportHeight","centerInViewport","move","startX","startY","endX","endY","resize","rotate","copy","copiedObject","assign","revive","KritzelPath","viewBox","stroke","lineSlack","points","_c","_d","strokeWidth","_e","fill","_f","generateSvgPath","updateDimensions","scaleX","scaleY","rotatedPoints","minX","minY","maxX","maxY","getStrokeFromPoints","getSvgPathFromStroke","closed","len","toFixed","KritzelBaseTool","onActivate","onDeactivate","handleMouseDown","_event","handleMouseMove","handleMouseUp","handleDoubleClick","handleDoubleTap","handleTouchStart","handleTouchMove","handleTouchEnd","handleWheel","KritzelBrushTool","pen","highlighter","isDrawing","clientX","offsetX","clientY","offsetY","currentPath","rerender","currentZIndex","history","executeCommand","touchCount","round","touches","KritzelText","isReadonly","activeTool","KritzelTextTool","initialWidth","isNew","rows","scaleFactor","handleKeyDown","preventDefault","stopPropagation","handleInput","target","selectionStart","selectionEnd","trim","adjustTextareaSize","span","document","createElement","whiteSpace","window","getComputedStyle","innerHTML","body","appendChild","textWidth","offsetWidth","textHeight","offsetHeight","removeChild","focus","selectAll","select","insertFromClipboard","navigator","clipboard","readText","then","text","err","console","error","KritzelToolRegistry","registerTool","toolName","toolInstance","registry","getTool","warn","path","composedPath","objectElement","find","classList","contains","findObjectById","activeText","resetActiveText","setState","kritzelControlsCss","KritzelControls","controls","activeControl","firstConfig","tooltipVisible","kritzelEngine","activeToolAsTextTool","activeToolAsBrushTool","initializeEngine","initializeTools","componentDidLoad","controlsReady","customElements","whenDefined","host","parentElement","querySelector","config","isDefault","changeActiveTool","handleActiveToolChange","control","setFocus","handleClick","closest","enable","cancelable","handleControlClick","handleConfigClick","disable","hasNoConfig","bottom","onUndo","onRedo","redo","onDelete","delete","isVisible","anchorElement","shadowRoot","onToolChange","cursor","pointerEvents","border","_g","_h","kritzelCursorTrailCss","KritzelCursorTrail","cursorTrailPoints","isLeftButtonDown","TRAIL_DURATION_MS","MAX_TRAIL_POINTS","trailCleanupIntervalId","setInterval","newTrailPoints","filter","timestamp","disconnectedCallback","clearInterval","newPoint","updatedTrail","touch","xmlns","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","registerIcons","icons","eraser","image","paste","cut","download","BatchCommand","commands","command","RemoveObjectCommand","KritzelEraserTool","touchStartTimeout","isErasing","selectedObject","getObjectFromPointerEvent","removeCommands","allObjects","isScaling","KritzelImage","img","RemoveSelectionGroupCommand","previousSelectionGroup","selectionGroup","MoveSelectionGroupCommand","skipFirstExecution","skipExecution","KritzelBaseHandler","KritzelMoveHandler","isResizeHandleSelected","isRotationHandleSelected","isDragging","dragStartX","dragStartY","moveDeltaX","moveDeltaY","moveThreshold","longTouchTimeout","KritzelHandleType","ResizeSelectionGroupCommand","previousSize","newSize","KritzelResizeHandler","initialMouseX","initialMouseY","initialSize","isResizing","dx","dy","resizeHandleType","TopLeft","TopRight","BottomLeft","BottomRight","resizeSelectionGroupCommand","structuredClone","firstTouch","oneFingerTouch","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","selectionBox","isSelectionDrag","touchStartX","touchStartY","startMouseSelection","isSelecting","updateMouseSelection","addSelectedObjectAtIndexToSelectionGroup","removeSelectionBox","addSelectedObjectsToSelectionGroup","startTouchSelection","updateTouchSelection","skipContextMenu","KritzelSelectionGroup","currentX","currentY","updateSelectedObjects","objectPolygon","selectionBoxPolygon","selectedObjects","sort","addOrRemove","KritzelSelectionTool","selectionHandler","moveHandler","resizeHandler","rotationHandler","isHandleSelected","getHandleType","getSelectedObject","isDifferentObject","group","TouchEvent","elementAtPoint","elementFromPoint","handle","KritzelReviver","revivedObj","KritzelImageTool","newObj","unchangedObjects","findIndex","refreshObjectDimensions","deselectAllChildren","updatePosition","widthScaleFactor","heightScaleFactor","updatedWidth","updatedHeight","updatedX","updatedY","child","unchangedChild","getUnchangedObject","getOffsetXToCenter","getOffsetYToCenter","objCenterX","objCenterY","objectId","reviver","_mergeNamespaces","getOwnPropertyDescriptor","freeze","copyExifWithoutOrientation","getApp1Segment","Blob","FileReader","addEventListener","getUint16","getUint32","setUint16","readAsArrayBuffer","UZIP","parse","bin","readUshort","readUint","_readLocal","readUTF8","csize","inflateRaw","inflate","deflate","level","floor","deflateRaw","adler","encode","writeUint","writeUshort","_noNeed","crc","cpr","usize","file","sizeUTF8","_writeHeader","split","toLowerCase","writeUTF8","table","Uint32Array","readASCII","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","rect","delay","dispose","blend","toRGBA8","acTL","_bin","addErr","dither","Int16Array","_main","sRGB","pHYs","iCCP","pako","plte","cimg","loop","compressPNG","bpl","bpp","framize","_prepareDiff","_updateFrame","concatRGBA","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","set16","set32","setUint32","seek","convert","_dly","toBlob","CHROME","FIREFOX","DESKTOP_SAFARI","IE","IOS","ETC","WorkerGlobalScope","cordova","CustomFile","getOriginalSymbol","File","CustomFileReader","getFilefromDataUrl","match","globalThis","atob","lastModified","getDataUrlFromFile","onload","onerror","readAsDataURL","loadImage","Image","src","getBrowserName","cachedResult","userAgent","documentMode","approximateBelowMaximumCanvasSizeOfBrowser","getNewCanvasAndCtx","OffscreenCanvas","drawImageInCanvas","fillStyle","fillRect","drawImage","isIOS","includes","platform","drawFileInCanvas","$Try_2_Post","fileType","$Try_2_Catch","$Try_3_Catch","MOBILE_SAFARI","createImageBitmap","canvasToFile","$If_4","$If_5","bind","convertToBlob","quality","$If_6","toDataURL","cleanupCanvasMemory","isAutoOrientationInBrowser","getExifOrientation","handleMaxWidthOrHeight","maxWidthOrHeight","isFinite","followExifOrientation","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","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","registerCustomSvgIcons","svg","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","peek","KritzelHistory","undoStack","historyBufferSize","redoStack","debugInfo","logCommands","KritzelOctree","bounds","children","intersects","subdivide","query","range","results","halfWidth","halfHeight","halfDepth","UpdateObjectCommand","updatedProperties","previousProperties","initialState","copiedObjects","isEnabled","isFocused","isWriting","isCtrlKeyPressed","isContextMenuVisible","contextMenuItems","contextMenuX","contextMenuY","showObjectInfo","showViewportInfo","longTouchDelay","KritzelStore","_history","_state","_listeners","_kritzelEngine","Infinity","forceUpdate","deselectAllObjects","onStateChange","property","listener","oldValue","clearSelection","deleteSelectedObjectsCommand","removeSelectionGroupCommand","deleteObject","isHistoryUpdated","removeObjectCommand","adjustedX","adjustedY","addCopiedObjectsCommands","addCopiedObjectsAsSelectionGroupCommand","moveUp","increaseZIndexCommands","moveDown","decreaseZIndexCommands","moveToTop","moveToBottom","selectAllInViewport","objectsInViewport","selector","resetSelection","KritzelKeyHandler","shiftKey","handleKeyUp","KritzelKeyboardHelper","forceHideKeyboard","activeElement","HTMLElement","blur","KritzelContextMenuHandler","globalContextMenuItems","objectContextMenuItems","handleContextMenu","menuWidthEstimate","menuHeightEstimate","margin","innerWidth","innerHeight","handleContextMenuTouch","vibrate","kritzelEngineCss","KritzelEngine","isSelectionActive","action","contextMenuElement","contextMenuHandler","keyHandler","activeToolChange","viewport","engineReady","hideContextMenu","touchEvent","CustomEvent","doubleTapEvent","bubbles","composed","dispatchEvent","handleTouchCancel","_ev","updateFocus","isInside","kritzelEngineElement","isInKritzelEngine","handleContextMenuAction","toolClass","toolConfig","registeredTool","computedStyle","baseHandleSizePx","getPropertyValue","baseHandleSize","parseFloat","baseHandleTouchSize","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","minHeight","minWidth","transformOrigin","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","../../../node_modules/lodash-es/_freeGlobal.js","../../../node_modules/lodash-es/_root.js","../../../node_modules/lodash-es/_Symbol.js","../../../node_modules/lodash-es/_getRawTag.js","../../../node_modules/lodash-es/_objectToString.js","../../../node_modules/lodash-es/_baseGetTag.js","../../../node_modules/lodash-es/isObjectLike.js","../../../node_modules/lodash-es/isArray.js","../../../node_modules/lodash-es/isObject.js","../../../node_modules/lodash-es/isFunction.js","../../../node_modules/lodash-es/_coreJsData.js","../../../node_modules/lodash-es/_isMasked.js","../../../node_modules/lodash-es/_toSource.js","../../../node_modules/lodash-es/_baseIsNative.js","../../../node_modules/lodash-es/_getValue.js","../../../node_modules/lodash-es/_getNative.js","../../../node_modules/lodash-es/_WeakMap.js","../../../node_modules/lodash-es/_baseCreate.js","../../../node_modules/lodash-es/_defineProperty.js","../../../node_modules/lodash-es/_arrayEach.js","../../../node_modules/lodash-es/_isIndex.js","../../../node_modules/lodash-es/_baseAssignValue.js","../../../node_modules/lodash-es/eq.js","../../../node_modules/lodash-es/_assignValue.js","../../../node_modules/lodash-es/isLength.js","../../../node_modules/lodash-es/isArrayLike.js","../../../node_modules/lodash-es/_isPrototype.js","../../../node_modules/lodash-es/_baseTimes.js","../../../node_modules/lodash-es/_baseIsArguments.js","../../../node_modules/lodash-es/isArguments.js","../../../node_modules/lodash-es/stubFalse.js","../../../node_modules/lodash-es/isBuffer.js","../../../node_modules/lodash-es/_baseIsTypedArray.js","../../../node_modules/lodash-es/_baseUnary.js","../../../node_modules/lodash-es/_nodeUtil.js","../../../node_modules/lodash-es/isTypedArray.js","../../../node_modules/lodash-es/_arrayLikeKeys.js","../../../node_modules/lodash-es/_overArg.js","../../../node_modules/lodash-es/_nativeKeys.js","../../../node_modules/lodash-es/_baseKeys.js","../../../node_modules/lodash-es/keys.js","../../../node_modules/lodash-es/_nativeCreate.js","../../../node_modules/lodash-es/_hashClear.js","../../../node_modules/lodash-es/_hashDelete.js","../../../node_modules/lodash-es/_hashGet.js","../../../node_modules/lodash-es/_hashHas.js","../../../node_modules/lodash-es/_hashSet.js","../../../node_modules/lodash-es/_Hash.js","../../../node_modules/lodash-es/_listCacheClear.js","../../../node_modules/lodash-es/_assocIndexOf.js","../../../node_modules/lodash-es/_listCacheDelete.js","../../../node_modules/lodash-es/_listCacheGet.js","../../../node_modules/lodash-es/_listCacheHas.js","../../../node_modules/lodash-es/_listCacheSet.js","../../../node_modules/lodash-es/_ListCache.js","../../../node_modules/lodash-es/_Map.js","../../../node_modules/lodash-es/_mapCacheClear.js","../../../node_modules/lodash-es/_isKeyable.js","../../../node_modules/lodash-es/_getMapData.js","../../../node_modules/lodash-es/_mapCacheDelete.js","../../../node_modules/lodash-es/_mapCacheGet.js","../../../node_modules/lodash-es/_mapCacheHas.js","../../../node_modules/lodash-es/_mapCacheSet.js","../../../node_modules/lodash-es/_MapCache.js","../../../node_modules/lodash-es/_arrayPush.js","../../../node_modules/lodash-es/_getPrototype.js","../../../node_modules/lodash-es/_stackClear.js","../../../node_modules/lodash-es/_stackDelete.js","../../../node_modules/lodash-es/_stackGet.js","../../../node_modules/lodash-es/_stackHas.js","../../../node_modules/lodash-es/_stackSet.js","../../../node_modules/lodash-es/_Stack.js","../../../node_modules/lodash-es/_cloneBuffer.js","../../../node_modules/lodash-es/_arrayFilter.js","../../../node_modules/lodash-es/stubArray.js","../../../node_modules/lodash-es/_getSymbols.js","../../../node_modules/lodash-es/_baseGetAllKeys.js","../../../node_modules/lodash-es/_getAllKeys.js","../../../node_modules/lodash-es/_DataView.js","../../../node_modules/lodash-es/_Promise.js","../../../node_modules/lodash-es/_Set.js","../../../node_modules/lodash-es/_getTag.js","../../../node_modules/lodash-es/_initCloneArray.js","../../../node_modules/lodash-es/_Uint8Array.js","../../../node_modules/lodash-es/_cloneArrayBuffer.js","../../../node_modules/lodash-es/_cloneDataView.js","../../../node_modules/lodash-es/_cloneRegExp.js","../../../node_modules/lodash-es/_cloneSymbol.js","../../../node_modules/lodash-es/_cloneTypedArray.js","../../../node_modules/lodash-es/_initCloneByTag.js","../../../node_modules/lodash-es/_initCloneObject.js","../../../node_modules/lodash-es/_baseIsMap.js","../../../node_modules/lodash-es/isMap.js","../../../node_modules/lodash-es/_baseIsSet.js","../../../node_modules/lodash-es/isSet.js","../../../node_modules/lodash-es/_baseClone.js","../../../node_modules/lodash-es/cloneDeep.js","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/objects/text.class.ts","src/classes/tool.registry.ts","src/classes/tools/text-tool.class.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/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/classes/store.class.ts","src/classes/handlers/key.handler.ts","src/helpers/keyboard.helper.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 {\n display: flex; \n align-items: flex-start; \n gap: 8px; \n padding: 8px; \n box-sizing: border-box; \n width: 100%;\n}\n\n.brush-style-button {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 42px;\n height: 32px;\n padding: 0;\n border: none;\n outline: none;\n background: none;\n cursor: default;\n border-radius: 0; \n color: var(--control-text-color);\n font-weight: bold;\n -webkit-tap-highlight-color: transparent;\n}\n\n.font-style-button:not(:last-child) {\n border-right: 1px solid #333333; \n}\n\n.font-style-button:hover {\n background-color: var(--control-hover-bg);\n}\n\n.font-style-button:active {\n background-color: var(--control-active-bg);\n}\n\n.font-style-button.selected,\n.font-style-button.selected:hover,\n.font-style-button.selected:active {\n background-color: var(--control-selected-bg);\n color: var(--control-selected-color);\n}","import { Component, Host, h, Prop, EventEmitter, Event } from '@stencil/core';\nimport { DropdownOption } from '../kritzel-dropdown/kritzel-dropdown'; // Import DropdownOption\n\nexport interface BrushStyleOption extends DropdownOption {}\n\n@Component({\n tag: 'kritzel-brush-style',\n styleUrl: 'kritzel-brush-style.css',\n shadow: true,\n})\nexport class KritzelBrushStyle {\n @Prop()\n type: 'pen' | 'highlighter' = 'pen';\n\n @Prop() brushOptions: BrushStyleOption[] = [\n { value: 'pen', label: 'Pen' },\n { value: 'highlighter', label: 'Highlighter' },\n ];\n\n @Event()\n typeChange: EventEmitter<'pen' | 'highlighter'>;\n\n handleDropdownValueChange(event: CustomEvent<string>) {\n this.typeChange.emit(event.detail as 'pen' | 'highlighter');\n }\n\n render() {\n const dropdownOptions: DropdownOption[] = this.brushOptions.map(option => ({\n value: option.value,\n label: option.label,\n }));\n\n return (\n <Host>\n <kritzel-dropdown options={dropdownOptions} value={this.type} onValueChanged={event => this.handleDropdownValueChange(event)}>\n <button class=\"brush-style-button\" slot=\"prefix\">\n <kritzel-icon name={this.type} size={16}></kritzel-icon>\n </button>\n </kritzel-dropdown>\n </Host>\n );\n }\n}\n",":host {\n display: flex;\n}\n\n.checkerboard-bg {\n background: repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%) 50% / 8px 8px;\n position: relative;\n overflow: hidden;\n}\n\n.color-circle {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n box-sizing: border-box;\n display: block;\n}\n\n.color-circle.white {\n border: 1px solid var(--kritzel-color-palette-circle-border-color, #dddcdc);\n}","import { Component, Host, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'kritzel-color',\n styleUrl: 'kritzel-color.css',\n shadow: true,\n})\nexport class KritzelColor {\n @Prop()\n value: string;\n\n @Prop()\n size: number = 24;\n\n private isLightColor(hexColor: string): boolean {\n if (!hexColor) return false;\n\n let r = 0,\n g = 0,\n b = 0;\n\n let sanitizedHex = hexColor.startsWith('#') ? hexColor.slice(1) : hexColor;\n\n if (sanitizedHex.length === 3) {\n r = parseInt(sanitizedHex[0] + sanitizedHex[0], 16);\n g = parseInt(sanitizedHex[1] + sanitizedHex[1], 16);\n b = parseInt(sanitizedHex[2] + sanitizedHex[2], 16);\n } else if (sanitizedHex.length === 6) {\n r = parseInt(sanitizedHex.substring(0, 2), 16);\n g = parseInt(sanitizedHex.substring(2, 4), 16);\n b = parseInt(sanitizedHex.substring(4, 6), 16);\n } else {\n return false;\n }\n\n if (isNaN(r) || isNaN(g) || isNaN(b)) {\n return false;\n }\n\n const luminance = 0.299 * r + 0.587 * g + 0.114 * b;\n\n return luminance > 220;\n }\n\n render() {\n const isColorVeryLight = this.isLightColor(this.value);\n return (\n <Host>\n <div\n class=\"checkerboard-bg\"\n style={{\n width: `${this.size}px`,\n height: `${this.size}px`,\n borderRadius: '50%',\n display: 'inline-block',\n position: 'relative',\n }}\n >\n <div\n class={{\n 'color-circle': true,\n 'white': isColorVeryLight,\n }}\n style={{\n backgroundColor: this.value,\n width: `${this.size}px`,\n height: `${this.size}px`,\n borderRadius: '50%',\n position: 'absolute',\n top: '0',\n left: '0',\n display: 'inline-block',\n }}\n ></div>\n </div>\n </Host>\n );\n }\n}\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';\nimport { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';\n\n@Component({\n tag: 'kritzel-context-menu',\n styleUrl: 'kritzel-context-menu.css',\n shadow: true,\n})\nexport class KritzelContextMenu {\n @Prop()\n items: ContextMenuItem[];\n\n @Event()\n actionSelected: EventEmitter<ContextMenuItem>;\n\n @Event()\n close: EventEmitter<void>;\n\n @Element()\n hostElement: HTMLElement;\n\n private handleItemClick(item: ContextMenuItem) {\n \n const isDisabled = typeof item.disabled === 'function' ? item.disabled() : item.disabled;\n\n if (!isDisabled) {\n this.actionSelected.emit(item);\n }\n }\n\n render() {\n return (\n <Host>\n <div class=\"menu-container\">\n {this.items.map(item => (\n <button\n key={`${item.label}-${this.items.indexOf(item)}`}\n class={{ 'menu-item': true, 'disabled': typeof item.disabled === 'function' ? item.disabled() : item.disabled }}\n onClick={() => this.handleItemClick(item)}\n onTouchStart={() => this.handleItemClick(item)}\n disabled={typeof item.disabled === 'function' ? item.disabled() : item.disabled}\n >\n {item.icon && <kritzel-icon name={item.icon} size={16}></kritzel-icon>}\n <span class=\"label\">{item.label}</span>\n </button>\n ))}\n </div>\n </Host>\n );\n }\n}\n",":host {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.expand-toggle {\n background: none;\n border: none;\n cursor: pointer;\n font-size: 14px;\n line-height: 1;\n padding: 8px;\n color: var(--kritzel-color-palette-expand-toggle-color, #666666);\n}\n\n.expand-toggle:hover {\n color: var(--kritzel-color-palette-expand-toggle-hover-color, #333333);\n}","import { Component, Host, Prop, h, Event, EventEmitter, Watch, State } from '@stencil/core';\nimport { KritzelBrushTool } from '../../../classes/tools/brush-tool.class';\n\n@Component({\n tag: 'kritzel-control-brush-config',\n styleUrl: 'kritzel-control-brush-config.css',\n shadow: true,\n})\nexport class KritzelControlBrushConfig {\n @Prop({ mutable: true })\n tool: KritzelBrushTool;\n\n @Prop({ mutable: true })\n isExpanded: boolean = false;\n\n @Event()\n toolChange: EventEmitter<KritzelBrushTool>;\n\n @State()\n palette: string[] = [];\n\n @Watch('tool')\n handleToolChange(newTool: KritzelBrushTool) {\n this.palette = newTool.palettes[newTool.type];\n }\n\n componentWillLoad() {\n this.palette = this.tool.palettes[this.tool.type];\n }\n\n handleToggleExpand() {\n this.isExpanded = !this.isExpanded;\n }\n\n handleTypeChange(event: CustomEvent<'pen' | 'highlighter'>) {\n this.palette = this.tool.palettes[event.detail];\n this.tool.type = event.detail;\n this.tool.color = this.palette[0];\n this.toolChange.emit(this.tool);\n }\n\n handleColorChange(event: CustomEvent<string>) {\n this.tool.color = event.detail;\n this.toolChange.emit(this.tool);\n }\n\n handleSizeChange(event: CustomEvent<number>) {\n this.tool.size = event.detail;\n this.toolChange.emit(this.tool);\n }\n\n render() {\n return (\n <Host>\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-start',\n width: '100%',\n gap: '8px',\n }}\n >\n <kritzel-brush-style type={this.tool.type} onTypeChange={event => this.handleTypeChange(event)}></kritzel-brush-style>\n\n <button class=\"expand-toggle\" onClick={() => this.handleToggleExpand()} title={this.isExpanded ? 'Collapse' : 'Expand'} style={this.palette.length > 6 ? { visibillity: 'visible' } : { visibility: 'hidden' }}>\n <kritzel-icon name={this.isExpanded ? 'chevron-up' : 'chevron-down'}></kritzel-icon>\n </button>\n </div>\n\n <kritzel-color-palette\n colors={this.palette}\n selectedColor={this.tool.color}\n isExpanded={this.isExpanded}\n isOpaque={true}\n onColorChange={color => this.handleColorChange(color)}\n ></kritzel-color-palette>\n\n <kritzel-stroke-size selectedSize={this.tool.size} onSizeChange={event => this.handleSizeChange(event)}></kritzel-stroke-size>\n </Host>\n );\n }\n}\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 private static lastTapTimestamp: number = 0;\r\n private static tapTimeoutId: ReturnType<typeof setTimeout> | null = null;\r\n private static doubleTapTimeout: number = 300; \r\n\r\n public static detectDoubleTap(): boolean {\r\n const currentTime = Date.now();\r\n const tapLength = currentTime - KritzelEventHelper.lastTapTimestamp;\r\n\r\n if (KritzelEventHelper.tapTimeoutId) {\r\n clearTimeout(KritzelEventHelper.tapTimeoutId);\r\n KritzelEventHelper.tapTimeoutId = null;\r\n }\r\n\r\n if (tapLength < KritzelEventHelper.doubleTapTimeout && tapLength > 0) {\r\n KritzelEventHelper.lastTapTimestamp = 0;\r\n return true;\r\n } else {\r\n KritzelEventHelper.lastTapTimestamp = currentTime;\r\n KritzelEventHelper.tapTimeoutId = setTimeout(() => {\r\n KritzelEventHelper.tapTimeoutId = null;\r\n }, KritzelEventHelper.doubleTapTimeout);\r\n return false;\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","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","import { KritzelBaseObject } from '../classes/objects/base-object.class';\r\nimport { cloneDeep } from 'lodash-es';\r\n\r\nexport class ObjectHelper {\r\n static safeStringify(obj, indent = 2) {\r\n const seen = new WeakSet();\r\n\r\n return JSON.stringify(\r\n obj,\r\n (_key, value) => {\r\n if (typeof value === 'object' && value !== null) {\r\n if (seen.has(value)) {\r\n return undefined;\r\n }\r\n seen.add(value);\r\n }\r\n return value;\r\n },\r\n indent,\r\n );\r\n }\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, ...rest } = obj;\r\n return cloneDeep(rest);\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 = 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 readonly _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(store: KritzelStore) {\r\n this._store = store;\r\n this.id = this.generateId();\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 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 constructor(store: KritzelStore, options?: KritzelPathOptions) {\r\n super(store);\r\n this.options = options;\r\n this.points = options?.points ?? [];\r\n this.translateX = options?.translateX ?? 0;\r\n this.translateY = options?.translateY ?? 0;\r\n this.scale = options?.scale ?? 1;\r\n this.strokeWidth = options?.strokeWidth ?? 8;\r\n this.fill = options?.fill ?? '#000000';\r\n this.zIndex = 9999;\r\n this.d = this.generateSvgPath();\r\n this.updateDimensions();\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 handleMouseDown(_event: MouseEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleMouseMove(_event: MouseEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleMouseUp(_event: MouseEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleDoubleClick(_event: MouseEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleDoubleTap(_event: TouchEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleTouchStart(_event: TouchEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleTouchMove(_event: TouchEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleTouchEnd(_event: TouchEvent): 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 handleMouseDown(event: MouseEvent) {\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 = new KritzelPath(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 handleMouseMove(event: MouseEvent): void {\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 = new KritzelPath(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 handleMouseUp(_event: MouseEvent): void {\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 handleTouchStart(event: TouchEvent): void {\r\n if (this._store.state.touchCount === 1) {\r\n const x = Math.round(event.touches[0].clientX - this._store.offsetX);\r\n const y = Math.round(event.touches[0].clientY - this._store.offsetY);\r\n\r\n this._store.state.isDrawing = true;\r\n this._store.state.currentPath = new KritzelPath(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 handleTouchMove(event: TouchEvent): void {\r\n if (this._store.state.touchCount === 1) {\r\n const x = Math.round(event.touches[0].clientX - this._store.offsetX);\r\n const y = Math.round(event.touches[0].clientY - this._store.offsetY);\r\n\r\n this._store.state.currentPath = new KritzelPath(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 handleTouchEnd(_event: TouchEvent): void {\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","import { 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(store: KritzelStore, fontSize: number, fontFamily: string) {\r\n super(store);\r\n this.fontSize = fontSize;\r\n this.fontFamily = fontFamily;\r\n this.translateX = 0;\r\n this.translateY = 0;\r\n this.width = this.initialWidth / (this._store.state.scale < 0 ? this._store.state.scale : 1);\r\n this.height = (this.fontSize * 1.2) / (this._store.state.scale < 0 ? this._store.state.scale : 1);\r\n this.padding = 5;\r\n this.backgroundColor = 'transparent';\r\n this.scale = this._store.state.scale;\r\n this.value = ' ';\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, '&').replace(/</g, '<').replace(/>/g, '>').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","import { KritzelBaseTool } from \"../components\";\r\nimport { KritzelStore } from \"./store.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 { 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 '../tool.registry';\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 handleMouseDown(event: MouseEvent): void {\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 = new KritzelText(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 text.adjustTextareaSize();\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 handleMouseUp(_event: MouseEvent): void {\r\n this._store.state.activeText?.focus();\r\n this._store.state.activeText?.adjustTextareaSize();\r\n }\r\n\r\n handleTouchStart(event: TouchEvent): void {\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 (this._store.state.touchCount > 1) {\r\n return;\r\n }\r\n\r\n const clientX = Math.round(event.touches[0].clientX - this._store.offsetX);\r\n const clientY = Math.round(event.touches[0].clientY - this._store.offsetY);\r\n const text = new KritzelText(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 handleTouchEnd(_event: TouchEvent): void {\r\n this._store.state.activeText?.focus();\r\n this._store.state.activeText?.adjustTextareaSize();\r\n }\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.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.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);\r\n color: var(--kritzel-controls-control-selected-color, #ffffff);\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 } 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\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 @Element()\r\n host!: HTMLElement;\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 @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 preventDefault(event: Event) {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n 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 handleConfigClick(event: MouseEvent) {\r\n event.stopPropagation();\r\n this.tooltipVisible = !this.tooltipVisible;\r\n this.kritzelEngine.disable();\r\n }\r\n\r\n 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 <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 {\n display: block;\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 9000;\n}\n","import { Component, Host, Listen, State, h } from '@stencil/core';\n\n@Component({\n tag: 'kritzel-cursor-trail',\n styleUrl: 'kritzel-cursor-trail.css',\n shadow: true,\n})\nexport class KritzelCursorTrail {\n @State()\n cursorTrailPoints: Array<{ x: number; y: number; timestamp: number }> = [];\n\n @State()\n isLeftButtonDown: boolean = false;\n\n private trailCleanupIntervalId: number;\n\n private readonly TRAIL_DURATION_MS = 100;\n\n private readonly MAX_TRAIL_POINTS = 50;\n\n componentDidLoad() {\n this.trailCleanupIntervalId = window.setInterval(() => {\n const now = Date.now();\n const newTrailPoints = this.cursorTrailPoints.filter(p => now - p.timestamp < this.TRAIL_DURATION_MS);\n if (newTrailPoints.length !== this.cursorTrailPoints.length) {\n this.cursorTrailPoints = newTrailPoints;\n }\n }, 50);\n }\n\n disconnectedCallback() {\n if (this.trailCleanupIntervalId) {\n window.clearInterval(this.trailCleanupIntervalId);\n }\n }\n\n @Listen('mousedown', { target: 'window' })\n handleMouseDown(ev: MouseEvent) {\n if (ev.button === 0) {\n this.isLeftButtonDown = true;\n this.cursorTrailPoints = [];\n }\n }\n\n @Listen('mousemove', { target: 'window', passive: true })\n handleMouseMove(ev: MouseEvent) {\n\n if (!this.isLeftButtonDown) {\n return;\n }\n const newPoint = { x: ev.clientX, y: ev.clientY, timestamp: Date.now() };\n const updatedTrail = [newPoint, ...this.cursorTrailPoints];\n if (updatedTrail.length > this.MAX_TRAIL_POINTS) {\n this.cursorTrailPoints = updatedTrail.slice(0, this.MAX_TRAIL_POINTS);\n } else {\n this.cursorTrailPoints = updatedTrail;\n }\n }\n\n @Listen('mouseup', { target: 'window' })\n handleMouseUp(ev: MouseEvent) {\n if (ev.button === 0) {\n this.isLeftButtonDown = false;\n this.cursorTrailPoints = [];\n }\n }\n\n @Listen('touchstart', { target: 'window' })\n handleTouchStart(ev: TouchEvent) {\n if (ev.touches.length === 1) {\n this.isLeftButtonDown = true;\n this.cursorTrailPoints = [];\n }\n }\n\n @Listen('touchmove', { target: 'window', passive: true })\n handleTouchMove(ev: TouchEvent) {\n if (!this.isLeftButtonDown) {\n return;\n }\n\n const touch = ev.touches[0];\n const newPoint = { x: touch.clientX, y: touch.clientY, timestamp: Date.now() };\n const updatedTrail = [newPoint, ...this.cursorTrailPoints];\n if (updatedTrail.length > this.MAX_TRAIL_POINTS) {\n this.cursorTrailPoints = updatedTrail.slice(0, this.MAX_TRAIL_POINTS);\n }\n else {\n this.cursorTrailPoints = updatedTrail;\n }\n }\n\n @Listen('touchend', { target: 'window' })\n handleTouchEnd(ev: TouchEvent) {\n if (ev.touches.length === 0) {\n this.isLeftButtonDown = false;\n this.cursorTrailPoints = [];\n }\n }\n \n\n render() {\n return (\n <Host>\n {this.cursorTrailPoints.length > 1 && (\n <svg\n class=\"cursor-trail-svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n left: '0',\n top: '0',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n opacity: 'var(--kritzel-cursor-trail-opacity, 0.6)',\n zIndex: '9000',\n }}\n >\n {this.cursorTrailPoints.slice(1).map((point, index) => {\n const prevPoint = this.cursorTrailPoints[index];\n const now = Date.now();\n const age = now - point.timestamp;\n const progress = Math.max(0, Math.min(1, age / this.TRAIL_DURATION_MS));\n\n if (progress >= 1) return null;\n\n const baseStrokeWidth = Math.max(2, 15 * (1 - progress));\n\n return (\n <line\n key={`trail-segment-${point.timestamp}`}\n x1={prevPoint.x.toString()}\n y1={prevPoint.y.toString()}\n x2={point.x.toString()}\n y2={point.y.toString()}\n stroke=\"var(--kritzel-cursor-trail-color, rgb(228, 228, 228))\"\n stroke-width={baseStrokeWidth.toString()}\n stroke-linecap=\"round\"\n />\n );\n })}\n </svg>\n )}\n </Host>\n );\n }\n}\n",":host {\n display: inline-flex; /* Ensures the host shrinks/grows with the wrapper */\n vertical-align: middle; /* Aligns with other inline-block or inline-flex elements */\n width: 100%; /* Ensures the host takes full width of the parent */\n}\n\n.dropdown-wrapper {\n display: flex;\n align-items: center;\n border: 1px solid #333333;\n border-radius: var(--kritzel-controls-control-border-radius, 8px);\n overflow: hidden;\n height: 32px;\n width: 100%;\n}\n\n.custom-select {\n padding: 0 8px;\n padding-right: 30px; \n height: 100%;\n width: 100%;\n box-sizing: border-box;\n border-radius: 0; \n border: none; \n background-color: #fff;\n cursor: pointer;\n outline: none;\n font-size: inherit;\n color: var(--kritzel-controls-text-color, #333333); /* Use CSS var with fallback */\n -webkit-tap-highlight-color: transparent;\n\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n\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>');\n background-size: 16px 16px;\n background-repeat: no-repeat;\n background-position: right 8px center; \n}\n\n.custom-select.has-suffix-border {\n border-right: 1px solid #333333; \n}\n\n.custom-select.has-prefix-border {\n border-left: 1px solid #333333; \n}\n\n::slotted(*) {\n height: 100%; \n box-sizing: border-box;\n}\n","import { Component, Host, h, Prop, State, Event, EventEmitter, Watch } from '@stencil/core';\n\nexport interface DropdownOption {\n value: string;\n label: string;\n style?: any; // For individual option styling, e.g., font family\n}\n\n@Component({\n tag: 'kritzel-dropdown',\n styleUrl: 'kritzel-dropdown.css',\n shadow: true,\n})\nexport class KritzelDropdown {\n @Prop() \n options: DropdownOption[] = [];\n \n @Prop() \n value: string;\n \n @Prop() \n width?: string;\n \n @Prop() \n selectStyles?: any = {}; \n\n @State() \n internalValue: string;\n\n @State() \n hasSuffixContent: boolean = false;\n\n @State()\n hasPrefixContent: boolean = false;\n\n @Event() \n valueChanged: EventEmitter<string>;\n\n private suffixSlotElement?: HTMLSlotElement;\n private prefixSlotElement?: HTMLSlotElement;\n\n componentWillLoad() {\n this.updateInternalValue(this.value, false);\n this.evaluateSuffixContent();\n this.evaluatePrefixContent();\n }\n\n @Watch('value')\n externalValueChanged(newValue: string) {\n if (newValue !== this.internalValue) {\n this.updateInternalValue(newValue, false);\n }\n }\n \n @Watch('options')\n optionsChanged() {\n this.updateInternalValue(this.internalValue, true);\n }\n\n private updateInternalValue(proposedValue: string, emitChange: boolean) {\n let finalValue = proposedValue;\n if (this.options && this.options.length > 0) {\n const isValidValue = this.options.some(opt => opt.value === finalValue);\n if (!finalValue || !isValidValue) {\n finalValue = this.options[0].value;\n }\n } else {\n finalValue = undefined;\n }\n\n if (this.internalValue !== finalValue) {\n this.internalValue = finalValue;\n if (emitChange || (proposedValue !== finalValue && proposedValue !== undefined)) {\n this.valueChanged.emit(this.internalValue);\n }\n }\n }\n\n private handleSelectChange = (event: Event) => {\n const newValue = (event.target as HTMLSelectElement).value;\n if (this.internalValue !== newValue) {\n this.internalValue = newValue;\n this.valueChanged.emit(this.internalValue);\n }\n };\n\n private evaluateSuffixContent = () => {\n if (this.suffixSlotElement) {\n const newHasContent = this.suffixSlotElement.assignedNodes({ flatten: true }).length > 0;\n if (this.hasSuffixContent !== newHasContent) {\n this.hasSuffixContent = newHasContent;\n }\n } else {\n if (this.hasSuffixContent !== false) {\n this.hasSuffixContent = false;\n }\n }\n }\n\n private evaluatePrefixContent = () => {\n if (this.prefixSlotElement) {\n const newHasContent = this.prefixSlotElement.assignedNodes({ flatten: true }).length > 0;\n if (this.hasPrefixContent !== newHasContent) {\n this.hasPrefixContent = newHasContent;\n }\n } else {\n if (this.hasPrefixContent !== false) {\n this.hasPrefixContent = false;\n }\n }\n }\n\n render() {\n const selectClasses = {\n 'custom-select': true,\n 'has-suffix-border': this.hasSuffixContent,\n 'has-prefix-border': this.hasPrefixContent,\n };\n\n return (\n <Host>\n <div class=\"dropdown-wrapper\">\n <slot\n name=\"prefix\"\n ref={el => this.prefixSlotElement = el as HTMLSlotElement}\n onSlotchange={this.evaluatePrefixContent}\n ></slot>\n <select\n class={selectClasses}\n style={{ ...this.selectStyles, width: this.width }}\n onInput={this.handleSelectChange}\n >\n {this.options.map(option => (\n <option\n value={option.value}\n style={option.style}\n selected={option.value === this.internalValue}\n >\n {option.label}\n </option>\n ))}\n </select>\n <slot \n name=\"suffix\"\n ref={el => this.suffixSlotElement = el as HTMLSlotElement}\n onSlotchange={this.evaluateSuffixContent}\n ></slot>\n </div>\n </Host>\n );\n }\n}\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 handleMouseDown(event: MouseEvent): void {\r\n if (KritzelEventHelper.isLeftClick(event)) {\r\n this._store.state.isErasing = true;\r\n }\r\n }\r\n\r\n handleMouseMove(event: MouseEvent): void {\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 handleMouseUp(_event: MouseEvent): void {\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 handleTouchStart(_event: TouchEvent): void {\r\n this.touchStartTimeout = setTimeout(() => {\r\n if (this._store.state.touchCount === 1 && !this._store.state.isScaling) {\r\n this._store.state.isErasing = true;\r\n }\r\n }, 80);\r\n }\r\n\r\n handleTouchMove(event: TouchEvent): void {\r\n if (this._store.state.touchCount === 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 handleTouchEnd(_event: TouchEvent): void {\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","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 img: HTMLImageElement;\r\n\r\n override debugInfoVisible: boolean = true;\r\n\r\n constructor(store: KritzelStore, img?: HTMLImageElement) {\r\n super(store);\r\n this.img = img;\r\n this.x = 0;\r\n this.y = 0;\r\n this.translateX = 0;\r\n this.translateY = 0;\r\n this.width = img.width;\r\n this.height = img.height;\r\n this.scale = this._store.state.scale;\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 handleMouseDown(event: MouseEvent) {\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 handleMouseMove(event: MouseEvent) {\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 handleMouseUp(_event: MouseEvent) {\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 handleTouchStart(event: TouchEvent) {\r\n if (this._store.state.touchCount === 1) {\r\n if (this._store.state.selectionGroup?.selected && !this._store.state.isResizeHandleSelected && !this._store.state.isRotationHandleSelected) {\r\n const x = Math.round(event.touches[0].clientX - this._store.offsetX);\r\n const y = Math.round(event.touches[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 handleTouchMove(event: TouchEvent) {\r\n if (this._store.state.touchCount === 1 && this._store.state.selectionGroup && !this._store.state.isResizeHandleSelected && !this._store.state.isRotationHandleSelected) {\r\n const x = Math.round(event.touches[0].clientX - this._store.offsetX);\r\n const y = Math.round(event.touches[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 handleTouchEnd(_event: TouchEvent) {\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","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 handleMouseDown(event: MouseEvent): void {\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 handleMouseMove(event: MouseEvent): void {\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 handleMouseUp(_event: MouseEvent): void {\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 handleTouchStart(event: TouchEvent): void {\r\n const firstTouch = event.touches[0];\r\n\r\n if (!firstTouch) {\r\n return;\r\n }\r\n\r\n if (this._store.state.touchCount === 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 handleTouchMove(event: TouchEvent): void {\r\n const oneFingerTouch = event.touches[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 handleTouchEnd(_event: TouchEvent): void {\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\r\n clearTimeout(this._store.state.longTouchTimeout);\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 handleMouseDown(event: MouseEvent): void {\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 handleMouseMove(event: MouseEvent): void {\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 handleMouseUp(_event: MouseEvent): void {\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 handleTouchStart(event: TouchEvent): void {\r\n const firstTouch = event.touches[0];\r\n\r\n if (!firstTouch) {\r\n return;\r\n }\r\n\r\n if (this._store.state.touchCount === 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 handleTouchMove(event: TouchEvent): void {\r\n const firstTouch = event.touches[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 clearTimeout(this._store.state.longTouchTimeout);\r\n }\r\n }\r\n\r\n handleTouchEnd(_event: TouchEvent): void {\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","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 constructor(store: KritzelStore) {\r\n super(store);\r\n this.backgroundColor = 'var(--kritzel-selection-box-background-color, rgba(14, 17, 17, 0.2))';\r\n this.borderColor = 'var(--kritzel-selection-box-border-color, rgba(14, 17, 17, 0.5))';\r\n this.borderWidth = 2;\r\n this.scale = this._store.state.scale;\r\n this.height = 0;\r\n this.width = 0;\r\n this.zIndex = 9999;\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 handleMouseDown(event) {\r\n if (KritzelEventHelper.isLeftClick(event) && !this._store.state.selectionGroup) {\r\n this.startMouseSelection(event);\r\n }\r\n }\r\n\r\n handleMouseMove(event) {\r\n if (this._store.state.isSelecting) {\r\n this.updateMouseSelection(event);\r\n }\r\n }\r\n\r\n handleMouseUp(event) {\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 handleTouchStart(event: TouchEvent) {\r\n this.touchStartTimeout = setTimeout(() => {\r\n if (this._store.state.touchCount === 1 && !this._store.state.isScaling && !this._store.state.selectionGroup) {\r\n this.startTouchSelection(event);\r\n this.updateTouchSelection(event);\r\n }\r\n }, 80);\r\n }\r\n\r\n handleTouchMove(event: TouchEvent) {\r\n const x = Math.round(event.touches[0].clientX - this._store.offsetX);\r\n const y = Math.round(event.touches[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(event);\r\n\r\n clearTimeout(this._store.state.longTouchTimeout);\r\n }\r\n }\r\n\r\n handleTouchEnd(event: TouchEvent) {\r\n clearTimeout(this.touchStartTimeout);\r\n\r\n if (this._store.state.isSelecting) {\r\n if (this.isSelectionClick) {\r\n this.updateTouchSelection(event);\r\n this.addSelectedObjectAtIndexToSelectionGroup(0);\r\n this.removeSelectionBox();\r\n }\r\n\r\n if (this.isSelectionDrag) {\r\n this.updateTouchSelection(event);\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 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 = new KrtizelSelectionBox(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(event: TouchEvent): void {\r\n const firstTouch = event.touches[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 = new KrtizelSelectionBox(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(event: TouchEvent): void {\r\n const firstTouch = event.touches[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 = new KritzelSelectionGroup(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 = new KritzelSelectionGroup(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\nimport { KritzelText } from '../objects/text.class';\r\nimport { KritzelToolRegistry } from '../tool.registry';\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 handleMouseDown(event: MouseEvent): void {\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\r\n this.moveHandler.handleMouseDown(event);\r\n this.selectionHandler.handleMouseDown(event);\r\n this.resizeHandler.handleMouseDown(event);\r\n this.rotationHandler.handleMouseDown(event);\r\n\r\n this._store.rerender();\r\n }\r\n\r\n handleMouseMove(event: MouseEvent): void {\r\n this.moveHandler.handleMouseMove(event);\r\n this.selectionHandler.handleMouseMove(event);\r\n this.resizeHandler.handleMouseMove(event);\r\n this.rotationHandler.handleMouseMove(event);\r\n\r\n this._store.rerender();\r\n }\r\n\r\n handleMouseUp(event: MouseEvent): void {\r\n this.moveHandler.handleMouseUp(event);\r\n this.selectionHandler.handleMouseUp(event);\r\n this.resizeHandler.handleMouseUp(event);\r\n this.rotationHandler.handleMouseUp(event);\r\n\r\n this._store.rerender();\r\n }\r\n\r\n handleDoubleClick(event: MouseEvent): void {\r\n if (KritzelEventHelper.isLeftClick(event)) {\r\n if (this._store.state.selectionGroup && this._store.state.selectionGroup?.objects.length === 1) {\r\n const selectedObject = this._store.state.selectionGroup.objects[0];\r\n\r\n if (selectedObject instanceof KritzelText) {\r\n this._store.history.executeCommand(new RemoveSelectionGroupCommand(this._store, this._store.state.selectionGroup));\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('text'));\r\n this._store.state.activeText = selectedObject;\r\n\r\n setTimeout(() => {\r\n selectedObject.focus();\r\n }, 300);\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleDoubleTap(event: TouchEvent): void {\r\n const selectionGroup = this.getSelectedObject(event);\r\n \r\n if (!selectionGroup || selectionGroup.objects.length !== 1) {\r\n return;\r\n }\r\n\r\n const selectedObject = selectionGroup.objects[0];\r\n\r\n if (selectedObject instanceof KritzelText) {\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('text'));\r\n this._store.state.activeText = selectedObject;\r\n\r\n setTimeout(() => {\r\n selectedObject.focus();\r\n }, 300);\r\n }\r\n }\r\n\r\n handleTouchStart(event: TouchEvent): void {\r\n if (this._store.state.isScaling === true) {\r\n return;\r\n }\r\n\r\n if (this._store.state.touchCount === 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\r\n this.rotationHandler.handleTouchStart(event);\r\n this.resizeHandler.handleTouchStart(event);\r\n this.moveHandler.handleTouchStart(event);\r\n this.selectionHandler.handleTouchStart(event);\r\n }\r\n\r\n handleTouchMove(event: TouchEvent): void {\r\n if (this._store.state.isScaling === true) {\r\n return;\r\n }\r\n\r\n this.rotationHandler.handleTouchMove(event);\r\n this.resizeHandler.handleTouchMove(event);\r\n this.moveHandler.handleTouchMove(event);\r\n this.selectionHandler.handleTouchMove(event);\r\n\r\n this._store.rerender();\r\n }\r\n\r\n handleTouchEnd(event: TouchEvent): void {\r\n if (this._store.state.isScaling === true) {\r\n return;\r\n }\r\n\r\n this.rotationHandler.handleTouchEnd(event);\r\n this.resizeHandler.handleTouchEnd(event);\r\n this.moveHandler.handleTouchEnd(event);\r\n this.selectionHandler.handleTouchEnd(event);\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 = new KritzelSelectionGroup(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 switch (obj.__class__) {\r\n case 'KritzelPath':\r\n revivedObj = new KritzelPath(this._store).revive(obj);\r\n break;\r\n case 'KritzelText':\r\n revivedObj = new KritzelText(this._store, obj.fontSize, obj.fontFamily).revive(obj);\r\n break;\r\n case 'KritzelImage':\r\n revivedObj = new KritzelImage(this._store, obj.img).revive(obj);\r\n break;\r\n case 'KritzelSelectionGroup':\r\n revivedObj = new KritzelSelectionGroup(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 constructor(store: KritzelStore) {\r\n super(store);\r\n this.scale = this._store.state.scale;\r\n this.zIndex = 99999;\r\n }\r\n\r\n get length(): number {\r\n return this.objects.length;\r\n }\r\n\r\n addOrRemove(object: KritzelBaseObject<any>) {\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(obj => {\r\n const updatedWidth = obj.width * widthScaleFactor;\r\n const updatedHeight = obj.height * heightScaleFactor;\r\n\r\n const updatedX = obj.translateX + deltaX + (obj.translateX - this.translateX) * (widthScaleFactor - 1);\r\n const updatedY = obj.translateY + deltaY + (obj.translateY - this.translateY) * (heightScaleFactor - 1);\r\n\r\n obj.resize(updatedX, updatedY, updatedWidth, updatedHeight);\r\n\r\n this._store.state.objectsOctree.update(obj);\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 child.rotation = this.objects.length === 1 ? value : value + unchangedChild.rotation;\r\n });\r\n }\r\n\r\n override copy(): KritzelBaseObject<HTMLElement> {\r\n const selectionGroup = new KritzelSelectionGroup(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 '../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 = new KritzelImage(this._store, img);\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 = new KritzelSelectionGroup(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}\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/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\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 @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 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></kritzel-engine>\r\n <kritzel-controls controls={this.controls} style={this.hideControls ? { display: 'none' } : { display: 'flex'}}></kritzel-controls>\r\n </Host>\r\n );\r\n }\r\n}\r\n","import { 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 handleMouseDown(event: MouseEvent): void {\r\n const adjustedClientX = event.clientX - this._store.offsetX;\r\n const adjustedClientY = event.clientY - this._store.offsetY;\r\n\r\n if (KritzelEventHelper.isRightClick(event)) {\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 handleMouseMove(event: MouseEvent): void {\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 handleMouseUp(_event: MouseEvent): void {\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 handleTouchStart(event: TouchEvent): void {\r\n this._store.state.touchCount = event.touches.length;\r\n\r\n if (this._store.state.touchCount === 2) {\r\n this._store.state.currentPath = null;\r\n this._store.state.isScaling = true;\r\n\r\n const firstTouchX = event.touches[0].clientX - this._store.offsetX;\r\n const firstTouchY = event.touches[0].clientY - this._store.offsetY;\r\n\r\n const secondTouchX = event.touches[1].clientX - this._store.offsetX;\r\n const secondTouchY = event.touches[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 handleTouchMove(event: TouchEvent): void {\r\n if (this._store.state.touchCount === 2) {\r\n const firstTouchX = event.touches[0].clientX - this._store.offsetX;\r\n const firstTouchY = event.touches[0].clientY - this._store.offsetY;\r\n\r\n const secondTouchX = event.touches[1].clientX - this._store.offsetX;\r\n const secondTouchY = event.touches[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 handleTouchEnd(_event: TouchEvent): void {\r\n this._store.state.touchCount = 0;\r\n this._store.state.isScaling = false;\r\n this._store.rerender();\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 (\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}\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 { 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 { KritzelToolRegistry } from './tool.registry';\r\nimport { KritzelContextMenu } from '../components/ui/kritzel-context-menu/kritzel-context-menu';\r\n\r\nconst initialState: 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 touchCount: 0,\r\n longTouchTimeout: null,\r\n longTouchDelay: 300,\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 = initialState;\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 clearSelection() {\r\n this.history.executeCommand(new RemoveSelectionGroupCommand(this, this.state.selectionGroup));\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 selectAllInViewport() {\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 = new KritzelSelectionGroup(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 this.history.executeCommand(new AddSelectionGroupCommand(this, this, selectionGroup));\r\n this.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n }\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 resetSelection() {\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 this._state.objectsOctree.remove(obj => obj instanceof KritzelSelectionGroup);\r\n this.rerender();\r\n }\r\n\r\n}\r\n","import { KritzelStore } from '../store.class';\r\nimport { KritzelToolRegistry } from '../tool.registry';\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 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","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","import { AddSelectionGroupCommand } from '../commands/add-selection-group.command';\r\nimport { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelStore } from '../store.class';\r\nimport { KritzelSelectionTool } from '../tools/selection-tool.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: MouseEvent): void {\r\n if(event.cancelable){\r\n event.preventDefault();\r\n }\r\n\r\n if (!(this._store.state.activeTool instanceof KritzelSelectionTool)) {\r\n return;\r\n }\r\n\r\n if (this._store.state.skipContextMenu) {\r\n this._store.state.skipContextMenu = false;\r\n return;\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 handleContextMenuTouch(event: TouchEvent): void {\r\n if(event.cancelable){\r\n event.preventDefault();\r\n }\r\n\r\n if (this._store.state.touchCount > 1 || !(this._store.state.activeTool instanceof KritzelSelectionTool)) {\r\n return;\r\n }\r\n\r\n if ('vibrate' in navigator) {\r\n navigator.vibrate(25);\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 = new KritzelSelectionGroup(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 const firstTouch = event.touches[0];\r\n\r\n if (!firstTouch) {\r\n return;\r\n }\r\n\r\n let x: number = Math.round(firstTouch.clientX - this._store.offsetX);\r\n let y: number = Math.round(firstTouch.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.debug-panel {\r\n position: absolute;\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 -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 -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\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 { KritzelToolRegistry } from '../../../classes/tool.registry';\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 { 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.selectAllInViewport() },\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.resetSelection();\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('contextmenu', { capture: false })\r\n handleContextMenu(ev: MouseEvent) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n this.contextMenuHandler.handleContextMenu(ev);\r\n }\r\n\r\n @Listen('mousedown', { passive: true })\r\n handleMouseDown(ev: MouseEvent) {\r\n if (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 this.viewport.handleMouseDown(ev);\r\n this.store.state?.activeTool?.handleMouseDown(ev);\r\n }\r\n\r\n @Listen('mousemove', { passive: true })\r\n handleMouseMove(ev) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n this.viewport.handleMouseMove(ev);\r\n this.store.state?.activeTool?.handleMouseMove(ev);\r\n }\r\n\r\n @Listen('mouseup', { passive: true })\r\n handleMouseUp(ev) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n this.viewport.handleMouseUp(ev);\r\n this.store.state?.activeTool?.handleMouseUp(ev);\r\n }\r\n\r\n @Listen('dblclick')\r\n handleDoubleClick(ev: MouseEvent) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n this.store.state?.activeTool?.handleDoubleClick(ev);\r\n }\r\n\r\n @Listen('doubletap')\r\n handleDoubleTap(ev: CustomEvent<TouchEvent> | TouchEvent) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n const touchEvent = ev instanceof CustomEvent && ev.detail ? ev.detail : (ev as TouchEvent);\r\n\r\n this.store.state?.activeTool?.handleDoubleTap(touchEvent);\r\n }\r\n\r\n @Listen('touchstart', { passive: false })\r\n handleTouchStart(ev: TouchEvent) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n if (KritzelEventHelper.detectDoubleTap()) {\r\n const doubleTapEvent = new CustomEvent('doubletap', { detail: event, bubbles: true, composed: true });\r\n this.host.dispatchEvent(doubleTapEvent);\r\n }\r\n\r\n if (ev.touches.length > 1) {\r\n clearTimeout(this.store.state.longTouchTimeout);\r\n }\r\n\r\n if (ev.cancelable) {\r\n ev.preventDefault();\r\n }\r\n\r\n this.store.state.longTouchTimeout = setTimeout(() => this.contextMenuHandler.handleContextMenuTouch(ev), this.store.state.longTouchDelay);\r\n\r\n this.viewport.handleTouchStart(ev);\r\n this.store.state?.activeTool?.handleTouchStart(ev);\r\n }\r\n\r\n @Listen('touchmove', { passive: false })\r\n handleTouchMove(ev) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n if (ev.cancelable) {\r\n ev.preventDefault();\r\n }\r\n\r\n this.viewport.handleTouchMove(ev);\r\n this.store.state?.activeTool?.handleTouchMove(ev);\r\n }\r\n\r\n @Listen('touchend', { passive: false })\r\n handleTouchEnd(ev) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n if (ev.cancelable) {\r\n ev.preventDefault();\r\n }\r\n\r\n clearTimeout(this.store.state.longTouchTimeout);\r\n\r\n this.viewport.handleTouchEnd(ev);\r\n this.store.state?.activeTool?.handleTouchEnd(ev);\r\n }\r\n\r\n @Listen('touchcancel', { passive: false })\r\n handleTouchCancel(_ev) {\r\n clearTimeout(this.store.state.longTouchTimeout);\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('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 selectAllInViewport() {\r\n this.store.selectAllInViewport();\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.isContextMenuVisible = false;\r\n this.store.state.selectionBox = null;\r\n this.store.state.isSelecting = false;\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 <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: object?.transformationMatrix,\r\n opacity: object.markedForRemoval ? '0.5' : object.opacity.toString(),\r\n pointerEvents: object.markedForRemoval ? 'none' : 'auto',\r\n zIndex: object.zIndex.toString(),\r\n }}\r\n >\r\n <g>\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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.img.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 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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center',\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 transform: `rotate(${object.rotationDegrees}deg)`,\r\n transformOrigin: 'center'\r\n }}\r\n visibility={object.selected && !this.isSelecting ? 'visible' : 'hidden'}\r\n />\r\n </g>\r\n\r\n <g style={{ display: this.store.state.debugInfo.showObjectInfo ? 'block' : '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 );\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 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 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></kritzel-cursor-trail>}\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\n display: block;\n}\n\n.font-preview {\n color: var(--kritzel-font-size-text-color, #333333);\n line-height: 1;\n text-align: center;\n font-weight: bold;\n}\n","import { Component, Host, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'kritzel-font',\n styleUrl: 'kritzel-font.css',\n shadow: true,\n})\nexport class KritzelFont {\n @Prop()\n fontFamily: string = 'Arial, sans-serif';\n\n @Prop()\n size: number = 24;\n\n @Prop()\n color: string = '#000000';\n\n render() {\n return (\n <Host>\n <div\n class=\"font-preview\"\n style={{\n fontFamily: this.fontFamily,\n fontSize: `${this.size}px`,\n color: this.color\n }}\n >\n A\n </div>\n </Host>\n );\n }\n}\n",":host {\n display: flex; \n align-items: flex-start; \n gap: 8px; \n padding: 8px; \n box-sizing: border-box; \n width: 100%;\n}\n\n.font-style-button {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 42px;\n height: 32px;\n padding: 0;\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n border-radius: 0; \n color: var(--control-text-color);\n font-weight: bold;\n -webkit-tap-highlight-color: transparent;\n}\n\n.font-style-button:not(:last-child) {\n border-right: 1px solid #333333; \n}\n\n.font-style-button:hover {\n background-color: var(--control-hover-bg);\n}\n\n.font-style-button:active {\n background-color: var(--control-active-bg);\n}\n\n.font-style-button.selected,\n.font-style-button.selected:hover,\n.font-style-button.selected:active {\n background-color: var(--control-selected-bg);\n color: var(--control-selected-color);\n}\n\n.font-style-button.italic-text {\n font-style: italic;\n}\n","import { Component, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\n\nexport interface FontOption {\n value: string;\n label: string;\n}\n\n@Component({\n tag: 'kritzel-font-family',\n styleUrl: 'kritzel-font-family.css',\n shadow: true,\n})\nexport class KritzelFontFamily {\n @Prop() \n fontOptions: FontOption[] = [\n { value: 'arial', label: 'Arial' },\n { value: 'verdana', label: 'Verdana' },\n { value: 'helvetica', label: 'Helvetica' },\n { value: 'tahoma', label: 'Tahoma' },\n { value: 'trebuchet ms', label: 'Trebuchet MS' },\n { value: 'times new roman', label: 'Times New Roman' },\n { value: 'georgia', label: 'Georgia' },\n { value: 'garamond', label: 'Garamond' },\n { value: 'courier new', label: 'Courier New' },\n { value: 'brush script mt', label: 'Brush Script MT' },\n ];\n\n @Prop({ mutable: true }) \n selectedFontFamily: string;\n\n @Event()\n fontFamilyChange: EventEmitter<string>;\n\n componentWillLoad() {\n if (this.fontOptions && this.fontOptions.length > 0) {\n const isValidCurrentFont = this.fontOptions.some(opt => opt.value === this.selectedFontFamily);\n if (!this.selectedFontFamily || !isValidCurrentFont) {\n this.selectedFontFamily = this.fontOptions[0].value;\n }\n }\n }\n\n private handleDropdownValueChange = (event: CustomEvent<string>) => {\n this.fontFamilyChange.emit(event.detail);\n };\n\n render() {\n const dropdownOptions = this.fontOptions.map(option => ({\n value: option.value,\n label: option.label,\n style: { fontFamily: option.value },\n }));\n\n return (\n <Host>\n <kritzel-dropdown\n options={dropdownOptions}\n value={this.selectedFontFamily}\n onValueChanged={this.handleDropdownValueChange}\n selectStyles={{ fontFamily: this.selectedFontFamily }}\n >\n <button class=\"font-style-button\" slot=\"suffix\">B</button>\n <button class=\"font-style-button italic-text\" slot=\"suffix\">I</button>\n </kritzel-dropdown>\n </Host>\n );\n }\n}\n",":host {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px;\n box-sizing: border-box;\n}\n\n.size-container {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n cursor: pointer;\n border: 2px solid transparent;\n box-sizing: border-box;\n border-radius: 50%;\n}\n\n.size-container:hover {\n background-color: var(--kritzel-font-size-hover-background-color, #f0f0f0);\n}\n\n.size-container.selected {\n border-color: var(--kritzel-selection-border-color, #0E1111);\n background-color: var(--kritzel-font-size-selected-background-color, #e0e0e0);\n}\n\n","import { Component, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\n\n@Component({\n tag: 'kritzel-font-size',\n styleUrl: 'kritzel-font-size.css',\n shadow: true,\n})\nexport class KritzelFontSize {\n @Prop()\n sizes: number[] = [8, 10, 12, 16, 20, 24];\n\n @Prop({ mutable: true })\n selectedSize: number | null = null;\n\n @Prop()\n fontFamily: string = 'Arial';\n\n @Event()\n sizeChange: EventEmitter<number>;\n\n private handleSizeClick(size: number) {\n this.selectedSize = size;\n this.sizeChange.emit(size);\n }\n\n render() {\n return (\n <Host>\n {this.sizes.map(size => (\n <div\n class={{\n 'size-container': true,\n 'selected': this.selectedSize === size,\n }}\n onClick={() => this.handleSizeClick(size)}\n >\n <kritzel-font fontFamily={this.fontFamily} size={size}></kritzel-font>\n </div>\n ))}\n </Host>\n );\n }\n}\n",":host {\n display: inline-flex; /* Changed from block to inline-flex for better alignment */\n justify-content: center; /* Center content horizontally */\n align-items: center; /* Center content vertically */\n}\n\nspan {\n display: flex;\n align-items: center;\n width: 100%; /* Make span fill host width */\n height: 100%; /* Make span fill host height */\n}\n\nspan > svg { /* Ensure SVG scales within the span */\n width: 100%;\n height: 100%;\n}\n","import { Component, h, Prop, Host } from '@stencil/core';\r\nimport { KritzelIconRegistry } from '../../../classes/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 {\n width: auto;\n}\n\n.tooltip-content {\n position: relative;\n padding: 8px 12px;\n border-radius: 4px;\n width: fit-content;\n background-color: var(--kritzel-controls-tooltip-background-color, #ffffff);\n color: var(--kritzel-controls-tooltip-color, #000000);\n padding: var(--kritzel-controls-tooltip-padding, 8px);\n border-radius: var(--kritzel-controls-tooltip-border-radius, 8px);\n white-space: nowrap;\n box-shadow: var(--kritzel-controls-tooltip-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12));\n}\n\n","import { Component, Host, Prop, h, Element, State, Listen } from '@stencil/core';\n\nconst MOBILE_BREAKPOINT = 768;\n\n@Component({\n tag: 'kritzel-tooltip',\n styleUrl: 'kritzel-tooltip.css',\n shadow: true,\n})\nexport class KritzelTooltip {\n @Prop()\n isVisible: boolean = false;\n\n @Prop()\n anchorElement: HTMLElement;\n\n @Prop()\n arrowSize: number = 8;\n\n @Prop()\n offsetY: number = 24;\n\n @Element()\n el: HTMLElement;\n\n @State()\n positionX: number = 0;\n\n @State()\n arrowOffset: string = '0px';\n\n @State()\n private isMobileView: boolean = window.innerWidth < MOBILE_BREAKPOINT;\n\n @Listen('resize', { target: 'window' })\n handleWindowResize() {\n this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;\n this.calculateAdjustedPosition();\n }\n\n componentWillLoad() {\n this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;\n this.calculateAdjustedPosition();\n }\n\n componentWillUpdate() {\n this.calculateAdjustedPosition();\n }\n\n private calculateAdjustedPosition() {\n if (this.isVisible && this.anchorElement) {\n const anchorRect = this.anchorElement.getBoundingClientRect();\n const tooltipContent = this.el.shadowRoot?.querySelector('.tooltip-content') as HTMLElement;\n\n if (!this.isMobileView) {\n this.positionX = anchorRect.left + anchorRect.width / 2;\n this.arrowOffset = `calc(${50}% - ${this.arrowSize}px)`; \n } else {\n const tooltipRect = tooltipContent.getBoundingClientRect();\n this.positionX = anchorRect.left + anchorRect.width / 2 - tooltipRect.width / 2;\n this.arrowOffset = `${anchorRect.left + anchorRect.width / 2 - tooltipRect.left - this.arrowSize}px`;\n }\n }\n }\n\n render() {\n return (\n <Host\n style={{\n position: 'fixed',\n zIndex: '9999',\n transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out',\n visibility: this.isVisible ? 'visible' : 'hidden',\n left: !this.isMobileView ? `${this.positionX}px` : '50%',\n marginBottom: `${this.offsetY + this.arrowSize}px`,\n }}\n >\n <div class=\"tooltip-content\" onClick={event => event.stopPropagation()}>\n <slot></slot>\n <div\n class=\"tooltip-arrow-wrapper\"\n style={{\n position: 'fixed',\n left: this.arrowOffset,\n bottom: `-${this.arrowSize * 2}px`,\n }}\n >\n <div\n class=\"tooltip-arrow\"\n style={{\n borderLeft: `${this.arrowSize}px solid transparent`,\n borderRight: `${this.arrowSize}px solid transparent`,\n borderTop: `${this.arrowSize}px solid var(--kritzel-controls-tooltip-background-color, #ffffff)`,\n filter: 'drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2))',\n }}\n ></div>\n <div\n class=\"tooltip-arrow-rect\"\n style={{\n position: 'relative',\n width: `${this.arrowSize * 2}px`,\n height: `${this.arrowSize}px`,\n backgroundColor: 'var(--kritzel-controls-tooltip-background-color, #ffffff)',\n bottom: `${this.arrowSize * 2}px`,\n }}\n ></div>\n </div>\n </div>\n </Host>\n );\n }\n}\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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MAAO,UACPlC,KAAM,GACNgE,SAAU,CACR+iB,IAAK,CACH,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFC,YAAa,CACX,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,eAKC,MAAMuoB,GAA6C,CACxDrtC,MAAO,UACPlC,KAAM,EACNqF,WAAY,QACZxB,QAAS,CACP,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,YAIG,MAAM2rC,GAAoD,CAC/D,CACEzvC,KAAM,YACNpB,KAAM,OACNuF,KAAMs1B,GACN91B,KAAM,UAER,CACE3D,KAAM,QACNpB,KAAM,OACNuF,KAAM4iB,GACN+F,UAAW,KACXnpB,KAAM,MACNkpB,OAAQ0iB,IAEV,CACEvvC,KAAM,SACNpB,KAAM,OACNuF,KAAM4uB,GACNpvB,KAAM,UAER,CACE3D,KAAM,OACNpB,KAAM,OACNuF,KAAM+jB,GACNvkB,KAAM,OACNkpB,OAAQ2iB,IAEV,CACExvC,KAAM,QACNpB,KAAM,OACNuF,KAAMs2B,GACN92B,KAAM,SAER,CACE3D,KAAM,UACNpB,KAAM,WAER,CACEoB,KAAM,SACNpB,KAAM,WC3IV,MAAM8wC,GAAmB,qO,MCWZC,GAAa,MAL1B,WAAAlxC,CAAAC,G,UAOEC,KAAQktB,SAA4B4jB,GAGpC9wC,KAAcixC,eAA2B,GAGzCjxC,KAAYkxC,aAAY,KA8BzB,CAxBC,gBAAAlpB,CAAiB1nB,GACf,GAAIA,EAAMquB,WAAY,CACpBruB,EAAMupB,gB,EAIV,iBAAAtkB,GACEvF,KAAKmxC,wB,CAGC,sBAAAA,GACN,IAAK,MAAO9vC,EAAM+vC,KAAQznC,OAAOmQ,QAAQ9Z,KAAKixC,gBAAiB,CA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","ignoreList":[]}
|
|
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","detectDoubleTap","currentTime","Date","now","tapLength","lastTapTimestamp","tapTimeoutId","clearTimeout","doubleTapTimeout","setTimeout","KritzelBaseCommand","store","initiator","_store","_b","_a","isUndoable","execute","Error","undo","AddObjectCommand","object","super","state","objectsOctree","insert","remove","id","pe","Object","defineProperty","ge","e","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","freeGlobal","global","freeSelf","self","root","Function","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","getRawTag","isOwn","call","tag","unmasked","result","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","isObject","asyncTag","funcTag","genTag","proxyTag","isFunction","coreJsData","maskSrcKey","uid","exec","keys","IE_PROTO","isMasked","func","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","RegExp","replace","baseIsNative","pattern","test","getValue","getNative","WeakMap","objectCreate","create","baseCreate","proto","arrayEach","array","iteratee","index","MAX_SAFE_INTEGER","reIsUint","isIndex","baseAssignValue","configurable","writable","eq","other","assignValue","objValue","isLength","isArrayLike","isPrototype","Ctor","baseTimes","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","arguments","stubFalse","freeExports","nodeType","freeModule","module","moduleExports","Buffer","nativeIsBuffer","isBuffer","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","String","overArg","transform","arg","nativeKeys","baseKeys","nativeCreate","hashClear","__data__","hashDelete","has","HASH_UNDEFINED","hashGet","data","hashHas","hashSet","Hash","entries","clear","entry","set","listCacheClear","assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","pop","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","mapCacheClear","hash","string","isKeyable","getMapData","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","arrayPush","values","offset","getPrototype","getPrototypeOf","stackClear","stackDelete","stackGet","stackHas","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","cloneBuffer","buffer","isDeep","arrayFilter","predicate","resIndex","stubArray","nativeGetSymbols","getOwnPropertySymbols","getSymbols","symbol","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","DataView","Promise","Set","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","resolve","ctorString","initCloneArray","input","Uint8Array","cloneArrayBuffer","arrayBuffer","byteLength","cloneDataView","dataView","byteOffset","reFlags","cloneRegExp","regexp","source","symbolProto","symbolValueOf","valueOf","cloneSymbol","cloneTypedArray","typedArray","symbolTag","initCloneByTag","initCloneObject","baseIsMap","nodeIsMap","isMap","baseIsSet","nodeIsSet","isSet","cloneableTags","baseClone","bitmask","customizer","stack","isFunc","stacked","forEach","subValue","add","props","CLONE_DEEP_FLAG","CLONE_SYMBOLS_FLAG","cloneDeep","ObjectHelper","safeStringify","obj","indent","seen","WeakSet","JSON","stringify","_key","generateUUID","random","substr","clone","objOrObjs","cloneObject","rest","__rest","isEmpty","KritzelBaseObject","totalWidth","padding","totalHeight","elementRef","element","_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","mount","isInViewport","viewportBounds","viewportWidth","viewportHeight","centerInViewport","move","startX","startY","endX","endY","resize","rotate","copy","copiedObject","assign","revive","KritzelPath","viewBox","stroke","lineSlack","points","_c","_d","strokeWidth","_e","fill","_f","generateSvgPath","updateDimensions","scaleX","scaleY","rotatedPoints","minX","minY","maxX","maxY","getStrokeFromPoints","getSvgPathFromStroke","closed","len","toFixed","KritzelBaseTool","onActivate","onDeactivate","handleMouseDown","_event","handleMouseMove","handleMouseUp","handleDoubleClick","handleDoubleTap","handleTouchStart","handleTouchMove","handleTouchEnd","handleWheel","KritzelBrushTool","pen","highlighter","isDrawing","clientX","offsetX","clientY","offsetY","currentPath","rerender","currentZIndex","history","executeCommand","touchCount","round","touches","KritzelText","isReadonly","activeTool","KritzelTextTool","initialWidth","isNew","rows","scaleFactor","handleKeyDown","preventDefault","stopPropagation","handleInput","target","selectionStart","selectionEnd","trim","adjustTextareaSize","span","document","createElement","whiteSpace","window","getComputedStyle","innerHTML","body","appendChild","textWidth","offsetWidth","textHeight","offsetHeight","removeChild","focus","selectAll","select","insertFromClipboard","navigator","clipboard","readText","then","text","err","console","error","KritzelToolRegistry","registerTool","toolName","toolInstance","registry","getTool","warn","path","composedPath","objectElement","find","classList","contains","findObjectById","activeText","resetActiveText","setState","kritzelControlsCss","KritzelControls","controls","activeControl","firstConfig","tooltipVisible","kritzelEngine","activeToolAsTextTool","activeToolAsBrushTool","initializeEngine","initializeTools","componentDidLoad","controlsReady","customElements","whenDefined","host","parentElement","querySelector","config","isDefault","changeActiveTool","handleActiveToolChange","control","setFocus","handleClick","closest","enable","cancelable","handleControlClick","handleConfigClick","disable","hasNoConfig","bottom","onUndo","onRedo","redo","onDelete","delete","isVisible","anchorElement","shadowRoot","onToolChange","cursor","pointerEvents","border","_g","_h","kritzelCursorTrailCss","KritzelCursorTrail","cursorTrailPoints","isLeftButtonDown","TRAIL_DURATION_MS","MAX_TRAIL_POINTS","trailCleanupIntervalId","setInterval","newTrailPoints","filter","timestamp","disconnectedCallback","clearInterval","newPoint","updatedTrail","touch","xmlns","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","registerIcons","icons","eraser","image","paste","cut","download","BatchCommand","commands","command","RemoveObjectCommand","KritzelEraserTool","touchStartTimeout","isErasing","selectedObject","getObjectFromPointerEvent","removeCommands","allObjects","isScaling","KritzelImage","img","RemoveSelectionGroupCommand","previousSelectionGroup","selectionGroup","MoveSelectionGroupCommand","skipFirstExecution","skipExecution","KritzelBaseHandler","KritzelMoveHandler","isResizeHandleSelected","isRotationHandleSelected","isDragging","dragStartX","dragStartY","moveDeltaX","moveDeltaY","moveThreshold","longTouchTimeout","KritzelHandleType","ResizeSelectionGroupCommand","previousSize","newSize","KritzelResizeHandler","initialMouseX","initialMouseY","initialSize","isResizing","dx","dy","resizeHandleType","TopLeft","TopRight","BottomLeft","BottomRight","resizeSelectionGroupCommand","structuredClone","firstTouch","oneFingerTouch","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","selectionBox","isSelectionDrag","touchStartX","touchStartY","startMouseSelection","isSelecting","updateMouseSelection","addSelectedObjectAtIndexToSelectionGroup","removeSelectionBox","addSelectedObjectsToSelectionGroup","startTouchSelection","updateTouchSelection","skipContextMenu","KritzelSelectionGroup","currentX","currentY","updateSelectedObjects","objectPolygon","selectionBoxPolygon","selectedObjects","sort","addOrRemove","KritzelSelectionTool","selectionHandler","moveHandler","resizeHandler","rotationHandler","isHandleSelected","getHandleType","getSelectedObject","isDifferentObject","group","TouchEvent","elementAtPoint","elementFromPoint","handle","KritzelReviver","revivedObj","KritzelImageTool","newObj","unchangedObjects","findIndex","refreshObjectDimensions","deselectAllChildren","updatePosition","widthScaleFactor","heightScaleFactor","updatedWidth","updatedHeight","updatedX","updatedY","child","unchangedChild","getUnchangedObject","getOffsetXToCenter","getOffsetYToCenter","objCenterX","objCenterY","objectId","reviver","_mergeNamespaces","getOwnPropertyDescriptor","freeze","copyExifWithoutOrientation","getApp1Segment","Blob","FileReader","addEventListener","getUint16","getUint32","setUint16","readAsArrayBuffer","UZIP","parse","bin","readUshort","readUint","_readLocal","readUTF8","csize","inflateRaw","inflate","deflate","level","floor","deflateRaw","adler","encode","writeUint","writeUshort","_noNeed","crc","cpr","usize","file","sizeUTF8","_writeHeader","split","toLowerCase","writeUTF8","table","Uint32Array","readASCII","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","rect","delay","dispose","blend","toRGBA8","acTL","_bin","addErr","dither","Int16Array","_main","sRGB","pHYs","iCCP","pako","plte","cimg","loop","compressPNG","bpl","bpp","framize","_prepareDiff","_updateFrame","concatRGBA","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","set16","set32","setUint32","seek","convert","_dly","toBlob","CHROME","FIREFOX","DESKTOP_SAFARI","IE","IOS","ETC","WorkerGlobalScope","cordova","CustomFile","getOriginalSymbol","File","CustomFileReader","getFilefromDataUrl","match","globalThis","atob","lastModified","getDataUrlFromFile","onload","onerror","readAsDataURL","loadImage","Image","src","getBrowserName","cachedResult","userAgent","documentMode","approximateBelowMaximumCanvasSizeOfBrowser","getNewCanvasAndCtx","OffscreenCanvas","drawImageInCanvas","fillStyle","fillRect","drawImage","isIOS","includes","platform","drawFileInCanvas","$Try_2_Post","fileType","$Try_2_Catch","$Try_3_Catch","MOBILE_SAFARI","createImageBitmap","canvasToFile","$If_4","$If_5","bind","convertToBlob","quality","$If_6","toDataURL","cleanupCanvasMemory","isAutoOrientationInBrowser","getExifOrientation","handleMaxWidthOrHeight","maxWidthOrHeight","isFinite","followExifOrientation","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","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","registerCustomSvgIcons","svg","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","peek","KritzelHistory","undoStack","historyBufferSize","redoStack","debugInfo","logCommands","KritzelOctree","bounds","children","intersects","subdivide","query","range","results","halfWidth","halfHeight","halfDepth","UpdateObjectCommand","updatedProperties","previousProperties","initialState","copiedObjects","isEnabled","isFocused","isWriting","isCtrlKeyPressed","isContextMenuVisible","contextMenuItems","contextMenuX","contextMenuY","showObjectInfo","showViewportInfo","longTouchDelay","KritzelStore","_history","_state","_listeners","_kritzelEngine","Infinity","forceUpdate","deselectAllObjects","onStateChange","property","listener","oldValue","clearSelection","deleteSelectedObjectsCommand","removeSelectionGroupCommand","deleteObject","isHistoryUpdated","removeObjectCommand","adjustedX","adjustedY","addCopiedObjectsCommands","addCopiedObjectsAsSelectionGroupCommand","moveUp","increaseZIndexCommands","moveDown","decreaseZIndexCommands","moveToTop","moveToBottom","selectAllInViewport","objectsInViewport","selector","resetSelection","KritzelKeyHandler","shiftKey","handleKeyUp","KritzelKeyboardHelper","forceHideKeyboard","activeElement","HTMLElement","blur","KritzelContextMenuHandler","globalContextMenuItems","objectContextMenuItems","handleContextMenu","menuWidthEstimate","menuHeightEstimate","margin","innerWidth","innerHeight","handleContextMenuTouch","vibrate","kritzelEngineCss","KritzelEngine","isSelectionActive","action","contextMenuElement","contextMenuHandler","keyHandler","activeToolChange","viewport","engineReady","hideContextMenu","touchEvent","CustomEvent","doubleTapEvent","bubbles","composed","dispatchEvent","handleTouchCancel","_ev","updateFocus","isInside","kritzelEngineElement","isInKritzelEngine","handleContextMenuAction","toolClass","toolConfig","registeredTool","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","../../../node_modules/lodash-es/_freeGlobal.js","../../../node_modules/lodash-es/_root.js","../../../node_modules/lodash-es/_Symbol.js","../../../node_modules/lodash-es/_getRawTag.js","../../../node_modules/lodash-es/_objectToString.js","../../../node_modules/lodash-es/_baseGetTag.js","../../../node_modules/lodash-es/isObjectLike.js","../../../node_modules/lodash-es/isArray.js","../../../node_modules/lodash-es/isObject.js","../../../node_modules/lodash-es/isFunction.js","../../../node_modules/lodash-es/_coreJsData.js","../../../node_modules/lodash-es/_isMasked.js","../../../node_modules/lodash-es/_toSource.js","../../../node_modules/lodash-es/_baseIsNative.js","../../../node_modules/lodash-es/_getValue.js","../../../node_modules/lodash-es/_getNative.js","../../../node_modules/lodash-es/_WeakMap.js","../../../node_modules/lodash-es/_baseCreate.js","../../../node_modules/lodash-es/_defineProperty.js","../../../node_modules/lodash-es/_arrayEach.js","../../../node_modules/lodash-es/_isIndex.js","../../../node_modules/lodash-es/_baseAssignValue.js","../../../node_modules/lodash-es/eq.js","../../../node_modules/lodash-es/_assignValue.js","../../../node_modules/lodash-es/isLength.js","../../../node_modules/lodash-es/isArrayLike.js","../../../node_modules/lodash-es/_isPrototype.js","../../../node_modules/lodash-es/_baseTimes.js","../../../node_modules/lodash-es/_baseIsArguments.js","../../../node_modules/lodash-es/isArguments.js","../../../node_modules/lodash-es/stubFalse.js","../../../node_modules/lodash-es/isBuffer.js","../../../node_modules/lodash-es/_baseIsTypedArray.js","../../../node_modules/lodash-es/_baseUnary.js","../../../node_modules/lodash-es/_nodeUtil.js","../../../node_modules/lodash-es/isTypedArray.js","../../../node_modules/lodash-es/_arrayLikeKeys.js","../../../node_modules/lodash-es/_overArg.js","../../../node_modules/lodash-es/_nativeKeys.js","../../../node_modules/lodash-es/_baseKeys.js","../../../node_modules/lodash-es/keys.js","../../../node_modules/lodash-es/_nativeCreate.js","../../../node_modules/lodash-es/_hashClear.js","../../../node_modules/lodash-es/_hashDelete.js","../../../node_modules/lodash-es/_hashGet.js","../../../node_modules/lodash-es/_hashHas.js","../../../node_modules/lodash-es/_hashSet.js","../../../node_modules/lodash-es/_Hash.js","../../../node_modules/lodash-es/_listCacheClear.js","../../../node_modules/lodash-es/_assocIndexOf.js","../../../node_modules/lodash-es/_listCacheDelete.js","../../../node_modules/lodash-es/_listCacheGet.js","../../../node_modules/lodash-es/_listCacheHas.js","../../../node_modules/lodash-es/_listCacheSet.js","../../../node_modules/lodash-es/_ListCache.js","../../../node_modules/lodash-es/_Map.js","../../../node_modules/lodash-es/_mapCacheClear.js","../../../node_modules/lodash-es/_isKeyable.js","../../../node_modules/lodash-es/_getMapData.js","../../../node_modules/lodash-es/_mapCacheDelete.js","../../../node_modules/lodash-es/_mapCacheGet.js","../../../node_modules/lodash-es/_mapCacheHas.js","../../../node_modules/lodash-es/_mapCacheSet.js","../../../node_modules/lodash-es/_MapCache.js","../../../node_modules/lodash-es/_arrayPush.js","../../../node_modules/lodash-es/_getPrototype.js","../../../node_modules/lodash-es/_stackClear.js","../../../node_modules/lodash-es/_stackDelete.js","../../../node_modules/lodash-es/_stackGet.js","../../../node_modules/lodash-es/_stackHas.js","../../../node_modules/lodash-es/_stackSet.js","../../../node_modules/lodash-es/_Stack.js","../../../node_modules/lodash-es/_cloneBuffer.js","../../../node_modules/lodash-es/_arrayFilter.js","../../../node_modules/lodash-es/stubArray.js","../../../node_modules/lodash-es/_getSymbols.js","../../../node_modules/lodash-es/_baseGetAllKeys.js","../../../node_modules/lodash-es/_getAllKeys.js","../../../node_modules/lodash-es/_DataView.js","../../../node_modules/lodash-es/_Promise.js","../../../node_modules/lodash-es/_Set.js","../../../node_modules/lodash-es/_getTag.js","../../../node_modules/lodash-es/_initCloneArray.js","../../../node_modules/lodash-es/_Uint8Array.js","../../../node_modules/lodash-es/_cloneArrayBuffer.js","../../../node_modules/lodash-es/_cloneDataView.js","../../../node_modules/lodash-es/_cloneRegExp.js","../../../node_modules/lodash-es/_cloneSymbol.js","../../../node_modules/lodash-es/_cloneTypedArray.js","../../../node_modules/lodash-es/_initCloneByTag.js","../../../node_modules/lodash-es/_initCloneObject.js","../../../node_modules/lodash-es/_baseIsMap.js","../../../node_modules/lodash-es/isMap.js","../../../node_modules/lodash-es/_baseIsSet.js","../../../node_modules/lodash-es/isSet.js","../../../node_modules/lodash-es/_baseClone.js","../../../node_modules/lodash-es/cloneDeep.js","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/objects/text.class.ts","src/classes/tool.registry.ts","src/classes/tools/text-tool.class.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/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/classes/store.class.ts","src/classes/handlers/key.handler.ts","src/helpers/keyboard.helper.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 {\n display: flex; \n align-items: flex-start; \n gap: 8px; \n padding: 8px; \n box-sizing: border-box; \n width: 100%;\n}\n\n.brush-style-button {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 42px;\n height: 32px;\n padding: 0;\n border: none;\n outline: none;\n background: none;\n cursor: default;\n border-radius: 0; \n color: var(--control-text-color);\n font-weight: bold;\n -webkit-tap-highlight-color: transparent;\n}\n\n.font-style-button:not(:last-child) {\n border-right: 1px solid #333333; \n}\n\n.font-style-button:hover {\n background-color: var(--control-hover-bg);\n}\n\n.font-style-button:active {\n background-color: var(--control-active-bg);\n}\n\n.font-style-button.selected,\n.font-style-button.selected:hover,\n.font-style-button.selected:active {\n background-color: var(--control-selected-bg);\n color: var(--control-selected-color);\n}","import { Component, Host, h, Prop, EventEmitter, Event } from '@stencil/core';\nimport { DropdownOption } from '../kritzel-dropdown/kritzel-dropdown'; // Import DropdownOption\n\nexport interface BrushStyleOption extends DropdownOption {}\n\n@Component({\n tag: 'kritzel-brush-style',\n styleUrl: 'kritzel-brush-style.css',\n shadow: true,\n})\nexport class KritzelBrushStyle {\n @Prop()\n type: 'pen' | 'highlighter' = 'pen';\n\n @Prop() brushOptions: BrushStyleOption[] = [\n { value: 'pen', label: 'Pen' },\n { value: 'highlighter', label: 'Highlighter' },\n ];\n\n @Event()\n typeChange: EventEmitter<'pen' | 'highlighter'>;\n\n handleDropdownValueChange(event: CustomEvent<string>) {\n this.typeChange.emit(event.detail as 'pen' | 'highlighter');\n }\n\n render() {\n const dropdownOptions: DropdownOption[] = this.brushOptions.map(option => ({\n value: option.value,\n label: option.label,\n }));\n\n return (\n <Host>\n <kritzel-dropdown options={dropdownOptions} value={this.type} onValueChanged={event => this.handleDropdownValueChange(event)}>\n <button class=\"brush-style-button\" slot=\"prefix\">\n <kritzel-icon name={this.type} size={16}></kritzel-icon>\n </button>\n </kritzel-dropdown>\n </Host>\n );\n }\n}\n",":host {\n display: flex;\n}\n\n.checkerboard-bg {\n background: repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%) 50% / 8px 8px;\n position: relative;\n overflow: hidden;\n}\n\n.color-circle {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n box-sizing: border-box;\n display: block;\n}\n\n.color-circle.white {\n border: 1px solid var(--kritzel-color-palette-circle-border-color, #dddcdc);\n}","import { Component, Host, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'kritzel-color',\n styleUrl: 'kritzel-color.css',\n shadow: true,\n})\nexport class KritzelColor {\n @Prop()\n value: string;\n\n @Prop()\n size: number = 24;\n\n private isLightColor(hexColor: string): boolean {\n if (!hexColor) return false;\n\n let r = 0,\n g = 0,\n b = 0;\n\n let sanitizedHex = hexColor.startsWith('#') ? hexColor.slice(1) : hexColor;\n\n if (sanitizedHex.length === 3) {\n r = parseInt(sanitizedHex[0] + sanitizedHex[0], 16);\n g = parseInt(sanitizedHex[1] + sanitizedHex[1], 16);\n b = parseInt(sanitizedHex[2] + sanitizedHex[2], 16);\n } else if (sanitizedHex.length === 6) {\n r = parseInt(sanitizedHex.substring(0, 2), 16);\n g = parseInt(sanitizedHex.substring(2, 4), 16);\n b = parseInt(sanitizedHex.substring(4, 6), 16);\n } else {\n return false;\n }\n\n if (isNaN(r) || isNaN(g) || isNaN(b)) {\n return false;\n }\n\n const luminance = 0.299 * r + 0.587 * g + 0.114 * b;\n\n return luminance > 220;\n }\n\n render() {\n const isColorVeryLight = this.isLightColor(this.value);\n return (\n <Host>\n <div\n class=\"checkerboard-bg\"\n style={{\n width: `${this.size}px`,\n height: `${this.size}px`,\n borderRadius: '50%',\n display: 'inline-block',\n position: 'relative',\n }}\n >\n <div\n class={{\n 'color-circle': true,\n 'white': isColorVeryLight,\n }}\n style={{\n backgroundColor: this.value,\n width: `${this.size}px`,\n height: `${this.size}px`,\n borderRadius: '50%',\n position: 'absolute',\n top: '0',\n left: '0',\n display: 'inline-block',\n }}\n ></div>\n </div>\n </Host>\n );\n }\n}\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';\nimport { ContextMenuItem } from '../../../interfaces/context-menu-item.interface';\n\n@Component({\n tag: 'kritzel-context-menu',\n styleUrl: 'kritzel-context-menu.css',\n shadow: true,\n})\nexport class KritzelContextMenu {\n @Prop()\n items: ContextMenuItem[];\n\n @Event()\n actionSelected: EventEmitter<ContextMenuItem>;\n\n @Event()\n close: EventEmitter<void>;\n\n @Element()\n hostElement: HTMLElement;\n\n private handleItemClick(item: ContextMenuItem) {\n \n const isDisabled = typeof item.disabled === 'function' ? item.disabled() : item.disabled;\n\n if (!isDisabled) {\n this.actionSelected.emit(item);\n }\n }\n\n render() {\n return (\n <Host>\n <div class=\"menu-container\">\n {this.items.map(item => (\n <button\n key={`${item.label}-${this.items.indexOf(item)}`}\n class={{ 'menu-item': true, 'disabled': typeof item.disabled === 'function' ? item.disabled() : item.disabled }}\n onClick={() => this.handleItemClick(item)}\n onTouchStart={() => this.handleItemClick(item)}\n disabled={typeof item.disabled === 'function' ? item.disabled() : item.disabled}\n >\n {item.icon && <kritzel-icon name={item.icon} size={16}></kritzel-icon>}\n <span class=\"label\">{item.label}</span>\n </button>\n ))}\n </div>\n </Host>\n );\n }\n}\n",":host {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.expand-toggle {\n background: none;\n border: none;\n cursor: pointer;\n font-size: 14px;\n line-height: 1;\n padding: 8px;\n color: var(--kritzel-color-palette-expand-toggle-color, #666666);\n}\n\n.expand-toggle:hover {\n color: var(--kritzel-color-palette-expand-toggle-hover-color, #333333);\n}","import { Component, Host, Prop, h, Event, EventEmitter, Watch, State } from '@stencil/core';\nimport { KritzelBrushTool } from '../../../classes/tools/brush-tool.class';\n\n@Component({\n tag: 'kritzel-control-brush-config',\n styleUrl: 'kritzel-control-brush-config.css',\n shadow: true,\n})\nexport class KritzelControlBrushConfig {\n @Prop({ mutable: true })\n tool: KritzelBrushTool;\n\n @Prop({ mutable: true })\n isExpanded: boolean = false;\n\n @Event()\n toolChange: EventEmitter<KritzelBrushTool>;\n\n @State()\n palette: string[] = [];\n\n @Watch('tool')\n handleToolChange(newTool: KritzelBrushTool) {\n this.palette = newTool.palettes[newTool.type];\n }\n\n componentWillLoad() {\n this.palette = this.tool.palettes[this.tool.type];\n }\n\n handleToggleExpand() {\n this.isExpanded = !this.isExpanded;\n }\n\n handleTypeChange(event: CustomEvent<'pen' | 'highlighter'>) {\n this.palette = this.tool.palettes[event.detail];\n this.tool.type = event.detail;\n this.tool.color = this.palette[0];\n this.toolChange.emit(this.tool);\n }\n\n handleColorChange(event: CustomEvent<string>) {\n this.tool.color = event.detail;\n this.toolChange.emit(this.tool);\n }\n\n handleSizeChange(event: CustomEvent<number>) {\n this.tool.size = event.detail;\n this.toolChange.emit(this.tool);\n }\n\n render() {\n return (\n <Host>\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-start',\n width: '100%',\n gap: '8px',\n }}\n >\n <kritzel-brush-style type={this.tool.type} onTypeChange={event => this.handleTypeChange(event)}></kritzel-brush-style>\n\n <button class=\"expand-toggle\" onClick={() => this.handleToggleExpand()} title={this.isExpanded ? 'Collapse' : 'Expand'} style={this.palette.length > 6 ? { visibillity: 'visible' } : { visibility: 'hidden' }}>\n <kritzel-icon name={this.isExpanded ? 'chevron-up' : 'chevron-down'}></kritzel-icon>\n </button>\n </div>\n\n <kritzel-color-palette\n colors={this.palette}\n selectedColor={this.tool.color}\n isExpanded={this.isExpanded}\n isOpaque={true}\n onColorChange={color => this.handleColorChange(color)}\n ></kritzel-color-palette>\n\n <kritzel-stroke-size selectedSize={this.tool.size} onSizeChange={event => this.handleSizeChange(event)}></kritzel-stroke-size>\n </Host>\n );\n }\n}\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 private static lastTapTimestamp: number = 0;\r\n private static tapTimeoutId: ReturnType<typeof setTimeout> | null = null;\r\n private static doubleTapTimeout: number = 300; \r\n\r\n public static detectDoubleTap(): boolean {\r\n const currentTime = Date.now();\r\n const tapLength = currentTime - KritzelEventHelper.lastTapTimestamp;\r\n\r\n if (KritzelEventHelper.tapTimeoutId) {\r\n clearTimeout(KritzelEventHelper.tapTimeoutId);\r\n KritzelEventHelper.tapTimeoutId = null;\r\n }\r\n\r\n if (tapLength < KritzelEventHelper.doubleTapTimeout && tapLength > 0) {\r\n KritzelEventHelper.lastTapTimestamp = 0;\r\n return true;\r\n } else {\r\n KritzelEventHelper.lastTapTimestamp = currentTime;\r\n KritzelEventHelper.tapTimeoutId = setTimeout(() => {\r\n KritzelEventHelper.tapTimeoutId = null;\r\n }, KritzelEventHelper.doubleTapTimeout);\r\n return false;\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","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","import { KritzelBaseObject } from '../classes/objects/base-object.class';\r\nimport { cloneDeep } from 'lodash-es';\r\n\r\nexport class ObjectHelper {\r\n static safeStringify(obj, indent = 2) {\r\n const seen = new WeakSet();\r\n\r\n return JSON.stringify(\r\n obj,\r\n (_key, value) => {\r\n if (typeof value === 'object' && value !== null) {\r\n if (seen.has(value)) {\r\n return undefined;\r\n }\r\n seen.add(value);\r\n }\r\n return value;\r\n },\r\n indent,\r\n );\r\n }\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, ...rest } = obj;\r\n return cloneDeep(rest);\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 = 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 readonly _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(store: KritzelStore) {\r\n this._store = store;\r\n this.id = this.generateId();\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 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 constructor(store: KritzelStore, options?: KritzelPathOptions) {\r\n super(store);\r\n this.options = options;\r\n this.points = options?.points ?? [];\r\n this.translateX = options?.translateX ?? 0;\r\n this.translateY = options?.translateY ?? 0;\r\n this.scale = options?.scale ?? 1;\r\n this.strokeWidth = options?.strokeWidth ?? 8;\r\n this.fill = options?.fill ?? '#000000';\r\n this.zIndex = 9999;\r\n this.d = this.generateSvgPath();\r\n this.updateDimensions();\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 handleMouseDown(_event: MouseEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleMouseMove(_event: MouseEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleMouseUp(_event: MouseEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleDoubleClick(_event: MouseEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleDoubleTap(_event: TouchEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleTouchStart(_event: TouchEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleTouchMove(_event: TouchEvent): void {\r\n // default implementation\r\n }\r\n\r\n handleTouchEnd(_event: TouchEvent): 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 handleMouseDown(event: MouseEvent) {\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 = new KritzelPath(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 handleMouseMove(event: MouseEvent): void {\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 = new KritzelPath(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 handleMouseUp(_event: MouseEvent): void {\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 handleTouchStart(event: TouchEvent): void {\r\n if (this._store.state.touchCount === 1) {\r\n const x = Math.round(event.touches[0].clientX - this._store.offsetX);\r\n const y = Math.round(event.touches[0].clientY - this._store.offsetY);\r\n\r\n this._store.state.isDrawing = true;\r\n this._store.state.currentPath = new KritzelPath(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 handleTouchMove(event: TouchEvent): void {\r\n if (this._store.state.touchCount === 1) {\r\n const x = Math.round(event.touches[0].clientX - this._store.offsetX);\r\n const y = Math.round(event.touches[0].clientY - this._store.offsetY);\r\n\r\n this._store.state.currentPath = new KritzelPath(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 handleTouchEnd(_event: TouchEvent): void {\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","import { 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(store: KritzelStore, fontSize: number, fontFamily: string) {\r\n super(store);\r\n this.fontSize = fontSize;\r\n this.fontFamily = fontFamily;\r\n this.translateX = 0;\r\n this.translateY = 0;\r\n this.width = this.initialWidth / (this._store.state.scale < 0 ? this._store.state.scale : 1);\r\n this.height = (this.fontSize * 1.2) / (this._store.state.scale < 0 ? this._store.state.scale : 1);\r\n this.padding = 5;\r\n this.backgroundColor = 'transparent';\r\n this.scale = this._store.state.scale;\r\n this.value = ' ';\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, '&').replace(/</g, '<').replace(/>/g, '>').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","import { KritzelBaseTool } from \"../components\";\r\nimport { KritzelStore } from \"./store.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 { 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 '../tool.registry';\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 handleMouseDown(event: MouseEvent): void {\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 = new KritzelText(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 text.adjustTextareaSize();\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 handleMouseUp(_event: MouseEvent): void {\r\n this._store.state.activeText?.focus();\r\n this._store.state.activeText?.adjustTextareaSize();\r\n }\r\n\r\n handleTouchStart(event: TouchEvent): void {\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 (this._store.state.touchCount > 1) {\r\n return;\r\n }\r\n\r\n const clientX = Math.round(event.touches[0].clientX - this._store.offsetX);\r\n const clientY = Math.round(event.touches[0].clientY - this._store.offsetY);\r\n const text = new KritzelText(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 handleTouchEnd(_event: TouchEvent): void {\r\n this._store.state.activeText?.focus();\r\n this._store.state.activeText?.adjustTextareaSize();\r\n }\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.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.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);\r\n color: var(--kritzel-controls-control-selected-color, #ffffff);\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 } 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\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 @Element()\r\n host!: HTMLElement;\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 @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 preventDefault(event: Event) {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n 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 handleConfigClick(event: MouseEvent) {\r\n event.stopPropagation();\r\n this.tooltipVisible = !this.tooltipVisible;\r\n this.kritzelEngine.disable();\r\n }\r\n\r\n 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 <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 {\n display: block;\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n pointer-events: none;\n z-index: 9000;\n}\n","import { Component, Host, Listen, State, h } from '@stencil/core';\n\n@Component({\n tag: 'kritzel-cursor-trail',\n styleUrl: 'kritzel-cursor-trail.css',\n shadow: true,\n})\nexport class KritzelCursorTrail {\n @State()\n cursorTrailPoints: Array<{ x: number; y: number; timestamp: number }> = [];\n\n @State()\n isLeftButtonDown: boolean = false;\n\n private trailCleanupIntervalId: number;\n\n private readonly TRAIL_DURATION_MS = 100;\n\n private readonly MAX_TRAIL_POINTS = 50;\n\n componentDidLoad() {\n this.trailCleanupIntervalId = window.setInterval(() => {\n const now = Date.now();\n const newTrailPoints = this.cursorTrailPoints.filter(p => now - p.timestamp < this.TRAIL_DURATION_MS);\n if (newTrailPoints.length !== this.cursorTrailPoints.length) {\n this.cursorTrailPoints = newTrailPoints;\n }\n }, 50);\n }\n\n disconnectedCallback() {\n if (this.trailCleanupIntervalId) {\n window.clearInterval(this.trailCleanupIntervalId);\n }\n }\n\n @Listen('mousedown', { target: 'window' })\n handleMouseDown(ev: MouseEvent) {\n if (ev.button === 0) {\n this.isLeftButtonDown = true;\n this.cursorTrailPoints = [];\n }\n }\n\n @Listen('mousemove', { target: 'window', passive: true })\n handleMouseMove(ev: MouseEvent) {\n\n if (!this.isLeftButtonDown) {\n return;\n }\n const newPoint = { x: ev.clientX, y: ev.clientY, timestamp: Date.now() };\n const updatedTrail = [newPoint, ...this.cursorTrailPoints];\n if (updatedTrail.length > this.MAX_TRAIL_POINTS) {\n this.cursorTrailPoints = updatedTrail.slice(0, this.MAX_TRAIL_POINTS);\n } else {\n this.cursorTrailPoints = updatedTrail;\n }\n }\n\n @Listen('mouseup', { target: 'window' })\n handleMouseUp(ev: MouseEvent) {\n if (ev.button === 0) {\n this.isLeftButtonDown = false;\n this.cursorTrailPoints = [];\n }\n }\n\n @Listen('touchstart', { target: 'window' })\n handleTouchStart(ev: TouchEvent) {\n if (ev.touches.length === 1) {\n this.isLeftButtonDown = true;\n this.cursorTrailPoints = [];\n }\n }\n\n @Listen('touchmove', { target: 'window', passive: true })\n handleTouchMove(ev: TouchEvent) {\n if (!this.isLeftButtonDown) {\n return;\n }\n\n const touch = ev.touches[0];\n const newPoint = { x: touch.clientX, y: touch.clientY, timestamp: Date.now() };\n const updatedTrail = [newPoint, ...this.cursorTrailPoints];\n if (updatedTrail.length > this.MAX_TRAIL_POINTS) {\n this.cursorTrailPoints = updatedTrail.slice(0, this.MAX_TRAIL_POINTS);\n }\n else {\n this.cursorTrailPoints = updatedTrail;\n }\n }\n\n @Listen('touchend', { target: 'window' })\n handleTouchEnd(ev: TouchEvent) {\n if (ev.touches.length === 0) {\n this.isLeftButtonDown = false;\n this.cursorTrailPoints = [];\n }\n }\n \n\n render() {\n return (\n <Host>\n {this.cursorTrailPoints.length > 1 && (\n <svg\n class=\"cursor-trail-svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n left: '0',\n top: '0',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n opacity: 'var(--kritzel-cursor-trail-opacity, 0.6)',\n zIndex: '9000',\n }}\n >\n {this.cursorTrailPoints.slice(1).map((point, index) => {\n const prevPoint = this.cursorTrailPoints[index];\n const now = Date.now();\n const age = now - point.timestamp;\n const progress = Math.max(0, Math.min(1, age / this.TRAIL_DURATION_MS));\n\n if (progress >= 1) return null;\n\n const baseStrokeWidth = Math.max(2, 15 * (1 - progress));\n\n return (\n <line\n key={`trail-segment-${point.timestamp}`}\n x1={prevPoint.x.toString()}\n y1={prevPoint.y.toString()}\n x2={point.x.toString()}\n y2={point.y.toString()}\n stroke=\"var(--kritzel-cursor-trail-color, rgb(228, 228, 228))\"\n stroke-width={baseStrokeWidth.toString()}\n stroke-linecap=\"round\"\n />\n );\n })}\n </svg>\n )}\n </Host>\n );\n }\n}\n",":host {\n display: inline-flex; /* Ensures the host shrinks/grows with the wrapper */\n vertical-align: middle; /* Aligns with other inline-block or inline-flex elements */\n width: 100%; /* Ensures the host takes full width of the parent */\n}\n\n.dropdown-wrapper {\n display: flex;\n align-items: center;\n border: 1px solid #333333;\n border-radius: var(--kritzel-controls-control-border-radius, 8px);\n overflow: hidden;\n height: 32px;\n width: 100%;\n}\n\n.custom-select {\n padding: 0 8px;\n padding-right: 30px; \n height: 100%;\n width: 100%;\n box-sizing: border-box;\n border-radius: 0; \n border: none; \n background-color: #fff;\n cursor: pointer;\n outline: none;\n font-size: inherit;\n color: var(--kritzel-controls-text-color, #333333); /* Use CSS var with fallback */\n -webkit-tap-highlight-color: transparent;\n\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n\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>');\n background-size: 16px 16px;\n background-repeat: no-repeat;\n background-position: right 8px center; \n}\n\n.custom-select.has-suffix-border {\n border-right: 1px solid #333333; \n}\n\n.custom-select.has-prefix-border {\n border-left: 1px solid #333333; \n}\n\n::slotted(*) {\n height: 100%; \n box-sizing: border-box;\n}\n","import { Component, Host, h, Prop, State, Event, EventEmitter, Watch } from '@stencil/core';\n\nexport interface DropdownOption {\n value: string;\n label: string;\n style?: any; // For individual option styling, e.g., font family\n}\n\n@Component({\n tag: 'kritzel-dropdown',\n styleUrl: 'kritzel-dropdown.css',\n shadow: true,\n})\nexport class KritzelDropdown {\n @Prop() \n options: DropdownOption[] = [];\n \n @Prop() \n value: string;\n \n @Prop() \n width?: string;\n \n @Prop() \n selectStyles?: any = {}; \n\n @State() \n internalValue: string;\n\n @State() \n hasSuffixContent: boolean = false;\n\n @State()\n hasPrefixContent: boolean = false;\n\n @Event() \n valueChanged: EventEmitter<string>;\n\n private suffixSlotElement?: HTMLSlotElement;\n private prefixSlotElement?: HTMLSlotElement;\n\n componentWillLoad() {\n this.updateInternalValue(this.value, false);\n this.evaluateSuffixContent();\n this.evaluatePrefixContent();\n }\n\n @Watch('value')\n externalValueChanged(newValue: string) {\n if (newValue !== this.internalValue) {\n this.updateInternalValue(newValue, false);\n }\n }\n \n @Watch('options')\n optionsChanged() {\n this.updateInternalValue(this.internalValue, true);\n }\n\n private updateInternalValue(proposedValue: string, emitChange: boolean) {\n let finalValue = proposedValue;\n if (this.options && this.options.length > 0) {\n const isValidValue = this.options.some(opt => opt.value === finalValue);\n if (!finalValue || !isValidValue) {\n finalValue = this.options[0].value;\n }\n } else {\n finalValue = undefined;\n }\n\n if (this.internalValue !== finalValue) {\n this.internalValue = finalValue;\n if (emitChange || (proposedValue !== finalValue && proposedValue !== undefined)) {\n this.valueChanged.emit(this.internalValue);\n }\n }\n }\n\n private handleSelectChange = (event: Event) => {\n const newValue = (event.target as HTMLSelectElement).value;\n if (this.internalValue !== newValue) {\n this.internalValue = newValue;\n this.valueChanged.emit(this.internalValue);\n }\n };\n\n private evaluateSuffixContent = () => {\n if (this.suffixSlotElement) {\n const newHasContent = this.suffixSlotElement.assignedNodes({ flatten: true }).length > 0;\n if (this.hasSuffixContent !== newHasContent) {\n this.hasSuffixContent = newHasContent;\n }\n } else {\n if (this.hasSuffixContent !== false) {\n this.hasSuffixContent = false;\n }\n }\n }\n\n private evaluatePrefixContent = () => {\n if (this.prefixSlotElement) {\n const newHasContent = this.prefixSlotElement.assignedNodes({ flatten: true }).length > 0;\n if (this.hasPrefixContent !== newHasContent) {\n this.hasPrefixContent = newHasContent;\n }\n } else {\n if (this.hasPrefixContent !== false) {\n this.hasPrefixContent = false;\n }\n }\n }\n\n render() {\n const selectClasses = {\n 'custom-select': true,\n 'has-suffix-border': this.hasSuffixContent,\n 'has-prefix-border': this.hasPrefixContent,\n };\n\n return (\n <Host>\n <div class=\"dropdown-wrapper\">\n <slot\n name=\"prefix\"\n ref={el => this.prefixSlotElement = el as HTMLSlotElement}\n onSlotchange={this.evaluatePrefixContent}\n ></slot>\n <select\n class={selectClasses}\n style={{ ...this.selectStyles, width: this.width }}\n onInput={this.handleSelectChange}\n >\n {this.options.map(option => (\n <option\n value={option.value}\n style={option.style}\n selected={option.value === this.internalValue}\n >\n {option.label}\n </option>\n ))}\n </select>\n <slot \n name=\"suffix\"\n ref={el => this.suffixSlotElement = el as HTMLSlotElement}\n onSlotchange={this.evaluateSuffixContent}\n ></slot>\n </div>\n </Host>\n );\n }\n}\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 handleMouseDown(event: MouseEvent): void {\r\n if (KritzelEventHelper.isLeftClick(event)) {\r\n this._store.state.isErasing = true;\r\n }\r\n }\r\n\r\n handleMouseMove(event: MouseEvent): void {\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 handleMouseUp(_event: MouseEvent): void {\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 handleTouchStart(_event: TouchEvent): void {\r\n this.touchStartTimeout = setTimeout(() => {\r\n if (this._store.state.touchCount === 1 && !this._store.state.isScaling) {\r\n this._store.state.isErasing = true;\r\n }\r\n }, 80);\r\n }\r\n\r\n handleTouchMove(event: TouchEvent): void {\r\n if (this._store.state.touchCount === 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 handleTouchEnd(_event: TouchEvent): void {\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","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 img: HTMLImageElement;\r\n\r\n override debugInfoVisible: boolean = true;\r\n\r\n constructor(store: KritzelStore, img?: HTMLImageElement) {\r\n super(store);\r\n this.img = img;\r\n this.x = 0;\r\n this.y = 0;\r\n this.translateX = 0;\r\n this.translateY = 0;\r\n this.width = img.width;\r\n this.height = img.height;\r\n this.scale = this._store.state.scale;\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 handleMouseDown(event: MouseEvent) {\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 handleMouseMove(event: MouseEvent) {\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 handleMouseUp(_event: MouseEvent) {\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 handleTouchStart(event: TouchEvent) {\r\n if (this._store.state.touchCount === 1) {\r\n if (this._store.state.selectionGroup?.selected && !this._store.state.isResizeHandleSelected && !this._store.state.isRotationHandleSelected) {\r\n const x = Math.round(event.touches[0].clientX - this._store.offsetX);\r\n const y = Math.round(event.touches[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 handleTouchMove(event: TouchEvent) {\r\n if (this._store.state.touchCount === 1 && this._store.state.selectionGroup && !this._store.state.isResizeHandleSelected && !this._store.state.isRotationHandleSelected) {\r\n const x = Math.round(event.touches[0].clientX - this._store.offsetX);\r\n const y = Math.round(event.touches[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 handleTouchEnd(_event: TouchEvent) {\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","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 handleMouseDown(event: MouseEvent): void {\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 handleMouseMove(event: MouseEvent): void {\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 handleMouseUp(_event: MouseEvent): void {\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 handleTouchStart(event: TouchEvent): void {\r\n const firstTouch = event.touches[0];\r\n\r\n if (!firstTouch) {\r\n return;\r\n }\r\n\r\n if (this._store.state.touchCount === 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 handleTouchMove(event: TouchEvent): void {\r\n const oneFingerTouch = event.touches[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 handleTouchEnd(_event: TouchEvent): void {\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\r\n clearTimeout(this._store.state.longTouchTimeout);\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 handleMouseDown(event: MouseEvent): void {\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 handleMouseMove(event: MouseEvent): void {\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 handleMouseUp(_event: MouseEvent): void {\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 handleTouchStart(event: TouchEvent): void {\r\n const firstTouch = event.touches[0];\r\n\r\n if (!firstTouch) {\r\n return;\r\n }\r\n\r\n if (this._store.state.touchCount === 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 handleTouchMove(event: TouchEvent): void {\r\n const firstTouch = event.touches[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 clearTimeout(this._store.state.longTouchTimeout);\r\n }\r\n }\r\n\r\n handleTouchEnd(_event: TouchEvent): void {\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","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 constructor(store: KritzelStore) {\r\n super(store);\r\n this.backgroundColor = 'var(--kritzel-selection-box-background-color, rgba(14, 17, 17, 0.2))';\r\n this.borderColor = 'var(--kritzel-selection-box-border-color, rgba(14, 17, 17, 0.5))';\r\n this.borderWidth = 2;\r\n this.scale = this._store.state.scale;\r\n this.height = 0;\r\n this.width = 0;\r\n this.zIndex = 9999;\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 handleMouseDown(event) {\r\n if (KritzelEventHelper.isLeftClick(event) && !this._store.state.selectionGroup) {\r\n this.startMouseSelection(event);\r\n }\r\n }\r\n\r\n handleMouseMove(event) {\r\n if (this._store.state.isSelecting) {\r\n this.updateMouseSelection(event);\r\n }\r\n }\r\n\r\n handleMouseUp(event) {\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 handleTouchStart(event: TouchEvent) {\r\n this.touchStartTimeout = setTimeout(() => {\r\n if (this._store.state.touchCount === 1 && !this._store.state.isScaling && !this._store.state.selectionGroup) {\r\n this.startTouchSelection(event);\r\n this.updateTouchSelection(event);\r\n }\r\n }, 80);\r\n }\r\n\r\n handleTouchMove(event: TouchEvent) {\r\n const x = Math.round(event.touches[0].clientX - this._store.offsetX);\r\n const y = Math.round(event.touches[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(event);\r\n\r\n clearTimeout(this._store.state.longTouchTimeout);\r\n }\r\n }\r\n\r\n handleTouchEnd(event: TouchEvent) {\r\n clearTimeout(this.touchStartTimeout);\r\n\r\n if (this._store.state.isSelecting) {\r\n if (this.isSelectionClick) {\r\n this.updateTouchSelection(event);\r\n this.addSelectedObjectAtIndexToSelectionGroup(0);\r\n this.removeSelectionBox();\r\n }\r\n\r\n if (this.isSelectionDrag) {\r\n this.updateTouchSelection(event);\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 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 = new KrtizelSelectionBox(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(event: TouchEvent): void {\r\n const firstTouch = event.touches[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 = new KrtizelSelectionBox(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(event: TouchEvent): void {\r\n const firstTouch = event.touches[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 = new KritzelSelectionGroup(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 = new KritzelSelectionGroup(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\nimport { KritzelText } from '../objects/text.class';\r\nimport { KritzelToolRegistry } from '../tool.registry';\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 handleMouseDown(event: MouseEvent): void {\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\r\n this.moveHandler.handleMouseDown(event);\r\n this.selectionHandler.handleMouseDown(event);\r\n this.resizeHandler.handleMouseDown(event);\r\n this.rotationHandler.handleMouseDown(event);\r\n\r\n this._store.rerender();\r\n }\r\n\r\n handleMouseMove(event: MouseEvent): void {\r\n this.moveHandler.handleMouseMove(event);\r\n this.selectionHandler.handleMouseMove(event);\r\n this.resizeHandler.handleMouseMove(event);\r\n this.rotationHandler.handleMouseMove(event);\r\n\r\n this._store.rerender();\r\n }\r\n\r\n handleMouseUp(event: MouseEvent): void {\r\n this.moveHandler.handleMouseUp(event);\r\n this.selectionHandler.handleMouseUp(event);\r\n this.resizeHandler.handleMouseUp(event);\r\n this.rotationHandler.handleMouseUp(event);\r\n\r\n this._store.rerender();\r\n }\r\n\r\n handleDoubleClick(event: MouseEvent): void {\r\n if (KritzelEventHelper.isLeftClick(event)) {\r\n if (this._store.state.selectionGroup && this._store.state.selectionGroup?.objects.length === 1) {\r\n const selectedObject = this._store.state.selectionGroup.objects[0];\r\n\r\n if (selectedObject instanceof KritzelText) {\r\n this._store.history.executeCommand(new RemoveSelectionGroupCommand(this._store, this._store.state.selectionGroup));\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('text'));\r\n this._store.state.activeText = selectedObject;\r\n\r\n setTimeout(() => {\r\n selectedObject.focus();\r\n }, 300);\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleDoubleTap(event: TouchEvent): void {\r\n const selectionGroup = this.getSelectedObject(event);\r\n \r\n if (!selectionGroup || selectionGroup.objects.length !== 1) {\r\n return;\r\n }\r\n\r\n const selectedObject = selectionGroup.objects[0];\r\n\r\n if (selectedObject instanceof KritzelText) {\r\n this._store.setState('activeTool', KritzelToolRegistry.getTool('text'));\r\n this._store.state.activeText = selectedObject;\r\n\r\n setTimeout(() => {\r\n selectedObject.focus();\r\n }, 300);\r\n }\r\n }\r\n\r\n handleTouchStart(event: TouchEvent): void {\r\n if (this._store.state.isScaling === true) {\r\n return;\r\n }\r\n\r\n if (this._store.state.touchCount === 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\r\n this.rotationHandler.handleTouchStart(event);\r\n this.resizeHandler.handleTouchStart(event);\r\n this.moveHandler.handleTouchStart(event);\r\n this.selectionHandler.handleTouchStart(event);\r\n }\r\n\r\n handleTouchMove(event: TouchEvent): void {\r\n if (this._store.state.isScaling === true) {\r\n return;\r\n }\r\n\r\n this.rotationHandler.handleTouchMove(event);\r\n this.resizeHandler.handleTouchMove(event);\r\n this.moveHandler.handleTouchMove(event);\r\n this.selectionHandler.handleTouchMove(event);\r\n\r\n this._store.rerender();\r\n }\r\n\r\n handleTouchEnd(event: TouchEvent): void {\r\n if (this._store.state.isScaling === true) {\r\n return;\r\n }\r\n\r\n this.rotationHandler.handleTouchEnd(event);\r\n this.resizeHandler.handleTouchEnd(event);\r\n this.moveHandler.handleTouchEnd(event);\r\n this.selectionHandler.handleTouchEnd(event);\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 = new KritzelSelectionGroup(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 switch (obj.__class__) {\r\n case 'KritzelPath':\r\n revivedObj = new KritzelPath(this._store).revive(obj);\r\n break;\r\n case 'KritzelText':\r\n revivedObj = new KritzelText(this._store, obj.fontSize, obj.fontFamily).revive(obj);\r\n break;\r\n case 'KritzelImage':\r\n revivedObj = new KritzelImage(this._store, obj.img).revive(obj);\r\n break;\r\n case 'KritzelSelectionGroup':\r\n revivedObj = new KritzelSelectionGroup(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 constructor(store: KritzelStore) {\r\n super(store);\r\n this.scale = this._store.state.scale;\r\n this.zIndex = 99999;\r\n }\r\n\r\n get length(): number {\r\n return this.objects.length;\r\n }\r\n\r\n addOrRemove(object: KritzelBaseObject<any>) {\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(obj => {\r\n const updatedWidth = obj.width * widthScaleFactor;\r\n const updatedHeight = obj.height * heightScaleFactor;\r\n\r\n const updatedX = obj.translateX + deltaX + (obj.translateX - this.translateX) * (widthScaleFactor - 1);\r\n const updatedY = obj.translateY + deltaY + (obj.translateY - this.translateY) * (heightScaleFactor - 1);\r\n\r\n obj.resize(updatedX, updatedY, updatedWidth, updatedHeight);\r\n\r\n this._store.state.objectsOctree.update(obj);\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 child.rotation = this.objects.length === 1 ? value : value + unchangedChild.rotation;\r\n });\r\n }\r\n\r\n override copy(): KritzelBaseObject<HTMLElement> {\r\n const selectionGroup = new KritzelSelectionGroup(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 '../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 = new KritzelImage(this._store, img);\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 = new KritzelSelectionGroup(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}\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/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\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 @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 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></kritzel-engine>\r\n <kritzel-controls controls={this.controls} style={this.hideControls ? { display: 'none' } : { display: 'flex'}}></kritzel-controls>\r\n </Host>\r\n );\r\n }\r\n}\r\n","import { 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 handleMouseDown(event: MouseEvent): void {\r\n const adjustedClientX = event.clientX - this._store.offsetX;\r\n const adjustedClientY = event.clientY - this._store.offsetY;\r\n\r\n if (KritzelEventHelper.isRightClick(event)) {\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 handleMouseMove(event: MouseEvent): void {\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 handleMouseUp(_event: MouseEvent): void {\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 handleTouchStart(event: TouchEvent): void {\r\n this._store.state.touchCount = event.touches.length;\r\n\r\n if (this._store.state.touchCount === 2) {\r\n this._store.state.currentPath = null;\r\n this._store.state.isScaling = true;\r\n\r\n const firstTouchX = event.touches[0].clientX - this._store.offsetX;\r\n const firstTouchY = event.touches[0].clientY - this._store.offsetY;\r\n\r\n const secondTouchX = event.touches[1].clientX - this._store.offsetX;\r\n const secondTouchY = event.touches[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 handleTouchMove(event: TouchEvent): void {\r\n if (this._store.state.touchCount === 2) {\r\n const firstTouchX = event.touches[0].clientX - this._store.offsetX;\r\n const firstTouchY = event.touches[0].clientY - this._store.offsetY;\r\n\r\n const secondTouchX = event.touches[1].clientX - this._store.offsetX;\r\n const secondTouchY = event.touches[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 handleTouchEnd(_event: TouchEvent): void {\r\n this._store.state.touchCount = 0;\r\n this._store.state.isScaling = false;\r\n this._store.rerender();\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 (\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}\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 { 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 { KritzelToolRegistry } from './tool.registry';\r\nimport { KritzelContextMenu } from '../components/ui/kritzel-context-menu/kritzel-context-menu';\r\n\r\nconst initialState: 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 touchCount: 0,\r\n longTouchTimeout: null,\r\n longTouchDelay: 300,\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 = initialState;\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 clearSelection() {\r\n this.history.executeCommand(new RemoveSelectionGroupCommand(this, this.state.selectionGroup));\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 selectAllInViewport() {\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 = new KritzelSelectionGroup(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 this.history.executeCommand(new AddSelectionGroupCommand(this, this, selectionGroup));\r\n this.setState('activeTool', KritzelToolRegistry.getTool('selection'));\r\n }\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 resetSelection() {\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 this._state.objectsOctree.remove(obj => obj instanceof KritzelSelectionGroup);\r\n this.rerender();\r\n }\r\n\r\n}\r\n","import { KritzelStore } from '../store.class';\r\nimport { KritzelToolRegistry } from '../tool.registry';\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 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","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","import { AddSelectionGroupCommand } from '../commands/add-selection-group.command';\r\nimport { KritzelSelectionGroup } from '../objects/selection-group.class';\r\nimport { KritzelStore } from '../store.class';\r\nimport { KritzelSelectionTool } from '../tools/selection-tool.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: MouseEvent): void {\r\n if(event.cancelable){\r\n event.preventDefault();\r\n }\r\n\r\n if (!(this._store.state.activeTool instanceof KritzelSelectionTool)) {\r\n return;\r\n }\r\n\r\n if (this._store.state.skipContextMenu) {\r\n this._store.state.skipContextMenu = false;\r\n return;\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 handleContextMenuTouch(event: TouchEvent): void {\r\n if(event.cancelable){\r\n event.preventDefault();\r\n }\r\n\r\n if (this._store.state.touchCount > 1 || !(this._store.state.activeTool instanceof KritzelSelectionTool)) {\r\n return;\r\n }\r\n\r\n if ('vibrate' in navigator) {\r\n navigator.vibrate(25);\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 = new KritzelSelectionGroup(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 const firstTouch = event.touches[0];\r\n\r\n if (!firstTouch) {\r\n return;\r\n }\r\n\r\n let x: number = Math.round(firstTouch.clientX - this._store.offsetX);\r\n let y: number = Math.round(firstTouch.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.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 { KritzelToolRegistry } from '../../../classes/tool.registry';\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 { 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.selectAllInViewport() },\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.resetSelection();\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('contextmenu', { capture: false })\r\n handleContextMenu(ev: MouseEvent) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n this.contextMenuHandler.handleContextMenu(ev);\r\n }\r\n\r\n @Listen('mousedown', { passive: true })\r\n handleMouseDown(ev: MouseEvent) {\r\n if (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 this.viewport.handleMouseDown(ev);\r\n this.store.state?.activeTool?.handleMouseDown(ev);\r\n }\r\n\r\n @Listen('mousemove', { passive: true })\r\n handleMouseMove(ev) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n this.viewport.handleMouseMove(ev);\r\n this.store.state?.activeTool?.handleMouseMove(ev);\r\n }\r\n\r\n @Listen('mouseup', { passive: true })\r\n handleMouseUp(ev) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n this.viewport.handleMouseUp(ev);\r\n this.store.state?.activeTool?.handleMouseUp(ev);\r\n }\r\n\r\n @Listen('dblclick')\r\n handleDoubleClick(ev: MouseEvent) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n this.store.state?.activeTool?.handleDoubleClick(ev);\r\n }\r\n\r\n @Listen('doubletap')\r\n handleDoubleTap(ev: CustomEvent<TouchEvent> | TouchEvent) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n const touchEvent = ev instanceof CustomEvent && ev.detail ? ev.detail : (ev as TouchEvent);\r\n\r\n this.store.state?.activeTool?.handleDoubleTap(touchEvent);\r\n }\r\n\r\n @Listen('touchstart', { passive: false })\r\n handleTouchStart(ev: TouchEvent) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n if (KritzelEventHelper.detectDoubleTap()) {\r\n const doubleTapEvent = new CustomEvent('doubletap', { detail: event, bubbles: true, composed: true });\r\n this.host.dispatchEvent(doubleTapEvent);\r\n }\r\n\r\n if (ev.touches.length > 1) {\r\n clearTimeout(this.store.state.longTouchTimeout);\r\n }\r\n\r\n if (ev.cancelable) {\r\n ev.preventDefault();\r\n }\r\n\r\n this.store.state.longTouchTimeout = setTimeout(() => this.contextMenuHandler.handleContextMenuTouch(ev), this.store.state.longTouchDelay);\r\n\r\n this.viewport.handleTouchStart(ev);\r\n this.store.state?.activeTool?.handleTouchStart(ev);\r\n }\r\n\r\n @Listen('touchmove', { passive: false })\r\n handleTouchMove(ev) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n if (ev.cancelable) {\r\n ev.preventDefault();\r\n }\r\n\r\n this.viewport.handleTouchMove(ev);\r\n this.store.state?.activeTool?.handleTouchMove(ev);\r\n }\r\n\r\n @Listen('touchend', { passive: false })\r\n handleTouchEnd(ev) {\r\n if (this.store.state.isEnabled === false) {\r\n return;\r\n }\r\n\r\n if (ev.cancelable) {\r\n ev.preventDefault();\r\n }\r\n\r\n clearTimeout(this.store.state.longTouchTimeout);\r\n\r\n this.viewport.handleTouchEnd(ev);\r\n this.store.state?.activeTool?.handleTouchEnd(ev);\r\n }\r\n\r\n @Listen('touchcancel', { passive: false })\r\n handleTouchCancel(_ev) {\r\n clearTimeout(this.store.state.longTouchTimeout);\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('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 selectAllInViewport() {\r\n this.store.selectAllInViewport();\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.isContextMenuVisible = false;\r\n this.store.state.selectionBox = null;\r\n this.store.state.isSelecting = false;\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' }}>\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 zIndex: object.zIndex.toString(),\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.img.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 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 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></kritzel-cursor-trail>}\r\n </Host>\r\n );\r\n }\r\n}\r\n",":host {\n display: block;\n}\n\n.font-preview {\n color: var(--kritzel-font-size-text-color, #333333);\n line-height: 1;\n text-align: center;\n font-weight: bold;\n}\n","import { Component, Host, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'kritzel-font',\n styleUrl: 'kritzel-font.css',\n shadow: true,\n})\nexport class KritzelFont {\n @Prop()\n fontFamily: string = 'Arial, sans-serif';\n\n @Prop()\n size: number = 24;\n\n @Prop()\n color: string = '#000000';\n\n render() {\n return (\n <Host>\n <div\n class=\"font-preview\"\n style={{\n fontFamily: this.fontFamily,\n fontSize: `${this.size}px`,\n color: this.color\n }}\n >\n A\n </div>\n </Host>\n );\n }\n}\n",":host {\n display: flex; \n align-items: flex-start; \n gap: 8px; \n padding: 8px; \n box-sizing: border-box; \n width: 100%;\n}\n\n.font-style-button {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 42px;\n height: 32px;\n padding: 0;\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n border-radius: 0; \n color: var(--control-text-color);\n font-weight: bold;\n -webkit-tap-highlight-color: transparent;\n}\n\n.font-style-button:not(:last-child) {\n border-right: 1px solid #333333; \n}\n\n.font-style-button:hover {\n background-color: var(--control-hover-bg);\n}\n\n.font-style-button:active {\n background-color: var(--control-active-bg);\n}\n\n.font-style-button.selected,\n.font-style-button.selected:hover,\n.font-style-button.selected:active {\n background-color: var(--control-selected-bg);\n color: var(--control-selected-color);\n}\n\n.font-style-button.italic-text {\n font-style: italic;\n}\n","import { Component, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\n\nexport interface FontOption {\n value: string;\n label: string;\n}\n\n@Component({\n tag: 'kritzel-font-family',\n styleUrl: 'kritzel-font-family.css',\n shadow: true,\n})\nexport class KritzelFontFamily {\n @Prop() \n fontOptions: FontOption[] = [\n { value: 'arial', label: 'Arial' },\n { value: 'verdana', label: 'Verdana' },\n { value: 'helvetica', label: 'Helvetica' },\n { value: 'tahoma', label: 'Tahoma' },\n { value: 'trebuchet ms', label: 'Trebuchet MS' },\n { value: 'times new roman', label: 'Times New Roman' },\n { value: 'georgia', label: 'Georgia' },\n { value: 'garamond', label: 'Garamond' },\n { value: 'courier new', label: 'Courier New' },\n { value: 'brush script mt', label: 'Brush Script MT' },\n ];\n\n @Prop({ mutable: true }) \n selectedFontFamily: string;\n\n @Event()\n fontFamilyChange: EventEmitter<string>;\n\n componentWillLoad() {\n if (this.fontOptions && this.fontOptions.length > 0) {\n const isValidCurrentFont = this.fontOptions.some(opt => opt.value === this.selectedFontFamily);\n if (!this.selectedFontFamily || !isValidCurrentFont) {\n this.selectedFontFamily = this.fontOptions[0].value;\n }\n }\n }\n\n private handleDropdownValueChange = (event: CustomEvent<string>) => {\n this.fontFamilyChange.emit(event.detail);\n };\n\n render() {\n const dropdownOptions = this.fontOptions.map(option => ({\n value: option.value,\n label: option.label,\n style: { fontFamily: option.value },\n }));\n\n return (\n <Host>\n <kritzel-dropdown\n options={dropdownOptions}\n value={this.selectedFontFamily}\n onValueChanged={this.handleDropdownValueChange}\n selectStyles={{ fontFamily: this.selectedFontFamily }}\n >\n <button class=\"font-style-button\" slot=\"suffix\">B</button>\n <button class=\"font-style-button italic-text\" slot=\"suffix\">I</button>\n </kritzel-dropdown>\n </Host>\n );\n }\n}\n",":host {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 8px;\n box-sizing: border-box;\n}\n\n.size-container {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n cursor: pointer;\n border: 2px solid transparent;\n box-sizing: border-box;\n border-radius: 50%;\n}\n\n.size-container:hover {\n background-color: var(--kritzel-font-size-hover-background-color, #f0f0f0);\n}\n\n.size-container.selected {\n border-color: var(--kritzel-selection-border-color, #0E1111);\n background-color: var(--kritzel-font-size-selected-background-color, #e0e0e0);\n}\n\n","import { Component, Host, h, Prop, Event, EventEmitter } from '@stencil/core';\n\n@Component({\n tag: 'kritzel-font-size',\n styleUrl: 'kritzel-font-size.css',\n shadow: true,\n})\nexport class KritzelFontSize {\n @Prop()\n sizes: number[] = [8, 10, 12, 16, 20, 24];\n\n @Prop({ mutable: true })\n selectedSize: number | null = null;\n\n @Prop()\n fontFamily: string = 'Arial';\n\n @Event()\n sizeChange: EventEmitter<number>;\n\n private handleSizeClick(size: number) {\n this.selectedSize = size;\n this.sizeChange.emit(size);\n }\n\n render() {\n return (\n <Host>\n {this.sizes.map(size => (\n <div\n class={{\n 'size-container': true,\n 'selected': this.selectedSize === size,\n }}\n onClick={() => this.handleSizeClick(size)}\n >\n <kritzel-font fontFamily={this.fontFamily} size={size}></kritzel-font>\n </div>\n ))}\n </Host>\n );\n }\n}\n",":host {\n display: inline-flex; /* Changed from block to inline-flex for better alignment */\n justify-content: center; /* Center content horizontally */\n align-items: center; /* Center content vertically */\n}\n\nspan {\n display: flex;\n align-items: center;\n width: 100%; /* Make span fill host width */\n height: 100%; /* Make span fill host height */\n}\n\nspan > svg { /* Ensure SVG scales within the span */\n width: 100%;\n height: 100%;\n}\n","import { Component, h, Prop, Host } from '@stencil/core';\r\nimport { KritzelIconRegistry } from '../../../classes/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 {\n width: auto;\n}\n\n.tooltip-content {\n position: relative;\n padding: 8px 12px;\n border-radius: 4px;\n width: fit-content;\n background-color: var(--kritzel-controls-tooltip-background-color, #ffffff);\n color: var(--kritzel-controls-tooltip-color, #000000);\n padding: var(--kritzel-controls-tooltip-padding, 8px);\n border-radius: var(--kritzel-controls-tooltip-border-radius, 8px);\n white-space: nowrap;\n box-shadow: var(--kritzel-controls-tooltip-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12));\n}\n\n","import { Component, Host, Prop, h, Element, State, Listen } from '@stencil/core';\n\nconst MOBILE_BREAKPOINT = 768;\n\n@Component({\n tag: 'kritzel-tooltip',\n styleUrl: 'kritzel-tooltip.css',\n shadow: true,\n})\nexport class KritzelTooltip {\n @Prop()\n isVisible: boolean = false;\n\n @Prop()\n anchorElement: HTMLElement;\n\n @Prop()\n arrowSize: number = 8;\n\n @Prop()\n offsetY: number = 24;\n\n @Element()\n el: HTMLElement;\n\n @State()\n positionX: number = 0;\n\n @State()\n arrowOffset: string = '0px';\n\n @State()\n private isMobileView: boolean = window.innerWidth < MOBILE_BREAKPOINT;\n\n @Listen('resize', { target: 'window' })\n handleWindowResize() {\n this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;\n this.calculateAdjustedPosition();\n }\n\n componentWillLoad() {\n this.isMobileView = window.innerWidth < MOBILE_BREAKPOINT;\n this.calculateAdjustedPosition();\n }\n\n componentWillUpdate() {\n this.calculateAdjustedPosition();\n }\n\n private calculateAdjustedPosition() {\n if (this.isVisible && this.anchorElement) {\n const anchorRect = this.anchorElement.getBoundingClientRect();\n const tooltipContent = this.el.shadowRoot?.querySelector('.tooltip-content') as HTMLElement;\n\n if (!this.isMobileView) {\n this.positionX = anchorRect.left + anchorRect.width / 2;\n this.arrowOffset = `calc(${50}% - ${this.arrowSize}px)`; \n } else {\n const tooltipRect = tooltipContent.getBoundingClientRect();\n this.positionX = anchorRect.left + anchorRect.width / 2 - tooltipRect.width / 2;\n this.arrowOffset = `${anchorRect.left + anchorRect.width / 2 - tooltipRect.left - this.arrowSize}px`;\n }\n }\n }\n\n render() {\n return (\n <Host\n style={{\n position: 'fixed',\n zIndex: '9999',\n transition: 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out',\n visibility: this.isVisible ? 'visible' : 'hidden',\n left: !this.isMobileView ? `${this.positionX}px` : '50%',\n marginBottom: `${this.offsetY + this.arrowSize}px`,\n }}\n >\n <div class=\"tooltip-content\" onClick={event => event.stopPropagation()}>\n <slot></slot>\n <div\n class=\"tooltip-arrow-wrapper\"\n style={{\n position: 'fixed',\n left: this.arrowOffset,\n bottom: `-${this.arrowSize * 2}px`,\n }}\n >\n <div\n class=\"tooltip-arrow\"\n style={{\n borderLeft: `${this.arrowSize}px solid transparent`,\n borderRight: `${this.arrowSize}px solid transparent`,\n borderTop: `${this.arrowSize}px solid var(--kritzel-controls-tooltip-background-color, #ffffff)`,\n filter: 'drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2))',\n }}\n ></div>\n <div\n class=\"tooltip-arrow-rect\"\n style={{\n position: 'relative',\n width: `${this.arrowSize * 2}px`,\n height: `${this.arrowSize}px`,\n backgroundColor: 'var(--kritzel-controls-tooltip-background-color, #ffffff)',\n bottom: `${this.arrowSize * 2}px`,\n }}\n ></div>\n </div>\n </div>\n </Host>\n );\n }\n}\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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MAAO,UACPlC,KAAM,GACNgE,SAAU,CACR+iB,IAAK,CACH,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAEFC,YAAa,CACX,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,eAKC,MAAMuoB,GAA6C,CACxDrtC,MAAO,UACPlC,KAAM,EACNqF,WAAY,QACZxB,QAAS,CACP,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,YAIG,MAAM2rC,GAAoD,CAC/D,CACEzvC,KAAM,YACNpB,KAAM,OACNuF,KAAMs1B,GACN91B,KAAM,UAER,CACE3D,KAAM,QACNpB,KAAM,OACNuF,KAAM4iB,GACN+F,UAAW,KACXnpB,KAAM,MACNkpB,OAAQ0iB,IAEV,CACEvvC,KAAM,SACNpB,KAAM,OACNuF,KAAM4uB,GACNpvB,KAAM,UAER,CACE3D,KAAM,OACNpB,KAAM,OACNuF,KAAM+jB,GACNvkB,KAAM,OACNkpB,OAAQ2iB,IAEV,CACExvC,KAAM,QACNpB,KAAM,OACNuF,KAAMs2B,GACN92B,KAAM,SAER,CACE3D,KAAM,UACNpB,KAAM,WAER,CACEoB,KAAM,SACNpB,KAAM,WC3IV,MAAM8wC,GAAmB,qO,MCWZC,GAAa,MAL1B,WAAAlxC,CAAAC,G,UAOEC,KAAQktB,SAA4B4jB,GAGpC9wC,KAAcixC,eAA2B,GAGzCjxC,KAAYkxC,aAAY,KA8BzB,CAxBC,gBAAAlpB,CAAiB1nB,GACf,GAAIA,EAAMquB,WAAY,CACpBruB,EAAMupB,gB,EAIV,iBAAAtkB,GACEvF,KAAKmxC,wB,CAGC,sBAAAA,GACN,IAAK,MAAO9vC,EAAM+vC,KAAQznC,OAAOmQ,QAAQ9Z,KAAKixC,gBAAiB,CA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","ignoreList":[]}
|