@operato/image-marker 9.0.0-beta.10 → 9.0.0-beta.11

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ox-image-marker.js","sourceRoot":"","sources":["../../src/ox-image-marker.ts"],"names":[],"mappings":"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","sourcesContent":["import './ox-image-marker-mode.js'\n\nimport { html, css, svg, nothing } from 'lit'\nimport { query, state, customElement } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { keyed } from 'lit/directives/keyed.js'\n\nimport { GestureEventDrag, GestureEventPinch } from '@operato/utils/gesture-helper.js'\n\nimport { ImageMarkerMode, Shape, ShapeType } from './types.js'\nimport { BaseImageMarker } from './base-image-marker.js'\nimport { OxImageMarkerMode } from './ox-image-marker-mode.js'\n\n@customElement('ox-image-marker')\nexport class OxImageMarker extends BaseImageMarker {\n static styles = [\n ...BaseImageMarker.styles,\n css`\n :host {\n position: relative;\n display: flex;\n width: 100%;\n height: 100%;\n }\n\n ox-image-marker-mode {\n position: absolute;\n top: 0;\n right: 0;\n }\n\n svg {\n cursor: default;\n }\n\n svg[drawing] {\n cursor: crosshair;\n }\n\n .resize-handle {\n cursor: nwse-resize;\n }\n `\n ]\n\n @state() private currentShapeType?: ShapeType\n @state() private currentMode: ImageMarkerMode = 'edit'\n @state() private selectedShape: Shape | null = null\n\n @query('ox-image-marker-mode') imageMarkerMode!: OxImageMarkerMode\n\n // private drawingStarted: boolean = false\n private drawing: boolean = false\n private startX: number = 0\n private startY: number = 0\n private offsetX: number = 0\n private offsetY: number = 0\n private shapeMoveThreshold: number = 10\n private shapeMoveInitiated = false\n\n connectedCallback() {\n super.connectedCallback()\n this.setAttribute('tabindex', '0')\n this.addEventListener('focus', this.onFocus)\n this.addEventListener('blur', this.onBlur)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this.removeEventListener('focus', this.onFocus)\n this.removeEventListener('blur', this.onBlur)\n }\n\n render() {\n return html`\n <div class=\"container\">\n <svg\n @wheel=${this.onSvgWheel}\n @doubletap=${this.onSvgDoubleTap}\n @pinch=${this.onSvgPinch}\n @drag=${this.onSvgDrag}\n @click=${this.onSvgClick}\n viewBox=${this.viewBox}\n ?drawing=${this.currentMode == 'shape'}\n >\n <image href=${this.currentImage} @load=${this.onImageLoad}></image>\n ${this.shapes.map(shape => keyed(shape.id, this.renderShape(shape)))}\n </svg>\n </div>\n\n <ox-image-marker-mode\n currentMode=${this.currentMode}\n currentShapeType=${ifDefined(this.currentShapeType)}\n @mode-changed=${(e: CustomEvent) => {\n const { mode, shapeType } = e.detail\n this.setMode(mode, shapeType)\n }}\n @tap-fit-size=${() => this.reset()}\n @tap-delete=${() => this.deleteSelectedShape()}\n @tap-save=${() => {\n this.dispatchEvent(\n new CustomEvent('shapes-changed', {\n detail: this.shapes,\n bubbles: true,\n composed: true\n })\n )\n }}\n ></ox-image-marker-mode>\n `\n }\n\n private setMode(mode: ImageMarkerMode, shapeType: ShapeType) {\n if (mode == 'view') {\n this.setSelectedShape(null)\n }\n\n this.currentMode = mode\n this.currentShapeType = shapeType\n }\n\n protected onSvgPinch(e: GestureEventPinch) {\n e.stopPropagation()\n\n const { scale, centerX, centerY } = e.detail\n\n this.zoom(scale, centerX, centerY)\n }\n\n protected onSvgDrag(e: GestureEventDrag) {\n const { deltaX, deltaY, end } = e.detail\n\n if (this.currentMode === 'shape') {\n this.drawShape(e)\n } else {\n const [vbX, vbY, vbWidth, vbHeight] = this.viewBox.split(' ').map(Number)\n\n const scaleX = vbWidth / this.svg.clientWidth\n const scaleY = vbHeight / this.svg.clientHeight\n const scale = Math.max(scaleX, scaleY)\n\n const newVbX = vbX - deltaX * scale\n const newVbY = vbY - deltaY * scale\n\n this.viewBox = `${newVbX} ${newVbY} ${vbWidth} ${vbHeight}`\n\n this.debouncedUpdateImage()\n }\n }\n\n protected onSvgClick(e: MouseEvent) {\n if (this.currentMode === 'shape' && this.currentShapeType === 'text') {\n const { x, y } = this.getSvgPoint(e)\n\n const textElement = document.createElementNS('http://www.w3.org/2000/svg', 'text')\n\n textElement.setAttribute('x', x.toString())\n textElement.setAttribute('y', y.toString())\n textElement.textContent = 'ABC'\n\n this.svg.appendChild(textElement)\n\n /* 강제 지연은 iOS에서 input focus를 받지 못하는 현상이 있다. */\n this.showTextInput(textElement, null, { x, y })\n\n this.imageMarkerMode.setMode('edit')\n }\n }\n\n private drawShape(e: GestureEventDrag) {\n const { end } = e.detail\n const { x, y } = this.getSvgPoint(e)\n\n if (!this.drawing) {\n this.startX = x\n this.startY = y\n this.setSelectedShape(null)\n\n this.drawing = true\n } else if (this.drawing) {\n const minDistance = 5\n const distance = Math.sqrt(Math.pow(x - this.startX, 2) + Math.pow(y - this.startY, 2))\n\n if (!this.selectedShape && distance >= minDistance) {\n let newShape: Shape\n\n switch (this.currentShapeType) {\n case 'rectangle':\n newShape = {\n id: Date.now().toString(),\n type: 'rectangle',\n x: this.startX,\n y: this.startY,\n width: 0,\n height: 0\n }\n break\n case 'circle':\n newShape = {\n id: Date.now().toString(),\n type: 'circle',\n cx: this.startX,\n cy: this.startY,\n r: 0\n }\n break\n case 'triangle':\n newShape = {\n id: Date.now().toString(),\n type: 'triangle',\n x1: this.startX,\n y1: this.startY,\n width: 0,\n height: 0,\n points: `${this.startX},${this.startY} ${this.startX},${this.startY} ${this.startX},${this.startY}`\n }\n break\n case 'line':\n newShape = {\n id: Date.now().toString(),\n type: 'line',\n x1: this.startX,\n y1: this.startY,\n width: 0,\n height: 0\n }\n break\n case 'arrow':\n newShape = {\n id: Date.now().toString(),\n type: 'arrow',\n x1: this.startX,\n y1: this.startY,\n width: 0,\n height: 0\n }\n break\n default:\n return\n }\n\n this.shapes = [...this.shapes, newShape]\n this.setSelectedShape(newShape)\n }\n\n if (this.selectedShape) {\n switch (this.selectedShape.type) {\n case 'rectangle':\n this.selectedShape.x = Math.min(x, this.startX)\n this.selectedShape.y = Math.min(y, this.startY)\n this.selectedShape.width = Math.abs(x - this.startX)\n this.selectedShape.height = Math.abs(y - this.startY)\n break\n case 'circle':\n const dx = x - this.selectedShape.cx!\n const dy = y - this.selectedShape.cy!\n this.selectedShape.r = Math.sqrt(dx * dx + dy * dy)\n break\n case 'triangle':\n const x2 = x\n const y2 = y\n const x3 = this.startX - (x - this.startX)\n const y3 = y\n this.selectedShape.points = `${this.startX},${this.startY} ${x2},${y2} ${x3},${y3}`\n break\n case 'line':\n case 'arrow':\n this.selectedShape.x2 = x\n this.selectedShape.y2 = y\n break\n }\n\n this.requestUpdate()\n }\n\n if (end) {\n this.drawing = false\n this.imageMarkerMode.setMode('edit')\n\n this.requestUpdate()\n }\n }\n }\n\n private setSelectedShape(shape: Shape | null) {\n this.selectedShape = shape\n\n if (!shape) {\n this.shapes = this.shapes.map(s => {\n return { ...s, selected: false }\n })\n } else {\n this.selectedShape!.selected = true\n }\n }\n\n private getSvgPoint(event: MouseEvent | PointerEvent | GestureEventDrag) {\n const { x, y } = this.getPointFromEvent(event)\n\n const svg = this.svg\n const point = svg.createSVGPoint()\n point.x = x\n point.y = y\n const ctm = svg.getScreenCTM()!.inverse()\n\n return point.matrixTransform(ctm)\n }\n\n protected renderShape(shape: Shape) {\n const commonAttrs = {\n stroke: shape.selected ? 'blue' : 'red',\n 'stroke-width': 1,\n fill: 'transparent',\n cursor: 'pointer'\n }\n\n switch (shape.type) {\n case 'text':\n return svg`\n <text\n x=\"${shape.x!}\"\n y=\"${shape.y!}\"\n fill=\"${commonAttrs.stroke}\"\n style=\"cursor: ${commonAttrs.cursor}; font-size: 16px;\"\n @pointerdown=\"${(e: PointerEvent) => this.onPointerDownOnShape(e, shape)}\"\n @dblclick=\"${(e: MouseEvent) => this.onTextDoubleClick(e, shape)}\"\n >${shape.text}</text>\n `\n\n case 'rectangle':\n return svg`\n <rect\n x=\"${shape.x!}\"\n y=\"${shape.y!}\"\n width=\"${shape.width!}\"\n height=\"${shape.height!}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"${commonAttrs['stroke-width']}\"\n fill=\"${commonAttrs.fill}\"\n style=\"cursor: ${commonAttrs.cursor}\"\n @pointerdown=\"${(e: PointerEvent) => this.onPointerDownOnShape(e, shape)}\"\n ></rect>\n ${shape.selected ? this.renderResizeHandles(shape) : ''}\n `\n\n case 'circle':\n return svg`\n <circle\n cx=\"${shape.cx!}\"\n cy=\"${shape.cy!}\"\n r=\"${shape.r!}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"${commonAttrs['stroke-width']}\"\n fill=\"${commonAttrs.fill}\"\n style=\"cursor: ${commonAttrs.cursor}\"\n @pointerdown=\"${(e: PointerEvent) => this.onPointerDownOnShape(e, shape)}\"\n ></circle>\n ${shape.selected ? this.renderResizeHandles(shape) : ''}\n `\n\n case 'triangle':\n return svg`\n <polygon\n points=\"${shape.points!}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"${commonAttrs['stroke-width']}\"\n fill=\"${commonAttrs.fill}\"\n style=\"cursor: ${commonAttrs.cursor}\"\n @pointerdown=\"${(e: PointerEvent) => this.onPointerDownOnShape(e, shape)}\"\n ></polygon>\n ${shape.selected ? this.renderResizeHandles(shape) : ''}\n `\n\n case 'line':\n return svg`\n <line\n x1=\"${shape.x1!}\"\n y1=\"${shape.y1!}\"\n x2=\"${shape.x2 ?? shape.x1}\"\n y2=\"${shape.y2 ?? shape.y1}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"${commonAttrs['stroke-width']}\"\n style=\"cursor: ${commonAttrs.cursor}\"\n ></line>\n <line\n x1=\"${shape.x1!}\"\n y1=\"${shape.y1!}\"\n x2=\"${shape.x2 ?? shape.x1}\"\n y2=\"${shape.y2 ?? shape.y1}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"25\"\n stroke-opacity=\"0\"\n pointer-events=\"stroke\"\n @pointerdown=\"${(e: PointerEvent) => this.onPointerDownOnShape(e, shape)}\"\n @mouseenter=\"${() => (this.svg.style.cursor = 'pointer')}\"\n @mouseleave=\"${() => (this.svg.style.cursor = 'default')}\"\n ></line>\n ${shape.selected ? this.renderResizeHandles(shape) : ''}\n `\n\n case 'arrow':\n return svg`\n <defs>\n <marker id=\"arrowhead-${shape.id}\" markerWidth=\"10\" markerHeight=\"7\" refX=\"10\" refY=\"3.5\" orient=\"auto\">\n <polygon points=\"0 0, 10 3.5, 0 7\" fill=\"${commonAttrs.stroke}\"></polygon>\n </marker>\n </defs>\n <line\n x1=\"${shape.x1!}\"\n y1=\"${shape.y1!}\"\n x2=\"${shape.x2 ?? shape.x1}\"\n y2=\"${shape.y2 ?? shape.y1}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"${commonAttrs['stroke-width']}\"\n marker-end=\"url(#arrowhead-${shape.id})\"\n style=\"cursor: ${commonAttrs.cursor}\"\n ></line>\n <line\n x1=\"${shape.x1!}\"\n y1=\"${shape.y1!}\"\n x2=\"${shape.x2 ?? shape.x1}\"\n y2=\"${shape.y2 ?? shape.y1}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"25\"\n stroke-opacity=\"0\"\n pointer-events=\"stroke\"\n @mousedown=\"${(e: PointerEvent) => this.onPointerDownOnShape(e, shape)}\"\n @mouseenter=\"${() => (this.svg.style.cursor = 'pointer')}\"\n @mouseleave=\"${() => (this.svg.style.cursor = 'default')}\"\n @pointerdown=\"${(e: PointerEvent) => this.currentMode == 'edit' && e.stopPropagation()}\"\n ></line>\n ${shape.selected ? this.renderResizeHandles(shape) : ''}\n `\n\n case 'link':\n return svg`\n <rect class=\"link\" x=\"${shape.x}\" y=\"${shape.y}\" width=\"${shape.width}\" height=\"${shape.height}\" \n stroke=\"${commonAttrs.stroke}\" stroke-width=\"0\" \n fill=\"${commonAttrs.stroke}\" fill-opacity=\"0.3\" @click=\"${() => this.handleLinkClick(shape)}\">\n </rect>\n `\n default:\n return nothing\n }\n }\n\n private onPointerDownOnShape(event: PointerEvent, shape: Shape) {\n if (this.currentMode !== 'edit') {\n return\n }\n\n // TODO check if single touch ... (멀티터치를 제외해야한다).\n // if ('touches' in event && event.touches.length > 1) {\n // return\n // }\n\n event.stopPropagation()\n event.preventDefault()\n\n this.shapes = this.shapes.map(s => ({\n ...s,\n selected: s.id === shape.id\n }))\n\n this.shapeMoveInitiated = false\n this.setSelectedShape(this.shapes.find(s => s.id == shape.id)!)\n\n const { x, y } = this.getSvgPoint(event)\n\n this.offsetX = x\n this.offsetY = y\n\n document.addEventListener('pointermove', this.onPointerMoveOnShape)\n document.addEventListener('pointerup', this.onPointerUpOnShape)\n }\n\n private onPointerMoveOnShape = (event: PointerEvent) => {\n if (!this.selectedShape) {\n return\n }\n\n // TODO check if single touch ... (멀티터치를 제외해야한다).\n // if ('touches' in event && event.touches.length > 1) {\n // return\n // }\n\n event.preventDefault()\n\n const { x, y } = this.getSvgPoint(event)\n\n const dx = x - this.offsetX\n const dy = y - this.offsetY\n\n if (!this.shapeMoveInitiated) {\n const distance = Math.sqrt(dx * dx + dy * dy)\n\n if (distance < this.shapeMoveThreshold) {\n return\n }\n\n this.shapeMoveInitiated = true\n }\n\n this.offsetX = x\n this.offsetY = y\n\n switch (this.selectedShape.type) {\n case 'text':\n case 'rectangle':\n this.selectedShape.x! += dx\n this.selectedShape.y! += dy\n break\n case 'circle':\n this.selectedShape.cx! += dx\n this.selectedShape.cy! += dy\n break\n case 'triangle':\n const points = this.selectedShape.points!.split(' ').map(p => p.split(',').map(Number))\n\n this.selectedShape.points = points.map(([px, py]) => [px + dx, py + dy].join(',')).join(' ')\n break\n case 'line':\n case 'arrow':\n this.selectedShape.x1! += dx\n this.selectedShape.x2! += dx\n this.selectedShape.y1! += dy\n this.selectedShape.y2! += dy\n break\n }\n\n this.requestUpdate()\n }\n\n private onPointerUpOnShape = (event: PointerEvent) => {\n if (!this.selectedShape) {\n return\n }\n\n // TODO\n // if ('touches' in event && event.touches.length > 1) {\n // return\n // }\n\n event.preventDefault()\n\n document.removeEventListener('pointermove', this.onPointerMoveOnShape)\n document.removeEventListener('pointerup', this.onPointerUpOnShape)\n }\n\n private renderResizeHandles(shape: Shape) {\n let handles: Array<{ x: number; y: number; cursor: string }> = []\n\n switch (shape.type) {\n case 'text':\n case 'rectangle':\n handles = [\n { x: shape.x!, y: shape.y!, cursor: 'nwse-resize' },\n { x: shape.x! + shape.width!, y: shape.y!, cursor: 'nesw-resize' },\n { x: shape.x!, y: shape.y! + shape.height!, cursor: 'nesw-resize' },\n { x: shape.x! + shape.width!, y: shape.y! + shape.height!, cursor: 'nwse-resize' }\n ]\n break\n case 'circle':\n handles = [\n { x: shape.cx! + shape.r!, y: shape.cy!, cursor: 'ew-resize' },\n { x: shape.cx! - shape.r!, y: shape.cy!, cursor: 'ew-resize' },\n { x: shape.cx!, y: shape.cy! + shape.r!, cursor: 'ns-resize' },\n { x: shape.cx!, y: shape.cy! - shape.r!, cursor: 'ns-resize' }\n ]\n break\n case 'triangle':\n const points = shape.points!.split(' ').map(p => p.split(',').map(Number))\n handles = points.map(([x, y]) => ({ x, y, cursor: 'move' }))\n break\n case 'line':\n case 'arrow':\n handles = [\n { x: shape.x1!, y: shape.y1!, cursor: 'move' },\n { x: shape.x2!, y: shape.y2!, cursor: 'move' }\n ]\n break\n }\n\n return svg`\n ${handles.map(\n handle => svg`\n <g\n class=\"resize-handle-group\"\n style=\"transform: translate(${handle.x}px, ${handle.y}px) scale(${1 / this.zoomLevel});\"\n >\n <rect\n x=\"-5\"\n y=\"-5\"\n width=\"10\"\n height=\"10\"\n fill=\"white\"\n stroke=\"black\"\n class=\"resize-handle\"\n style=\"cursor: ${handle.cursor};\"\n @pointerdown=\"${(e: PointerEvent) => this.onResizeHandlePointerDown(e, shape, handle)}\"\n ></rect>\n </g>\n `\n )}\n `\n }\n\n private onResizeHandlePointerDown(event: PointerEvent, shape: Shape, handle: any) {\n event.stopPropagation()\n event.preventDefault()\n\n this.setSelectedShape(shape)\n\n this.offsetX = handle.x\n this.offsetY = handle.y\n\n document.addEventListener('pointermove', this.onResizeHandlePointerMove)\n document.addEventListener('pointerup', this.onResizeHandlePointerUp)\n }\n\n private onResizeHandlePointerMove = (event: PointerEvent) => {\n if (!this.selectedShape) {\n return\n }\n\n event.preventDefault()\n\n const { x, y } = this.getSvgPoint(event)\n\n switch (this.selectedShape.type) {\n case 'rectangle':\n const startX = this.selectedShape.x!\n const startY = this.selectedShape.y!\n const width = this.selectedShape.width!\n const height = this.selectedShape.height!\n\n // 핸들의 좌표에 따라 너비 및 높이 조정\n if (this.offsetX === startX && this.offsetY === startY) {\n // 상좌 핸들 (왼쪽 위)\n this.selectedShape.x = x\n this.selectedShape.y = y\n this.selectedShape.width = width + (startX - x)\n this.selectedShape.height = height + (startY - y)\n } else if (this.offsetX === startX + width && this.offsetY === startY) {\n // 상우 핸들 (오른쪽 위)\n this.selectedShape.y = y\n this.selectedShape.width = Math.abs(x - startX)\n this.selectedShape.height = height + (startY - y)\n } else if (this.offsetX === startX && this.offsetY === startY + height) {\n // 하좌 핸들 (왼쪽 아래)\n this.selectedShape.x = x\n this.selectedShape.width = width + (startX - x)\n this.selectedShape.height = Math.abs(y - startY)\n } else if (this.offsetX === startX + width && this.offsetY === startY + height) {\n // 하우 핸들 (오른쪽 아래)\n this.selectedShape.width = Math.abs(x - startX)\n this.selectedShape.height = Math.abs(y - startY)\n }\n\n // 최소 너비 및 높이 유지\n this.selectedShape.width = Math.max(10, this.selectedShape.width!)\n this.selectedShape.height = Math.max(10, this.selectedShape.height!)\n\n this.offsetX = x\n this.offsetY = y\n\n break\n case 'circle':\n const dx = x - this.selectedShape.cx!\n const dy = y - this.selectedShape.cy!\n this.selectedShape.r = Math.sqrt(dx * dx + dy * dy)\n break\n case 'triangle':\n const points = this.selectedShape.points!.split(' ').map(p => p.split(',').map(Number))\n const index = points.findIndex(([px, py]) => px === this.offsetX && py === this.offsetY)\n if (index !== -1) {\n points[index] = [x, y]\n this.selectedShape.points = points.map(p => p.join(',')).join(' ')\n this.offsetX = x\n this.offsetY = y\n }\n break\n case 'line':\n case 'arrow':\n if (this.offsetX === this.selectedShape.x1 && this.offsetY === this.selectedShape.y1) {\n this.selectedShape.x1 = x\n this.selectedShape.y1 = y\n } else if (this.offsetX === this.selectedShape.x2 && this.offsetY === this.selectedShape.y2) {\n this.selectedShape.x2 = x\n this.selectedShape.y2 = y\n }\n this.offsetX = x\n this.offsetY = y\n break\n }\n\n this.requestUpdate()\n }\n\n private onResizeHandlePointerUp = (event: PointerEvent) => {\n event.preventDefault()\n\n document.removeEventListener('pointermove', this.onResizeHandlePointerMove)\n document.removeEventListener('pointerup', this.onResizeHandlePointerUp)\n }\n\n private onTextDoubleClick(event: MouseEvent, shape: Shape) {\n event.stopPropagation()\n event.preventDefault()\n\n const textElement = event.target as SVGTextElement\n\n this.showTextInput(textElement, shape)\n }\n\n private showTextInput(textElement: SVGTextElement, shape: Shape | null = null, options?: { x: number; y: number }) {\n const input: HTMLInputElement = document.createElement('input')\n input.style.position = 'absolute'\n\n const ctm = textElement.getScreenCTM() || { a: 1, e: 0, d: 1, f: 0 }\n const bbox = textElement.getBBox()\n\n const screenX = bbox.x * ctm.a + ctm.e\n const screenY = bbox.y * ctm.d + ctm.f\n\n input.style.left = `${screenX}px`\n input.style.top = `${screenY}px`\n\n const computedStyle = window.getComputedStyle(textElement)\n const fontSize = parseFloat(computedStyle.fontSize) * ctm.a\n const fontFamily = computedStyle.fontFamily\n const fontWeight = computedStyle.fontWeight\n const textColor = computedStyle.fill || computedStyle.color\n const lineHeight = parseFloat(computedStyle.lineHeight) * ctm.d\n\n input.style.fontSize = `${fontSize}px`\n input.style.fontFamily = fontFamily\n input.style.fontWeight = fontWeight\n input.style.color = textColor\n input.style.lineHeight = `${lineHeight}px`\n input.style.padding = '0'\n input.style.margin = '0'\n input.style.border = 'none'\n input.style.outline = 'none'\n input.style.background = 'transparent'\n\n if (shape) {\n input.value = shape.text || ''\n }\n\n textElement.style.visibility = 'hidden'\n\n document.body.appendChild(input)\n this.adjustInputWidth(input)\n\n /* iOS에서는 딜레이를 주었을 때 focus()를 받지 못하는 현상이 있으므로, delay 없이 바로 focus를 설정함. */\n input.focus()\n\n input.addEventListener('input', () => {\n this.adjustInputWidth(input)\n })\n\n input.addEventListener('keydown', e => {\n if (e.key === 'Enter') {\n const textValue = input.value.trim()\n\n if (textValue) {\n if (shape) {\n shape.text = textValue\n } else {\n const newShape: Shape = {\n id: Date.now().toString(),\n type: 'text',\n x: options!.x,\n y: options!.y,\n text: textValue\n }\n\n this.shapes = [...this.shapes, newShape]\n }\n } else if (shape) {\n this.shapes = this.shapes.filter(s => s.id !== shape.id)\n }\n\n document.body.removeChild(input)\n\n if (!shape) {\n this.svg.removeChild(textElement)\n } else {\n textElement.style.visibility = 'visible'\n }\n\n this.requestUpdate()\n } else if (e.key === 'Escape') {\n document.body.removeChild(input)\n\n if (!shape) {\n this.svg.removeChild(textElement)\n } else {\n textElement.style.visibility = 'visible'\n }\n }\n })\n\n input.addEventListener('blur', () => {\n requestAnimationFrame(() => {\n if (!shape) {\n this.svg.removeChild(textElement)\n } else {\n textElement.style.visibility = 'visible'\n }\n\n if (input.parentElement) {\n document.body.removeChild(input)\n }\n })\n })\n }\n\n private adjustInputWidth(input: HTMLInputElement) {\n const minWidth = 50\n const textWidth = this.measureTextWidth(input.value || input.placeholder, input)\n input.style.width = `${Math.max(textWidth + 10, minWidth)}px`\n }\n\n private measureTextWidth(text: string, input: HTMLInputElement): number {\n const canvas = document.createElement('canvas')\n const context = canvas.getContext('2d')!\n context.font = window.getComputedStyle(input).font\n\n return context.measureText(text).width\n }\n\n private onFocus = () => {\n this.addEventListener('keydown', this.handleKeyDown)\n }\n\n private onBlur = () => {\n this.removeEventListener('keydown', this.handleKeyDown)\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if ((event.key === 'Delete' || event.key === 'Backspace') && this.selectedShape) {\n this.deleteSelectedShape()\n }\n }\n\n private deleteSelectedShape() {\n if (this.selectedShape) {\n this.shapes = this.shapes.filter(s => s.id !== this.selectedShape!.id)\n\n this.setSelectedShape(null)\n\n this.requestUpdate()\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ox-image-marker.js","sourceRoot":"","sources":["../../src/ox-image-marker.ts"],"names":[],"mappings":"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","sourcesContent":["import './ox-image-marker-mode.js'\n\nimport { html, css, svg, nothing } from 'lit'\nimport { query, state, customElement } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { keyed } from 'lit/directives/keyed.js'\n\nimport { GestureEventDrag, GestureEventPinch } from '@operato/utils/gesture-helper.js'\n\nimport { ImageMarkerMode, Shape, ShapeType } from './types.js'\nimport { BaseImageMarker } from './base-image-marker.js'\nimport { OxImageMarkerMode } from './ox-image-marker-mode.js'\n\n@customElement('ox-image-marker')\nexport class OxImageMarker extends BaseImageMarker {\n static styles = [\n ...BaseImageMarker.styles,\n css`\n :host {\n position: relative;\n display: flex;\n width: 100%;\n height: 100%;\n }\n\n ox-image-marker-mode {\n position: absolute;\n top: 0;\n right: 0;\n }\n\n svg {\n cursor: default;\n }\n\n svg[drawing] {\n cursor: crosshair;\n }\n\n .resize-handle {\n cursor: nwse-resize;\n }\n `\n ]\n\n @state() private currentShapeType?: ShapeType\n @state() private currentMode: ImageMarkerMode = 'edit'\n @state() private selectedShape: Shape | null = null\n\n @query('ox-image-marker-mode') imageMarkerMode!: OxImageMarkerMode\n\n // private drawingStarted: boolean = false\n private drawing: boolean = false\n private startX: number = 0\n private startY: number = 0\n private offsetX: number = 0\n private offsetY: number = 0\n private shapeMoveThreshold: number = 10\n private shapeMoveInitiated = false\n\n connectedCallback() {\n super.connectedCallback()\n this.setAttribute('tabindex', '0')\n this.addEventListener('focus', this.onFocus)\n this.addEventListener('blur', this.onBlur)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this.removeEventListener('focus', this.onFocus)\n this.removeEventListener('blur', this.onBlur)\n }\n\n render() {\n return html`\n <div class=\"container\">\n <svg\n @wheel=${this.onSvgWheel}\n @doubletap=${this.onSvgDoubleTap}\n @pinch=${this.onSvgPinch}\n @drag=${this.onSvgDrag}\n @click=${this.onSvgClick}\n viewBox=${this.viewBox}\n ?drawing=${this.currentMode == 'shape'}\n >\n <image href=${this.currentImage} @load=${this.onImageLoad}></image>\n ${this.shapes.map(shape => keyed(shape.id, this.renderShape(shape)))}\n </svg>\n </div>\n\n <ox-image-marker-mode\n currentMode=${this.currentMode}\n currentShapeType=${ifDefined(this.currentShapeType)}\n @mode-changed=${(e: CustomEvent) => {\n const { mode, shapeType } = e.detail\n this.setMode(mode, shapeType)\n }}\n @tap-fit-size=${() => this.reset()}\n @tap-delete=${() => this.deleteSelectedShape()}\n @tap-save=${() => {\n this.dispatchEvent(\n new CustomEvent('shapes-changed', {\n detail: this.shapes,\n bubbles: true,\n composed: true\n })\n )\n }}\n ></ox-image-marker-mode>\n `\n }\n\n private setMode(mode: ImageMarkerMode, shapeType: ShapeType) {\n if (mode == 'view') {\n this.setSelectedShape(null)\n }\n\n this.currentMode = mode\n this.currentShapeType = shapeType\n }\n\n protected onSvgPinch(e: GestureEventPinch) {\n e.stopPropagation()\n\n const { scale, centerX, centerY } = e.detail\n\n this.zoom(scale, centerX, centerY)\n }\n\n protected onSvgDrag(e: GestureEventDrag) {\n const { deltaX, deltaY, end } = e.detail\n\n if (this.currentMode === 'shape') {\n this.drawShape(e)\n } else {\n const [vbX, vbY, vbWidth, vbHeight] = this.viewBox.split(' ').map(Number)\n\n const scaleX = vbWidth / this.svg.clientWidth\n const scaleY = vbHeight / this.svg.clientHeight\n const scale = Math.max(scaleX, scaleY)\n\n const newVbX = vbX - deltaX * scale\n const newVbY = vbY - deltaY * scale\n\n this.viewBox = `${newVbX} ${newVbY} ${vbWidth} ${vbHeight}`\n\n this.debouncedUpdateImage()\n }\n }\n\n protected onSvgClick(e: MouseEvent) {\n if (this.currentMode === 'shape' && this.currentShapeType === 'text') {\n const { x, y } = this.getSvgPoint(e)\n\n const textElement = document.createElementNS('http://www.w3.org/2000/svg', 'text')\n\n textElement.setAttribute('x', x.toString())\n textElement.setAttribute('y', y.toString())\n textElement.textContent = 'ABC'\n\n this.svg.appendChild(textElement)\n\n /* 강제 지연은 iOS에서 input focus를 받지 못하는 현상이 있다. */\n this.showTextInput(textElement, null, { x, y })\n\n this.imageMarkerMode.setMode('edit')\n }\n }\n\n private drawShape(e: GestureEventDrag) {\n const { end } = e.detail\n const { x, y } = this.getSvgPoint(e)\n\n if (!this.drawing) {\n this.startX = x\n this.startY = y\n this.setSelectedShape(null)\n\n this.drawing = true\n } else if (this.drawing) {\n const minDistance = 5\n const distance = Math.sqrt(Math.pow(x - this.startX, 2) + Math.pow(y - this.startY, 2))\n\n if (!this.selectedShape && distance >= minDistance) {\n let newShape: Shape\n\n switch (this.currentShapeType) {\n case 'rectangle':\n newShape = {\n id: Date.now().toString(),\n type: 'rectangle',\n x: this.startX,\n y: this.startY,\n width: 0,\n height: 0\n }\n break\n case 'circle':\n newShape = {\n id: Date.now().toString(),\n type: 'circle',\n cx: this.startX,\n cy: this.startY,\n r: 0\n }\n break\n case 'triangle':\n newShape = {\n id: Date.now().toString(),\n type: 'triangle',\n x1: this.startX,\n y1: this.startY,\n width: 0,\n height: 0,\n points: `${this.startX},${this.startY} ${this.startX},${this.startY} ${this.startX},${this.startY}`\n }\n break\n case 'line':\n newShape = {\n id: Date.now().toString(),\n type: 'line',\n x1: this.startX,\n y1: this.startY,\n width: 0,\n height: 0\n }\n break\n case 'arrow':\n newShape = {\n id: Date.now().toString(),\n type: 'arrow',\n x1: this.startX,\n y1: this.startY,\n width: 0,\n height: 0\n }\n break\n default:\n return\n }\n\n this.shapes = [...this.shapes, newShape]\n this.setSelectedShape(newShape)\n }\n\n if (this.selectedShape) {\n switch (this.selectedShape.type) {\n case 'rectangle':\n this.selectedShape.x = Math.min(x, this.startX)\n this.selectedShape.y = Math.min(y, this.startY)\n this.selectedShape.width = Math.abs(x - this.startX)\n this.selectedShape.height = Math.abs(y - this.startY)\n break\n case 'circle':\n const dx = x - this.selectedShape.cx!\n const dy = y - this.selectedShape.cy!\n this.selectedShape.r = Math.sqrt(dx * dx + dy * dy)\n break\n case 'triangle':\n const x2 = x\n const y2 = y\n const x3 = this.startX - (x - this.startX)\n const y3 = y\n this.selectedShape.points = `${this.startX},${this.startY} ${x2},${y2} ${x3},${y3}`\n break\n case 'line':\n case 'arrow':\n this.selectedShape.x2 = x\n this.selectedShape.y2 = y\n break\n }\n\n this.requestUpdate()\n }\n\n if (end) {\n this.drawing = false\n this.imageMarkerMode.setMode('edit')\n\n this.requestUpdate()\n }\n }\n }\n\n private setSelectedShape(shape: Shape | null) {\n this.selectedShape = shape\n\n if (!shape) {\n this.shapes = this.shapes.map(s => {\n return { ...s, selected: false }\n })\n } else {\n this.selectedShape!.selected = true\n }\n }\n\n private getSvgPoint(event: MouseEvent | PointerEvent | GestureEventDrag) {\n const { x, y } = this.getPointFromEvent(event)\n\n const svg = this.svg\n const point = svg.createSVGPoint()\n point.x = x\n point.y = y\n const ctm = svg.getScreenCTM()!.inverse()\n\n return point.matrixTransform(ctm)\n }\n\n protected renderShape(shape: Shape) {\n const commonAttrs = {\n stroke: shape.selected ? 'blue' : 'red',\n 'stroke-width': 1,\n fill: 'transparent',\n cursor: 'pointer'\n }\n\n switch (shape.type) {\n case 'text':\n return svg`\n <text\n x=\"${shape.x!}\"\n y=\"${shape.y!}\"\n fill=\"${commonAttrs.stroke}\"\n style=\"cursor: ${commonAttrs.cursor}; font-size: 16px;\"\n @pointerdown=\"${(e: PointerEvent) => this.onPointerDownOnShape(e, shape)}\"\n @dblclick=\"${(e: MouseEvent) => this.onTextDoubleClick(e, shape)}\"\n >${shape.text}</text>\n `\n\n case 'rectangle':\n return svg`\n <rect\n x=\"${shape.x!}\"\n y=\"${shape.y!}\"\n width=\"${shape.width!}\"\n height=\"${shape.height!}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"${commonAttrs['stroke-width']}\"\n fill=\"${commonAttrs.fill}\"\n style=\"cursor: ${commonAttrs.cursor}\"\n @pointerdown=\"${(e: PointerEvent) => this.onPointerDownOnShape(e, shape)}\"\n ></rect>\n ${shape.selected ? this.renderResizeHandles(shape) : ''}\n `\n\n case 'circle':\n return svg`\n <circle\n cx=\"${shape.cx!}\"\n cy=\"${shape.cy!}\"\n r=\"${shape.r!}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"${commonAttrs['stroke-width']}\"\n fill=\"${commonAttrs.fill}\"\n style=\"cursor: ${commonAttrs.cursor}\"\n @pointerdown=\"${(e: PointerEvent) => this.onPointerDownOnShape(e, shape)}\"\n ></circle>\n ${shape.selected ? this.renderResizeHandles(shape) : ''}\n `\n\n case 'triangle':\n return svg`\n <polygon\n points=\"${shape.points!}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"${commonAttrs['stroke-width']}\"\n fill=\"${commonAttrs.fill}\"\n style=\"cursor: ${commonAttrs.cursor}\"\n @pointerdown=\"${(e: PointerEvent) => this.onPointerDownOnShape(e, shape)}\"\n ></polygon>\n ${shape.selected ? this.renderResizeHandles(shape) : ''}\n `\n\n case 'line':\n return svg`\n <line\n x1=\"${shape.x1!}\"\n y1=\"${shape.y1!}\"\n x2=\"${shape.x2 ?? shape.x1}\"\n y2=\"${shape.y2 ?? shape.y1}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"${commonAttrs['stroke-width']}\"\n style=\"cursor: ${commonAttrs.cursor}\"\n ></line>\n <line\n x1=\"${shape.x1!}\"\n y1=\"${shape.y1!}\"\n x2=\"${shape.x2 ?? shape.x1}\"\n y2=\"${shape.y2 ?? shape.y1}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"25\"\n stroke-opacity=\"0\"\n pointer-events=\"stroke\"\n @pointerdown=\"${(e: PointerEvent) => this.onPointerDownOnShape(e, shape)}\"\n @mouseenter=\"${() => (this.svg.style.cursor = 'pointer')}\"\n @mouseleave=\"${() => (this.svg.style.cursor = 'default')}\"\n ></line>\n ${shape.selected ? this.renderResizeHandles(shape) : ''}\n `\n\n case 'arrow':\n return svg`\n <defs>\n <marker id=\"arrowhead-${shape.id}\" markerWidth=\"10\" markerHeight=\"7\" refX=\"10\" refY=\"3.5\" orient=\"auto\">\n <polygon points=\"0 0, 10 3.5, 0 7\" fill=\"${commonAttrs.stroke}\"></polygon>\n </marker>\n </defs>\n <line\n x1=\"${shape.x1!}\"\n y1=\"${shape.y1!}\"\n x2=\"${shape.x2 ?? shape.x1}\"\n y2=\"${shape.y2 ?? shape.y1}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"${commonAttrs['stroke-width']}\"\n marker-end=\"url(#arrowhead-${shape.id})\"\n style=\"cursor: ${commonAttrs.cursor}\"\n ></line>\n <line\n x1=\"${shape.x1!}\"\n y1=\"${shape.y1!}\"\n x2=\"${shape.x2 ?? shape.x1}\"\n y2=\"${shape.y2 ?? shape.y1}\"\n stroke=\"${commonAttrs.stroke}\"\n stroke-width=\"25\"\n stroke-opacity=\"0\"\n pointer-events=\"stroke\"\n @mousedown=\"${(e: PointerEvent) => this.onPointerDownOnShape(e, shape)}\"\n @mouseenter=\"${() => (this.svg.style.cursor = 'pointer')}\"\n @mouseleave=\"${() => (this.svg.style.cursor = 'default')}\"\n @pointerdown=\"${(e: PointerEvent) => this.currentMode == 'edit' && e.stopPropagation()}\"\n ></line>\n ${shape.selected ? this.renderResizeHandles(shape) : ''}\n `\n\n case 'link':\n return svg`\n <rect class=\"link\" x=\"${shape.x}\" y=\"${shape.y}\" width=\"${shape.width}\" height=\"${shape.height}\" \n stroke=\"${commonAttrs.stroke}\" stroke-width=\"0\" \n fill=\"${commonAttrs.stroke}\" fill-opacity=\"0.3\" @click=\"${() => this.handleLinkClick(shape)}\">\n </rect>\n `\n default:\n return nothing\n }\n }\n\n private onPointerDownOnShape(event: PointerEvent, shape: Shape) {\n if (this.currentMode !== 'edit') {\n return\n }\n\n // TODO check if single touch ... (멀티터치를 제외해야한다).\n // if ('touches' in event && event.touches.length > 1) {\n // return\n // }\n\n event.stopPropagation()\n event.preventDefault()\n\n this.shapes = this.shapes.map(s => ({\n ...s,\n selected: s.id === shape.id\n }))\n\n this.shapeMoveInitiated = false\n this.setSelectedShape(this.shapes.find(s => s.id == shape.id)!)\n\n const { x, y } = this.getSvgPoint(event)\n\n this.offsetX = x\n this.offsetY = y\n\n document.addEventListener('pointermove', this.onPointerMoveOnShape)\n document.addEventListener('pointerup', this.onPointerUpOnShape)\n }\n\n private onPointerMoveOnShape = (event: PointerEvent) => {\n if (!this.selectedShape) {\n return\n }\n\n // TODO check if single touch ... (멀티터치를 제외해야한다).\n // if ('touches' in event && event.touches.length > 1) {\n // return\n // }\n\n event.preventDefault()\n\n const { x, y } = this.getSvgPoint(event)\n\n const dx = x - this.offsetX\n const dy = y - this.offsetY\n\n if (!this.shapeMoveInitiated) {\n const distance = Math.sqrt(dx * dx + dy * dy)\n\n if (distance < this.shapeMoveThreshold) {\n return\n }\n\n this.shapeMoveInitiated = true\n }\n\n this.offsetX = x\n this.offsetY = y\n\n switch (this.selectedShape.type) {\n case 'text':\n case 'rectangle':\n this.selectedShape.x! += dx\n this.selectedShape.y! += dy\n break\n case 'circle':\n this.selectedShape.cx! += dx\n this.selectedShape.cy! += dy\n break\n case 'triangle':\n const points = this.selectedShape.points!.split(' ').map(p => p.split(',').map(Number))\n\n this.selectedShape.points = points.map(([px, py]) => [px + dx, py + dy].join(',')).join(' ')\n break\n case 'line':\n case 'arrow':\n this.selectedShape.x1! += dx\n this.selectedShape.x2! += dx\n this.selectedShape.y1! += dy\n this.selectedShape.y2! += dy\n break\n }\n\n this.requestUpdate()\n }\n\n private onPointerUpOnShape = (event: PointerEvent) => {\n if (!this.selectedShape) {\n return\n }\n\n // TODO\n // if ('touches' in event && event.touches.length > 1) {\n // return\n // }\n\n event.preventDefault()\n\n document.removeEventListener('pointermove', this.onPointerMoveOnShape)\n document.removeEventListener('pointerup', this.onPointerUpOnShape)\n }\n\n private renderResizeHandles(shape: Shape) {\n let handles: Array<{ x: number; y: number; cursor: string }> = []\n\n switch (shape.type) {\n case 'text':\n case 'rectangle':\n handles = [\n { x: shape.x!, y: shape.y!, cursor: 'nwse-resize' },\n { x: shape.x! + shape.width!, y: shape.y!, cursor: 'nesw-resize' },\n { x: shape.x!, y: shape.y! + shape.height!, cursor: 'nesw-resize' },\n { x: shape.x! + shape.width!, y: shape.y! + shape.height!, cursor: 'nwse-resize' }\n ]\n break\n case 'circle':\n handles = [\n { x: shape.cx! + shape.r!, y: shape.cy!, cursor: 'ew-resize' },\n { x: shape.cx! - shape.r!, y: shape.cy!, cursor: 'ew-resize' },\n { x: shape.cx!, y: shape.cy! + shape.r!, cursor: 'ns-resize' },\n { x: shape.cx!, y: shape.cy! - shape.r!, cursor: 'ns-resize' }\n ]\n break\n case 'triangle':\n const points = shape.points!.split(' ').map(p => p.split(',').map(Number))\n handles = points.map(([x, y]) => ({ x, y, cursor: 'move' }))\n break\n case 'line':\n case 'arrow':\n handles = [\n { x: shape.x1!, y: shape.y1!, cursor: 'move' },\n { x: shape.x2!, y: shape.y2!, cursor: 'move' }\n ]\n break\n }\n\n return svg`\n ${handles.map(\n handle => svg`\n <g\n class=\"resize-handle-group\"\n style=\"transform: translate(${handle.x}px, ${handle.y}px) scale(${1 / this.zoomLevel});\"\n >\n <rect\n x=\"-5\"\n y=\"-5\"\n width=\"10\"\n height=\"10\"\n fill=\"white\"\n stroke=\"black\"\n class=\"resize-handle\"\n style=\"cursor: ${handle.cursor};\"\n @pointerdown=\"${(e: PointerEvent) => this.onResizeHandlePointerDown(e, shape, handle)}\"\n ></rect>\n </g>\n `\n )}\n `\n }\n\n private onResizeHandlePointerDown(event: PointerEvent, shape: Shape, handle: any) {\n event.stopPropagation()\n event.preventDefault()\n\n this.setSelectedShape(shape)\n\n this.offsetX = handle.x\n this.offsetY = handle.y\n\n document.addEventListener('pointermove', this.onResizeHandlePointerMove)\n document.addEventListener('pointerup', this.onResizeHandlePointerUp)\n }\n\n private onResizeHandlePointerMove = (event: PointerEvent) => {\n if (!this.selectedShape) {\n return\n }\n\n event.preventDefault()\n\n const { x, y } = this.getSvgPoint(event)\n\n switch (this.selectedShape.type) {\n case 'rectangle':\n const startX = this.selectedShape.x!\n const startY = this.selectedShape.y!\n const width = this.selectedShape.width!\n const height = this.selectedShape.height!\n\n // 핸들의 좌표에 따라 너비 및 높이 조정\n if (this.offsetX === startX && this.offsetY === startY) {\n // 상좌 핸들 (왼쪽 위)\n this.selectedShape.x = x\n this.selectedShape.y = y\n this.selectedShape.width = width + (startX - x)\n this.selectedShape.height = height + (startY - y)\n } else if (this.offsetX === startX + width && this.offsetY === startY) {\n // 상우 핸들 (오른쪽 위)\n this.selectedShape.y = y\n this.selectedShape.width = Math.abs(x - startX)\n this.selectedShape.height = height + (startY - y)\n } else if (this.offsetX === startX && this.offsetY === startY + height) {\n // 하좌 핸들 (왼쪽 아래)\n this.selectedShape.x = x\n this.selectedShape.width = width + (startX - x)\n this.selectedShape.height = Math.abs(y - startY)\n } else if (this.offsetX === startX + width && this.offsetY === startY + height) {\n // 하우 핸들 (오른쪽 아래)\n this.selectedShape.width = Math.abs(x - startX)\n this.selectedShape.height = Math.abs(y - startY)\n }\n\n // 최소 너비 및 높이 유지\n this.selectedShape.width = Math.max(10, this.selectedShape.width!)\n this.selectedShape.height = Math.max(10, this.selectedShape.height!)\n\n this.offsetX = x\n this.offsetY = y\n\n break\n case 'circle':\n const dx = x - this.selectedShape.cx!\n const dy = y - this.selectedShape.cy!\n this.selectedShape.r = Math.sqrt(dx * dx + dy * dy)\n break\n case 'triangle':\n const points = this.selectedShape.points!.split(' ').map(p => p.split(',').map(Number))\n const index = points.findIndex(([px, py]) => px === this.offsetX && py === this.offsetY)\n if (index !== -1) {\n points[index] = [x, y]\n this.selectedShape.points = points.map(p => p.join(',')).join(' ')\n this.offsetX = x\n this.offsetY = y\n }\n break\n case 'line':\n case 'arrow':\n if (this.offsetX === this.selectedShape.x1 && this.offsetY === this.selectedShape.y1) {\n this.selectedShape.x1 = x\n this.selectedShape.y1 = y\n } else if (this.offsetX === this.selectedShape.x2 && this.offsetY === this.selectedShape.y2) {\n this.selectedShape.x2 = x\n this.selectedShape.y2 = y\n }\n this.offsetX = x\n this.offsetY = y\n break\n }\n\n this.requestUpdate()\n }\n\n private onResizeHandlePointerUp = (event: PointerEvent) => {\n event.preventDefault()\n\n document.removeEventListener('pointermove', this.onResizeHandlePointerMove)\n document.removeEventListener('pointerup', this.onResizeHandlePointerUp)\n }\n\n private onTextDoubleClick(event: MouseEvent, shape: Shape) {\n event.stopPropagation()\n event.preventDefault()\n\n const textElement = event.target as SVGTextElement\n\n this.showTextInput(textElement, shape)\n }\n\n private showTextInput(textElement: SVGTextElement, shape: Shape | null = null, options?: { x: number; y: number }) {\n const input: HTMLInputElement = document.createElement('input')\n input.style.position = 'absolute'\n\n const ctm = textElement.getScreenCTM() || { a: 1, e: 0, d: 1, f: 0 }\n const bbox = textElement.getBBox()\n\n const screenX = bbox.x * ctm.a + ctm.e\n const screenY = bbox.y * ctm.d + ctm.f\n\n input.style.left = `${screenX}px`\n input.style.top = `${screenY}px`\n\n const computedStyle = window.getComputedStyle(textElement)\n const fontSize = parseFloat(computedStyle.fontSize) * ctm.a\n const fontFamily = computedStyle.fontFamily\n const fontWeight = computedStyle.fontWeight\n const textColor = computedStyle.fill || computedStyle.color\n const lineHeight = parseFloat(computedStyle.lineHeight) * ctm.d\n\n input.style.fontSize = `${fontSize}px`\n input.style.fontFamily = fontFamily\n input.style.fontWeight = fontWeight\n input.style.color = textColor\n input.style.lineHeight = `${lineHeight}px`\n input.style.padding = '0'\n input.style.margin = '0'\n input.style.border = 'none'\n input.style.outline = 'none'\n input.style.background = 'transparent'\n\n if (shape) {\n input.value = shape.text || ''\n }\n\n textElement.style.visibility = 'hidden'\n\n document.body.appendChild(input)\n this.adjustInputWidth(input)\n\n /* iOS에서는 딜레이를 주었을 때 focus()를 받지 못하는 현상이 있으므로, delay 없이 바로 focus를 설정함. */\n input.focus()\n\n input.addEventListener('input', () => {\n this.adjustInputWidth(input)\n })\n\n input.addEventListener('keydown', e => {\n if (e.key === 'Enter') {\n const textValue = input.value.trim()\n\n if (textValue) {\n if (shape) {\n shape.text = textValue\n } else {\n const newShape: Shape = {\n id: Date.now().toString(),\n type: 'text',\n x: options!.x,\n y: options!.y,\n text: textValue\n }\n\n this.shapes = [...this.shapes, newShape]\n }\n } else if (shape) {\n this.shapes = this.shapes.filter(s => s.id !== shape.id)\n }\n\n document.body.removeChild(input)\n\n if (!shape) {\n this.svg.removeChild(textElement)\n } else {\n textElement.style.visibility = 'visible'\n }\n\n this.requestUpdate()\n } else if (e.key === 'Escape') {\n document.body.removeChild(input)\n\n if (!shape) {\n this.svg.removeChild(textElement)\n } else {\n textElement.style.visibility = 'visible'\n }\n }\n })\n\n input.addEventListener('blur', () => {\n requestAnimationFrame(() => {\n if (!shape) {\n this.svg.removeChild(textElement)\n } else {\n textElement.style.visibility = 'visible'\n }\n\n if (input.parentElement) {\n document.body.removeChild(input)\n }\n })\n })\n }\n\n private adjustInputWidth(input: HTMLInputElement) {\n const minWidth = 50\n const textWidth = this.measureTextWidth(input.value || input.placeholder, input)\n input.style.width = `${Math.max(textWidth + 10, minWidth)}px`\n }\n\n private measureTextWidth(text: string, input: HTMLInputElement): number {\n const canvas = document.createElement('canvas')\n const context = canvas.getContext('2d')!\n context.font = window.getComputedStyle(input).font\n\n return context.measureText(text).width\n }\n\n private onFocus = () => {\n this.addEventListener('keydown', this.handleKeyDown)\n }\n\n private onBlur = () => {\n this.removeEventListener('keydown', this.handleKeyDown)\n }\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if ((event.key === 'Delete' || event.key === 'Backspace') && this.selectedShape) {\n this.deleteSelectedShape()\n }\n }\n\n private deleteSelectedShape() {\n if (this.selectedShape) {\n this.shapes = this.shapes.filter(s => s.id !== this.selectedShape!.id)\n\n this.setSelectedShape(null)\n\n this.requestUpdate()\n }\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  export class TestImageProvider {
2
- width = 0;
3
- height = 0;
4
2
  constructor(width, height) {
3
+ this.width = 0;
4
+ this.height = 0;
5
5
  this.width = width;
6
6
  this.height = height;
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test-image-provider.js","sourceRoot":"","sources":["../../stories/test-image-provider.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAiB;IACpB,KAAK,GAAW,CAAC,CAAA;IACjB,MAAM,GAAW,CAAC,CAAA;IAE1B,YAAY,KAAa,EAAE,MAAc;QACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAqB;QAClC,eAAe;QACf,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,MAAM,OAAO,GAAG,kBAAkB,CAAA;YAClC,IAAI,KAAK,GAAG,GAAG,CAAA;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;YAClD,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC,CAAA;QAED,sBAAsB;QACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjD,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;QAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QAClC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;QAEtB,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAC9D,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAA;QAC1C,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;QAC7C,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,CAAA;QAC5C,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,CAAA;QAC5C,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;QAC7C,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,CAAA;QAC5C,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAA;QAE1C,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAA;QACxB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAEjC,OAAO,MAAM,CAAC,SAAS,EAAE,CAAA;IAC3B,CAAC;CACF","sourcesContent":["import { ImageOptions, ImageProvider } from '../src/types.js'\n\nexport class TestImageProvider implements ImageProvider {\n private width: number = 0\n private height: number = 0\n\n constructor(width: number, height: number) {\n this.width = width\n this.height = height\n }\n\n async getImage(options: ImageOptions): Promise<string> {\n // 무작위 색상 생성 함수\n const getRandomColor = () => {\n const letters = '0123456789ABCDEF'\n let color = '#'\n for (let i = 0; i < 6; i++) {\n color += letters[Math.floor(Math.random() * 16)]\n }\n return color\n }\n\n // 무작위 색상 그라데이션 이미지 생성\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n if (!ctx) {\n throw new Error('Failed to get canvas context')\n }\n\n const { scale } = options\n\n const width = this.width * scale\n const height = this.height * scale\n canvas.width = width\n canvas.height = height\n\n const gradient = ctx.createLinearGradient(0, 0, width, height)\n gradient.addColorStop(0, getRandomColor())\n gradient.addColorStop(0.15, getRandomColor())\n gradient.addColorStop(0.3, getRandomColor())\n gradient.addColorStop(0.5, getRandomColor())\n gradient.addColorStop(0.65, getRandomColor())\n gradient.addColorStop(0.8, getRandomColor())\n gradient.addColorStop(1, getRandomColor())\n\n ctx.fillStyle = gradient\n ctx.fillRect(0, 0, width, height)\n\n return canvas.toDataURL()\n }\n}\n"]}
1
+ {"version":3,"file":"test-image-provider.js","sourceRoot":"","sources":["../../stories/test-image-provider.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,iBAAiB;IAI5B,YAAY,KAAa,EAAE,MAAc;QAHjC,UAAK,GAAW,CAAC,CAAA;QACjB,WAAM,GAAW,CAAC,CAAA;QAGxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAqB;QAClC,eAAe;QACf,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,MAAM,OAAO,GAAG,kBAAkB,CAAA;YAClC,IAAI,KAAK,GAAG,GAAG,CAAA;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;YAClD,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC,CAAA;QAED,sBAAsB;QACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACjD,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;QAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QAClC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;QAEtB,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAC9D,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAA;QAC1C,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;QAC7C,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,CAAA;QAC5C,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,CAAA;QAC5C,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;QAC7C,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,CAAA;QAC5C,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAA;QAE1C,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAA;QACxB,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAEjC,OAAO,MAAM,CAAC,SAAS,EAAE,CAAA;IAC3B,CAAC;CACF","sourcesContent":["import { ImageOptions, ImageProvider } from '../src/types.js'\n\nexport class TestImageProvider implements ImageProvider {\n private width: number = 0\n private height: number = 0\n\n constructor(width: number, height: number) {\n this.width = width\n this.height = height\n }\n\n async getImage(options: ImageOptions): Promise<string> {\n // 무작위 색상 생성 함수\n const getRandomColor = () => {\n const letters = '0123456789ABCDEF'\n let color = '#'\n for (let i = 0; i < 6; i++) {\n color += letters[Math.floor(Math.random() * 16)]\n }\n return color\n }\n\n // 무작위 색상 그라데이션 이미지 생성\n const canvas = document.createElement('canvas')\n const ctx = canvas.getContext('2d')\n if (!ctx) {\n throw new Error('Failed to get canvas context')\n }\n\n const { scale } = options\n\n const width = this.width * scale\n const height = this.height * scale\n canvas.width = width\n canvas.height = height\n\n const gradient = ctx.createLinearGradient(0, 0, width, height)\n gradient.addColorStop(0, getRandomColor())\n gradient.addColorStop(0.15, getRandomColor())\n gradient.addColorStop(0.3, getRandomColor())\n gradient.addColorStop(0.5, getRandomColor())\n gradient.addColorStop(0.65, getRandomColor())\n gradient.addColorStop(0.8, getRandomColor())\n gradient.addColorStop(1, getRandomColor())\n\n ctx.fillStyle = gradient\n ctx.fillRect(0, 0, width, height)\n\n return canvas.toDataURL()\n }\n}\n"]}