@pacem/pacem-2d 1.0.4 → 1.0.5-bartels
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/browser/pacem-2d.js +4 -4
- package/dist/browser/pacem-2d.js.map +1 -1
- package/dist/browser/pacem-2d.min.js +2 -2
- package/dist/bundle/pacem-2d.min.mjs +2 -2
- package/dist/bundle/pacem-2d.mjs +43 -43
- package/dist/bundle/pacem-2d.mjs.map +3 -3
- package/dist/esm/adapter.js +1 -1
- package/dist/esm/constants.js +1 -1
- package/dist/esm/drawable-element.js +1 -1
- package/dist/esm/drawing.js +1 -1
- package/dist/esm/ellipse.js +1 -1
- package/dist/esm/group.js +1 -1
- package/dist/esm/image.js +1 -1
- package/dist/esm/index-components-drawing.js +1 -1
- package/dist/esm/index-components.js +3 -2
- package/dist/esm/index-iife.js +1 -1
- package/dist/esm/index-root.js +3 -2
- package/dist/esm/index.js +3 -2
- package/dist/esm/line.js +1 -1
- package/dist/esm/path.js +1 -1
- package/dist/esm/polygon.js +1 -1
- package/dist/esm/polyline.js +1 -1
- package/dist/esm/rect.js +1 -1
- package/dist/esm/stage-abstractions.js +1 -1
- package/dist/esm/stage.js +1 -1
- package/dist/esm/text.js +1 -1
- package/dist/esm/types.js +1 -1
- package/package.json +1 -1
- package/typings/index.d.ts +5 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../esm/index-components.js", "../esm/index-components-drawing.js", "../esm/drawable-element.js", "../esm/stage.js", "../esm/constants.js", "../esm/
|
|
4
|
-
"sourcesContent": ["export * as Drawing from './index-components-drawing';\n", "export * from './drawable-element';\nexport * from './stage-abstractions';\nexport * from './types';\nexport * from './group';\nexport * from './ellipse';\nexport * from './rect';\nexport * from './line';\nexport * from './path';\nexport * from './polygon';\nexport * from './polyline';\nexport * from './image';\nexport * from './text';\nexport * from './stage';\nexport * from './adapters/utils';\nexport * from './adapters/canvasadapter';\nexport * from './adapters/svgadapter';\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Components, CustomElementUtils, PropertyConverters, Watch, } from '@pacem/pacem-core';\nimport { Pacem2DElement } from './stage';\n/**\n * Root of the `<pacem-2d-*>` drawable elements hierarchy: wires a custom element up to its containing\n * `Pacem2DElement` stage and, in case of nesting, its parent drawable. By default children are not allowed\n * (only `PacemGroupElement` overrides `validate` to accept them).\n */\nexport class DrawableElement extends Components.PacemCrossItemsContainerElement {\n validate(_) {\n // by default no children allowed (Group will except)\n return false;\n }\n findContainer() {\n // override\n return this.parent || this.stage;\n }\n /** @readonly Gets the `Pacem2DElement` stage this drawable belongs to. */\n get stage() {\n return this['_scene'] = this['_scene'] || CustomElementUtils.findAncestorOfType(this, Pacem2DElement);\n }\n /** @readonly Gets the closest ancestor `DrawableElement` (e.g. a containing group), if any. */\n get parent() {\n return this['_drawableParent'] = this['_drawableParent'] || CustomElementUtils.findAncestor(this, i => i instanceof DrawableElement);\n }\n disconnectedCallback() {\n delete this['_scene'];\n delete this['_drawableParent'];\n super.disconnectedCallback();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'hide':\n this.stage?.draw(this);\n break;\n }\n }\n }\n}\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], DrawableElement.prototype, \"tag\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], DrawableElement.prototype, \"inert\", void 0);\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, ViewChild, Debounce, PCSS, P, Utils, PropertyConverters, PropertyChangeEvent, CustomEventUtils, avoidHandler, EventKeyModifier, Components } from '@pacem/pacem-core';\nimport { Rect, Matrix2D } from '@pacem/pacem-foundation';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { DrawableElement } from './drawable-element';\nimport { isGroup } from './drawing';\n//namespace Pacem.Components.Drawing {\n// group [1] := align x,[3] := align y,[6] := slice\nconst ASPECTRATIO_PATTERN = /^\\s*[xX]\\s*([Mm](in|ax|id))\\s*[yY]\\s*([Mm](in|ax|id))(\\s+(none|slice|meet))?\\s*$/;\nconst aspectRatioPropertyConverter = {\n convert: (attr) => {\n const regArr = ASPECTRATIO_PATTERN.exec(attr);\n if (regArr && regArr.length >= 4) {\n return {\n x: regArr[1].toLowerCase(),\n y: regArr[3].toLowerCase(),\n slice: regArr[6] === 'slice'\n };\n }\n return 'none';\n },\n convertBack: (val) => {\n if (Utils.isNull(val) || typeof val === 'string') {\n return 'none';\n }\n return `xM${(val.x.substring(1))}YM${(val.y.substring(1))} ${(val.slice ? 'slice' : 'meet')}`;\n }\n};\nconst DEFAULT_STAGE_OPTIONS = {\n panControl: true,\n zoomControl: true,\n panModifiers: [EventKeyModifier.AltKey],\n zoomModifiers: [EventKeyModifier.AltKey],\n clickModifiers: []\n};\n/**\n * Returns the effective `StageOptions` for the given stage, filling in any option left unset with the\n * library defaults.\n * @param stage The stage to resolve options for.\n */\nexport function getStageOptions(stage) {\n const options = stage instanceof Pacem2DElement ? stage.options : {};\n return Utils.extend({}, DEFAULT_STAGE_OPTIONS, options);\n}\n/**\n * The `<pacem-2d>` element: root stage/scene container for the drawable elements (shapes, text, images,\n * groups...). Delegates actual rendering to the assigned `adapter` (SVG or Canvas) and handles the\n * viewbox/aspect-ratio mapping plus built-in pan and zoom interactions.\n */\nlet Pacem2DElement = class Pacem2DElement extends Components.PacemItemsContainerElement {\n constructor() {\n super(...arguments);\n this.#transformMatrix = Matrix2D.identity;\n this.#options = DEFAULT_STAGE_OPTIONS;\n this._resizeHandler = (evt) => {\n this.#size = { x: evt.detail.left, y: evt.detail.top, width: evt.detail.width, height: evt.detail.height };\n const adapter = this.adapter;\n if (!Utils.isNull(adapter)) {\n this._invalidateSize();\n }\n };\n this._zoomHandler = (evt) => {\n // only trusted ui interaction\n if (!evt.isTrusted) {\n return;\n }\n const opts = this.#options;\n if (opts.zoomControl && CustomEventUtils.matchModifiers(evt, opts.zoomModifiers)) {\n // prevent anything\n avoidHandler(evt);\n const zoomingOut = evt.deltaY < 0;\n // center change?\n const factor = .1, sign = zoomingOut ? -1 : 1, factorWSign = factor * sign, scale = 1 + factorWSign;\n const stageRect = Utils.offsetRect(evt.currentTarget), pt = { x: evt.clientX, y: evt.clientY };\n this._zoom(scale, stageRect, pt);\n }\n };\n this._panHandler = (evt) => {\n const state = this.#panningStart, actual = this._getPanPoint(evt);\n if (!Utils.isNullOrEmpty(state && state.point) && !Utils.isNull(actual)) {\n avoidHandler(evt);\n const factor = state.factor, vbox = state.box, start = state.point;\n this.viewbox = {\n x: vbox.x - factor * (actual.x - start.x),\n y: vbox.y - factor * (actual.y - start.y),\n width: vbox.width,\n height: vbox.height\n };\n }\n };\n this._panStartHandler = (evt) => {\n const opts = this.#options;\n if (!opts.panControl) {\n return;\n }\n // only trusted ui interaction\n if (!evt.isTrusted) {\n return;\n }\n const size = this.#size, vbox = this.viewbox || { x: 0, y: 0, width: size.width, height: size.height }, start = this._getPanPoint(evt);\n if (start) {\n avoidHandler(evt);\n this._stage.style.pointerEvents = 'none';\n const aspectRatio = this._getActualAspectRatio();\n const wBased = vbox.width / size.width, hBased = vbox.height / size.height, factor = aspectRatio.slice ? Math.min(wBased, hBased) : Math.max(wBased, hBased);\n this.#panningStart = { point: start, box: vbox, factor };\n }\n };\n this._panEndHandler = (evt) => {\n this._stage.style.pointerEvents = '';\n this.#panningStart = null;\n };\n }\n /** @readonly Gets the DOM element hosting the stage content. */\n get stage() {\n return this._stage;\n }\n /** Processes the stage content and returns a snapshot image (delegates to the current `adapter`). */\n snapshot(bgColor, type, quality) {\n const adapter = this.adapter;\n if (Utils.isNull(adapter)) {\n return Promise.resolve(null);\n }\n return adapter.snapshot(this, bgColor, type, quality);\n }\n #originalViewBox;\n #transformMatrix;\n /** @readonly Gets the matrix that projects stage coords into screen coords. */\n get transformMatrix() {\n return this.#transformMatrix;\n }\n _transformMatrixScale() {\n const sizeObj = this.#size || Utils.offsetRect(this._stage);\n var origVbox = this.#originalViewBox || sizeObj;\n const vbox = this.viewbox || origVbox;\n const aspectRatio = this.aspectRatio || 'none';\n const mode = aspectRatio === 'none' ? 'stretch' : (aspectRatio.slice ? 'cover' : 'contain');\n const actual = Rect.findTransform(vbox, origVbox, mode);\n return actual.a;\n }\n validate(item) {\n return item instanceof DrawableElement && /* only direct items */ Utils.isNull(item.parent);\n }\n draw(item, redraw = false) {\n const adapter = this.adapter;\n if (!this.disabled && !Utils.isNull(adapter)) {\n let cancelable = new CustomEvent('predraw', { cancelable: true });\n this.dispatchEvent(cancelable);\n if (!cancelable.defaultPrevented) {\n adapter.draw(this, item, redraw);\n this.dispatchEvent(new CustomEvent('draw'));\n }\n }\n }\n _drawDebounced(item, force = false) {\n if (!Utils.isNull(item) && isGroup(item)) {\n this.draw(item, force);\n }\n else {\n this.draw(item);\n }\n }\n requestDraw(item, redraw = false) {\n this._drawDebounced(item, redraw);\n }\n _buildUpDatasourceFromDOM() {\n this.datasource = (this.items || []).slice();\n }\n #options;\n #size;\n _getActualAspectRatio() {\n const aspectRatio = this.aspectRatio || 'none';\n const alignmentX = aspectRatio === 'none' ? 'mid' : aspectRatio.x;\n const alignmentY = aspectRatio === 'none' ? 'mid' : aspectRatio.y;\n const slice = aspectRatio === 'none' ? false : aspectRatio.slice;\n return { x: alignmentX, y: alignmentY, slice };\n }\n _zoomFromValue(scale) {\n const sizeObj = this.#size;\n if (Utils.isNull(sizeObj)) {\n return;\n }\n const sizeRect = sizeObj;\n const origVbox = this.#originalViewBox || sizeRect, vbox = this.viewbox || origVbox;\n const aspectRatio = this.aspectRatio || 'none';\n const mode = aspectRatio === 'none' ? 'stretch' : (aspectRatio.slice ? 'cover' : 'contain');\n const actual = Rect.findTransform(vbox, sizeRect, mode);\n const original = Rect.findTransform(origVbox, sizeRect, mode);\n const actualScale = actual.a;\n const origScale = original.a;\n const targetScale = origScale * scale;\n const incrementalInverseScale = actualScale / targetScale;\n this._zoom(incrementalInverseScale);\n }\n _zoom(scale, stageRect, pt) {\n if (Utils.isNull(stageRect)) {\n stageRect = Utils.offsetRect(this._stage);\n }\n if (Utils.isNull(pt)) {\n pt = { x: stageRect.x + stageRect.width * .5, y: stageRect.y + stageRect.height * .5 };\n }\n const sizeObj = this.#size, vbox = this.viewbox || sizeObj;\n const vsize = Math.min(vbox.width, vbox.height), targetWidth = vsize * scale, targetHeight = vsize * scale;\n if (targetWidth > 0 && targetHeight > 0) {\n const aspectRatio = this._getActualAspectRatio();\n const alignmentX = aspectRatio.x;\n const alignmentY = aspectRatio.y;\n const slice = aspectRatio.slice;\n // offset\n const vboxRatio = vbox.width / vbox.height, size = slice ? Math.max(stageRect.width, stageRect.height) : Math.min(stageRect.width, stageRect.height);\n let \n // to be adjusted based on aspectRatio\n adjX, adjY;\n ;\n switch (alignmentX) {\n case 'mid':\n adjX = (targetWidth - vbox.width) * (pt.x - stageRect.x - .5 * (stageRect.width - size)) / (size * vboxRatio);\n break;\n case 'max':\n adjX = (targetWidth - vbox.width) * (pt.x - stageRect.x - (stageRect.width - size)) / (size * vboxRatio);\n break;\n default:\n adjX = (targetWidth - vbox.width) * (pt.x - stageRect.x) / (size * vboxRatio);\n break;\n }\n switch (alignmentY) {\n case 'mid':\n adjY = (targetHeight - vbox.height) * (pt.y - stageRect.y - .5 * (stageRect.height - size)) / (size * vboxRatio);\n break;\n case 'max':\n adjY = (targetHeight - vbox.height) * (pt.y - stageRect.y - (stageRect.height - size)) / (size * vboxRatio);\n break;\n default:\n adjY = (targetHeight - vbox.height) * (pt.y - stageRect.y) / (size * vboxRatio);\n break;\n }\n const targetX = vbox.x - adjX, targetY = vbox.y - adjY;\n this.viewbox = { x: targetX, y: targetY, width: targetWidth, height: targetHeight };\n }\n }\n _getPanPoint(evt) {\n const opts = this.#options;\n if (evt instanceof MouseEvent && CustomEventUtils.matchModifiers(evt, opts.panModifiers)) {\n return CustomEventUtils.getEventCoordinates(evt).page;\n }\n return null;\n }\n #panningStart;\n _invalidateSize() {\n this.adapter.invalidateSize(this, this.#size);\n const prevTransformMatrix = this.#transformMatrix;\n this.#transformMatrix = this.adapter.getTransformMatrix(this);\n this.dispatchEvent(new PropertyChangeEvent({ propertyName: 'transformMatrix', currentValue: this.#transformMatrix, oldValue: prevTransformMatrix }));\n this.zoom = this._transformMatrixScale();\n this.dispatchEvent(new Components.ResizeEvent(this.#size));\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n const adapter = this.adapter;\n if (!Utils.isNull(adapter)) {\n adapter.initialize(this);\n this._invalidateSize();\n // request draw right away\n this._drawDebounced();\n }\n const resize = this._resize;\n resize.addEventListener(Components.ResizeEventName, this._resizeHandler, false);\n const stage = this._stage;\n resize.target = stage;\n const options = { capture: false, passive: true };\n // zooming\n stage.addEventListener('wheel', this._zoomHandler, false);\n // panning\n stage.addEventListener('mousedown', this._panStartHandler, false);\n stage.addEventListener('touchstart', this._panStartHandler, options);\n window.addEventListener('mousemove', this._panHandler, false);\n window.addEventListener('mouseup', this._panEndHandler, false);\n window.addEventListener('touchmove', this._panHandler, options);\n window.addEventListener('touchend', this._panEndHandler, options);\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'adapter':\n if (!Utils.isNull(old)) {\n old.dispose(this);\n }\n if (!Utils.isNull(val)) {\n val.initialize(this);\n this._invalidateSize();\n this._drawDebounced();\n }\n break;\n case 'aspectRatio':\n if (!Utils.isNull(this.adapter)) {\n this._invalidateSize();\n }\n break;\n case 'viewbox':\n if (!Utils.isNull(this.adapter)) {\n this._invalidateSize();\n }\n this.#originalViewBox ??= (this.viewbox || null);\n break;\n case 'items':\n this._buildUpDatasourceFromDOM();\n break;\n case 'zoom':\n if (val !== this._transformMatrixScale()) {\n this._zoomFromValue(val);\n }\n break;\n case 'options':\n this.#options = getStageOptions(this); // Utils.extend({}, DEFAULT_STAGE_OPTIONS, val || {});\n break;\n case 'disabled':\n case 'datasource':\n this._drawDebounced();\n break;\n }\n }\n disconnectedCallback() {\n const resizer = this._resize, stage = this._stage;\n if (!Utils.isNull(resizer)) {\n resizer.removeEventListener(Components.ResizeEventName, this._resizeHandler, false);\n }\n if (!Utils.isNull(stage)) {\n // zooming\n stage.removeEventListener('wheel', this._zoomHandler, false);\n // panning\n stage.removeEventListener('mousedown', this._panStartHandler, false);\n stage.removeEventListener('touchstart', this._panStartHandler);\n window.removeEventListener('mousemove', this._panHandler, false);\n window.removeEventListener('mouseup', this._panEndHandler, false);\n window.removeEventListener('touchmove', this._panHandler);\n window.removeEventListener('touchend', this._panEndHandler);\n }\n if (!Utils.isNull(this.adapter)) {\n this.adapter.dispose(this);\n }\n super.disconnectedCallback();\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.Element })\n], Pacem2DElement.prototype, \"adapter\", void 0);\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.Rect })\n], Pacem2DElement.prototype, \"viewbox\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: aspectRatioPropertyConverter })\n], Pacem2DElement.prototype, \"aspectRatio\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem2DElement.prototype, \"datasource\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem2DElement.prototype, \"options\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], Pacem2DElement.prototype, \"zoom\", void 0);\n__decorate([\n ViewChild('.' + PCSS + '-2d')\n], Pacem2DElement.prototype, \"_stage\", void 0);\n__decorate([\n ViewChild(P + '-resize')\n], Pacem2DElement.prototype, \"_resize\", void 0);\n__decorate([\n Debounce(true)\n], Pacem2DElement.prototype, \"_drawDebounced\", null);\nPacem2DElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME, shadow: true, template: `<${P}-resize watch-position=\"true\"></${P}-resize><div class=\"${PCSS}-2d\" part=\"container\"></div><slot></slot>` })\n], Pacem2DElement);\nexport { Pacem2DElement };\n", "/** Middle segment shared by every `<pacem-2d-*>` custom element tag name. */\nexport const TAG_MIDDLE_NAME = \"2d\";\n/** `2 * Math.PI`, a full turn in radians. */\nexport const TWO_PI = 2 * Math.PI;\n", "import { Utils, CustomUIEvent } from '@pacem/pacem-core';\nimport { Point, Matrix2D } from '@pacem/pacem-foundation';\n/** Type guard telling whether `object` implements `Drawable`. */\nexport function isDrawable(object) {\n return !Utils.isNull(object) && 'stage' in object;\n}\n/** Type guard telling whether `object` implements `UiObject`. */\nexport function isUiObject(object) {\n return /*'transformMatrix' in object &&*/ isDrawable(object);\n}\nfunction isGradient(object) {\n return 'stops' in object && Utils.isArray(object.stops);\n}\n/** Type guard telling whether `object` is a `LinearGradient`. */\nexport function isLinearGradient(object) {\n return isGradient(object) && 'start' in object && Point.isPoint(object.start)\n && 'end' in object && Point.isPoint(object.end);\n}\n/** Type guard telling whether `object` is a `RadialGradient`. */\nexport function isRadialGradient(object) {\n return isGradient(object) && 'center' in object && Point.isPoint(object.center)\n && 'radius' in object && typeof object.radius === 'number';\n}\n/** Static helpers to combine `PresentationState` instances (e.g. a shape's own state with its inherited parent state). */\nexport class PresentationState {\n /**\n * Combines two presentation states (typically an item's own state and the one inherited from its\n * ancestors), giving precedence to `lhs` whenever both define a value.\n * @param lhs Own/most specific presentation state.\n * @param rhs Inherited/fallback presentation state.\n * @param precomputedMatrix If provided, used as-is instead of multiplying `lhs`'s and `rhs`'s transform matrices.\n */\n static combine(lhs, rhs, precomputedMatrix = null) {\n return {\n opacity: (lhs.opacity ?? 1) * (rhs.opacity ?? 1),\n transformMatrix: precomputedMatrix ?? Matrix2D.multiply(rhs.transformMatrix, lhs.transformMatrix),\n dashArray: lhs.dashArray ?? rhs.dashArray,\n fill: lhs.fill ?? rhs.fill,\n lineCap: lhs.lineCap ?? rhs.lineCap,\n lineJoin: lhs.lineJoin ?? rhs.lineJoin,\n lineWidth: lhs.lineWidth ?? rhs.lineWidth,\n stroke: lhs.stroke ?? rhs.stroke\n };\n }\n}\n/** Type guard telling whether `object` implements `PresentationObject`. */\nexport function isPresentationObject(object) {\n return isUiObject(object)\n && ('fill' in object\n || 'transformMatrix' in object\n || 'stroke' in object\n || 'lineJoin' in object\n || 'dashArray' in object\n || 'lineWidth' in object\n || 'opacity' in object\n || 'lineCap' in object);\n}\n/** Type guard telling whether `object` implements `Shape`. */\nexport function isShape(object) {\n return isUiObject(object) && 'pathData' in object;\n}\n/** Type guard telling whether `object` implements `Group` and has at least one child drawable. */\nexport function isGroup(object) {\n return isUiObject(object) && 'childDrawables' in object && !Utils.isNullOrEmpty(object['childDrawables']);\n}\n/** Type guard telling whether `object` implements `Text`. */\nexport function isText(object) {\n return isUiObject(object) && 'text' in object && typeof object['text'] === 'string';\n}\n/** Type guard telling whether `object` implements `Image`. */\nexport function isImage(object) {\n return isUiObject(object) && 'src' in object && typeof object['src'] === 'string';\n}\n/**\n * Base class for the custom UI events dispatched by the 2D stage/adapters, carrying the screen transform\n * matrix in effect at dispatch time so consumers can project screen coordinates into stage coordinates.\n */\nexport class UI2DEvent extends CustomUIEvent {\n constructor(type, eventInit, originalEvent, transformMatrix) {\n super(type, eventInit, originalEvent);\n this.#transformMatrix = transformMatrix;\n }\n #transformMatrix;\n /** Gets the screen transform matrix. */\n get transformMatrix() {\n return this.#transformMatrix;\n }\n /** Projects a point (defaults to the event's screen coordinates) through the event's transform matrix. */\n project(pt = { x: this.screenX, y: this.screenY }) {\n return Matrix2D.multiply(pt, this.#transformMatrix);\n }\n}\n/** Static helper to build an empty `ShapeGeometry`. */\nexport class Shape {\n /** Returns an empty `ShapeGeometry` (no path, no vertices, zero-sized bounding rect). */\n static empty() {\n return { pathData: '', vertices: [], boundingRect: { x: 0, y: 0, width: 0, height: 0 } };\n }\n}\n/** Event dispatched throughout a `Drawable`'s drag lifecycle, carrying `DragEventArgs`. */\nexport class DragEvent extends UI2DEvent {\n}\n/** Event dispatched for pointer interactions (over/out/down/up/click) targeting a `Drawable`. */\nexport class DrawableEvent extends UI2DEvent {\n constructor(type, args, originalEvent, m) {\n super(type, { detail: args, bubbles: true, cancelable: true }, originalEvent, m);\n }\n}\n/** Event dispatched for pointer interactions (move/down/up/click) targeting a `Stage` at large (i.e. no specific hit `Drawable`). */\nexport class StageEvent extends UI2DEvent {\n constructor(type, args, originalEvent, m = args.transformMatrix) {\n super(type, { detail: args, bubbles: true, cancelable: true }, originalEvent, m);\n }\n}\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\nimport { Matrix2D } from '@pacem/pacem-foundation';\nimport { DrawableElement } from './drawable-element';\n//namespace Pacem.Components.Drawing {\nconst DEG2RAD = Math.PI / 180.0;\n/**\n * Base class for every drawable that participates in the 2D transform pipeline (rotation, scale,\n * translation) and exposes an `opacity`. Computes and caches the corresponding `transformMatrix`.\n */\nexport class UiElement extends DrawableElement {\n #transformMatrix = Matrix2D.identity;\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._updateTransformMatrix();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'rotate':\n case 'scaleX':\n case 'scaleY':\n case 'translateX':\n case 'translateY':\n this._updateTransformMatrix();\n // flow down\n case 'opacity':\n this.stage?.draw(this);\n break;\n }\n }\n }\n _updateTransformMatrix() {\n let rotation = DEG2RAD * (this.rotate ?? 0), cos = Math.cos(rotation), sin = Math.sin(rotation), a = (this.scaleX ?? 1) * cos, b = -sin, c = sin, d = (this.scaleY ?? 1) * cos, e = this.translateX ?? 0, f = this.translateY ?? 0;\n this.#transformMatrix = { a, b, c, d, e, f };\n }\n /** @internal */\n get transformMatrix() {\n const m = this.#transformMatrix;\n return { a: m.a, b: m.b, c: m.c, d: m.d, e: m.e, f: m.f };\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"rotate\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"scaleX\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"scaleY\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"translateX\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"translateY\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"opacity\", void 0);\n/**\n * Base class for drawables that carry stroke/fill presentation state (color, line width, dash pattern,\n * line join/cap), on top of the transform/opacity inherited from `UiElement`.\n */\nexport class PresentationElement extends UiElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'stroke':\n case 'lineWidth':\n case 'lineJoin':\n case 'lineCap':\n case 'dashArray':\n case 'fill':\n if (!Utils.isNull(this.stage)) {\n this.stage.draw(this);\n }\n break;\n }\n }\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PresentationElement.prototype, \"stroke\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PresentationElement.prototype, \"fill\", void 0);\n__decorate([\n Watch({\n emit: false, converter: {\n convert: (attr) => attr?.split(',').map(i => parseInt(i)).filter(i => !Number.isNaN(i)),\n convertBack: (prop) => prop?.join(',')\n }\n })\n], PresentationElement.prototype, \"dashArray\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PresentationElement.prototype, \"lineWidth\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PresentationElement.prototype, \"lineJoin\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PresentationElement.prototype, \"lineCap\", void 0);\n/**\n * Base class for drawables whose visual is an SVG path (`pathData`) computed out of their own geometry\n * properties (e.g. center/radius, points, corners). Subclasses implement `getShapeGeometry` and this\n * class takes care of recomputing `data`/`vertices`/`boundingRect` and requesting a redraw.\n */\nexport class ShapeElement extends PresentationElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'data':\n this.stage?.draw(this);\n break;\n }\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.recomputeShape();\n }\n /** Recomputes `data`, `vertices` and `boundingRect` from `getShapeGeometry()`. */\n recomputeShape() {\n const { pathData, vertices, boundingRect } = this.getShapeGeometry();\n this.#vertices = vertices;\n this.#boundingRect = boundingRect;\n this.data = pathData;\n }\n /** @readonly Gets the SVG path data backing the shape. */\n get pathData() {\n return this.data;\n }\n #boundingRect;\n /** @readonly Gets the bounding rectangle of the shape. */\n get boundingRect() {\n return this.#boundingRect;\n }\n #vertices;\n /** @readonly Gets the vertices making up the shape. */\n get vertices() {\n return this.#vertices;\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], ShapeElement.prototype, \"data\", void 0);\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, P, Utils } from '@pacem/pacem-core';\nimport { PresentationElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { DrawableElement } from './drawable-element';\n//namespace Pacem.Components.Drawing {\n/** `<pacem-2d-group>`: a container that groups child drawables, applying its own transform/presentation state to all of them. */\nlet PacemGroupElement = class PacemGroupElement extends PresentationElement {\n validate(item) {\n return item instanceof DrawableElement && item.parent === this;\n }\n #children = [];\n /** @readonly Gets the child drawables currently in the group. */\n get childDrawables() {\n return this.#children;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'items':\n case 'datasource':\n this.#children = (val || []);\n const scene = this.stage;\n if (!Utils.isNull(scene)) {\n scene.draw(this, true);\n }\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false })\n], PacemGroupElement.prototype, \"datasource\", void 0);\nPacemGroupElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-group' })\n], PacemGroupElement);\nexport { PacemGroupElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemEllipseElement_1, PacemCircleElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { Rect } from '@pacem/pacem-foundation';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\nfunction full(c, rx, ry) {\n const d = 2 * rx, cx = c.x, cy = c.y;\n return {\n pathData: `M ${cx} ${cy} m ${-rx},0 a ${rx},${ry} 0 1,1 ${d},0 a ${rx},${ry} 0 1,1 ${-d},0`,\n vertices: [],\n boundingRect: { x: cx - rx, y: cy - ry, width: 2 * rx, height: 2 * ry }\n };\n}\nfunction sect(c, rx, ry, start, end) {\n const degToRad = Math.PI / 180;\n const s = degToRad * start, e = degToRad * end;\n //\n const polar = (theta) => rx * ry / Math.sqrt(Math.pow(Math.cos(theta) * ry, 2) + Math.pow(Math.sin(theta) * rx, 2));\n const rhoStart = polar(s), rhoEnd = polar(e);\n const cartesian = (rho, theta) => {\n return { x: rho * Math.cos(theta), y: rho * Math.sin(theta) };\n };\n const cartStart = cartesian(rhoStart, s), cartEnd = cartesian(rhoEnd, e);\n const p0 = { x: c.x + cartStart.x, y: c.y + cartStart.y }, p1 = { x: c.x + cartEnd.x, y: c.y + cartEnd.y };\n let boundingRect = Rect.expand(c, p0, p1);\n if (end < start)\n end += 360;\n if (start <= 0 && end > 0 || end >= 360) {\n boundingRect = Rect.expand(boundingRect, { x: c.x + rx, y: c.y });\n }\n if (start <= 90 && end > 90 || end >= 450) {\n boundingRect = Rect.expand(boundingRect, { x: c.x, y: c.y + ry });\n }\n if (start <= 180 && end > 180 || end >= 540) {\n boundingRect = Rect.expand(boundingRect, { x: c.x - rx, y: c.y });\n }\n if (start <= 270 && end > 270 || end >= 630) {\n boundingRect = Rect.expand(boundingRect, { x: c.x, y: c.y - ry });\n }\n const flag = e - s > Math.PI ? '1' : '0';\n return {\n pathData: `M ${p0.x} ${p0.y} A ${rx},${ry} 0 ${flag},1 ${p1.x},${p1.y} L ${c.x},${c.y} Z`, vertices: [p0, p1], boundingRect\n };\n}\nfunction getShapeGeometry(c, rx, ry, start, end) {\n start ??= 0, end ??= 0;\n start %= 360;\n end %= 360;\n while (start < 0)\n start += 360;\n while (end < start)\n end += 360;\n const threesixty = (start - end).isCloseTo(0);\n return threesixty ? full(c, rx, ry) : sect(c, rx, ry, start, end);\n}\n/** `<pacem-2d-ellipse>`: renders a full ellipse, or a pie-slice sector when `start`/`end` are set. */\nlet PacemEllipseElement = PacemEllipseElement_1 = class PacemEllipseElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'center':\n case 'rx':\n case 'ry':\n case 'start':\n case 'end':\n this.recomputeShape();\n break;\n }\n }\n }\n /** Computes the SVG path data of the ellipse (or sector) out of its own `center`/`rx`/`ry`/`start`/`end`. */\n getPathData() {\n const a = this.rx, b = this.ry, c = this.center, s = this.start ?? 0, e = this.end ?? 0;\n if (!Utils.isNull(c) && !Utils.isNull(a) && !Utils.isNull(b)) {\n return PacemEllipseElement_1.getPathData(c, a, b, s, e);\n }\n return null;\n }\n getShapeGeometry() {\n const center = this.center ?? { x: 0, y: 0 };\n const a = this.rx ?? 0, b = this.ry ?? 0;\n return getShapeGeometry(center, a, b, this.start, this.end);\n }\n /**\n * Computes the SVG path data of an ellipse, or of a pie-slice sector when `start`/`end` don't describe a full turn.\n * @param c Center point.\n * @param rx Horizontal radius.\n * @param ry Vertical radius.\n * @param start Sector start angle, in degrees.\n * @param end Sector end angle, in degrees.\n */\n static getPathData(c = { x: NaN, y: NaN }, rx = NaN, ry = NaN, start, end) {\n const { pathData } = getShapeGeometry(c, rx, ry, start, end);\n return pathData;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemEllipseElement.prototype, \"center\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemEllipseElement.prototype, \"rx\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemEllipseElement.prototype, \"ry\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemEllipseElement.prototype, \"start\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemEllipseElement.prototype, \"end\", void 0);\nPacemEllipseElement = PacemEllipseElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-ellipse' })\n], PacemEllipseElement);\nexport { PacemEllipseElement };\n/** `<pacem-2d-circle>`: renders a full circle, or a pie-slice sector when `start`/`end` are set. */\nlet PacemCircleElement = PacemCircleElement_1 = class PacemCircleElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'center':\n case 'radius':\n case 'start':\n case 'end':\n this.recomputeShape();\n break;\n }\n }\n }\n /** Computes the SVG path data of the circle (or sector) out of its own `center`/`radius`/`start`/`end`. */\n getPathData() {\n const r = this.radius, c = this.center;\n if (!Utils.isNull(c) && !Utils.isNull(r)) {\n return PacemCircleElement_1.getPathData(c, r, this.start, this.end);\n }\n return null;\n }\n getShapeGeometry() {\n const center = this.center ?? { x: 0, y: 0 };\n const r = this.radius ?? 0;\n return getShapeGeometry(center, r, r, this.start, this.end);\n }\n /**\n * Computes the SVG path data of a circle, or of a pie-slice sector when `start`/`end` don't describe a full turn.\n * @param c Center point.\n * @param r Radius.\n * @param start Sector start angle, in degrees.\n * @param end Sector end angle, in degrees.\n */\n static getPathData(c = { x: NaN, y: NaN }, r = NaN, start, end) {\n return PacemEllipseElement.getPathData(c, r, r, start, end);\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemCircleElement.prototype, \"center\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCircleElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCircleElement.prototype, \"start\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCircleElement.prototype, \"end\", void 0);\nPacemCircleElement = PacemCircleElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-circle' })\n], PacemCircleElement);\nexport { PacemCircleElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemRectElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\n/*\n r=\"4\" // every corner has a rx equalt o ry equal to 8 units\n r=\"4,8 cut\" // every corner has a rx equal to 4px and a ry equal to 8px (cut corners)\n r=\"4,8 cut 5,6 3,20% round 50%,4\" // top-left corner has a rx equal to 4px and a ry equal to 8px (cut corner), top-right corner has a rx equal to 5px and a ry equal to 6px,\n // bottom-right corner has a rx equal to 3px and a ry equal to 20% the height,\n // bottom-left corner has a rx equal to 50% the width and a ry equal to 4px.\n\n */\nfunction parseCornerRadius(radius) {\n const rx = radius[2], ry = radius[4] ?? rx, type = radius[6] === 'cut' ? CornerType.Cut : CornerType.Rounded;\n return { rx: parseCornerRadiusComponent(rx), ry: parseCornerRadiusComponent(ry), type };\n}\nfunction parseCornerRadiusComponent(radius) {\n const val = parseFloat(radius);\n return { value: val, unit: radius.endsWith('%') ? 'pct' : 'u' };\n}\nfunction stringifyCornerRadiusComponent(radius) {\n return `${radius.value}${radius.unit === 'pct' ? '%' : ''}`;\n}\nconst CORNERS_PATTERN = /(([\\d\\.]+%?)(\\s*,?\\s*([\\d\\.]+%?))?(\\s+(cut|round))?)/g;\nfunction parseCornerRadii(radii) {\n let numbers;\n const acc = [];\n while (numbers = CORNERS_PATTERN.exec(radii)) {\n acc.push(numbers);\n }\n switch (acc.length) {\n case 1:\n const single = parseCornerRadius(acc[0]);\n return [single, single, single, single];\n case 4:\n const topLeft = parseCornerRadius(acc[0]);\n const topRight = parseCornerRadius(acc[1]);\n const bottomRight = parseCornerRadius(acc[2]);\n const bottomLeft = parseCornerRadius(acc[3]);\n return [topLeft, topRight, bottomRight, bottomLeft];\n default:\n return null;\n }\n}\nfunction stringifyCornerRadii(radii) {\n const topLeft = radii[0], topRight = radii[1], bottomRight = radii[2], bottomLeft = radii[3];\n const tlX = stringifyCornerRadiusComponent(topLeft.rx), tlY = stringifyCornerRadiusComponent(topLeft.ry);\n const trX = stringifyCornerRadiusComponent(topRight.rx), trY = stringifyCornerRadiusComponent(topRight.ry);\n const brX = stringifyCornerRadiusComponent(bottomRight.rx), brY = stringifyCornerRadiusComponent(bottomRight.ry);\n const blX = stringifyCornerRadiusComponent(bottomLeft.rx), blY = stringifyCornerRadiusComponent(bottomLeft.ry);\n return `${tlX},${tlY} ${trX},${trY} ${brX},${brY} ${blX},${blY}`;\n}\n/** How a `PacemRectElement` corner is rendered: smoothly `Rounded` or straight-line `Cut` (chamfered). */\nexport var CornerType;\n(function (CornerType) {\n CornerType[\"Rounded\"] = \"rounded\";\n CornerType[\"Cut\"] = \"cut\";\n})(CornerType || (CornerType = {}));\n/** `<pacem-2d-rect>`: renders a rectangle, optionally with independently rounded or cut corners. */\nlet PacemRectElement = PacemRectElement_1 = class PacemRectElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first && (name === 'x' || name === 'y' || name === 'w' || name === 'h' || name === 'r' || name === 'cornerType')) {\n this.recomputeShape();\n }\n }\n /** Computes the SVG path data of the rectangle out of its own `x`/`y`/`w`/`h`/`r`/`cornerType`. */\n getPathData() {\n const x = this.x, y = this.y, w = this.w, h = this.h;\n let r = this.r ?? { rx: { value: 0 }, ry: { value: 0 }, type: CornerType.Rounded };\n if (!Utils.isArray(r)) {\n r = [r, r, r, r];\n }\n // forgiving behavior\n r = r.map(i => { return typeof i === 'number' ? { rx: { value: i }, ry: { value: i }, type: this.cornerType } : i; });\n if (!Utils.isNull(x) && !Utils.isNull(y) && !Utils.isNull(w) && !Utils.isNull(h)) {\n return PacemRectElement_1.getPathData(x, y, w, h, r);\n }\n return null;\n }\n getShapeGeometry() {\n const x = this.x, y = this.y, x1 = x + this.w, y1 = y + this.h;\n return {\n pathData: this.getPathData(), vertices: [{ x, y }, { x: x1, y }, { x: x1, y: y1 }, { x, y: y1 }], boundingRect: { x, y, width: this.w, height: this.h }\n };\n }\n static getPathData(x = NaN, y = NaN, w = NaN, h = NaN, r = null) {\n if (!r) {\n return `M ${x} ${y} h ${w} v ${h} h ${-w} z`;\n }\n if (!Utils.isArray(r)) {\n r = [r, r, r, r];\n }\n const tl = r[0], tr = r[1], br = r[2], bl = r[3];\n const vx = (rx) => rx.unit === 'pct' ? rx.value * .01 * w : rx.value;\n const vy = (ry) => ry.unit === 'pct' ? ry.value * .01 * h : ry.value;\n const tlX = vx(tl.rx), tlY = vy(tl.ry);\n const trX = vx(tr.rx), trY = vy(tr.ry);\n const brX = vx(br.rx), brY = vy(br.ry);\n const blX = vx(bl.rx), blY = vy(bl.ry);\n let retval = `M ${x},${y + tlY}`;\n // top-left\n switch (tl.type) {\n case 'cut':\n retval += ` l ${tlX},${-tlY}`;\n break;\n default:\n retval += ` a ${tlX} ${tlY} 0 0 1 ${tlX} ${-tlY}`;\n break;\n }\n retval += ` h ${w - tlX - trX}`;\n // top-right\n switch (tr.type) {\n case 'cut':\n retval += ` l ${trX},${trY}`;\n break;\n default:\n retval += ` a ${trX} ${trY} 0 0 1 ${trX} ${trY}`;\n break;\n }\n retval += ` v ${h - trY - brY}`;\n // bottom-right\n switch (br.type) {\n case 'cut':\n retval += ` l ${-brX},${brY}`;\n break;\n default:\n retval += ` a ${brX} ${brY} 0 0 1 ${-brX} ${brY}`;\n break;\n }\n retval += ` h ${-(w - brX - blX)}`;\n // bottom-left\n switch (bl.type) {\n case 'cut':\n retval += ` l ${-blX},${-blY}`;\n break;\n default:\n retval += ` a ${blX} ${blY} 0 0 1 ${-blX} ${-blY}`;\n break;\n }\n return retval + ' z';\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemRectElement.prototype, \"x\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemRectElement.prototype, \"y\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemRectElement.prototype, \"w\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemRectElement.prototype, \"h\", void 0);\n__decorate([\n Watch({\n emit: false, converter: {\n convert: attr => parseCornerRadii(attr),\n convertBack: (radii) => stringifyCornerRadii(radii)\n }\n })\n], PacemRectElement.prototype, \"r\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemRectElement.prototype, \"cornerType\", void 0);\nPacemRectElement = PacemRectElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-rect' })\n], PacemRectElement);\nexport { PacemRectElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemLineElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { Shape } from './drawing';\n//namespace Pacem.Components.Drawing {\n/** `<pacem-2d-line>`: renders a straight segment between two points. */\nlet PacemLineElement = PacemLineElement_1 = class PacemLineElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'from':\n case 'to':\n this.recomputeShape();\n break;\n }\n }\n }\n getShapeGeometry() {\n const from = this.from, to = this.to;\n if (Utils.isNull(from) || Utils.isNull(to)) {\n return Shape.empty();\n }\n const x0 = from.x, y0 = from.y, x1 = to.x, y1 = to.y;\n const boundingRect = { x: Math.min(x0, x1), y: Math.min(y0, y1), width: Math.abs(x0 - x1), height: Math.abs(y0 - y1) };\n return { pathData: this.getPathData(), vertices: [from, to], boundingRect };\n }\n /** Computes the SVG path data of the line out of its own `from`/`to` points. */\n getPathData() {\n const from = this.from, to = this.to;\n if (!Utils.isNull(from) && !Utils.isNull(to)) {\n return PacemLineElement_1.getPathData(from, to);\n }\n return null;\n }\n /** Computes the SVG path data of a straight segment between `from` and `to`. */\n static getPathData(from = { x: NaN, y: NaN }, to = { x: NaN, y: NaN }) {\n const x0 = from.x, y0 = from.y, x1 = to.x, y1 = to.y;\n return `M ${x0} ${y0} L ${x1} ${y1}`;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemLineElement.prototype, \"from\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemLineElement.prototype, \"to\", void 0);\nPacemLineElement = PacemLineElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-line' })\n], PacemLineElement);\nexport { PacemLineElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P } from '@pacem/pacem-core';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\n/** `<pacem-2d-path>`: renders an arbitrary SVG path, provided verbatim through the `d` property. */\nlet PacemPathElement = class PacemPathElement extends ShapeElement {\n constructor() {\n super(...arguments);\n /** Returns the raw path data, i.e. `d`. */\n this.getPathData = () => this.d;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'd' && !first) {\n this.recomputeShape();\n }\n }\n getShapeGeometry() {\n return { pathData: this.getPathData(), /* TODO: parse d */ boundingRect: null, vertices: [] };\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemPathElement.prototype, \"d\", void 0);\nPacemPathElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-path' })\n], PacemPathElement);\nexport { PacemPathElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemPolygonElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { Shape } from './drawing';\n//namespace Pacem.Components.Drawing {\n/** `<pacem-2d-polygon>`: renders a regular polygon (or, with `starIndent` set, a star) centered on `center`. */\nlet PacemPolygonElement = PacemPolygonElement_1 = class PacemPolygonElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'radius':\n case 'starIndent':\n case 'sides':\n this.recomputeShape();\n break;\n }\n }\n }\n /** Computes the SVG path data of the polygon out of its own `center`, `radius`, `sides` and `starIndent`. */\n getPathData() {\n const sides = this.sides, radius = this.radius, center = this.center;\n if (!Utils.isNull(sides) && !Utils.isNull(radius)) {\n return PacemPolygonElement_1.getPathData(center, radius, sides, this.starIndent);\n }\n return null;\n }\n getShapeGeometry() {\n const c = this.center ?? { x: 0, y: 0 }, r = this.radius ?? 0, sides = this.sides ?? 3, si = this.starIndent;\n if (sides < 3) {\n return Shape.empty();\n }\n return PacemPolygonElement_1.getShapeGeometry(c, r, sides, si);\n }\n /**\n * Computes the geometry (path data, vertices, bounding rect) of a regular polygon or star.\n * @param center Center point.\n * @param radius Circumradius.\n * @param sides Number of sides (or points, for a star).\n * @param starIndent Star indentation factor (0 = regular polygon).\n */\n static getShapeGeometry(center, radius, sides, starIndent = .0) {\n const p0 = { x: center.x, y: center.y - radius };\n let retval = `M ${p0.x} ${(p0.y)}`;\n const vertices = [p0];\n const theta = 2 * Math.PI / sides, theta2 = .5 * theta, isStar = starIndent > 0, apothem = radius * Math.cos(theta2);\n for (let j = 1; j < sides; j++) {\n const angle = j * theta, x = center.x + Math.sin(angle) * radius, y = center.y - Math.cos(angle) * radius;\n if (isStar) {\n const innerRadius = apothem * (1.0 - starIndent);\n const angle2 = angle - theta2, x1 = center.x + Math.sin(angle2) * innerRadius, y1 = center.y - Math.cos(angle2) * innerRadius;\n retval += ` L ${x1} ${y1} L ${x} ${y}`;\n vertices.push({ x: x1, y: y1 });\n }\n else {\n retval += ` L ${x} ${y}`;\n }\n vertices.push({ x, y });\n }\n if (isStar) {\n const innerRadius = apothem * (1.0 - starIndent);\n const angle2 = 2 * Math.PI - theta2, x1 = center.x + Math.sin(angle2) * innerRadius, y1 = center.y - Math.cos(angle2) * innerRadius;\n retval += ` L ${x1} ${y1}`;\n vertices.push({ x: x1, y: y1 });\n }\n vertices.push(p0);\n const width = radius * 2;\n return {\n pathData: retval + ' Z', vertices, boundingRect: { x: p0.x - radius, y: p0.y, width, height: width }\n };\n }\n /** Computes the SVG path data of a regular polygon or star. See `getShapeGeometry` for the parameters. */\n static getPathData(center, radius, sides, starIndent = .0) {\n const { pathData } = PacemPolygonElement_1.getShapeGeometry(center, radius, sides, starIndent);\n return pathData;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPolygonElement.prototype, \"sides\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPolygonElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemPolygonElement.prototype, \"center\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPolygonElement.prototype, \"starIndent\", void 0);\nPacemPolygonElement = PacemPolygonElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-polygon' })\n], PacemPolygonElement);\nexport { PacemPolygonElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemPolylineElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { parseAsNumericalArray } from '@pacem/pacem-foundation';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { Shape } from './drawing';\n//namespace Pacem.Components.Drawing {\n/** Converts the `points` attribute either from a flat `x1,y1,x2,y2,...` numeric list or from JSON. */\nconst PointArrayOrJsonConverter = {\n convert: (attr) => {\n const arr = parseAsNumericalArray(attr);\n if (arr.length % 2 === 0) {\n const retval = [];\n for (let j = 0; j < arr.length; j += 2) {\n retval.push({ x: arr[j], y: arr[j + 1] });\n }\n return retval;\n }\n return JSON.parse(attr);\n },\n convertBack: (prop) => JSON.stringify(prop)\n};\n/** `<pacem-2d-polyline>`: renders a series of connected segments through `points`, optionally `closed` into a polygon. */\nlet PacemPolylineElement = PacemPolylineElement_1 = class PacemPolylineElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'points':\n case 'closed':\n this.recomputeShape();\n break;\n }\n }\n }\n /**\n * Computes the geometry (path data, vertices, bounding rect) of a polyline.\n * @param points Vertices, in order.\n * @param closed Whether the polyline is closed back onto its first point.\n */\n static getShapeGeometry(points, closed) {\n if (Utils.isNullOrEmpty(points)) {\n return Shape.empty();\n }\n let d = '';\n let xmin = Number.MAX_VALUE, ymin = Number.MAX_VALUE, xmax = Number.MIN_VALUE, ymax = Number.MIN_VALUE;\n for (let j = 0; j < points.length; j++) {\n const { x, y } = points[j];\n d += `${(j === 0 ? 'M' : 'L')} ${x} ${y} `;\n xmin = Math.min(xmin, x);\n xmax = Math.max(xmax, x);\n ymin = Math.min(ymin, y);\n ymax = Math.max(ymax, y);\n }\n const boundingRect = { x: xmin, y: ymin, width: xmax - xmin, height: ymax - ymin };\n if (closed) {\n d += 'Z';\n }\n return { pathData: d, vertices: points, boundingRect };\n }\n getShapeGeometry() {\n return PacemPolylineElement_1.getShapeGeometry(this.points, this.closed);\n }\n /** Computes the SVG path data of the polyline out of its own `points`/`closed`. */\n getPathData() {\n const { pathData } = this.getShapeGeometry();\n return pathData;\n }\n /** Computes the SVG path data of a polyline. See `getShapeGeometry` for the parameters. */\n static getPathData(points, closed) {\n const { pathData } = PacemPolylineElement_1.getShapeGeometry(points, closed);\n return pathData;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PointArrayOrJsonConverter })\n], PacemPolylineElement.prototype, \"points\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], PacemPolylineElement.prototype, \"closed\", void 0);\nPacemPolylineElement = PacemPolylineElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-polyline' })\n], PacemPolylineElement);\nexport { PacemPolylineElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P } from '@pacem/pacem-core';\nimport { UiElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\n/** `<pacem-2d-image>`: renders a raster image at a given position and size within the stage. */\nlet PacemImageElement = class PacemImageElement extends UiElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'src':\n case 'x':\n case 'y':\n case 'width':\n case 'height':\n this.stage?.draw(this);\n break;\n }\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemImageElement.prototype, \"src\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemImageElement.prototype, \"x\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemImageElement.prototype, \"y\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemImageElement.prototype, \"width\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemImageElement.prototype, \"height\", void 0);\nPacemImageElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-image' })\n], PacemImageElement);\nexport { PacemImageElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { UiElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\n/** `<pacem-2d-text>`: renders a text label anchored at a given point. */\nlet PacemTextElement = class PacemTextElement extends UiElement {\n propertyChangedCallback(name, old, val, first) {\n if (!first) {\n switch (name) {\n case 'text':\n case 'color':\n case 'fontFamily':\n case 'fontSize':\n case 'fontWeight':\n case 'fontStyle':\n case 'anchor':\n if (!Utils.isNull(this.stage)) {\n this.stage.draw(this);\n }\n break;\n }\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"text\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"color\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"fontFamily\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemTextElement.prototype, \"fontSize\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"fontWeight\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"fontStyle\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemTextElement.prototype, \"anchor\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"textAnchor\", void 0);\nPacemTextElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-text' })\n], PacemTextElement);\nexport { PacemTextElement };\n", "import { Utils, UI } from '@pacem/pacem-core';\nimport { Rect } from '@pacem/pacem-foundation';\nimport { StageEvent, DrawableEvent, DragEvent } from '../drawing';\n//namespace Pacem.Components.Drawing {\n/** Shared static helpers used by the 2D rendering adapters (SVG/Canvas) to dispatch UI events and validate viewboxes. */\nexport class AdapterUtils {\n /**\n * Dispatches a `StageEvent` (prefixed with `'stage'`) on the given stage, when it is an `EventTarget`.\n * @param stage The target stage.\n * @param type Short event type name.\n * @param evt The original event.\n */\n static stageDispatch(stage, type, evt) {\n if (stage instanceof EventTarget) {\n stage.dispatchEvent(new StageEvent('stage' + type, stage, evt, stage.transformMatrix));\n }\n }\n /** Type guard telling whether `viewbox` is a well-formed, finite `Rect` usable as a stage viewbox. */\n static isValidViewbox(viewbox) {\n return !Utils.isNullOrEmpty(viewbox) && Rect.isRect(viewbox) && Number.isFinite(viewbox.x) // isFinite includes NaN check\n && Number.isFinite(viewbox.y) && Number.isFinite(viewbox.width) && Number.isFinite(viewbox.height);\n }\n static itemDispatch(target, type, offset) {\n if (Utils.isNull(target?.stage)) {\n return false;\n }\n var dragArgs, originalEvent, evtType;\n if (offset instanceof Event) {\n originalEvent = offset;\n }\n else {\n dragArgs = { item: target, offset: offset };\n }\n if (typeof type === 'string') {\n evtType = type;\n }\n else {\n evtType = type.type;\n originalEvent = type.originalEvent;\n }\n const m = target.stage.transformMatrix;\n const evt = () => offset instanceof Event\n ? new DrawableEvent(evtType, target, originalEvent, m)\n : new DragEvent(evtType, { detail: dragArgs, cancelable: evtType === UI.DragDropEventType.Init || evtType === UI.DragDropEventType.Drag }, originalEvent, m);\n const itemevt = offset instanceof Event\n ? new DrawableEvent('item' + evtType, target, originalEvent, m)\n : new DragEvent('item' + evtType, { detail: dragArgs, cancelable: evtType === UI.DragDropEventType.Init || evtType === UI.DragDropEventType.Drag }, originalEvent, m);\n var prevent = false;\n if (target instanceof EventTarget) {\n const evnt = evt();\n target.dispatchEvent(evnt);\n prevent = evnt.defaultPrevented;\n }\n target.stage.dispatchEvent(itemevt);\n // was the event (in one of its forms) rejected?\n return prevent || itemevt.defaultPrevented;\n }\n}\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, CustomElementUtils, Utils, Logging, CustomEventUtils, UI, avoidHandler } from '@pacem/pacem-core';\nimport { Matrix2D, Rect } from '@pacem/pacem-foundation';\nimport { UiElement, ShapeElement } from '../types';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { Pacem2DAdapterElement } from '../adapter';\nimport { getStageOptions } from '../stage';\nimport { AdapterUtils } from './utils';\nimport { PacemGroupElement } from '../group';\nimport { PacemImageElement } from '../image';\nimport { PacemTextElement } from '../text';\nimport { PresentationState, isDrawable, isUiObject, isPresentationObject, isShape, isText, isImage, isGroup, isLinearGradient, isRadialGradient, DrawableEvent } from '../drawing';\n//namespace Pacem.Components.Drawing {\nconst CANVAS_SCENE_VAR = 'pacem:2d-canvas-scene';\nconst PARENT_MATRIX_VAR = 'pacem:2d-parent-matrix';\nconst WORLD_MATRIX_VAR = 'pacem:2d-world-matrix';\nconst SETVAR = CustomElementUtils.setAttachedPropertyValue, GETVAR = CustomElementUtils.getAttachedPropertyValue;\nfunction isNone(fillOrStroke) {\n return fillOrStroke === 'none' || Utils.isNullOrEmpty(fillOrStroke);\n}\nfunction fallback(v, f) {\n return Utils.isNull(v) ? f : v;\n}\n/**\n * `<pacem-2d-canvas-adapter>`: renders a `Pacem2DElement` stage onto an `HTMLCanvasElement`, redrawing the\n * whole scene graph on every frame and performing manual (path-based) pointer hit-testing.\n *\n * @deprecated Implementation postponed. Focus on SVG adapter.\n */\nlet PacemCanvasAdapterElement = class PacemCanvasAdapterElement extends Pacem2DAdapterElement {\n constructor() {\n super(...arguments);\n this._pointer = {\n page: { x: Number.NaN, y: Number.NaN }, screen: { x: Number.NaN, y: Number.NaN }, client: { x: Number.NaN, y: Number.NaN }\n };\n this._dragInitHandler = (evt) => {\n const hitTarget = this._hitTarget;\n if (Utils.isNull(hitTarget) || !isUiObject(hitTarget) || !hitTarget.draggable) {\n evt.preventDefault();\n return;\n }\n const args = evt.detail, drawable = hitTarget, initialMatrix = hitTarget.transformMatrix ?? Matrix2D.identity, parentMatrix = GETVAR(hitTarget, PARENT_MATRIX_VAR, Matrix2D.identity);\n args.data = {\n item: drawable,\n initialTransformMatrix: initialMatrix,\n parentMatrix\n };\n const reject = AdapterUtils.itemDispatch(drawable, evt, { x: 0, y: 0 });\n if (reject) {\n // reject dragging\n evt.preventDefault();\n }\n };\n this._draggingHandler = (evt) => {\n avoidHandler(evt);\n this._dragging = true;\n const args = evt.detail;\n const data = args.data;\n const screenOffset = { x: args.currentPosition.x - args.origin.x, y: args.currentPosition.y - args.origin.y };\n const offset = {\n x: screenOffset.x * data.parentMatrix.a + data.initialTransformMatrix.e,\n y: screenOffset.y * data.parentMatrix.d + data.initialTransformMatrix.f\n };\n //console.log(`current pos: ${args.currentPosition.x},${args.currentPosition.y}`);\n //console.log(`origin pos: ${args.origin.x},${args.origin.y}`);\n //console.log(`screen offset: ${screenOffset.x},${screenOffset.y}`);\n //console.log(`offset: ${offset.x},${offset.y}`);\n //console.log(data.item.transformMatrix);\n //console.log(GETVAR(data.item, PARENT_MATRIX_VAR));\n //console.log(GETVAR(data.item, WORLD_MATRIX_VAR));\n //console.log(data.initialTransformMatrix);\n const stageTransformMatrix = data.item.stage.transformMatrix;\n const rejected = AdapterUtils.itemDispatch(data.item, evt, { x: screenOffset.x * stageTransformMatrix.a + stageTransformMatrix.e, y: screenOffset.y * stageTransformMatrix.d + stageTransformMatrix.f });\n if (!rejected) {\n if (data.item instanceof UiElement) {\n data.item.translateX = offset.x;\n data.item.translateY = offset.y;\n }\n else {\n const init = data.initialTransformMatrix, actual = { a: init.a, b: init.b, c: init.c, d: init.d, e: offset.x, f: offset.y };\n Utils.extend(data.item, { transformMatrix: actual });\n }\n // console.log(data.item.transformMatrix);\n }\n };\n this._dragEndHandler = (evt) => {\n this._dragging = false;\n const args = evt.detail, data = args.data, transform = data.item.transformMatrix;\n AdapterUtils.itemDispatch(data.item, evt, { x: transform.e, y: transform.f });\n };\n // #endregion\n this._mouseleaveHandler = (evt) => {\n if (this._dragging) {\n return;\n }\n const hitTarget = this._hitTarget;\n if (Utils.isNull(hitTarget)) {\n return;\n }\n this._scopeEvent = evt;\n const nap = { x: Number.NaN, y: Number.NaN };\n this._pointer = { page: nap, screen: nap, client: nap };\n const canvas = evt.srcElement;\n const stage = GETVAR(canvas, CANVAS_SCENE_VAR);\n this._requestDraw(stage);\n };\n this._mousemoveHandler = (evt) => {\n this._scopeEvent = evt;\n this._pointer = CustomEventUtils.getEventCoordinates(evt);\n const canvas = evt.srcElement;\n const stage = GETVAR(canvas, CANVAS_SCENE_VAR);\n this._requestDraw(stage);\n if (!this._dragging) {\n if (!Utils.isNull(this._hitTarget)) {\n AdapterUtils.stageDispatch(stage, 'move', evt);\n }\n }\n };\n this._mouseDownUpHandler = (evt) => {\n this._scopeEvent = evt;\n this._pointer = CustomEventUtils.getEventCoordinates(evt);\n const canvas = evt.target;\n if (canvas instanceof HTMLCanvasElement) {\n const stage = GETVAR(canvas, CANVAS_SCENE_VAR), hitTarget = this._hitTarget;\n const type = evt.type.replace(/^(mouse|touch)/, ''), fineType = type === 'end' ? 'click' : type;\n const opts = getStageOptions(stage);\n if (CustomEventUtils.matchModifiers(evt, opts.clickModifiers)) {\n if (!Utils.isNull(hitTarget) && hitTarget.stage === stage) {\n AdapterUtils.itemDispatch(hitTarget, fineType, evt);\n }\n else {\n AdapterUtils.stageDispatch(stage, fineType, evt);\n }\n }\n }\n };\n this._scenes = new WeakMap();\n this._handles = new WeakMap();\n }\n snapshot(stage, backgroundColor, type, quality) {\n const scenes = this._scenes;\n if (scenes.has(stage)) {\n const ctx2d = scenes.get(stage).context, srcCanvas = ctx2d.canvas;\n return this.snapshotElement(srcCanvas, backgroundColor, type, quality);\n }\n else {\n return Promise.resolve(null);\n }\n }\n getCanvas(stage) {\n const scenes = this._scenes;\n if (scenes.has(stage)) {\n const ctx2d = scenes.get(stage).context;\n return ctx2d.canvas;\n }\n else {\n return null;\n }\n }\n _getScreenInverseMatrix(m, offset) {\n return Matrix2D.invert({ a: m.a, b: m.b, c: m.c, d: m.d, e: m.e + offset.x, f: m.f + offset.y });\n }\n getTransformMatrix(scene) {\n const scenes = this._scenes;\n if (scenes.has(scene)) {\n return scenes.get(scene).screenInverseMatrix;\n }\n return Matrix2D.identity;\n }\n #dragger;\n viewActivatedCallback() {\n super.viewActivatedCallback();\n const dragDrop = this.#dragger = document.createElement(P + '-drag-drop');\n dragDrop.mode = UI.DragDataMode.Copy;\n dragDrop.dropBehavior = UI.DropBehavior.None;\n dragDrop.spillBehavior = UI.DropTargetMissedBehavior.None;\n const floater = document.createElement('div');\n floater.hidden = true;\n dragDrop.floater = floater;\n // append\n const shell = CustomElementUtils.findAncestorShell(this);\n shell.appendChild(dragDrop);\n dragDrop.addEventListener(UI.DragDropEventType.Init, this._dragInitHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.Drag, this._draggingHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.End, this._dragEndHandler, false);\n }\n disconnectedCallback() {\n const dragger = this.#dragger;\n if (!Utils.isNull(dragger)) {\n dragger.removeEventListener(UI.DragDropEventType.Init, this._dragInitHandler, false);\n dragger.removeEventListener(UI.DragDropEventType.Drag, this._draggingHandler, false);\n dragger.removeEventListener(UI.DragDropEventType.End, this._dragEndHandler, false);\n dragger.remove();\n }\n super.disconnectedCallback();\n }\n invalidateSize(scene, size) {\n const scenes = this._scenes;\n if (!Utils.isNull(scene) && !Utils.isNullOrEmpty(size)) {\n if (scenes.has(scene)) {\n const tuple = scenes.get(scene), ctx = tuple.context;\n ctx.canvas.width = size.width;\n ctx.canvas.height = size.height;\n const offset = tuple.offset = Utils.offsetRect(ctx.canvas);\n // transform matrix\n const stage = { x: 0, y: 0, width: size.width, height: size.height }, aspectRatio = scene.aspectRatio, viewbox = scene.viewbox;\n if (AdapterUtils.isValidViewbox(viewbox)) {\n // defaults to the equivalent of SVG's xMidYMid meet\n let mode = 'contain', align = 'center', valign = 'middle';\n if (typeof aspectRatio === 'object') {\n mode = aspectRatio.slice ? 'cover' : 'contain';\n switch (aspectRatio.x) {\n case 'min':\n align = 'left';\n break;\n case 'max':\n align = 'right';\n break;\n }\n switch (aspectRatio.y) {\n case 'min':\n valign = 'top';\n break;\n case 'max':\n valign = 'bottom';\n break;\n }\n }\n ;\n // mimic svg viewbox\n const mscale = Rect.findTransform({ x: 0, y: 0, width: viewbox.width, height: viewbox.height }, stage, mode, align, valign);\n const m = Matrix2D.translate(mscale, { x: -mscale.a * viewbox.x, y: -mscale.a * viewbox.y });\n tuple.transformMatrix = m;\n tuple.screenInverseMatrix = this._getScreenInverseMatrix(m, offset);\n }\n else {\n tuple.transformMatrix = Matrix2D.identity;\n }\n }\n }\n this._requestDraw(scene);\n }\n getHitTarget(stage) {\n const target = this._hitTarget;\n if (!Utils.isNull(target) && target.stage === stage) {\n return target;\n }\n return null;\n }\n initialize(scene) {\n if (Utils.isNull(scene)) {\n throw 'Provided scene is null or undefined.';\n }\n const scenes = this._scenes;\n const dragger = this.#dragger;\n // already in the store?\n if (scenes.has(scene)) {\n const canvas = scenes.get(scene).context.canvas;\n if (!Utils.isNull(dragger)) {\n dragger.register(canvas);\n }\n return canvas;\n }\n const stage = scene.stage;\n // empty stage DOM\n stage.innerHTML = '';\n const canvas = document.createElement('canvas');\n canvas.setAttribute('part', 'stage');\n SETVAR(canvas, CANVAS_SCENE_VAR, scene);\n const context = canvas.getContext('2d');\n canvas.addEventListener('mousemove', this._mousemoveHandler, false);\n canvas.addEventListener('mouseleave', this._mouseleaveHandler, false);\n canvas.addEventListener('touchstart', this._mouseDownUpHandler, { passive: true });\n canvas.addEventListener('touchmove', this._mouseDownUpHandler, { passive: true });\n canvas.addEventListener('touchend', this._mouseDownUpHandler, { passive: true });\n canvas.addEventListener('click', this._mouseDownUpHandler, false);\n canvas.addEventListener('mousedown', this._mouseDownUpHandler, false);\n canvas.addEventListener('mouseup', this._mouseDownUpHandler, false);\n stage.appendChild(canvas);\n scenes.set(scene, { context, transformMatrix: Matrix2D.identity, offset: Utils.offsetRect(canvas), screenInverseMatrix: Matrix2D.identity });\n if (!Utils.isNull(dragger)) {\n dragger.register(canvas);\n }\n return canvas;\n }\n dispose(scene) {\n const scenes = this._scenes;\n if (scenes.has(scene)) {\n var tuple = scenes.get(scene), context = tuple.context, canvas = context.canvas;\n const dragger = this.#dragger;\n if (!Utils.isNull(dragger)) {\n dragger.unregister(canvas);\n }\n canvas.removeEventListener('click', this._mouseDownUpHandler, false);\n canvas.removeEventListener('touchend', this._mouseDownUpHandler, false);\n canvas.removeEventListener('mousedown', this._mouseDownUpHandler, false);\n canvas.removeEventListener('mouseup', this._mouseDownUpHandler, false);\n // canvas.removeEventListener('touchmove', this._mouseDownUpHandler);\n canvas.removeEventListener('touchstart', this._mouseDownUpHandler);\n canvas.removeEventListener('mouseleave', this._mouseleaveHandler, false);\n canvas.removeEventListener('mousemove', this._mousemoveHandler, false);\n // remove\n canvas.remove();\n scenes.delete(scene);\n }\n }\n _requestDraw(scene) {\n const handles = this._handles;\n if (handles.has(scene)) {\n cancelAnimationFrame(handles.get(scene));\n }\n const throttle = () => {\n this.draw(scene);\n return requestAnimationFrame(() => { });\n };\n handles.set(scene, throttle());\n }\n #canvasCssStyle;\n draw(scene) {\n const scenes = this._scenes, handles = this._handles;\n if (!Utils.isNull(scene)) {\n if (scene.adapter !== this) {\n // not a pertinent stage anymore\n if (scenes.has(scene)) {\n scenes.delete(scene);\n handles.get(scene);\n }\n return;\n }\n if (!scenes.has(scene)) {\n // forgiving behavior (call initialize() if it's the case)\n this.initialize(scene);\n return;\n }\n if (handles.has(scene)) {\n // already in the drawing loop, reset\n cancelAnimationFrame(handles.get(scene));\n }\n const formerHitTarget = this._hitTarget;\n const items = scene.datasource || [];\n // reset hit target\n this._hitTarget = null;\n // clear stage\n const tuple = scenes.get(scene), context = tuple.context, canvas = context.canvas;\n this.#canvasCssStyle = getComputedStyle(canvas);\n context.resetTransform();\n context.clearRect(0, 0, canvas.width, canvas.height);\n // viewbox\n const m = tuple.transformMatrix;\n context.setTransform(m);\n // hit test\n const pointer = this._pointer, offset = tuple.offset, point = Number.isNaN(pointer.page.x) || Number.isNaN(pointer.page.y) ? null : { x: pointer.page.x - offset.x, y: pointer.page.y - offset.y };\n // draw recursively\n for (let drawable of items) {\n this._draw(scene, context, drawable, { transformMatrix: m }, point);\n }\n // check hit target\n const currentHitTarget = this._hitTarget;\n if (currentHitTarget != formerHitTarget) {\n if (!Utils.isNull(formerHitTarget)) {\n if (formerHitTarget instanceof Element) {\n formerHitTarget.dispatchEvent(new DrawableEvent('out', formerHitTarget, this._scopeEvent, m));\n }\n scene.dispatchEvent(new DrawableEvent('itemout', formerHitTarget, this._scopeEvent, m));\n }\n if (!Utils.isNull(currentHitTarget)) {\n if (currentHitTarget instanceof Element) {\n currentHitTarget.dispatchEvent(new DrawableEvent('over', currentHitTarget, this._scopeEvent, m));\n }\n scene.dispatchEvent(new DrawableEvent('itemover', currentHitTarget, this._scopeEvent, m));\n }\n }\n // do not loop\n // this._requestDraw(scene);\n }\n }\n _draw(scene, ctx, item, state, point) {\n item.stage ??= scene;\n if (isDrawable(item)) {\n if (item.hide) {\n return;\n }\n }\n // store parent matrix value for dragging purposes\n if (isUiObject(item) && item.draggable && !item.hide && !item.inert) {\n SETVAR(item, PARENT_MATRIX_VAR, ctx.getTransform().inverse());\n }\n let t;\n if (isUiObject(item)) {\n t = item.transformMatrix;\n if (!Utils.isNull(t) && !Matrix2D.isIdentity(t)) {\n ctx.transform(t.a, t.b, t.c, t.d, t.e, t.f);\n }\n }\n let contextPresentationState = state;\n if (isPresentationObject(item)) {\n //const stateWithWorldTransformMatrix = Utils.extend({}, state, { transformMatrix: ctx.getTransform() });\n contextPresentationState = PresentationState.combine(item, state, ctx.getTransform());\n // set presentation state\n this._setPresentationState(ctx, contextPresentationState);\n }\n if (isShape(item) || item instanceof ShapeElement) {\n this._drawShape(ctx, item, point);\n }\n else if (isText(item) || item instanceof PacemTextElement) {\n this._drawText(ctx, item, point);\n }\n else if (isImage(item) || item instanceof PacemImageElement) {\n this._drawImage(ctx, item, point);\n }\n else if (isGroup(item) || item instanceof PacemGroupElement) {\n for (let child of item.childDrawables || []) {\n this._draw(scene, ctx, child, contextPresentationState, point);\n }\n }\n // store global matrix value for debugging purposes\n if (isUiObject(item) && item.draggable && !item.hide && !item.inert) {\n SETVAR(item, WORLD_MATRIX_VAR, ctx.getTransform().inverse());\n }\n // reset presentation state\n this._setPresentationState(ctx, state);\n }\n _setPresentationState(ctx, item) {\n ctx.setTransform(item.transformMatrix);\n if (!Utils.isNullOrEmpty(item.stroke) && !isNone(item.stroke)) {\n ctx.strokeStyle = item.stroke;\n }\n else {\n ctx.strokeStyle = 'transparent';\n }\n if (!Utils.isNullOrEmpty(item.lineWidth)) {\n ctx.lineWidth = item.lineWidth;\n }\n else {\n ctx.lineWidth = 0;\n }\n if (!Utils.isNullOrEmpty(item.dashArray)) {\n ctx.setLineDash(item.dashArray);\n }\n else {\n ctx.setLineDash([]);\n }\n if (!Utils.isNullOrEmpty(item.lineCap)) {\n ctx.lineCap = item.lineCap;\n }\n else {\n ctx.lineCap = 'butt';\n }\n if (!Utils.isNullOrEmpty(item.lineJoin)) {\n ctx.lineJoin = item.lineJoin;\n }\n else {\n ctx.lineJoin = 'miter';\n }\n if (typeof item.fill === 'object' && !Utils.isNullOrEmpty(item.fill)) {\n const { stops } = item.fill;\n let gradient;\n if (isLinearGradient(item.fill)) {\n // linear gradient\n const { start, end } = item.fill;\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n }\n else if (isRadialGradient(item.fill)) {\n // radial gradient\n const { center, radius } = item.fill;\n gradient = ctx.createRadialGradient(center.x, center.y, radius, center.x, center.y, radius);\n }\n else {\n throw new Error('Unmanaged gradient type.');\n }\n for (let stop of stops) {\n gradient.addColorStop(stop.offset, stop.color);\n }\n ctx.fillStyle = gradient;\n }\n else if (!Utils.isNullOrEmpty(item.fill) && typeof item.fill === 'string' && !isNone(item.fill)) {\n ctx.fillStyle = item.fill;\n }\n else {\n ctx.fillStyle = 'transparent';\n }\n if (!Utils.isNullOrEmpty(item.opacity)) {\n ctx.globalAlpha = item.opacity;\n }\n else {\n ctx.globalAlpha = 1.0;\n }\n }\n _drawImage(ctx, item, point) {\n const CANVAS_IMAGESOURCE_VAR = 'pacem:2d-canvas-imagesrc';\n let img = GETVAR(item, CANVAS_IMAGESOURCE_VAR);\n const imgLoadHandler = () => {\n let dw = img.naturalWidth, dh = img.naturalHeight, w = item.width, h = item.height;\n if (w > 0 && h > 0) {\n }\n else if (w > 0) {\n h = dh * w / dw;\n }\n else if (h > 0) {\n w = dw * h / dh;\n }\n else {\n w = dw;\n h = dh;\n }\n if (!this._dragging\n && !item.inert /* is hit-test visible? */\n && !Utils.isNull(point)) {\n const path2D = new Path2D(`M ${item.x} ${item.y} h ${w} v ${h} H ${item.x} Z`);\n if (ctx.isPointInPath(path2D, point.x, point.y)) {\n // overwrite current hit-target (last one wins)\n this._hitTarget = item;\n }\n }\n ctx.globalAlpha = fallback(item.opacity, 1);\n ctx.drawImage(img, item.x, item.y, w, h);\n };\n if (Utils.isNull(img)) {\n img = new Image();\n img.src = item.src;\n img.onload = () => {\n SETVAR(item, CANVAS_IMAGESOURCE_VAR, img);\n imgLoadHandler();\n };\n }\n else {\n imgLoadHandler();\n }\n }\n _drawText(ctx, item, point) {\n const defaults = this.DefaultShapeValues;\n const color = ctx.fillStyle = fallback(item.color, defaults.stroke);\n const m = ctx.getTransform(), fontSize = item.fontSize > 0 ? `${item.fontSize}px` : this.#canvasCssStyle.fontSize, fontStyle = item.fontStyle || this.#canvasCssStyle.fontStyle, fontWeight = item.fontWeight || this.#canvasCssStyle.fontWeight;\n ctx.font = `${fontStyle} ${fontWeight} ${fontSize} ${(item.fontFamily ?? this.#canvasCssStyle.fontFamily)}`;\n ctx.textAlign = item.textAnchor === 'middle' ? 'center' : item.textAnchor;\n ctx.fillText(item.text, item.anchor.x, item.anchor.y);\n ctx.globalAlpha = fallback(item.opacity, 1);\n const hasColor = !isNone(color);\n if (!this._dragging\n && !item.inert /* is hit-test visible? */\n && !Utils.isNull(point)) {\n const bbox = ctx.measureText(item.text);\n const width = bbox.width, height = bbox.actualBoundingBoxAscent + bbox.actualBoundingBoxDescent, x = item.anchor.x - bbox.actualBoundingBoxLeft, y = item.anchor.y - bbox.actualBoundingBoxAscent;\n const path2D = new Path2D(`M ${x} ${y} h ${width} v ${height} H ${x} z`);\n if (hasColor && ctx.isPointInPath(path2D, point.x, point.y)) {\n // overwrite current hit-target (last one wins)\n this._hitTarget = item;\n }\n }\n }\n _drawShape(ctx, item, point) {\n if (Utils.isNullOrEmpty(item?.pathData)) {\n return;\n }\n ctx.beginPath();\n // Path2D\n const hasFill = typeof ctx.fillStyle !== 'string' || !isNone(ctx.fillStyle), hasStroke = typeof ctx.strokeStyle !== 'string' || !isNone(ctx.strokeStyle);\n var path2D = new Path2D(item.pathData);\n if (!this._dragging\n && !item.inert /* is hit-test visible? */\n && !Utils.isNull(point)) {\n if ((hasFill && ctx.isPointInPath(path2D, point.x, point.y))\n || (hasStroke && ctx.isPointInStroke(path2D, point.x, point.y))) {\n // overwrite current hit-target (last one wins)\n this._hitTarget = item;\n }\n }\n if (hasStroke) {\n ctx.stroke(path2D);\n }\n if (hasFill) {\n ctx.fill(path2D);\n }\n const hasEnoughVertices = !Utils.isNullOrEmpty(item.vertices) && item.vertices.length > 1, hasMarkerEnd = !Utils.isNull(item.markerEnd), hasMarkerStart = !Utils.isNull(item.markerStart), hasMarkerMid = !Utils.isNull(item.markerMid);\n if (hasMarkerEnd || hasMarkerMid || hasMarkerStart) {\n if (!hasEnoughVertices) {\n this.log(Logging.LogLevel.Warn, \"Not enough vertices were explicited in order to make markers renderable.\");\n }\n }\n // WebGL: we can render markers only if vertices are explicit\n if (hasEnoughVertices) {\n const matrix = ctx.getTransform();\n if (hasMarkerStart) {\n const marker = item.markerEnd, from = item.vertices[1], to = item.vertices[0];\n const orientation = Math.atan2(to.y - from.y, to.x - from.x);\n this._drawMarker(ctx, marker, to, orientation);\n }\n if (hasMarkerMid) {\n const marker = item.markerEnd;\n for (let j = 1; j < item.vertices.length - 1; j++) {\n // reset transform, just in case\n ctx.setTransform(matrix);\n const from = item.vertices[j], to = item.vertices[j + 1];\n const orientation = Math.atan2(to.y - from.y, to.x - from.x);\n this._drawMarker(ctx, marker, to, orientation);\n }\n }\n if (hasMarkerEnd) {\n // reset transform, just in case\n ctx.setTransform(matrix);\n const marker = item.markerEnd, from = item.vertices[item.vertices.length - 2], to = item.vertices[item.vertices.length - 1];\n const orientation = Math.atan2(to.y - from.y, to.x - from.x);\n this._drawMarker(ctx, marker, to, orientation);\n }\n }\n }\n _drawMarker(ctx, marker, point, orientation) {\n const defaults = this.DefaultShapeValues;\n const refX = marker.ref?.x || 0, refY = marker.ref?.y || 0;\n const width = (marker.width || 1) * ctx.lineWidth, height = (marker.width || 1) * ctx.lineWidth;\n let viewbox = marker.viewbox, stage = { x: 0, y: 0, width: width, height: height };\n if (Utils.isNull(viewbox)) {\n viewbox = stage;\n }\n // prepare\n const mscale = { a: stage.width / viewbox.width, d: stage.height / viewbox.height }; // Rect.findTransform({ x: 0, y: 0, width: viewbox.width, height: viewbox.height }, stage, 'stretch', 'left', 'top');\n // execute\n ctx.translate(point.x, point.y);\n ctx.rotate(orientation);\n ctx.scale(mscale.a, mscale.d);\n ctx.translate(-refX, -refY);\n ctx.fillStyle = fallback(marker.fill, defaults.fill);\n ctx.strokeStyle = fallback(marker.stroke, defaults.stroke);\n // Path2D\n const hasMarkerFill = !isNone(marker.fill), hasMarkerStroke = !isNone(marker.stroke);\n var markerPath2D = new Path2D(marker.pathData);\n if (hasMarkerFill) {\n ctx.fill(markerPath2D);\n }\n if (hasMarkerStroke) {\n ctx.stroke(markerPath2D);\n }\n }\n};\nPacemCanvasAdapterElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-canvas-adapter' })\n], PacemCanvasAdapterElement);\nexport { PacemCanvasAdapterElement };\n", "import { PacemEventTarget, Utils } from '@pacem/pacem-core';\nconst JPEG_QUALITY = .9;\n/**\n * Base class for the rendering adapters (SVG, Canvas) assignable to a `Pacem2DElement` stage. Concrete\n * adapters are responsible for initializing/disposing the underlying DOM surface, sizing it, drawing the\n * scene graph, hit-testing and producing snapshot images.\n */\nexport class Pacem2DAdapterElement extends PacemEventTarget {\n constructor() {\n super(...arguments);\n /** Fallback stroke/fill/lineWidth values used when a shape doesn't provide its own. */\n this.DefaultShapeValues = {\n stroke: \"#000\",\n lineWidth: 1,\n fill: \"#fff\"\n };\n }\n /**\n * Rasterizes the given DOM element into an image `Blob`, defaulting to JPEG when `bgColor` is provided\n * (to flatten transparency against it) and to PNG otherwise.\n * @param element Element to snapshot.\n * @param bgColor Background color to flatten transparency against; if set, defaults `type` to `'image/jpeg'`.\n * @param type Explicit image MIME type, overrides the `bgColor`-based default.\n * @param quality Compression quality, applicable to lossy formats (defaults to `.9` for JPEG).\n */\n snapshotElement(element, bgColor, type, quality) {\n const jpeg = !Utils.isNullOrEmpty(bgColor), mime = type ?? (jpeg ? 'image/jpeg' : null), compression = quality ?? (jpeg ? JPEG_QUALITY : null);\n return Utils.snapshotElement(element, bgColor, mime, compression);\n }\n}\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, CustomElementUtils, CustomEventUtils, Utils, UI, avoidHandler } from '@pacem/pacem-core';\nimport { Matrix2D } from '@pacem/pacem-foundation';\nimport { UiElement, ShapeElement } from '../types';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { Pacem2DAdapterElement } from '../adapter';\nimport { getStageOptions } from '../stage';\nimport { AdapterUtils } from './utils';\nimport { PacemImageElement } from '../image';\nimport { PacemTextElement } from '../text';\nimport { isGroup, isShape, isText, isImage, isUiObject, isPresentationObject, isDrawable, isLinearGradient, isRadialGradient } from '../drawing';\n//namespace Pacem.Components.Drawing {\nconst SVG_NS = 'http://www.w3.org/2000/svg', DRAWABLE_VAR = 'pacem:2-svg-drawable', STAGE_VAR = 'pacem:2d-svg-stage', GETVAR = CustomElementUtils.getAttachedPropertyValue, SETVAR = CustomElementUtils.setAttachedPropertyValue, DELVAR = CustomElementUtils.deleteAttachedPropertyValue;\nfunction fallback(v, f) {\n return Utils.isNull(v) ? f : v;\n}\nfunction replaceChildAt(parent, newChild, targetIndex) {\n if (targetIndex >= parent.children.length) {\n parent.appendChild(newChild);\n return null;\n }\n else {\n return parent.replaceChild(newChild, parent.children.item(targetIndex));\n }\n}\n/**\n * `<pacem-2d-svg-adapter>`: renders a `Pacem2DElement` stage as an inline SVG document, keeping one SVG\n * element per drawable in sync (path/text/image/group), along with markers and gradients, and drives\n * pointer hit-testing and drag & drop through the SVG DOM.\n */\nlet PacemSvgAdapterElement = class PacemSvgAdapterElement extends Pacem2DAdapterElement {\n constructor() {\n super(...arguments);\n this._hitTarget = null;\n this._dragInitHandler = (evt) => {\n const args = evt.detail, el = args.element, drawable = GETVAR(el, DRAWABLE_VAR), stageTransformMatrix = drawable.stage.transformMatrix, initialMatrix = drawable.transformMatrix ?? Matrix2D.identity;\n args.data = {\n stageTransformMatrix, item: drawable,\n initialTransformMatrix: initialMatrix\n };\n const reject = AdapterUtils.itemDispatch(drawable, evt, { x: 0, y: 0 });\n if (reject) {\n // reject dragging\n evt.preventDefault();\n }\n };\n this._draggingHandler = (evt) => {\n avoidHandler(evt);\n this.#dragging = true;\n const el = evt.detail.element;\n const data = evt.detail.data;\n const args = evt.detail;\n const screenOffset = { x: (args.currentPosition.x - args.origin.x) * data.stageTransformMatrix.a, y: (args.currentPosition.y - args.origin.y) * data.stageTransformMatrix.d };\n const offset = {\n x: screenOffset.x + data.initialTransformMatrix.e,\n y: screenOffset.y + data.initialTransformMatrix.f\n }, \n // this is not correct when item or any of its parents have been rotated!\n stageOffset = {\n x: screenOffset.x + data.stageTransformMatrix.e,\n y: screenOffset.y + data.stageTransformMatrix.f\n };\n //console.log(`current pos: ${args.currentPosition.x},${args.currentPosition.y}`);\n //console.log(`origin pos: ${args.origin.x},${args.origin.y}`);\n //console.log(`offset: ${offset.x},${offset.y}`);\n //console.log(data.stageTransformMatrix);\n //console.log(el.style.transform); console.log(data.initialTransformMatrix);\n const rejected = AdapterUtils.itemDispatch(data.item, evt, stageOffset);\n if (!rejected) {\n const init = data.initialTransformMatrix;\n el.style.transform = `matrix(${init.a},${init.b},${init.c},${init.d},${offset.x},${offset.y})`;\n }\n };\n this._dragEndHandler = (evt) => {\n this.#dragging = false;\n const args = evt.detail, el = args.element, data = args.data, transform = Utils.deserializeTransform(el.style);\n // store transform\n const offset = { x: transform.e, y: transform.f };\n if (data.item instanceof UiElement) {\n data.item.translateX = offset.x;\n data.item.translateY = offset.y;\n }\n else {\n const init = data.initialTransformMatrix, actual = { a: init.a, b: init.b, c: init.c, d: init.d, e: offset.x, f: offset.y };\n Utils.extend(data.item, { transformMatrix: actual });\n }\n el.style.transform = '';\n AdapterUtils.itemDispatch(data.item, evt, offset);\n };\n this._mouseleaveHandler = (evt) => {\n if (this.#dragging) {\n return;\n }\n const hitTarget = this._hitTarget;\n if (Utils.isNull(hitTarget)) {\n return;\n }\n this._hitTarget = null;\n if (!Utils.isNull(hitTarget)) {\n this.#dragger.unregister(this._items.get(hitTarget));\n AdapterUtils.itemDispatch(hitTarget, 'out', evt);\n }\n };\n this._mousemoveHandler = (evt) => {\n var pt = CustomEventUtils.getEventCoordinates(evt).client;\n if (!this.#dragging) {\n // not dragging around\n var d = null;\n const root = evt.target.getRootNode();\n root.elementsFromPoint(pt.x, pt.y).find(i => {\n d = GETVAR(i, DRAWABLE_VAR);\n return d && !d.inert;\n });\n var old = this._hitTarget, val = d;\n if (Utils.isNull(d && d.stage) || !this._scenes.has(d.stage) || d.inert) {\n val = null;\n }\n const hitTarget = this._hitTarget = val;\n if (val !== old) {\n if (!Utils.isNull(old)) {\n this.#dragger.unregister(this._items.get(old));\n AdapterUtils.itemDispatch(old, 'out', evt);\n }\n if (!Utils.isNull(val)) {\n if (val.draggable) {\n this.#dragger.register(this._items.get(val));\n }\n AdapterUtils.itemDispatch(val, 'over', evt);\n }\n }\n if (Utils.isNull(hitTarget)) {\n // dispatch only if no hit target\n const svg = evt.currentTarget;\n const stage = GETVAR(svg, STAGE_VAR);\n if (!Utils.isNull(stage)) {\n AdapterUtils.stageDispatch(stage, 'move', evt);\n }\n }\n }\n };\n this._mouseDownUpHandler = (evt) => {\n const svg = evt.currentTarget;\n if (svg instanceof SVGSVGElement) {\n const stage = GETVAR(svg, STAGE_VAR), hitTarget = this._hitTarget;\n const type = evt.type.replace(/^mouse/, '');\n const opts = getStageOptions(stage);\n if (CustomEventUtils.matchModifiers(evt, opts.clickModifiers)) {\n if (!Utils.isNull(hitTarget) && hitTarget.stage === stage) {\n AdapterUtils.itemDispatch(hitTarget, type, evt);\n }\n else {\n AdapterUtils.stageDispatch(stage, type, evt);\n }\n }\n }\n };\n this._scenes = new WeakMap();\n this._markers = new WeakMap();\n this._gradients = new WeakMap();\n this._items = new WeakMap();\n }\n snapshot(stage, background, type, quality) {\n if (this._scenes.has(stage)) {\n const svg = this._scenes.get(stage);\n return this.snapshotElement(svg, background, type, quality);\n }\n else {\n return Promise.resolve(null);\n }\n }\n getTransformMatrix(scene) {\n const scenes = this._scenes;\n if (scenes.has(scene)) {\n return scenes.get(scene).getScreenCTM().inverse();\n }\n return Matrix2D.identity;\n }\n #dragger;\n viewActivatedCallback() {\n super.viewActivatedCallback();\n const dragDrop = this.#dragger = document.createElement(P + '-drag-drop');\n dragDrop.mode = UI.DragDataMode.Self;\n // append\n const shell = CustomElementUtils.findAncestorShell(this);\n shell.appendChild(dragDrop);\n dragDrop.addEventListener(UI.DragDropEventType.Init, this._dragInitHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.Drag, this._draggingHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.End, this._dragEndHandler, false);\n }\n disconnectedCallback() {\n const dragger = this.#dragger;\n if (!Utils.isNull(dragger)) {\n dragger.removeEventListener(UI.DragDropEventType.Init, this._dragInitHandler, false);\n dragger.removeEventListener(UI.DragDropEventType.Drag, this._draggingHandler, false);\n dragger.removeEventListener(UI.DragDropEventType.End, this._dragEndHandler, false);\n dragger.remove();\n }\n super.disconnectedCallback();\n }\n invalidateSize(scene, size) {\n const scenes = this._scenes;\n if (!Utils.isNull(scene) && !Utils.isNullOrEmpty(size)) {\n if (scenes.has(scene)) {\n var svg = scenes.get(scene);\n svg.setAttribute('width', size.width + '');\n svg.setAttribute('height', size.height + '');\n const rect = scene.viewbox, aspectRatio = scene.aspectRatio;\n if (AdapterUtils.isValidViewbox(rect)) {\n svg.setAttribute('viewBox', `${rect.x} ${rect.y} ${rect.width} ${rect.height}`);\n }\n else {\n svg.removeAttribute('viewBox');\n }\n if (Utils.isNullOrEmpty(aspectRatio) || typeof aspectRatio === 'string') {\n svg.removeAttribute('preserveAspectRatio');\n }\n else {\n svg.setAttribute('preserveAspectRatio', `xM${aspectRatio.x.substring(1)}YM${aspectRatio.y.substring(1)} ${(aspectRatio.slice ? 'slice' : 'meet')}`);\n }\n }\n }\n }\n initialize(scene) {\n if (Utils.isNull(scene)) {\n throw 'Provided scene is null or undefined.';\n }\n const scenes = this._scenes;\n // already in the store?\n if (scenes.has(scene)) {\n return scenes.get(scene);\n }\n const stage = scene.stage;\n // empty stage DOM and clear dictionary\n stage.innerHTML = '';\n this._items = new WeakMap();\n var svg = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('part', 'stage');\n SETVAR(svg, STAGE_VAR, scene);\n stage.appendChild(svg);\n scenes.set(scene, svg);\n const options = { passive: false, capture: true };\n svg.addEventListener('mousemove', this._mousemoveHandler, false);\n svg.addEventListener('click', this._mouseDownUpHandler, false);\n svg.addEventListener('mousedown', this._mouseDownUpHandler, false);\n svg.addEventListener('mouseup', this._mouseDownUpHandler, false);\n svg.addEventListener('mouseleave', this._mouseleaveHandler, false);\n // draw right away\n // this.draw(scene);\n return svg;\n }\n dispose(scene) {\n const scenes = this._scenes;\n if (scenes.has(scene)) {\n var svg = scenes.get(scene);\n svg.removeEventListener('mousemove', this._mousemoveHandler);\n svg.removeEventListener('click', this._mouseDownUpHandler);\n svg.removeEventListener('mousedown', this._mouseDownUpHandler);\n svg.removeEventListener('mouseup', this._mouseDownUpHandler);\n svg.removeEventListener('mouseleave', this._mouseleaveHandler);\n // remove\n DELVAR(svg, STAGE_VAR);\n svg.remove();\n scenes.delete(scene);\n }\n }\n getHitTarget(scene) {\n return this._hitTarget;\n }\n draw(scene, item, deepRedraw = false) {\n const scenes = this._scenes, dict = this._items;\n if (!Utils.isNull(scene)) {\n if (scene.adapter === this) {\n if (!scenes.has(scene)) {\n // forgiving behavior (call initialize() if it's the case)\n this.initialize(scene);\n }\n }\n else {\n if (scenes.has(scene)) {\n scenes.delete(scene);\n }\n return;\n }\n }\n else {\n return;\n }\n var items = scene.datasource, flow = true, parent = scenes.get(scene);\n // item provided?\n if (!Utils.isNull(item) && dict.has(item)) {\n items = [item];\n parent = dict.get(item).parentNode;\n flow = false;\n }\n if (flow) {\n // sweep everything, quick and dirty\n parent.innerHTML = '<defs></defs>';\n this._markers = new WeakMap();\n }\n this._draw(scene, parent, items || [], flow, deepRedraw);\n }\n #dragging;\n _hasItems(object) {\n return isGroup(object);\n }\n _disposeSvg(el) {\n if (!Utils.isNull(el)) {\n var drawable = GETVAR(el, DRAWABLE_VAR);\n DELVAR(el, DRAWABLE_VAR);\n this._items.delete(drawable);\n }\n }\n _draw(scene, parent, items, flow, deepRedraw) {\n const dict = this._items;\n // children counter\n let j = 0;\n if (parent.firstElementChild instanceof SVGDefsElement) {\n j++;\n }\n if (!Utils.isNullOrEmpty(items)) {\n for (let item of items) {\n item.stage ??= scene;\n let el;\n if (!dict.has(item)) {\n el = this._buildSVGElement(item);\n SETVAR(el, DRAWABLE_VAR, item);\n this._disposeSvg(replaceChildAt(parent, el, j));\n dict.set(item, el);\n }\n else {\n el = dict.get(item);\n if (el.parentNode !== parent) {\n this._disposeSvg(replaceChildAt(parent, el, j));\n }\n }\n if (isDrawable(item)) {\n if (item.hide) {\n el.setAttribute('display', 'none');\n }\n else {\n el.removeAttribute('display');\n }\n el.style.transform = '';\n }\n if (isShape(item)) {\n const path = el;\n path.setAttribute('d', fallback(item.pathData, 'M0,0'));\n // markers\n for (let { marker, suffix } of [{ marker: item.markerStart, suffix: 'start' }, { marker: item.markerEnd, suffix: 'end' }, { marker: item.markerMid, suffix: 'mid' }]) {\n if (marker) {\n const markerSvg = this._ensureMarker(parent, marker);\n path.setAttribute('marker-' + suffix, `url(#${markerSvg.id})`);\n }\n else {\n path.removeAttribute('marker-' + suffix);\n }\n }\n }\n else if (isText(item)) {\n const text = el;\n text.textContent = item.text;\n text.style.fill = Utils.isNullOrEmpty(item.color) ? '' : item.color;\n text.style.fontFamily = Utils.isNullOrEmpty(item.fontFamily) ? '' : item.fontFamily;\n //if (item.fontSize > 0) {\n // text.setAttribute('font-size', item.fontSize.toString());\n //} else {\n // text.removeAttribute('font-size');\n //}\n text.style.fontSize = Utils.isNull(item.fontSize) ? '' : item.fontSize + 'px';\n if (!Utils.isNullOrEmpty(item.fontWeight)) {\n text.style.fontWeight = item.fontWeight;\n }\n if (!Utils.isNullOrEmpty(item.fontStyle)) {\n text.style.fontStyle = item.fontStyle;\n }\n text.setAttribute('text-anchor', fallback(item.textAnchor, 'start'));\n if (!Utils.isNull(item.anchor)) {\n text.setAttribute('x', item.anchor.x.toString());\n text.setAttribute('y', item.anchor.y.toString());\n }\n else {\n text.removeAttribute('x');\n text.removeAttribute('y');\n }\n }\n else if (isImage(item)) {\n const img = el;\n img.setAttribute('href', item.src);\n img.setAttribute('preserveAspectRatio', 'none');\n if (item.width > 0) {\n img.setAttribute('width', '' + item.width);\n }\n else {\n img.removeAttribute('width');\n }\n if (item.height > 0) {\n img.setAttribute('height', '' + item.height);\n }\n else {\n img.removeAttribute('height');\n }\n if (!Utils.isNull(item.x)) {\n img.setAttribute('x', '' + item.x);\n }\n else {\n img.removeAttribute('x');\n }\n if (!Utils.isNull(item.y)) {\n img.setAttribute('y', '' + item.y);\n }\n else {\n img.removeAttribute('y');\n }\n }\n if (isUiObject(item)) {\n const t = item.transformMatrix;\n if (Utils.isNull(t) || Matrix2D.isIdentity(t)) {\n el.removeAttribute('transform');\n }\n else {\n el.setAttribute('transform', `matrix(${t.a} ${t.b} ${t.c} ${t.d} ${t.e} ${t.f})`);\n }\n const opacity = fallback(item.opacity, 1);\n if (opacity === 1) {\n el.removeAttribute('opacity');\n }\n else {\n el.setAttribute('opacity', '' + opacity);\n }\n }\n if (isPresentationObject(item)) {\n if (Utils.isNullOrEmpty(item.fill)) {\n el.removeAttribute('fill');\n }\n else if (typeof item.fill === 'string') {\n el.setAttribute('fill', item.fill);\n }\n else {\n const grad = this._ensureGradient(parent, item.fill);\n el.setAttribute('fill', `url(#${grad.id})`);\n }\n if (Utils.isNullOrEmpty(item.stroke)) {\n el.removeAttribute('stroke');\n }\n else {\n el.setAttribute('stroke', item.stroke);\n }\n if (Utils.isNullOrEmpty(item.dashArray)) {\n el.removeAttribute('stroke-dasharray');\n }\n else {\n el.setAttribute('stroke-dasharray', item.dashArray.join(' '));\n }\n if (Utils.isNullOrEmpty(item.lineCap)) {\n el.removeAttribute('stroke-linecap');\n }\n else {\n el.setAttribute('stroke-linecap', item.lineCap);\n }\n if (Utils.isNullOrEmpty(item.lineJoin)) {\n el.removeAttribute('stroke-linejoin');\n }\n else {\n el.setAttribute('stroke-linejoin', item.lineJoin);\n }\n if (Utils.isNullOrEmpty(item.lineWidth)) {\n el.removeAttribute('stroke-width');\n }\n else {\n el.setAttribute('stroke-width', '' + item.lineWidth);\n }\n //let css = '';\n //if (!Utils.isNullOrEmpty(item.dashArray)) {\n // css += `stroke-dasharray: ${item.dashArray.join(',')};`;\n //}\n //if (!Utils.isNullOrEmpty(item.lineCap)) {\n // css += `stroke-linecap: ${item.lineCap};`;\n //}\n //if (!Utils.isNullOrEmpty(item.lineJoin)) {\n // css += `stroke-linejoin: ${item.lineJoin};`;\n //}\n //el.style.cssText = css;\n //el.setAttribute('stroke-width', '' + fallback(item.lineWidth, defaults.lineWidth));\n }\n // hit test visibility\n if (item.inert) {\n el.style.pointerEvents = 'none';\n }\n else {\n el.style.pointerEvents = '';\n }\n if ((flow || deepRedraw) && this._hasItems(item)) {\n // recursion\n this._draw(scene, el, item.childDrawables, true, deepRedraw);\n }\n j++;\n }\n }\n if (flow) {\n // remove exceeding children (except defs)\n for (let k = parent.children.length - 1; k >= j; k--) {\n const el = parent.children.item(k);\n this._disposeSvg(el);\n el.remove();\n }\n }\n }\n _buildSVGElement(item) {\n if (isShape(item) || item instanceof ShapeElement) {\n return document.createElementNS(SVG_NS, 'path');\n }\n if (isText(item) || item instanceof PacemTextElement) {\n return document.createElementNS(SVG_NS, 'text');\n }\n if (isImage(item) || item instanceof PacemImageElement) {\n return document.createElementNS(SVG_NS, 'image');\n }\n return document.createElementNS(SVG_NS, 'g');\n }\n _ensureGradient(parent, gradient) {\n const store = this._gradients;\n if (!store.has(parent)) {\n store.set(parent, new WeakMap());\n }\n const map = store.get(parent);\n // linear or radial?\n const isLinear = isLinearGradient(gradient), isRadial = isRadialGradient(gradient);\n if (map.has(gradient)) {\n const current = map.get(gradient);\n if ((isLinear && current instanceof SVGLinearGradientElement)\n || (isRadial && current instanceof SVGRadialGradientElement)) {\n // remove from DOM\n current.remove();\n // remove from memoizer\n map.delete(gradient);\n }\n }\n if (!map.has(gradient)) {\n // <defs>\n let defsContainer = parent;\n let defs;\n while (Utils.isNull(defs = defsContainer.querySelector(':scope > defs'))) {\n const parent1 = defsContainer.parentElement;\n if (parent1 instanceof SVGElement) {\n defsContainer = parent1;\n }\n else {\n break;\n }\n }\n if (Utils.isNull(defs)) {\n throw new Error('Must provide a <defs> element.');\n }\n var gradientSvg = null;\n if (isLinear) {\n // create linear gradient node\n gradientSvg = document.createElementNS(SVG_NS, 'linearGradient');\n }\n else if (isRadialGradient(gradient)) {\n // create radial gradient node\n gradientSvg = document.createElementNS(SVG_NS, 'radialGradient');\n }\n else {\n throw new Error('Unmanaged gradient type.');\n }\n gradientSvg.setAttribute('gradientUnits', 'userSpaceOnUse');\n gradientSvg.setAttribute('id', `grad-${Utils.uniqueCode()}`);\n defs.appendChild(gradientSvg);\n map.set(gradient, gradientSvg);\n }\n const retval = map.get(gradient);\n if (isLinear) {\n // linear\n retval.setAttribute('x1', gradient.start.x.toString());\n retval.setAttribute('y1', gradient.start.y.toString());\n retval.setAttribute('x2', gradient.end.x.toString());\n retval.setAttribute('y2', gradient.end.y.toString());\n }\n else if (isRadial) {\n retval.setAttribute('cx', gradient.center.x.toString());\n retval.setAttribute('cy', gradient.center.y.toString());\n retval.setAttribute('r', gradient.radius.toString());\n }\n // stops\n let j = 0;\n for (let stop of gradient.stops) {\n while (retval.children.length <= j) {\n const stopSvgAdd = document.createElementNS(SVG_NS, 'stop');\n retval.appendChild(stopSvgAdd);\n }\n const stopSvg = retval.children.item(j);\n stopSvg.setAttribute('offset', (stop.offset * 100) + '%');\n stopSvg.setAttribute('stop-color', stop.color);\n if (!Utils.isNull(stop.opacity)) {\n stopSvg.setAttribute('stop-opacity', stop.opacity.toString());\n }\n j++;\n }\n while (retval.children.length > gradient.stops.length) {\n const lastChild = retval.children.item(retval.children.length - 1);\n retval.removeChild(lastChild);\n }\n return retval;\n }\n _ensureMarker(parent, marker) {\n const store = this._markers;\n if (!store.has(parent)) {\n store.set(parent, new WeakMap());\n }\n const map = store.get(parent);\n if (!map.has(marker)) {\n const markerSvg = document.createElementNS(SVG_NS, 'marker');\n map.set(marker, markerSvg);\n const markerPath = document.createElementNS(SVG_NS, 'path');\n markerSvg.appendChild(markerPath);\n markerSvg.setAttribute('id', 'mark' + Utils.uniqueCode());\n let defsContainer = parent;\n let defs;\n while (Utils.isNull(defs = defsContainer.querySelector(':scope > defs'))) {\n const parent1 = defsContainer.parentElement;\n if (parent1 instanceof SVGElement) {\n defsContainer = parent1;\n }\n else {\n break;\n }\n }\n if (Utils.isNull(defs)) {\n throw new Error('Must provide a <defs> element.');\n }\n defs.appendChild(markerSvg);\n }\n const markerSvg = map.get(marker), markerPath = markerSvg.firstElementChild;\n // marker attributes\n markerSvg.setAttribute('orient', 'auto-start-reverse');\n if (!Utils.isNullOrEmpty(marker.viewbox)) {\n markerSvg.setAttribute('viewBox', `${marker.viewbox.x} ${marker.viewbox.y} ${marker.viewbox.width} ${marker.viewbox.height}`);\n }\n else {\n markerSvg.removeAttribute('viewBox');\n }\n if (!Utils.isNullOrEmpty(marker.ref)) {\n markerSvg.setAttribute('refX', marker.ref.x.toString());\n markerSvg.setAttribute('refY', marker.ref.y.toString());\n }\n else {\n markerSvg.removeAttribute('refX');\n markerSvg.removeAttribute('refY');\n }\n if (marker.height > 0) {\n markerSvg.setAttribute('markerHeight', marker.height.toString());\n }\n else {\n markerSvg.removeAttribute('markerHeight');\n }\n if (marker.width > 0) {\n markerSvg.setAttribute('markerWidth', marker.width.toString());\n }\n else {\n markerSvg.removeAttribute('markerWidth');\n }\n // path attributes\n markerPath.setAttribute('d', marker.pathData);\n if (!Utils.isNullOrEmpty(marker.fill)) {\n markerPath.setAttribute('fill', marker.fill);\n }\n else {\n markerPath.removeAttribute('fill');\n }\n if (!Utils.isNullOrEmpty(marker.stroke)) {\n markerPath.setAttribute('stroke', marker.stroke);\n }\n else {\n markerPath.removeAttribute('stroke');\n }\n return markerSvg;\n }\n};\nPacemSvgAdapterElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-svg-adapter' })\n], PacemSvgAdapterElement);\nexport { PacemSvgAdapterElement };\n"],
|
|
5
|
-
"mappings": "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",
|
|
3
|
+
"sources": ["../esm/drawing.js", "../esm/index-components.js", "../esm/index-components-drawing.js", "../esm/drawable-element.js", "../esm/stage.js", "../esm/constants.js", "../esm/types.js", "../esm/group.js", "../esm/ellipse.js", "../esm/rect.js", "../esm/line.js", "../esm/path.js", "../esm/polygon.js", "../esm/polyline.js", "../esm/image.js", "../esm/text.js", "../esm/adapters/utils.js", "../esm/adapters/canvasadapter.js", "../esm/adapter.js", "../esm/adapters/svgadapter.js"],
|
|
4
|
+
"sourcesContent": ["import { Utils, CustomUIEvent } from '@pacem/pacem-core';\nimport { Point, Matrix2D } from '@pacem/pacem-foundation';\n/** Type guard telling whether `object` implements `Drawable`. */\nexport function isDrawable(object) {\n return !Utils.isNull(object) && 'stage' in object;\n}\n/** Type guard telling whether `object` implements `UiObject`. */\nexport function isUiObject(object) {\n return /*'transformMatrix' in object &&*/ isDrawable(object);\n}\nfunction isGradient(object) {\n return 'stops' in object && Utils.isArray(object.stops);\n}\n/** Type guard telling whether `object` is a `LinearGradient`. */\nexport function isLinearGradient(object) {\n return isGradient(object) && 'start' in object && Point.isPoint(object.start)\n && 'end' in object && Point.isPoint(object.end);\n}\n/** Type guard telling whether `object` is a `RadialGradient`. */\nexport function isRadialGradient(object) {\n return isGradient(object) && 'center' in object && Point.isPoint(object.center)\n && 'radius' in object && typeof object.radius === 'number';\n}\n/** Static helpers to combine `PresentationState` instances (e.g. a shape's own state with its inherited parent state). */\nexport class PresentationState {\n /**\n * Combines two presentation states (typically an item's own state and the one inherited from its\n * ancestors), giving precedence to `lhs` whenever both define a value.\n * @param lhs Own/most specific presentation state.\n * @param rhs Inherited/fallback presentation state.\n * @param precomputedMatrix If provided, used as-is instead of multiplying `lhs`'s and `rhs`'s transform matrices.\n */\n static combine(lhs, rhs, precomputedMatrix = null) {\n return {\n opacity: (lhs.opacity ?? 1) * (rhs.opacity ?? 1),\n transformMatrix: precomputedMatrix ?? Matrix2D.multiply(rhs.transformMatrix, lhs.transformMatrix),\n dashArray: lhs.dashArray ?? rhs.dashArray,\n fill: lhs.fill ?? rhs.fill,\n lineCap: lhs.lineCap ?? rhs.lineCap,\n lineJoin: lhs.lineJoin ?? rhs.lineJoin,\n lineWidth: lhs.lineWidth ?? rhs.lineWidth,\n stroke: lhs.stroke ?? rhs.stroke\n };\n }\n}\n/** Type guard telling whether `object` implements `PresentationObject`. */\nexport function isPresentationObject(object) {\n return isUiObject(object)\n && ('fill' in object\n || 'transformMatrix' in object\n || 'stroke' in object\n || 'lineJoin' in object\n || 'dashArray' in object\n || 'lineWidth' in object\n || 'opacity' in object\n || 'lineCap' in object);\n}\n/** Type guard telling whether `object` implements `Shape`. */\nexport function isShape(object) {\n return isUiObject(object) && 'pathData' in object;\n}\n/** Type guard telling whether `object` implements `Group` and has at least one child drawable. */\nexport function isGroup(object) {\n return isUiObject(object) && 'childDrawables' in object && !Utils.isNullOrEmpty(object['childDrawables']);\n}\n/** Type guard telling whether `object` implements `Text`. */\nexport function isText(object) {\n return isUiObject(object) && 'text' in object && typeof object['text'] === 'string';\n}\n/** Type guard telling whether `object` implements `Image`. */\nexport function isImage(object) {\n return isUiObject(object) && 'src' in object && typeof object['src'] === 'string';\n}\n/**\n * Base class for the custom UI events dispatched by the 2D stage/adapters, carrying the screen transform\n * matrix in effect at dispatch time so consumers can project screen coordinates into stage coordinates.\n */\nexport class UI2DEvent extends CustomUIEvent {\n constructor(type, eventInit, originalEvent, transformMatrix) {\n super(type, eventInit, originalEvent);\n this.#transformMatrix = transformMatrix;\n }\n #transformMatrix;\n /** Gets the screen transform matrix. */\n get transformMatrix() {\n return this.#transformMatrix;\n }\n /** Projects a point (defaults to the event's screen coordinates) through the event's transform matrix. */\n project(pt = { x: this.screenX, y: this.screenY }) {\n return Matrix2D.multiply(pt, this.#transformMatrix);\n }\n}\n/** Static helper to build an empty `ShapeGeometry`. */\nexport class Shape {\n /** Returns an empty `ShapeGeometry` (no path, no vertices, zero-sized bounding rect). */\n static empty() {\n return { pathData: '', vertices: [], boundingRect: { x: 0, y: 0, width: 0, height: 0 } };\n }\n}\n/** Event dispatched throughout a `Drawable`'s drag lifecycle, carrying `DragEventArgs`. */\nexport class DragEvent extends UI2DEvent {\n}\n/** Event dispatched for pointer interactions (over/out/down/up/click) targeting a `Drawable`. */\nexport class DrawableEvent extends UI2DEvent {\n constructor(type, args, originalEvent, m) {\n super(type, { detail: args, bubbles: true, cancelable: true }, originalEvent, m);\n }\n}\n/** Event dispatched for pointer interactions (move/down/up/click) targeting a `Stage` at large (i.e. no specific hit `Drawable`). */\nexport class StageEvent extends UI2DEvent {\n constructor(type, args, originalEvent, m = args.transformMatrix) {\n super(type, { detail: args, bubbles: true, cancelable: true }, originalEvent, m);\n }\n}\n", "import * as Drawing from './index-components-drawing';\nexport { Drawing };\n", "export * from './drawable-element';\nexport * from './stage-abstractions';\nexport * from './types';\nexport * from './group';\nexport * from './ellipse';\nexport * from './rect';\nexport * from './line';\nexport * from './path';\nexport * from './polygon';\nexport * from './polyline';\nexport * from './image';\nexport * from './text';\nexport * from './stage';\nexport * from './adapters/utils';\nexport * from './adapters/canvasadapter';\nexport * from './adapters/svgadapter';\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Components, CustomElementUtils, PropertyConverters, Watch, } from '@pacem/pacem-core';\nimport { Pacem2DElement } from './stage';\n/**\n * Root of the `<pacem-2d-*>` drawable elements hierarchy: wires a custom element up to its containing\n * `Pacem2DElement` stage and, in case of nesting, its parent drawable. By default children are not allowed\n * (only `PacemGroupElement` overrides `validate` to accept them).\n */\nexport class DrawableElement extends Components.PacemCrossItemsContainerElement {\n validate(_) {\n // by default no children allowed (Group will except)\n return false;\n }\n findContainer() {\n // override\n return this.parent || this.stage;\n }\n /** @readonly Gets the `Pacem2DElement` stage this drawable belongs to. */\n get stage() {\n return this['_scene'] = this['_scene'] || CustomElementUtils.findAncestorOfType(this, Pacem2DElement);\n }\n /** @readonly Gets the closest ancestor `DrawableElement` (e.g. a containing group), if any. */\n get parent() {\n return this['_drawableParent'] = this['_drawableParent'] || CustomElementUtils.findAncestor(this, i => i instanceof DrawableElement);\n }\n disconnectedCallback() {\n delete this['_scene'];\n delete this['_drawableParent'];\n super.disconnectedCallback();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'hide':\n this.stage?.draw(this);\n break;\n }\n }\n }\n}\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: PropertyConverters.String })\n], DrawableElement.prototype, \"tag\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], DrawableElement.prototype, \"inert\", void 0);\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, ViewChild, Debounce, PCSS, P, Utils, PropertyConverters, PropertyChangeEvent, CustomEventUtils, avoidHandler, EventKeyModifier, Components } from '@pacem/pacem-core';\nimport { Rect, Matrix2D } from '@pacem/pacem-foundation';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { DrawableElement } from './drawable-element';\nimport { isGroup } from './drawing';\n//namespace Pacem.Components.Drawing {\n// group [1] := align x,[3] := align y,[6] := slice\nconst ASPECTRATIO_PATTERN = /^\\s*[xX]\\s*([Mm](in|ax|id))\\s*[yY]\\s*([Mm](in|ax|id))(\\s+(none|slice|meet))?\\s*$/;\nconst aspectRatioPropertyConverter = {\n convert: (attr) => {\n const regArr = ASPECTRATIO_PATTERN.exec(attr);\n if (regArr && regArr.length >= 4) {\n return {\n x: regArr[1].toLowerCase(),\n y: regArr[3].toLowerCase(),\n slice: regArr[6] === 'slice'\n };\n }\n return 'none';\n },\n convertBack: (val) => {\n if (Utils.isNull(val) || typeof val === 'string') {\n return 'none';\n }\n return `xM${(val.x.substring(1))}YM${(val.y.substring(1))} ${(val.slice ? 'slice' : 'meet')}`;\n }\n};\nconst DEFAULT_STAGE_OPTIONS = {\n panControl: true,\n zoomControl: true,\n panModifiers: [EventKeyModifier.AltKey],\n zoomModifiers: [EventKeyModifier.AltKey],\n clickModifiers: []\n};\n/**\n * Returns the effective `StageOptions` for the given stage, filling in any option left unset with the\n * library defaults.\n * @param stage The stage to resolve options for.\n */\nexport function getStageOptions(stage) {\n const options = stage instanceof Pacem2DElement ? stage.options : {};\n return Utils.extend({}, DEFAULT_STAGE_OPTIONS, options);\n}\n/**\n * The `<pacem-2d>` element: root stage/scene container for the drawable elements (shapes, text, images,\n * groups...). Delegates actual rendering to the assigned `adapter` (SVG or Canvas) and handles the\n * viewbox/aspect-ratio mapping plus built-in pan and zoom interactions.\n */\nlet Pacem2DElement = class Pacem2DElement extends Components.PacemItemsContainerElement {\n constructor() {\n super(...arguments);\n this.#transformMatrix = Matrix2D.identity;\n this.#options = DEFAULT_STAGE_OPTIONS;\n this._resizeHandler = (evt) => {\n this.#size = { x: evt.detail.left, y: evt.detail.top, width: evt.detail.width, height: evt.detail.height };\n const adapter = this.adapter;\n if (!Utils.isNull(adapter)) {\n this._invalidateSize();\n }\n };\n this._zoomHandler = (evt) => {\n // only trusted ui interaction\n if (!evt.isTrusted) {\n return;\n }\n const opts = this.#options;\n if (opts.zoomControl && CustomEventUtils.matchModifiers(evt, opts.zoomModifiers)) {\n // prevent anything\n avoidHandler(evt);\n const zoomingOut = evt.deltaY < 0;\n // center change?\n const factor = .1, sign = zoomingOut ? -1 : 1, factorWSign = factor * sign, scale = 1 + factorWSign;\n const stageRect = Utils.offsetRect(evt.currentTarget), pt = { x: evt.clientX, y: evt.clientY };\n this._zoom(scale, stageRect, pt);\n }\n };\n this._panHandler = (evt) => {\n const state = this.#panningStart, actual = this._getPanPoint(evt);\n if (!Utils.isNullOrEmpty(state && state.point) && !Utils.isNull(actual)) {\n avoidHandler(evt);\n const factor = state.factor, vbox = state.box, start = state.point;\n this.viewbox = {\n x: vbox.x - factor * (actual.x - start.x),\n y: vbox.y - factor * (actual.y - start.y),\n width: vbox.width,\n height: vbox.height\n };\n }\n };\n this._panStartHandler = (evt) => {\n const opts = this.#options;\n if (!opts.panControl) {\n return;\n }\n // only trusted ui interaction\n if (!evt.isTrusted) {\n return;\n }\n const size = this.#size, vbox = this.viewbox || { x: 0, y: 0, width: size.width, height: size.height }, start = this._getPanPoint(evt);\n if (start) {\n avoidHandler(evt);\n this._stage.style.pointerEvents = 'none';\n const aspectRatio = this._getActualAspectRatio();\n const wBased = vbox.width / size.width, hBased = vbox.height / size.height, factor = aspectRatio.slice ? Math.min(wBased, hBased) : Math.max(wBased, hBased);\n this.#panningStart = { point: start, box: vbox, factor };\n }\n };\n this._panEndHandler = (evt) => {\n this._stage.style.pointerEvents = '';\n this.#panningStart = null;\n };\n }\n /** @readonly Gets the DOM element hosting the stage content. */\n get stage() {\n return this._stage;\n }\n /** Processes the stage content and returns a snapshot image (delegates to the current `adapter`). */\n snapshot(bgColor, type, quality) {\n const adapter = this.adapter;\n if (Utils.isNull(adapter)) {\n return Promise.resolve(null);\n }\n return adapter.snapshot(this, bgColor, type, quality);\n }\n #originalViewBox;\n #transformMatrix;\n /** @readonly Gets the matrix that projects stage coords into screen coords. */\n get transformMatrix() {\n return this.#transformMatrix;\n }\n _transformMatrixScale() {\n const sizeObj = this.#size || Utils.offsetRect(this._stage);\n var origVbox = this.#originalViewBox || sizeObj;\n const vbox = this.viewbox || origVbox;\n const aspectRatio = this.aspectRatio || 'none';\n const mode = aspectRatio === 'none' ? 'stretch' : (aspectRatio.slice ? 'cover' : 'contain');\n const actual = Rect.findTransform(vbox, origVbox, mode);\n return actual.a;\n }\n validate(item) {\n return item instanceof DrawableElement && /* only direct items */ Utils.isNull(item.parent);\n }\n draw(item, redraw = false) {\n const adapter = this.adapter;\n if (!this.disabled && !Utils.isNull(adapter)) {\n let cancelable = new CustomEvent('predraw', { cancelable: true });\n this.dispatchEvent(cancelable);\n if (!cancelable.defaultPrevented) {\n adapter.draw(this, item, redraw);\n this.dispatchEvent(new CustomEvent('draw'));\n }\n }\n }\n _drawDebounced(item, force = false) {\n if (!Utils.isNull(item) && isGroup(item)) {\n this.draw(item, force);\n }\n else {\n this.draw(item);\n }\n }\n requestDraw(item, redraw = false) {\n this._drawDebounced(item, redraw);\n }\n _buildUpDatasourceFromDOM() {\n this.datasource = (this.items || []).slice();\n }\n #options;\n #size;\n _getActualAspectRatio() {\n const aspectRatio = this.aspectRatio || 'none';\n const alignmentX = aspectRatio === 'none' ? 'mid' : aspectRatio.x;\n const alignmentY = aspectRatio === 'none' ? 'mid' : aspectRatio.y;\n const slice = aspectRatio === 'none' ? false : aspectRatio.slice;\n return { x: alignmentX, y: alignmentY, slice };\n }\n _zoomFromValue(scale) {\n const sizeObj = this.#size;\n if (Utils.isNull(sizeObj)) {\n return;\n }\n const sizeRect = sizeObj;\n const origVbox = this.#originalViewBox || sizeRect, vbox = this.viewbox || origVbox;\n const aspectRatio = this.aspectRatio || 'none';\n const mode = aspectRatio === 'none' ? 'stretch' : (aspectRatio.slice ? 'cover' : 'contain');\n const actual = Rect.findTransform(vbox, sizeRect, mode);\n const original = Rect.findTransform(origVbox, sizeRect, mode);\n const actualScale = actual.a;\n const origScale = original.a;\n const targetScale = origScale * scale;\n const incrementalInverseScale = actualScale / targetScale;\n this._zoom(incrementalInverseScale);\n }\n _zoom(scale, stageRect, pt) {\n if (Utils.isNull(stageRect)) {\n stageRect = Utils.offsetRect(this._stage);\n }\n if (Utils.isNull(pt)) {\n pt = { x: stageRect.x + stageRect.width * .5, y: stageRect.y + stageRect.height * .5 };\n }\n const sizeObj = this.#size, vbox = this.viewbox || sizeObj;\n const vsize = Math.min(vbox.width, vbox.height), targetWidth = vsize * scale, targetHeight = vsize * scale;\n if (targetWidth > 0 && targetHeight > 0) {\n const aspectRatio = this._getActualAspectRatio();\n const alignmentX = aspectRatio.x;\n const alignmentY = aspectRatio.y;\n const slice = aspectRatio.slice;\n // offset\n const vboxRatio = vbox.width / vbox.height, size = slice ? Math.max(stageRect.width, stageRect.height) : Math.min(stageRect.width, stageRect.height);\n let \n // to be adjusted based on aspectRatio\n adjX, adjY;\n ;\n switch (alignmentX) {\n case 'mid':\n adjX = (targetWidth - vbox.width) * (pt.x - stageRect.x - .5 * (stageRect.width - size)) / (size * vboxRatio);\n break;\n case 'max':\n adjX = (targetWidth - vbox.width) * (pt.x - stageRect.x - (stageRect.width - size)) / (size * vboxRatio);\n break;\n default:\n adjX = (targetWidth - vbox.width) * (pt.x - stageRect.x) / (size * vboxRatio);\n break;\n }\n switch (alignmentY) {\n case 'mid':\n adjY = (targetHeight - vbox.height) * (pt.y - stageRect.y - .5 * (stageRect.height - size)) / (size * vboxRatio);\n break;\n case 'max':\n adjY = (targetHeight - vbox.height) * (pt.y - stageRect.y - (stageRect.height - size)) / (size * vboxRatio);\n break;\n default:\n adjY = (targetHeight - vbox.height) * (pt.y - stageRect.y) / (size * vboxRatio);\n break;\n }\n const targetX = vbox.x - adjX, targetY = vbox.y - adjY;\n this.viewbox = { x: targetX, y: targetY, width: targetWidth, height: targetHeight };\n }\n }\n _getPanPoint(evt) {\n const opts = this.#options;\n if (evt instanceof MouseEvent && CustomEventUtils.matchModifiers(evt, opts.panModifiers)) {\n return CustomEventUtils.getEventCoordinates(evt).page;\n }\n return null;\n }\n #panningStart;\n _invalidateSize() {\n this.adapter.invalidateSize(this, this.#size);\n const prevTransformMatrix = this.#transformMatrix;\n this.#transformMatrix = this.adapter.getTransformMatrix(this);\n this.dispatchEvent(new PropertyChangeEvent({ propertyName: 'transformMatrix', currentValue: this.#transformMatrix, oldValue: prevTransformMatrix }));\n this.zoom = this._transformMatrixScale();\n this.dispatchEvent(new Components.ResizeEvent(this.#size));\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n const adapter = this.adapter;\n if (!Utils.isNull(adapter)) {\n adapter.initialize(this);\n this._invalidateSize();\n // request draw right away\n this._drawDebounced();\n }\n const resize = this._resize;\n resize.addEventListener(Components.ResizeEventName, this._resizeHandler, false);\n const stage = this._stage;\n resize.target = stage;\n const options = { capture: false, passive: true };\n // zooming\n stage.addEventListener('wheel', this._zoomHandler, false);\n // panning\n stage.addEventListener('mousedown', this._panStartHandler, false);\n stage.addEventListener('touchstart', this._panStartHandler, options);\n window.addEventListener('mousemove', this._panHandler, false);\n window.addEventListener('mouseup', this._panEndHandler, false);\n window.addEventListener('touchmove', this._panHandler, options);\n window.addEventListener('touchend', this._panEndHandler, options);\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'adapter':\n if (!Utils.isNull(old)) {\n old.dispose(this);\n }\n if (!Utils.isNull(val)) {\n val.initialize(this);\n this._invalidateSize();\n this._drawDebounced();\n }\n break;\n case 'aspectRatio':\n if (!Utils.isNull(this.adapter)) {\n this._invalidateSize();\n }\n break;\n case 'viewbox':\n if (!Utils.isNull(this.adapter)) {\n this._invalidateSize();\n }\n this.#originalViewBox ??= (this.viewbox || null);\n break;\n case 'items':\n this._buildUpDatasourceFromDOM();\n break;\n case 'zoom':\n if (val !== this._transformMatrixScale()) {\n this._zoomFromValue(val);\n }\n break;\n case 'options':\n this.#options = getStageOptions(this); // Utils.extend({}, DEFAULT_STAGE_OPTIONS, val || {});\n break;\n case 'disabled':\n case 'datasource':\n this._drawDebounced();\n break;\n }\n }\n disconnectedCallback() {\n const resizer = this._resize, stage = this._stage;\n if (!Utils.isNull(resizer)) {\n resizer.removeEventListener(Components.ResizeEventName, this._resizeHandler, false);\n }\n if (!Utils.isNull(stage)) {\n // zooming\n stage.removeEventListener('wheel', this._zoomHandler, false);\n // panning\n stage.removeEventListener('mousedown', this._panStartHandler, false);\n stage.removeEventListener('touchstart', this._panStartHandler);\n window.removeEventListener('mousemove', this._panHandler, false);\n window.removeEventListener('mouseup', this._panEndHandler, false);\n window.removeEventListener('touchmove', this._panHandler);\n window.removeEventListener('touchend', this._panEndHandler);\n }\n if (!Utils.isNull(this.adapter)) {\n this.adapter.dispose(this);\n }\n super.disconnectedCallback();\n }\n};\n__decorate([\n Watch({ converter: PropertyConverters.Element })\n], Pacem2DElement.prototype, \"adapter\", void 0);\n__decorate([\n Watch({ reflectBack: true, converter: PropertyConverters.Rect })\n], Pacem2DElement.prototype, \"viewbox\", void 0);\n__decorate([\n Watch({ emit: false, reflectBack: true, converter: aspectRatioPropertyConverter })\n], Pacem2DElement.prototype, \"aspectRatio\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem2DElement.prototype, \"datasource\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Json })\n], Pacem2DElement.prototype, \"options\", void 0);\n__decorate([\n Watch({ converter: PropertyConverters.Number })\n], Pacem2DElement.prototype, \"zoom\", void 0);\n__decorate([\n ViewChild('.' + PCSS + '-2d')\n], Pacem2DElement.prototype, \"_stage\", void 0);\n__decorate([\n ViewChild(P + '-resize')\n], Pacem2DElement.prototype, \"_resize\", void 0);\n__decorate([\n Debounce(true)\n], Pacem2DElement.prototype, \"_drawDebounced\", null);\nPacem2DElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME, shadow: true, template: `<${P}-resize watch-position=\"true\"></${P}-resize><div class=\"${PCSS}-2d\" part=\"container\"></div><slot></slot>` })\n], Pacem2DElement);\nexport { Pacem2DElement };\n", "/** Middle segment shared by every `<pacem-2d-*>` custom element tag name. */\nexport const TAG_MIDDLE_NAME = \"2d\";\n/** `2 * Math.PI`, a full turn in radians. */\nexport const TWO_PI = 2 * Math.PI;\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Watch, PropertyConverters, Utils } from '@pacem/pacem-core';\nimport { Matrix2D } from '@pacem/pacem-foundation';\nimport { DrawableElement } from './drawable-element';\n//namespace Pacem.Components.Drawing {\nconst DEG2RAD = Math.PI / 180.0;\n/**\n * Base class for every drawable that participates in the 2D transform pipeline (rotation, scale,\n * translation) and exposes an `opacity`. Computes and caches the corresponding `transformMatrix`.\n */\nexport class UiElement extends DrawableElement {\n #transformMatrix = Matrix2D.identity;\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this._updateTransformMatrix();\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'rotate':\n case 'scaleX':\n case 'scaleY':\n case 'translateX':\n case 'translateY':\n this._updateTransformMatrix();\n // flow down\n case 'opacity':\n this.stage?.draw(this);\n break;\n }\n }\n }\n _updateTransformMatrix() {\n let rotation = DEG2RAD * (this.rotate ?? 0), cos = Math.cos(rotation), sin = Math.sin(rotation), a = (this.scaleX ?? 1) * cos, b = -sin, c = sin, d = (this.scaleY ?? 1) * cos, e = this.translateX ?? 0, f = this.translateY ?? 0;\n this.#transformMatrix = { a, b, c, d, e, f };\n }\n /** @internal */\n get transformMatrix() {\n const m = this.#transformMatrix;\n return { a: m.a, b: m.b, c: m.c, d: m.d, e: m.e, f: m.f };\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"rotate\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"scaleX\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"scaleY\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"translateX\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"translateY\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], UiElement.prototype, \"opacity\", void 0);\n/**\n * Base class for drawables that carry stroke/fill presentation state (color, line width, dash pattern,\n * line join/cap), on top of the transform/opacity inherited from `UiElement`.\n */\nexport class PresentationElement extends UiElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'stroke':\n case 'lineWidth':\n case 'lineJoin':\n case 'lineCap':\n case 'dashArray':\n case 'fill':\n if (!Utils.isNull(this.stage)) {\n this.stage.draw(this);\n }\n break;\n }\n }\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PresentationElement.prototype, \"stroke\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PresentationElement.prototype, \"fill\", void 0);\n__decorate([\n Watch({\n emit: false, converter: {\n convert: (attr) => attr?.split(',').map(i => parseInt(i)).filter(i => !Number.isNaN(i)),\n convertBack: (prop) => prop?.join(',')\n }\n })\n], PresentationElement.prototype, \"dashArray\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PresentationElement.prototype, \"lineWidth\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PresentationElement.prototype, \"lineJoin\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PresentationElement.prototype, \"lineCap\", void 0);\n/**\n * Base class for drawables whose visual is an SVG path (`pathData`) computed out of their own geometry\n * properties (e.g. center/radius, points, corners). Subclasses implement `getShapeGeometry` and this\n * class takes care of recomputing `data`/`vertices`/`boundingRect` and requesting a redraw.\n */\nexport class ShapeElement extends PresentationElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'data':\n this.stage?.draw(this);\n break;\n }\n }\n }\n viewActivatedCallback() {\n super.viewActivatedCallback();\n this.recomputeShape();\n }\n /** Recomputes `data`, `vertices` and `boundingRect` from `getShapeGeometry()`. */\n recomputeShape() {\n const { pathData, vertices, boundingRect } = this.getShapeGeometry();\n this.#vertices = vertices;\n this.#boundingRect = boundingRect;\n this.data = pathData;\n }\n /** @readonly Gets the SVG path data backing the shape. */\n get pathData() {\n return this.data;\n }\n #boundingRect;\n /** @readonly Gets the bounding rectangle of the shape. */\n get boundingRect() {\n return this.#boundingRect;\n }\n #vertices;\n /** @readonly Gets the vertices making up the shape. */\n get vertices() {\n return this.#vertices;\n }\n}\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], ShapeElement.prototype, \"data\", void 0);\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, P, Utils } from '@pacem/pacem-core';\nimport { PresentationElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { DrawableElement } from './drawable-element';\n//namespace Pacem.Components.Drawing {\n/** `<pacem-2d-group>`: a container that groups child drawables, applying its own transform/presentation state to all of them. */\nlet PacemGroupElement = class PacemGroupElement extends PresentationElement {\n validate(item) {\n return item instanceof DrawableElement && item.parent === this;\n }\n #children = [];\n /** @readonly Gets the child drawables currently in the group. */\n get childDrawables() {\n return this.#children;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n switch (name) {\n case 'items':\n case 'datasource':\n this.#children = (val || []);\n const scene = this.stage;\n if (!Utils.isNull(scene)) {\n scene.draw(this, true);\n }\n break;\n }\n }\n};\n__decorate([\n Watch({ emit: false })\n], PacemGroupElement.prototype, \"datasource\", void 0);\nPacemGroupElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-group' })\n], PacemGroupElement);\nexport { PacemGroupElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemEllipseElement_1, PacemCircleElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { Rect } from '@pacem/pacem-foundation';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\nfunction full(c, rx, ry) {\n const d = 2 * rx, cx = c.x, cy = c.y;\n return {\n pathData: `M ${cx} ${cy} m ${-rx},0 a ${rx},${ry} 0 1,1 ${d},0 a ${rx},${ry} 0 1,1 ${-d},0`,\n vertices: [],\n boundingRect: { x: cx - rx, y: cy - ry, width: 2 * rx, height: 2 * ry }\n };\n}\nfunction sect(c, rx, ry, start, end) {\n const degToRad = Math.PI / 180;\n const s = degToRad * start, e = degToRad * end;\n //\n const polar = (theta) => rx * ry / Math.sqrt(Math.pow(Math.cos(theta) * ry, 2) + Math.pow(Math.sin(theta) * rx, 2));\n const rhoStart = polar(s), rhoEnd = polar(e);\n const cartesian = (rho, theta) => {\n return { x: rho * Math.cos(theta), y: rho * Math.sin(theta) };\n };\n const cartStart = cartesian(rhoStart, s), cartEnd = cartesian(rhoEnd, e);\n const p0 = { x: c.x + cartStart.x, y: c.y + cartStart.y }, p1 = { x: c.x + cartEnd.x, y: c.y + cartEnd.y };\n let boundingRect = Rect.expand(c, p0, p1);\n if (end < start)\n end += 360;\n if (start <= 0 && end > 0 || end >= 360) {\n boundingRect = Rect.expand(boundingRect, { x: c.x + rx, y: c.y });\n }\n if (start <= 90 && end > 90 || end >= 450) {\n boundingRect = Rect.expand(boundingRect, { x: c.x, y: c.y + ry });\n }\n if (start <= 180 && end > 180 || end >= 540) {\n boundingRect = Rect.expand(boundingRect, { x: c.x - rx, y: c.y });\n }\n if (start <= 270 && end > 270 || end >= 630) {\n boundingRect = Rect.expand(boundingRect, { x: c.x, y: c.y - ry });\n }\n const flag = e - s > Math.PI ? '1' : '0';\n return {\n pathData: `M ${p0.x} ${p0.y} A ${rx},${ry} 0 ${flag},1 ${p1.x},${p1.y} L ${c.x},${c.y} Z`, vertices: [p0, p1], boundingRect\n };\n}\nfunction getShapeGeometry(c, rx, ry, start, end) {\n start ??= 0, end ??= 0;\n start %= 360;\n end %= 360;\n while (start < 0)\n start += 360;\n while (end < start)\n end += 360;\n const threesixty = (start - end).isCloseTo(0);\n return threesixty ? full(c, rx, ry) : sect(c, rx, ry, start, end);\n}\n/** `<pacem-2d-ellipse>`: renders a full ellipse, or a pie-slice sector when `start`/`end` are set. */\nlet PacemEllipseElement = PacemEllipseElement_1 = class PacemEllipseElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'center':\n case 'rx':\n case 'ry':\n case 'start':\n case 'end':\n this.recomputeShape();\n break;\n }\n }\n }\n /** Computes the SVG path data of the ellipse (or sector) out of its own `center`/`rx`/`ry`/`start`/`end`. */\n getPathData() {\n const a = this.rx, b = this.ry, c = this.center, s = this.start ?? 0, e = this.end ?? 0;\n if (!Utils.isNull(c) && !Utils.isNull(a) && !Utils.isNull(b)) {\n return PacemEllipseElement_1.getPathData(c, a, b, s, e);\n }\n return null;\n }\n getShapeGeometry() {\n const center = this.center ?? { x: 0, y: 0 };\n const a = this.rx ?? 0, b = this.ry ?? 0;\n return getShapeGeometry(center, a, b, this.start, this.end);\n }\n /**\n * Computes the SVG path data of an ellipse, or of a pie-slice sector when `start`/`end` don't describe a full turn.\n * @param c Center point.\n * @param rx Horizontal radius.\n * @param ry Vertical radius.\n * @param start Sector start angle, in degrees.\n * @param end Sector end angle, in degrees.\n */\n static getPathData(c = { x: NaN, y: NaN }, rx = NaN, ry = NaN, start, end) {\n const { pathData } = getShapeGeometry(c, rx, ry, start, end);\n return pathData;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemEllipseElement.prototype, \"center\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemEllipseElement.prototype, \"rx\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemEllipseElement.prototype, \"ry\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemEllipseElement.prototype, \"start\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemEllipseElement.prototype, \"end\", void 0);\nPacemEllipseElement = PacemEllipseElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-ellipse' })\n], PacemEllipseElement);\nexport { PacemEllipseElement };\n/** `<pacem-2d-circle>`: renders a full circle, or a pie-slice sector when `start`/`end` are set. */\nlet PacemCircleElement = PacemCircleElement_1 = class PacemCircleElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'center':\n case 'radius':\n case 'start':\n case 'end':\n this.recomputeShape();\n break;\n }\n }\n }\n /** Computes the SVG path data of the circle (or sector) out of its own `center`/`radius`/`start`/`end`. */\n getPathData() {\n const r = this.radius, c = this.center;\n if (!Utils.isNull(c) && !Utils.isNull(r)) {\n return PacemCircleElement_1.getPathData(c, r, this.start, this.end);\n }\n return null;\n }\n getShapeGeometry() {\n const center = this.center ?? { x: 0, y: 0 };\n const r = this.radius ?? 0;\n return getShapeGeometry(center, r, r, this.start, this.end);\n }\n /**\n * Computes the SVG path data of a circle, or of a pie-slice sector when `start`/`end` don't describe a full turn.\n * @param c Center point.\n * @param r Radius.\n * @param start Sector start angle, in degrees.\n * @param end Sector end angle, in degrees.\n */\n static getPathData(c = { x: NaN, y: NaN }, r = NaN, start, end) {\n return PacemEllipseElement.getPathData(c, r, r, start, end);\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemCircleElement.prototype, \"center\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCircleElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCircleElement.prototype, \"start\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemCircleElement.prototype, \"end\", void 0);\nPacemCircleElement = PacemCircleElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-circle' })\n], PacemCircleElement);\nexport { PacemCircleElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemRectElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\n/*\n r=\"4\" // every corner has a rx equalt o ry equal to 8 units\n r=\"4,8 cut\" // every corner has a rx equal to 4px and a ry equal to 8px (cut corners)\n r=\"4,8 cut 5,6 3,20% round 50%,4\" // top-left corner has a rx equal to 4px and a ry equal to 8px (cut corner), top-right corner has a rx equal to 5px and a ry equal to 6px,\n // bottom-right corner has a rx equal to 3px and a ry equal to 20% the height,\n // bottom-left corner has a rx equal to 50% the width and a ry equal to 4px.\n\n */\nfunction parseCornerRadius(radius) {\n const rx = radius[2], ry = radius[4] ?? rx, type = radius[6] === 'cut' ? CornerType.Cut : CornerType.Rounded;\n return { rx: parseCornerRadiusComponent(rx), ry: parseCornerRadiusComponent(ry), type };\n}\nfunction parseCornerRadiusComponent(radius) {\n const val = parseFloat(radius);\n return { value: val, unit: radius.endsWith('%') ? 'pct' : 'u' };\n}\nfunction stringifyCornerRadiusComponent(radius) {\n return `${radius.value}${radius.unit === 'pct' ? '%' : ''}`;\n}\nconst CORNERS_PATTERN = /(([\\d\\.]+%?)(\\s*,?\\s*([\\d\\.]+%?))?(\\s+(cut|round))?)/g;\nfunction parseCornerRadii(radii) {\n let numbers;\n const acc = [];\n while (numbers = CORNERS_PATTERN.exec(radii)) {\n acc.push(numbers);\n }\n switch (acc.length) {\n case 1:\n const single = parseCornerRadius(acc[0]);\n return [single, single, single, single];\n case 4:\n const topLeft = parseCornerRadius(acc[0]);\n const topRight = parseCornerRadius(acc[1]);\n const bottomRight = parseCornerRadius(acc[2]);\n const bottomLeft = parseCornerRadius(acc[3]);\n return [topLeft, topRight, bottomRight, bottomLeft];\n default:\n return null;\n }\n}\nfunction stringifyCornerRadii(radii) {\n const topLeft = radii[0], topRight = radii[1], bottomRight = radii[2], bottomLeft = radii[3];\n const tlX = stringifyCornerRadiusComponent(topLeft.rx), tlY = stringifyCornerRadiusComponent(topLeft.ry);\n const trX = stringifyCornerRadiusComponent(topRight.rx), trY = stringifyCornerRadiusComponent(topRight.ry);\n const brX = stringifyCornerRadiusComponent(bottomRight.rx), brY = stringifyCornerRadiusComponent(bottomRight.ry);\n const blX = stringifyCornerRadiusComponent(bottomLeft.rx), blY = stringifyCornerRadiusComponent(bottomLeft.ry);\n return `${tlX},${tlY} ${trX},${trY} ${brX},${brY} ${blX},${blY}`;\n}\n/** How a `PacemRectElement` corner is rendered: smoothly `Rounded` or straight-line `Cut` (chamfered). */\nexport var CornerType;\n(function (CornerType) {\n CornerType[\"Rounded\"] = \"rounded\";\n CornerType[\"Cut\"] = \"cut\";\n})(CornerType || (CornerType = {}));\n/** `<pacem-2d-rect>`: renders a rectangle, optionally with independently rounded or cut corners. */\nlet PacemRectElement = PacemRectElement_1 = class PacemRectElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first && (name === 'x' || name === 'y' || name === 'w' || name === 'h' || name === 'r' || name === 'cornerType')) {\n this.recomputeShape();\n }\n }\n /** Computes the SVG path data of the rectangle out of its own `x`/`y`/`w`/`h`/`r`/`cornerType`. */\n getPathData() {\n const x = this.x, y = this.y, w = this.w, h = this.h;\n let r = this.r ?? { rx: { value: 0 }, ry: { value: 0 }, type: CornerType.Rounded };\n if (!Utils.isArray(r)) {\n r = [r, r, r, r];\n }\n // forgiving behavior\n r = r.map(i => { return typeof i === 'number' ? { rx: { value: i }, ry: { value: i }, type: this.cornerType } : i; });\n if (!Utils.isNull(x) && !Utils.isNull(y) && !Utils.isNull(w) && !Utils.isNull(h)) {\n return PacemRectElement_1.getPathData(x, y, w, h, r);\n }\n return null;\n }\n getShapeGeometry() {\n const x = this.x, y = this.y, x1 = x + this.w, y1 = y + this.h;\n return {\n pathData: this.getPathData(), vertices: [{ x, y }, { x: x1, y }, { x: x1, y: y1 }, { x, y: y1 }], boundingRect: { x, y, width: this.w, height: this.h }\n };\n }\n static getPathData(x = NaN, y = NaN, w = NaN, h = NaN, r = null) {\n if (!r) {\n return `M ${x} ${y} h ${w} v ${h} h ${-w} z`;\n }\n if (!Utils.isArray(r)) {\n r = [r, r, r, r];\n }\n const tl = r[0], tr = r[1], br = r[2], bl = r[3];\n const vx = (rx) => rx.unit === 'pct' ? rx.value * .01 * w : rx.value;\n const vy = (ry) => ry.unit === 'pct' ? ry.value * .01 * h : ry.value;\n const tlX = vx(tl.rx), tlY = vy(tl.ry);\n const trX = vx(tr.rx), trY = vy(tr.ry);\n const brX = vx(br.rx), brY = vy(br.ry);\n const blX = vx(bl.rx), blY = vy(bl.ry);\n let retval = `M ${x},${y + tlY}`;\n // top-left\n switch (tl.type) {\n case 'cut':\n retval += ` l ${tlX},${-tlY}`;\n break;\n default:\n retval += ` a ${tlX} ${tlY} 0 0 1 ${tlX} ${-tlY}`;\n break;\n }\n retval += ` h ${w - tlX - trX}`;\n // top-right\n switch (tr.type) {\n case 'cut':\n retval += ` l ${trX},${trY}`;\n break;\n default:\n retval += ` a ${trX} ${trY} 0 0 1 ${trX} ${trY}`;\n break;\n }\n retval += ` v ${h - trY - brY}`;\n // bottom-right\n switch (br.type) {\n case 'cut':\n retval += ` l ${-brX},${brY}`;\n break;\n default:\n retval += ` a ${brX} ${brY} 0 0 1 ${-brX} ${brY}`;\n break;\n }\n retval += ` h ${-(w - brX - blX)}`;\n // bottom-left\n switch (bl.type) {\n case 'cut':\n retval += ` l ${-blX},${-blY}`;\n break;\n default:\n retval += ` a ${blX} ${blY} 0 0 1 ${-blX} ${-blY}`;\n break;\n }\n return retval + ' z';\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemRectElement.prototype, \"x\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemRectElement.prototype, \"y\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemRectElement.prototype, \"w\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemRectElement.prototype, \"h\", void 0);\n__decorate([\n Watch({\n emit: false, converter: {\n convert: attr => parseCornerRadii(attr),\n convertBack: (radii) => stringifyCornerRadii(radii)\n }\n })\n], PacemRectElement.prototype, \"r\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemRectElement.prototype, \"cornerType\", void 0);\nPacemRectElement = PacemRectElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-rect' })\n], PacemRectElement);\nexport { PacemRectElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemLineElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { Shape } from './drawing';\n//namespace Pacem.Components.Drawing {\n/** `<pacem-2d-line>`: renders a straight segment between two points. */\nlet PacemLineElement = PacemLineElement_1 = class PacemLineElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'from':\n case 'to':\n this.recomputeShape();\n break;\n }\n }\n }\n getShapeGeometry() {\n const from = this.from, to = this.to;\n if (Utils.isNull(from) || Utils.isNull(to)) {\n return Shape.empty();\n }\n const x0 = from.x, y0 = from.y, x1 = to.x, y1 = to.y;\n const boundingRect = { x: Math.min(x0, x1), y: Math.min(y0, y1), width: Math.abs(x0 - x1), height: Math.abs(y0 - y1) };\n return { pathData: this.getPathData(), vertices: [from, to], boundingRect };\n }\n /** Computes the SVG path data of the line out of its own `from`/`to` points. */\n getPathData() {\n const from = this.from, to = this.to;\n if (!Utils.isNull(from) && !Utils.isNull(to)) {\n return PacemLineElement_1.getPathData(from, to);\n }\n return null;\n }\n /** Computes the SVG path data of a straight segment between `from` and `to`. */\n static getPathData(from = { x: NaN, y: NaN }, to = { x: NaN, y: NaN }) {\n const x0 = from.x, y0 = from.y, x1 = to.x, y1 = to.y;\n return `M ${x0} ${y0} L ${x1} ${y1}`;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemLineElement.prototype, \"from\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemLineElement.prototype, \"to\", void 0);\nPacemLineElement = PacemLineElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-line' })\n], PacemLineElement);\nexport { PacemLineElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P } from '@pacem/pacem-core';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\n/** `<pacem-2d-path>`: renders an arbitrary SVG path, provided verbatim through the `d` property. */\nlet PacemPathElement = class PacemPathElement extends ShapeElement {\n constructor() {\n super(...arguments);\n /** Returns the raw path data, i.e. `d`. */\n this.getPathData = () => this.d;\n }\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (name === 'd' && !first) {\n this.recomputeShape();\n }\n }\n getShapeGeometry() {\n return { pathData: this.getPathData(), /* TODO: parse d */ boundingRect: null, vertices: [] };\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemPathElement.prototype, \"d\", void 0);\nPacemPathElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-path' })\n], PacemPathElement);\nexport { PacemPathElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemPolygonElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { Shape } from './drawing';\n//namespace Pacem.Components.Drawing {\n/** `<pacem-2d-polygon>`: renders a regular polygon (or, with `starIndent` set, a star) centered on `center`. */\nlet PacemPolygonElement = PacemPolygonElement_1 = class PacemPolygonElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'radius':\n case 'starIndent':\n case 'sides':\n this.recomputeShape();\n break;\n }\n }\n }\n /** Computes the SVG path data of the polygon out of its own `center`, `radius`, `sides` and `starIndent`. */\n getPathData() {\n const sides = this.sides, radius = this.radius, center = this.center;\n if (!Utils.isNull(sides) && !Utils.isNull(radius)) {\n return PacemPolygonElement_1.getPathData(center, radius, sides, this.starIndent);\n }\n return null;\n }\n getShapeGeometry() {\n const c = this.center ?? { x: 0, y: 0 }, r = this.radius ?? 0, sides = this.sides ?? 3, si = this.starIndent;\n if (sides < 3) {\n return Shape.empty();\n }\n return PacemPolygonElement_1.getShapeGeometry(c, r, sides, si);\n }\n /**\n * Computes the geometry (path data, vertices, bounding rect) of a regular polygon or star.\n * @param center Center point.\n * @param radius Circumradius.\n * @param sides Number of sides (or points, for a star).\n * @param starIndent Star indentation factor (0 = regular polygon).\n */\n static getShapeGeometry(center, radius, sides, starIndent = .0) {\n const p0 = { x: center.x, y: center.y - radius };\n let retval = `M ${p0.x} ${(p0.y)}`;\n const vertices = [p0];\n const theta = 2 * Math.PI / sides, theta2 = .5 * theta, isStar = starIndent > 0, apothem = radius * Math.cos(theta2);\n for (let j = 1; j < sides; j++) {\n const angle = j * theta, x = center.x + Math.sin(angle) * radius, y = center.y - Math.cos(angle) * radius;\n if (isStar) {\n const innerRadius = apothem * (1.0 - starIndent);\n const angle2 = angle - theta2, x1 = center.x + Math.sin(angle2) * innerRadius, y1 = center.y - Math.cos(angle2) * innerRadius;\n retval += ` L ${x1} ${y1} L ${x} ${y}`;\n vertices.push({ x: x1, y: y1 });\n }\n else {\n retval += ` L ${x} ${y}`;\n }\n vertices.push({ x, y });\n }\n if (isStar) {\n const innerRadius = apothem * (1.0 - starIndent);\n const angle2 = 2 * Math.PI - theta2, x1 = center.x + Math.sin(angle2) * innerRadius, y1 = center.y - Math.cos(angle2) * innerRadius;\n retval += ` L ${x1} ${y1}`;\n vertices.push({ x: x1, y: y1 });\n }\n vertices.push(p0);\n const width = radius * 2;\n return {\n pathData: retval + ' Z', vertices, boundingRect: { x: p0.x - radius, y: p0.y, width, height: width }\n };\n }\n /** Computes the SVG path data of a regular polygon or star. See `getShapeGeometry` for the parameters. */\n static getPathData(center, radius, sides, starIndent = .0) {\n const { pathData } = PacemPolygonElement_1.getShapeGeometry(center, radius, sides, starIndent);\n return pathData;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPolygonElement.prototype, \"sides\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPolygonElement.prototype, \"radius\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemPolygonElement.prototype, \"center\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemPolygonElement.prototype, \"starIndent\", void 0);\nPacemPolygonElement = PacemPolygonElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-polygon' })\n], PacemPolygonElement);\nexport { PacemPolygonElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar PacemPolylineElement_1;\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { parseAsNumericalArray } from '@pacem/pacem-foundation';\nimport { ShapeElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\nimport { Shape } from './drawing';\n//namespace Pacem.Components.Drawing {\n/** Converts the `points` attribute either from a flat `x1,y1,x2,y2,...` numeric list or from JSON. */\nconst PointArrayOrJsonConverter = {\n convert: (attr) => {\n const arr = parseAsNumericalArray(attr);\n if (arr.length % 2 === 0) {\n const retval = [];\n for (let j = 0; j < arr.length; j += 2) {\n retval.push({ x: arr[j], y: arr[j + 1] });\n }\n return retval;\n }\n return JSON.parse(attr);\n },\n convertBack: (prop) => JSON.stringify(prop)\n};\n/** `<pacem-2d-polyline>`: renders a series of connected segments through `points`, optionally `closed` into a polygon. */\nlet PacemPolylineElement = PacemPolylineElement_1 = class PacemPolylineElement extends ShapeElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'points':\n case 'closed':\n this.recomputeShape();\n break;\n }\n }\n }\n /**\n * Computes the geometry (path data, vertices, bounding rect) of a polyline.\n * @param points Vertices, in order.\n * @param closed Whether the polyline is closed back onto its first point.\n */\n static getShapeGeometry(points, closed) {\n if (Utils.isNullOrEmpty(points)) {\n return Shape.empty();\n }\n let d = '';\n let xmin = Number.MAX_VALUE, ymin = Number.MAX_VALUE, xmax = Number.MIN_VALUE, ymax = Number.MIN_VALUE;\n for (let j = 0; j < points.length; j++) {\n const { x, y } = points[j];\n d += `${(j === 0 ? 'M' : 'L')} ${x} ${y} `;\n xmin = Math.min(xmin, x);\n xmax = Math.max(xmax, x);\n ymin = Math.min(ymin, y);\n ymax = Math.max(ymax, y);\n }\n const boundingRect = { x: xmin, y: ymin, width: xmax - xmin, height: ymax - ymin };\n if (closed) {\n d += 'Z';\n }\n return { pathData: d, vertices: points, boundingRect };\n }\n getShapeGeometry() {\n return PacemPolylineElement_1.getShapeGeometry(this.points, this.closed);\n }\n /** Computes the SVG path data of the polyline out of its own `points`/`closed`. */\n getPathData() {\n const { pathData } = this.getShapeGeometry();\n return pathData;\n }\n /** Computes the SVG path data of a polyline. See `getShapeGeometry` for the parameters. */\n static getPathData(points, closed) {\n const { pathData } = PacemPolylineElement_1.getShapeGeometry(points, closed);\n return pathData;\n }\n};\n__decorate([\n Watch({ emit: false, converter: PointArrayOrJsonConverter })\n], PacemPolylineElement.prototype, \"points\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Boolean })\n], PacemPolylineElement.prototype, \"closed\", void 0);\nPacemPolylineElement = PacemPolylineElement_1 = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-polyline' })\n], PacemPolylineElement);\nexport { PacemPolylineElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P } from '@pacem/pacem-core';\nimport { UiElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\n/** `<pacem-2d-image>`: renders a raster image at a given position and size within the stage. */\nlet PacemImageElement = class PacemImageElement extends UiElement {\n propertyChangedCallback(name, old, val, first) {\n super.propertyChangedCallback(name, old, val, first);\n if (!first) {\n switch (name) {\n case 'src':\n case 'x':\n case 'y':\n case 'width':\n case 'height':\n this.stage?.draw(this);\n break;\n }\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemImageElement.prototype, \"src\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemImageElement.prototype, \"x\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemImageElement.prototype, \"y\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemImageElement.prototype, \"width\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemImageElement.prototype, \"height\", void 0);\nPacemImageElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-image' })\n], PacemImageElement);\nexport { PacemImageElement };\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, Watch, PropertyConverters, P, Utils } from '@pacem/pacem-core';\nimport { UiElement } from './types';\nimport { TAG_MIDDLE_NAME } from './constants';\n//namespace Pacem.Components.Drawing {\n/** `<pacem-2d-text>`: renders a text label anchored at a given point. */\nlet PacemTextElement = class PacemTextElement extends UiElement {\n propertyChangedCallback(name, old, val, first) {\n if (!first) {\n switch (name) {\n case 'text':\n case 'color':\n case 'fontFamily':\n case 'fontSize':\n case 'fontWeight':\n case 'fontStyle':\n case 'anchor':\n if (!Utils.isNull(this.stage)) {\n this.stage.draw(this);\n }\n break;\n }\n }\n }\n};\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"text\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"color\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"fontFamily\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Number })\n], PacemTextElement.prototype, \"fontSize\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"fontWeight\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"fontStyle\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.Point })\n], PacemTextElement.prototype, \"anchor\", void 0);\n__decorate([\n Watch({ emit: false, converter: PropertyConverters.String })\n], PacemTextElement.prototype, \"textAnchor\", void 0);\nPacemTextElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-text' })\n], PacemTextElement);\nexport { PacemTextElement };\n", "import { Utils, UI } from '@pacem/pacem-core';\nimport { Rect } from '@pacem/pacem-foundation';\nimport { StageEvent, DrawableEvent, DragEvent } from '../drawing';\n//namespace Pacem.Components.Drawing {\n/** Shared static helpers used by the 2D rendering adapters (SVG/Canvas) to dispatch UI events and validate viewboxes. */\nexport class AdapterUtils {\n /**\n * Dispatches a `StageEvent` (prefixed with `'stage'`) on the given stage, when it is an `EventTarget`.\n * @param stage The target stage.\n * @param type Short event type name.\n * @param evt The original event.\n */\n static stageDispatch(stage, type, evt) {\n if (stage instanceof EventTarget) {\n stage.dispatchEvent(new StageEvent('stage' + type, stage, evt, stage.transformMatrix));\n }\n }\n /** Type guard telling whether `viewbox` is a well-formed, finite `Rect` usable as a stage viewbox. */\n static isValidViewbox(viewbox) {\n return !Utils.isNullOrEmpty(viewbox) && Rect.isRect(viewbox) && Number.isFinite(viewbox.x) // isFinite includes NaN check\n && Number.isFinite(viewbox.y) && Number.isFinite(viewbox.width) && Number.isFinite(viewbox.height);\n }\n static itemDispatch(target, type, offset) {\n if (Utils.isNull(target?.stage)) {\n return false;\n }\n var dragArgs, originalEvent, evtType;\n if (offset instanceof Event) {\n originalEvent = offset;\n }\n else {\n dragArgs = { item: target, offset: offset };\n }\n if (typeof type === 'string') {\n evtType = type;\n }\n else {\n evtType = type.type;\n originalEvent = type.originalEvent;\n }\n const m = target.stage.transformMatrix;\n const evt = () => offset instanceof Event\n ? new DrawableEvent(evtType, target, originalEvent, m)\n : new DragEvent(evtType, { detail: dragArgs, cancelable: evtType === UI.DragDropEventType.Init || evtType === UI.DragDropEventType.Drag }, originalEvent, m);\n const itemevt = offset instanceof Event\n ? new DrawableEvent('item' + evtType, target, originalEvent, m)\n : new DragEvent('item' + evtType, { detail: dragArgs, cancelable: evtType === UI.DragDropEventType.Init || evtType === UI.DragDropEventType.Drag }, originalEvent, m);\n var prevent = false;\n if (target instanceof EventTarget) {\n const evnt = evt();\n target.dispatchEvent(evnt);\n prevent = evnt.defaultPrevented;\n }\n target.stage.dispatchEvent(itemevt);\n // was the event (in one of its forms) rejected?\n return prevent || itemevt.defaultPrevented;\n }\n}\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, CustomElementUtils, Utils, Logging, CustomEventUtils, UI, avoidHandler } from '@pacem/pacem-core';\nimport { Matrix2D, Rect } from '@pacem/pacem-foundation';\nimport { UiElement, ShapeElement } from '../types';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { Pacem2DAdapterElement } from '../adapter';\nimport { getStageOptions } from '../stage';\nimport { AdapterUtils } from './utils';\nimport { PacemGroupElement } from '../group';\nimport { PacemImageElement } from '../image';\nimport { PacemTextElement } from '../text';\nimport { PresentationState, isDrawable, isUiObject, isPresentationObject, isShape, isText, isImage, isGroup, isLinearGradient, isRadialGradient, DrawableEvent } from '../drawing';\n//namespace Pacem.Components.Drawing {\nconst CANVAS_SCENE_VAR = 'pacem:2d-canvas-scene';\nconst PARENT_MATRIX_VAR = 'pacem:2d-parent-matrix';\nconst WORLD_MATRIX_VAR = 'pacem:2d-world-matrix';\nconst SETVAR = CustomElementUtils.setAttachedPropertyValue, GETVAR = CustomElementUtils.getAttachedPropertyValue;\nfunction isNone(fillOrStroke) {\n return fillOrStroke === 'none' || Utils.isNullOrEmpty(fillOrStroke);\n}\nfunction fallback(v, f) {\n return Utils.isNull(v) ? f : v;\n}\n/**\n * `<pacem-2d-canvas-adapter>`: renders a `Pacem2DElement` stage onto an `HTMLCanvasElement`, redrawing the\n * whole scene graph on every frame and performing manual (path-based) pointer hit-testing.\n *\n * @deprecated Implementation postponed. Focus on SVG adapter.\n */\nlet PacemCanvasAdapterElement = class PacemCanvasAdapterElement extends Pacem2DAdapterElement {\n constructor() {\n super(...arguments);\n this._pointer = {\n page: { x: Number.NaN, y: Number.NaN }, screen: { x: Number.NaN, y: Number.NaN }, client: { x: Number.NaN, y: Number.NaN }\n };\n this._dragInitHandler = (evt) => {\n const hitTarget = this._hitTarget;\n if (Utils.isNull(hitTarget) || !isUiObject(hitTarget) || !hitTarget.draggable) {\n evt.preventDefault();\n return;\n }\n const args = evt.detail, drawable = hitTarget, initialMatrix = hitTarget.transformMatrix ?? Matrix2D.identity, parentMatrix = GETVAR(hitTarget, PARENT_MATRIX_VAR, Matrix2D.identity);\n args.data = {\n item: drawable,\n initialTransformMatrix: initialMatrix,\n parentMatrix\n };\n const reject = AdapterUtils.itemDispatch(drawable, evt, { x: 0, y: 0 });\n if (reject) {\n // reject dragging\n evt.preventDefault();\n }\n };\n this._draggingHandler = (evt) => {\n avoidHandler(evt);\n this._dragging = true;\n const args = evt.detail;\n const data = args.data;\n const screenOffset = { x: args.currentPosition.x - args.origin.x, y: args.currentPosition.y - args.origin.y };\n const offset = {\n x: screenOffset.x * data.parentMatrix.a + data.initialTransformMatrix.e,\n y: screenOffset.y * data.parentMatrix.d + data.initialTransformMatrix.f\n };\n //console.log(`current pos: ${args.currentPosition.x},${args.currentPosition.y}`);\n //console.log(`origin pos: ${args.origin.x},${args.origin.y}`);\n //console.log(`screen offset: ${screenOffset.x},${screenOffset.y}`);\n //console.log(`offset: ${offset.x},${offset.y}`);\n //console.log(data.item.transformMatrix);\n //console.log(GETVAR(data.item, PARENT_MATRIX_VAR));\n //console.log(GETVAR(data.item, WORLD_MATRIX_VAR));\n //console.log(data.initialTransformMatrix);\n const stageTransformMatrix = data.item.stage.transformMatrix;\n const rejected = AdapterUtils.itemDispatch(data.item, evt, { x: screenOffset.x * stageTransformMatrix.a + stageTransformMatrix.e, y: screenOffset.y * stageTransformMatrix.d + stageTransformMatrix.f });\n if (!rejected) {\n if (data.item instanceof UiElement) {\n data.item.translateX = offset.x;\n data.item.translateY = offset.y;\n }\n else {\n const init = data.initialTransformMatrix, actual = { a: init.a, b: init.b, c: init.c, d: init.d, e: offset.x, f: offset.y };\n Utils.extend(data.item, { transformMatrix: actual });\n }\n // console.log(data.item.transformMatrix);\n }\n };\n this._dragEndHandler = (evt) => {\n this._dragging = false;\n const args = evt.detail, data = args.data, transform = data.item.transformMatrix;\n AdapterUtils.itemDispatch(data.item, evt, { x: transform.e, y: transform.f });\n };\n // #endregion\n this._mouseleaveHandler = (evt) => {\n if (this._dragging) {\n return;\n }\n const hitTarget = this._hitTarget;\n if (Utils.isNull(hitTarget)) {\n return;\n }\n this._scopeEvent = evt;\n const nap = { x: Number.NaN, y: Number.NaN };\n this._pointer = { page: nap, screen: nap, client: nap };\n const canvas = evt.srcElement;\n const stage = GETVAR(canvas, CANVAS_SCENE_VAR);\n this._requestDraw(stage);\n };\n this._mousemoveHandler = (evt) => {\n this._scopeEvent = evt;\n this._pointer = CustomEventUtils.getEventCoordinates(evt);\n const canvas = evt.srcElement;\n const stage = GETVAR(canvas, CANVAS_SCENE_VAR);\n this._requestDraw(stage);\n if (!this._dragging) {\n if (!Utils.isNull(this._hitTarget)) {\n AdapterUtils.stageDispatch(stage, 'move', evt);\n }\n }\n };\n this._mouseDownUpHandler = (evt) => {\n this._scopeEvent = evt;\n this._pointer = CustomEventUtils.getEventCoordinates(evt);\n const canvas = evt.target;\n if (canvas instanceof HTMLCanvasElement) {\n const stage = GETVAR(canvas, CANVAS_SCENE_VAR), hitTarget = this._hitTarget;\n const type = evt.type.replace(/^(mouse|touch)/, ''), fineType = type === 'end' ? 'click' : type;\n const opts = getStageOptions(stage);\n if (CustomEventUtils.matchModifiers(evt, opts.clickModifiers)) {\n if (!Utils.isNull(hitTarget) && hitTarget.stage === stage) {\n AdapterUtils.itemDispatch(hitTarget, fineType, evt);\n }\n else {\n AdapterUtils.stageDispatch(stage, fineType, evt);\n }\n }\n }\n };\n this._scenes = new WeakMap();\n this._handles = new WeakMap();\n }\n snapshot(stage, backgroundColor, type, quality) {\n const scenes = this._scenes;\n if (scenes.has(stage)) {\n const ctx2d = scenes.get(stage).context, srcCanvas = ctx2d.canvas;\n return this.snapshotElement(srcCanvas, backgroundColor, type, quality);\n }\n else {\n return Promise.resolve(null);\n }\n }\n getCanvas(stage) {\n const scenes = this._scenes;\n if (scenes.has(stage)) {\n const ctx2d = scenes.get(stage).context;\n return ctx2d.canvas;\n }\n else {\n return null;\n }\n }\n _getScreenInverseMatrix(m, offset) {\n return Matrix2D.invert({ a: m.a, b: m.b, c: m.c, d: m.d, e: m.e + offset.x, f: m.f + offset.y });\n }\n getTransformMatrix(scene) {\n const scenes = this._scenes;\n if (scenes.has(scene)) {\n return scenes.get(scene).screenInverseMatrix;\n }\n return Matrix2D.identity;\n }\n #dragger;\n viewActivatedCallback() {\n super.viewActivatedCallback();\n const dragDrop = this.#dragger = document.createElement(P + '-drag-drop');\n dragDrop.mode = UI.DragDataMode.Copy;\n dragDrop.dropBehavior = UI.DropBehavior.None;\n dragDrop.spillBehavior = UI.DropTargetMissedBehavior.None;\n const floater = document.createElement('div');\n floater.hidden = true;\n dragDrop.floater = floater;\n // append\n const shell = CustomElementUtils.findAncestorShell(this);\n shell.appendChild(dragDrop);\n dragDrop.addEventListener(UI.DragDropEventType.Init, this._dragInitHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.Drag, this._draggingHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.End, this._dragEndHandler, false);\n }\n disconnectedCallback() {\n const dragger = this.#dragger;\n if (!Utils.isNull(dragger)) {\n dragger.removeEventListener(UI.DragDropEventType.Init, this._dragInitHandler, false);\n dragger.removeEventListener(UI.DragDropEventType.Drag, this._draggingHandler, false);\n dragger.removeEventListener(UI.DragDropEventType.End, this._dragEndHandler, false);\n dragger.remove();\n }\n super.disconnectedCallback();\n }\n invalidateSize(scene, size) {\n const scenes = this._scenes;\n if (!Utils.isNull(scene) && !Utils.isNullOrEmpty(size)) {\n if (scenes.has(scene)) {\n const tuple = scenes.get(scene), ctx = tuple.context;\n ctx.canvas.width = size.width;\n ctx.canvas.height = size.height;\n const offset = tuple.offset = Utils.offsetRect(ctx.canvas);\n // transform matrix\n const stage = { x: 0, y: 0, width: size.width, height: size.height }, aspectRatio = scene.aspectRatio, viewbox = scene.viewbox;\n if (AdapterUtils.isValidViewbox(viewbox)) {\n // defaults to the equivalent of SVG's xMidYMid meet\n let mode = 'contain', align = 'center', valign = 'middle';\n if (typeof aspectRatio === 'object') {\n mode = aspectRatio.slice ? 'cover' : 'contain';\n switch (aspectRatio.x) {\n case 'min':\n align = 'left';\n break;\n case 'max':\n align = 'right';\n break;\n }\n switch (aspectRatio.y) {\n case 'min':\n valign = 'top';\n break;\n case 'max':\n valign = 'bottom';\n break;\n }\n }\n ;\n // mimic svg viewbox\n const mscale = Rect.findTransform({ x: 0, y: 0, width: viewbox.width, height: viewbox.height }, stage, mode, align, valign);\n const m = Matrix2D.translate(mscale, { x: -mscale.a * viewbox.x, y: -mscale.a * viewbox.y });\n tuple.transformMatrix = m;\n tuple.screenInverseMatrix = this._getScreenInverseMatrix(m, offset);\n }\n else {\n tuple.transformMatrix = Matrix2D.identity;\n }\n }\n }\n this._requestDraw(scene);\n }\n getHitTarget(stage) {\n const target = this._hitTarget;\n if (!Utils.isNull(target) && target.stage === stage) {\n return target;\n }\n return null;\n }\n initialize(scene) {\n if (Utils.isNull(scene)) {\n throw 'Provided scene is null or undefined.';\n }\n const scenes = this._scenes;\n const dragger = this.#dragger;\n // already in the store?\n if (scenes.has(scene)) {\n const canvas = scenes.get(scene).context.canvas;\n if (!Utils.isNull(dragger)) {\n dragger.register(canvas);\n }\n return canvas;\n }\n const stage = scene.stage;\n // empty stage DOM\n stage.innerHTML = '';\n const canvas = document.createElement('canvas');\n canvas.setAttribute('part', 'stage');\n SETVAR(canvas, CANVAS_SCENE_VAR, scene);\n const context = canvas.getContext('2d');\n canvas.addEventListener('mousemove', this._mousemoveHandler, false);\n canvas.addEventListener('mouseleave', this._mouseleaveHandler, false);\n canvas.addEventListener('touchstart', this._mouseDownUpHandler, { passive: true });\n canvas.addEventListener('touchmove', this._mouseDownUpHandler, { passive: true });\n canvas.addEventListener('touchend', this._mouseDownUpHandler, { passive: true });\n canvas.addEventListener('click', this._mouseDownUpHandler, false);\n canvas.addEventListener('mousedown', this._mouseDownUpHandler, false);\n canvas.addEventListener('mouseup', this._mouseDownUpHandler, false);\n stage.appendChild(canvas);\n scenes.set(scene, { context, transformMatrix: Matrix2D.identity, offset: Utils.offsetRect(canvas), screenInverseMatrix: Matrix2D.identity });\n if (!Utils.isNull(dragger)) {\n dragger.register(canvas);\n }\n return canvas;\n }\n dispose(scene) {\n const scenes = this._scenes;\n if (scenes.has(scene)) {\n var tuple = scenes.get(scene), context = tuple.context, canvas = context.canvas;\n const dragger = this.#dragger;\n if (!Utils.isNull(dragger)) {\n dragger.unregister(canvas);\n }\n canvas.removeEventListener('click', this._mouseDownUpHandler, false);\n canvas.removeEventListener('touchend', this._mouseDownUpHandler, false);\n canvas.removeEventListener('mousedown', this._mouseDownUpHandler, false);\n canvas.removeEventListener('mouseup', this._mouseDownUpHandler, false);\n // canvas.removeEventListener('touchmove', this._mouseDownUpHandler);\n canvas.removeEventListener('touchstart', this._mouseDownUpHandler);\n canvas.removeEventListener('mouseleave', this._mouseleaveHandler, false);\n canvas.removeEventListener('mousemove', this._mousemoveHandler, false);\n // remove\n canvas.remove();\n scenes.delete(scene);\n }\n }\n _requestDraw(scene) {\n const handles = this._handles;\n if (handles.has(scene)) {\n cancelAnimationFrame(handles.get(scene));\n }\n const throttle = () => {\n this.draw(scene);\n return requestAnimationFrame(() => { });\n };\n handles.set(scene, throttle());\n }\n #canvasCssStyle;\n draw(scene) {\n const scenes = this._scenes, handles = this._handles;\n if (!Utils.isNull(scene)) {\n if (scene.adapter !== this) {\n // not a pertinent stage anymore\n if (scenes.has(scene)) {\n scenes.delete(scene);\n handles.get(scene);\n }\n return;\n }\n if (!scenes.has(scene)) {\n // forgiving behavior (call initialize() if it's the case)\n this.initialize(scene);\n return;\n }\n if (handles.has(scene)) {\n // already in the drawing loop, reset\n cancelAnimationFrame(handles.get(scene));\n }\n const formerHitTarget = this._hitTarget;\n const items = scene.datasource || [];\n // reset hit target\n this._hitTarget = null;\n // clear stage\n const tuple = scenes.get(scene), context = tuple.context, canvas = context.canvas;\n this.#canvasCssStyle = getComputedStyle(canvas);\n context.resetTransform();\n context.clearRect(0, 0, canvas.width, canvas.height);\n // viewbox\n const m = tuple.transformMatrix;\n context.setTransform(m);\n // hit test\n const pointer = this._pointer, offset = tuple.offset, point = Number.isNaN(pointer.page.x) || Number.isNaN(pointer.page.y) ? null : { x: pointer.page.x - offset.x, y: pointer.page.y - offset.y };\n // draw recursively\n for (let drawable of items) {\n this._draw(scene, context, drawable, { transformMatrix: m }, point);\n }\n // check hit target\n const currentHitTarget = this._hitTarget;\n if (currentHitTarget != formerHitTarget) {\n if (!Utils.isNull(formerHitTarget)) {\n if (formerHitTarget instanceof Element) {\n formerHitTarget.dispatchEvent(new DrawableEvent('out', formerHitTarget, this._scopeEvent, m));\n }\n scene.dispatchEvent(new DrawableEvent('itemout', formerHitTarget, this._scopeEvent, m));\n }\n if (!Utils.isNull(currentHitTarget)) {\n if (currentHitTarget instanceof Element) {\n currentHitTarget.dispatchEvent(new DrawableEvent('over', currentHitTarget, this._scopeEvent, m));\n }\n scene.dispatchEvent(new DrawableEvent('itemover', currentHitTarget, this._scopeEvent, m));\n }\n }\n // do not loop\n // this._requestDraw(scene);\n }\n }\n _draw(scene, ctx, item, state, point) {\n item.stage ??= scene;\n if (isDrawable(item)) {\n if (item.hide) {\n return;\n }\n }\n // store parent matrix value for dragging purposes\n if (isUiObject(item) && item.draggable && !item.hide && !item.inert) {\n SETVAR(item, PARENT_MATRIX_VAR, ctx.getTransform().inverse());\n }\n let t;\n if (isUiObject(item)) {\n t = item.transformMatrix;\n if (!Utils.isNull(t) && !Matrix2D.isIdentity(t)) {\n ctx.transform(t.a, t.b, t.c, t.d, t.e, t.f);\n }\n }\n let contextPresentationState = state;\n if (isPresentationObject(item)) {\n //const stateWithWorldTransformMatrix = Utils.extend({}, state, { transformMatrix: ctx.getTransform() });\n contextPresentationState = PresentationState.combine(item, state, ctx.getTransform());\n // set presentation state\n this._setPresentationState(ctx, contextPresentationState);\n }\n if (isShape(item) || item instanceof ShapeElement) {\n this._drawShape(ctx, item, point);\n }\n else if (isText(item) || item instanceof PacemTextElement) {\n this._drawText(ctx, item, point);\n }\n else if (isImage(item) || item instanceof PacemImageElement) {\n this._drawImage(ctx, item, point);\n }\n else if (isGroup(item) || item instanceof PacemGroupElement) {\n for (let child of item.childDrawables || []) {\n this._draw(scene, ctx, child, contextPresentationState, point);\n }\n }\n // store global matrix value for debugging purposes\n if (isUiObject(item) && item.draggable && !item.hide && !item.inert) {\n SETVAR(item, WORLD_MATRIX_VAR, ctx.getTransform().inverse());\n }\n // reset presentation state\n this._setPresentationState(ctx, state);\n }\n _setPresentationState(ctx, item) {\n ctx.setTransform(item.transformMatrix);\n if (!Utils.isNullOrEmpty(item.stroke) && !isNone(item.stroke)) {\n ctx.strokeStyle = item.stroke;\n }\n else {\n ctx.strokeStyle = 'transparent';\n }\n if (!Utils.isNullOrEmpty(item.lineWidth)) {\n ctx.lineWidth = item.lineWidth;\n }\n else {\n ctx.lineWidth = 0;\n }\n if (!Utils.isNullOrEmpty(item.dashArray)) {\n ctx.setLineDash(item.dashArray);\n }\n else {\n ctx.setLineDash([]);\n }\n if (!Utils.isNullOrEmpty(item.lineCap)) {\n ctx.lineCap = item.lineCap;\n }\n else {\n ctx.lineCap = 'butt';\n }\n if (!Utils.isNullOrEmpty(item.lineJoin)) {\n ctx.lineJoin = item.lineJoin;\n }\n else {\n ctx.lineJoin = 'miter';\n }\n if (typeof item.fill === 'object' && !Utils.isNullOrEmpty(item.fill)) {\n const { stops } = item.fill;\n let gradient;\n if (isLinearGradient(item.fill)) {\n // linear gradient\n const { start, end } = item.fill;\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n }\n else if (isRadialGradient(item.fill)) {\n // radial gradient\n const { center, radius } = item.fill;\n gradient = ctx.createRadialGradient(center.x, center.y, radius, center.x, center.y, radius);\n }\n else {\n throw new Error('Unmanaged gradient type.');\n }\n for (let stop of stops) {\n gradient.addColorStop(stop.offset, stop.color);\n }\n ctx.fillStyle = gradient;\n }\n else if (!Utils.isNullOrEmpty(item.fill) && typeof item.fill === 'string' && !isNone(item.fill)) {\n ctx.fillStyle = item.fill;\n }\n else {\n ctx.fillStyle = 'transparent';\n }\n if (!Utils.isNullOrEmpty(item.opacity)) {\n ctx.globalAlpha = item.opacity;\n }\n else {\n ctx.globalAlpha = 1.0;\n }\n }\n _drawImage(ctx, item, point) {\n const CANVAS_IMAGESOURCE_VAR = 'pacem:2d-canvas-imagesrc';\n let img = GETVAR(item, CANVAS_IMAGESOURCE_VAR);\n const imgLoadHandler = () => {\n let dw = img.naturalWidth, dh = img.naturalHeight, w = item.width, h = item.height;\n if (w > 0 && h > 0) {\n }\n else if (w > 0) {\n h = dh * w / dw;\n }\n else if (h > 0) {\n w = dw * h / dh;\n }\n else {\n w = dw;\n h = dh;\n }\n if (!this._dragging\n && !item.inert /* is hit-test visible? */\n && !Utils.isNull(point)) {\n const path2D = new Path2D(`M ${item.x} ${item.y} h ${w} v ${h} H ${item.x} Z`);\n if (ctx.isPointInPath(path2D, point.x, point.y)) {\n // overwrite current hit-target (last one wins)\n this._hitTarget = item;\n }\n }\n ctx.globalAlpha = fallback(item.opacity, 1);\n ctx.drawImage(img, item.x, item.y, w, h);\n };\n if (Utils.isNull(img)) {\n img = new Image();\n img.src = item.src;\n img.onload = () => {\n SETVAR(item, CANVAS_IMAGESOURCE_VAR, img);\n imgLoadHandler();\n };\n }\n else {\n imgLoadHandler();\n }\n }\n _drawText(ctx, item, point) {\n const defaults = this.DefaultShapeValues;\n const color = ctx.fillStyle = fallback(item.color, defaults.stroke);\n const m = ctx.getTransform(), fontSize = item.fontSize > 0 ? `${item.fontSize}px` : this.#canvasCssStyle.fontSize, fontStyle = item.fontStyle || this.#canvasCssStyle.fontStyle, fontWeight = item.fontWeight || this.#canvasCssStyle.fontWeight;\n ctx.font = `${fontStyle} ${fontWeight} ${fontSize} ${(item.fontFamily ?? this.#canvasCssStyle.fontFamily)}`;\n ctx.textAlign = item.textAnchor === 'middle' ? 'center' : item.textAnchor;\n ctx.fillText(item.text, item.anchor.x, item.anchor.y);\n ctx.globalAlpha = fallback(item.opacity, 1);\n const hasColor = !isNone(color);\n if (!this._dragging\n && !item.inert /* is hit-test visible? */\n && !Utils.isNull(point)) {\n const bbox = ctx.measureText(item.text);\n const width = bbox.width, height = bbox.actualBoundingBoxAscent + bbox.actualBoundingBoxDescent, x = item.anchor.x - bbox.actualBoundingBoxLeft, y = item.anchor.y - bbox.actualBoundingBoxAscent;\n const path2D = new Path2D(`M ${x} ${y} h ${width} v ${height} H ${x} z`);\n if (hasColor && ctx.isPointInPath(path2D, point.x, point.y)) {\n // overwrite current hit-target (last one wins)\n this._hitTarget = item;\n }\n }\n }\n _drawShape(ctx, item, point) {\n if (Utils.isNullOrEmpty(item?.pathData)) {\n return;\n }\n ctx.beginPath();\n // Path2D\n const hasFill = typeof ctx.fillStyle !== 'string' || !isNone(ctx.fillStyle), hasStroke = typeof ctx.strokeStyle !== 'string' || !isNone(ctx.strokeStyle);\n var path2D = new Path2D(item.pathData);\n if (!this._dragging\n && !item.inert /* is hit-test visible? */\n && !Utils.isNull(point)) {\n if ((hasFill && ctx.isPointInPath(path2D, point.x, point.y))\n || (hasStroke && ctx.isPointInStroke(path2D, point.x, point.y))) {\n // overwrite current hit-target (last one wins)\n this._hitTarget = item;\n }\n }\n if (hasStroke) {\n ctx.stroke(path2D);\n }\n if (hasFill) {\n ctx.fill(path2D);\n }\n const hasEnoughVertices = !Utils.isNullOrEmpty(item.vertices) && item.vertices.length > 1, hasMarkerEnd = !Utils.isNull(item.markerEnd), hasMarkerStart = !Utils.isNull(item.markerStart), hasMarkerMid = !Utils.isNull(item.markerMid);\n if (hasMarkerEnd || hasMarkerMid || hasMarkerStart) {\n if (!hasEnoughVertices) {\n this.log(Logging.LogLevel.Warn, \"Not enough vertices were explicited in order to make markers renderable.\");\n }\n }\n // WebGL: we can render markers only if vertices are explicit\n if (hasEnoughVertices) {\n const matrix = ctx.getTransform();\n if (hasMarkerStart) {\n const marker = item.markerEnd, from = item.vertices[1], to = item.vertices[0];\n const orientation = Math.atan2(to.y - from.y, to.x - from.x);\n this._drawMarker(ctx, marker, to, orientation);\n }\n if (hasMarkerMid) {\n const marker = item.markerEnd;\n for (let j = 1; j < item.vertices.length - 1; j++) {\n // reset transform, just in case\n ctx.setTransform(matrix);\n const from = item.vertices[j], to = item.vertices[j + 1];\n const orientation = Math.atan2(to.y - from.y, to.x - from.x);\n this._drawMarker(ctx, marker, to, orientation);\n }\n }\n if (hasMarkerEnd) {\n // reset transform, just in case\n ctx.setTransform(matrix);\n const marker = item.markerEnd, from = item.vertices[item.vertices.length - 2], to = item.vertices[item.vertices.length - 1];\n const orientation = Math.atan2(to.y - from.y, to.x - from.x);\n this._drawMarker(ctx, marker, to, orientation);\n }\n }\n }\n _drawMarker(ctx, marker, point, orientation) {\n const defaults = this.DefaultShapeValues;\n const refX = marker.ref?.x || 0, refY = marker.ref?.y || 0;\n const width = (marker.width || 1) * ctx.lineWidth, height = (marker.width || 1) * ctx.lineWidth;\n let viewbox = marker.viewbox, stage = { x: 0, y: 0, width: width, height: height };\n if (Utils.isNull(viewbox)) {\n viewbox = stage;\n }\n // prepare\n const mscale = { a: stage.width / viewbox.width, d: stage.height / viewbox.height }; // Rect.findTransform({ x: 0, y: 0, width: viewbox.width, height: viewbox.height }, stage, 'stretch', 'left', 'top');\n // execute\n ctx.translate(point.x, point.y);\n ctx.rotate(orientation);\n ctx.scale(mscale.a, mscale.d);\n ctx.translate(-refX, -refY);\n ctx.fillStyle = fallback(marker.fill, defaults.fill);\n ctx.strokeStyle = fallback(marker.stroke, defaults.stroke);\n // Path2D\n const hasMarkerFill = !isNone(marker.fill), hasMarkerStroke = !isNone(marker.stroke);\n var markerPath2D = new Path2D(marker.pathData);\n if (hasMarkerFill) {\n ctx.fill(markerPath2D);\n }\n if (hasMarkerStroke) {\n ctx.stroke(markerPath2D);\n }\n }\n};\nPacemCanvasAdapterElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-canvas-adapter' })\n], PacemCanvasAdapterElement);\nexport { PacemCanvasAdapterElement };\n", "import { PacemEventTarget, Utils } from '@pacem/pacem-core';\nconst JPEG_QUALITY = .9;\n/**\n * Base class for the rendering adapters (SVG, Canvas) assignable to a `Pacem2DElement` stage. Concrete\n * adapters are responsible for initializing/disposing the underlying DOM surface, sizing it, drawing the\n * scene graph, hit-testing and producing snapshot images.\n */\nexport class Pacem2DAdapterElement extends PacemEventTarget {\n constructor() {\n super(...arguments);\n /** Fallback stroke/fill/lineWidth values used when a shape doesn't provide its own. */\n this.DefaultShapeValues = {\n stroke: \"#000\",\n lineWidth: 1,\n fill: \"#fff\"\n };\n }\n /**\n * Rasterizes the given DOM element into an image `Blob`, defaulting to JPEG when `bgColor` is provided\n * (to flatten transparency against it) and to PNG otherwise.\n * @param element Element to snapshot.\n * @param bgColor Background color to flatten transparency against; if set, defaults `type` to `'image/jpeg'`.\n * @param type Explicit image MIME type, overrides the `bgColor`-based default.\n * @param quality Compression quality, applicable to lossy formats (defaults to `.9` for JPEG).\n */\n snapshotElement(element, bgColor, type, quality) {\n const jpeg = !Utils.isNullOrEmpty(bgColor), mime = type ?? (jpeg ? 'image/jpeg' : null), compression = quality ?? (jpeg ? JPEG_QUALITY : null);\n return Utils.snapshotElement(element, bgColor, mime, compression);\n }\n}\n", "var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { CustomElement, P, CustomElementUtils, CustomEventUtils, Utils, UI, avoidHandler } from '@pacem/pacem-core';\nimport { Matrix2D } from '@pacem/pacem-foundation';\nimport { UiElement, ShapeElement } from '../types';\nimport { TAG_MIDDLE_NAME } from '../constants';\nimport { Pacem2DAdapterElement } from '../adapter';\nimport { getStageOptions } from '../stage';\nimport { AdapterUtils } from './utils';\nimport { PacemImageElement } from '../image';\nimport { PacemTextElement } from '../text';\nimport { isGroup, isShape, isText, isImage, isUiObject, isPresentationObject, isDrawable, isLinearGradient, isRadialGradient } from '../drawing';\n//namespace Pacem.Components.Drawing {\nconst SVG_NS = 'http://www.w3.org/2000/svg', DRAWABLE_VAR = 'pacem:2-svg-drawable', STAGE_VAR = 'pacem:2d-svg-stage', GETVAR = CustomElementUtils.getAttachedPropertyValue, SETVAR = CustomElementUtils.setAttachedPropertyValue, DELVAR = CustomElementUtils.deleteAttachedPropertyValue;\nfunction fallback(v, f) {\n return Utils.isNull(v) ? f : v;\n}\nfunction replaceChildAt(parent, newChild, targetIndex) {\n if (targetIndex >= parent.children.length) {\n parent.appendChild(newChild);\n return null;\n }\n else {\n return parent.replaceChild(newChild, parent.children.item(targetIndex));\n }\n}\n/**\n * `<pacem-2d-svg-adapter>`: renders a `Pacem2DElement` stage as an inline SVG document, keeping one SVG\n * element per drawable in sync (path/text/image/group), along with markers and gradients, and drives\n * pointer hit-testing and drag & drop through the SVG DOM.\n */\nlet PacemSvgAdapterElement = class PacemSvgAdapterElement extends Pacem2DAdapterElement {\n constructor() {\n super(...arguments);\n this._hitTarget = null;\n this._dragInitHandler = (evt) => {\n const args = evt.detail, el = args.element, drawable = GETVAR(el, DRAWABLE_VAR), stageTransformMatrix = drawable.stage.transformMatrix, initialMatrix = drawable.transformMatrix ?? Matrix2D.identity;\n args.data = {\n stageTransformMatrix, item: drawable,\n initialTransformMatrix: initialMatrix\n };\n const reject = AdapterUtils.itemDispatch(drawable, evt, { x: 0, y: 0 });\n if (reject) {\n // reject dragging\n evt.preventDefault();\n }\n };\n this._draggingHandler = (evt) => {\n avoidHandler(evt);\n this.#dragging = true;\n const el = evt.detail.element;\n const data = evt.detail.data;\n const args = evt.detail;\n const screenOffset = { x: (args.currentPosition.x - args.origin.x) * data.stageTransformMatrix.a, y: (args.currentPosition.y - args.origin.y) * data.stageTransformMatrix.d };\n const offset = {\n x: screenOffset.x + data.initialTransformMatrix.e,\n y: screenOffset.y + data.initialTransformMatrix.f\n }, \n // this is not correct when item or any of its parents have been rotated!\n stageOffset = {\n x: screenOffset.x + data.stageTransformMatrix.e,\n y: screenOffset.y + data.stageTransformMatrix.f\n };\n //console.log(`current pos: ${args.currentPosition.x},${args.currentPosition.y}`);\n //console.log(`origin pos: ${args.origin.x},${args.origin.y}`);\n //console.log(`offset: ${offset.x},${offset.y}`);\n //console.log(data.stageTransformMatrix);\n //console.log(el.style.transform); console.log(data.initialTransformMatrix);\n const rejected = AdapterUtils.itemDispatch(data.item, evt, stageOffset);\n if (!rejected) {\n const init = data.initialTransformMatrix;\n el.style.transform = `matrix(${init.a},${init.b},${init.c},${init.d},${offset.x},${offset.y})`;\n }\n };\n this._dragEndHandler = (evt) => {\n this.#dragging = false;\n const args = evt.detail, el = args.element, data = args.data, transform = Utils.deserializeTransform(el.style);\n // store transform\n const offset = { x: transform.e, y: transform.f };\n if (data.item instanceof UiElement) {\n data.item.translateX = offset.x;\n data.item.translateY = offset.y;\n }\n else {\n const init = data.initialTransformMatrix, actual = { a: init.a, b: init.b, c: init.c, d: init.d, e: offset.x, f: offset.y };\n Utils.extend(data.item, { transformMatrix: actual });\n }\n el.style.transform = '';\n AdapterUtils.itemDispatch(data.item, evt, offset);\n };\n this._mouseleaveHandler = (evt) => {\n if (this.#dragging) {\n return;\n }\n const hitTarget = this._hitTarget;\n if (Utils.isNull(hitTarget)) {\n return;\n }\n this._hitTarget = null;\n if (!Utils.isNull(hitTarget)) {\n this.#dragger.unregister(this._items.get(hitTarget));\n AdapterUtils.itemDispatch(hitTarget, 'out', evt);\n }\n };\n this._mousemoveHandler = (evt) => {\n var pt = CustomEventUtils.getEventCoordinates(evt).client;\n if (!this.#dragging) {\n // not dragging around\n var d = null;\n const root = evt.target.getRootNode();\n root.elementsFromPoint(pt.x, pt.y).find(i => {\n d = GETVAR(i, DRAWABLE_VAR);\n return d && !d.inert;\n });\n var old = this._hitTarget, val = d;\n if (Utils.isNull(d && d.stage) || !this._scenes.has(d.stage) || d.inert) {\n val = null;\n }\n const hitTarget = this._hitTarget = val;\n if (val !== old) {\n if (!Utils.isNull(old)) {\n this.#dragger.unregister(this._items.get(old));\n AdapterUtils.itemDispatch(old, 'out', evt);\n }\n if (!Utils.isNull(val)) {\n if (val.draggable) {\n this.#dragger.register(this._items.get(val));\n }\n AdapterUtils.itemDispatch(val, 'over', evt);\n }\n }\n if (Utils.isNull(hitTarget)) {\n // dispatch only if no hit target\n const svg = evt.currentTarget;\n const stage = GETVAR(svg, STAGE_VAR);\n if (!Utils.isNull(stage)) {\n AdapterUtils.stageDispatch(stage, 'move', evt);\n }\n }\n }\n };\n this._mouseDownUpHandler = (evt) => {\n const svg = evt.currentTarget;\n if (svg instanceof SVGSVGElement) {\n const stage = GETVAR(svg, STAGE_VAR), hitTarget = this._hitTarget;\n const type = evt.type.replace(/^mouse/, '');\n const opts = getStageOptions(stage);\n if (CustomEventUtils.matchModifiers(evt, opts.clickModifiers)) {\n if (!Utils.isNull(hitTarget) && hitTarget.stage === stage) {\n AdapterUtils.itemDispatch(hitTarget, type, evt);\n }\n else {\n AdapterUtils.stageDispatch(stage, type, evt);\n }\n }\n }\n };\n this._scenes = new WeakMap();\n this._markers = new WeakMap();\n this._gradients = new WeakMap();\n this._items = new WeakMap();\n }\n snapshot(stage, background, type, quality) {\n if (this._scenes.has(stage)) {\n const svg = this._scenes.get(stage);\n return this.snapshotElement(svg, background, type, quality);\n }\n else {\n return Promise.resolve(null);\n }\n }\n getTransformMatrix(scene) {\n const scenes = this._scenes;\n if (scenes.has(scene)) {\n return scenes.get(scene).getScreenCTM().inverse();\n }\n return Matrix2D.identity;\n }\n #dragger;\n viewActivatedCallback() {\n super.viewActivatedCallback();\n const dragDrop = this.#dragger = document.createElement(P + '-drag-drop');\n dragDrop.mode = UI.DragDataMode.Self;\n // append\n const shell = CustomElementUtils.findAncestorShell(this);\n shell.appendChild(dragDrop);\n dragDrop.addEventListener(UI.DragDropEventType.Init, this._dragInitHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.Drag, this._draggingHandler, false);\n dragDrop.addEventListener(UI.DragDropEventType.End, this._dragEndHandler, false);\n }\n disconnectedCallback() {\n const dragger = this.#dragger;\n if (!Utils.isNull(dragger)) {\n dragger.removeEventListener(UI.DragDropEventType.Init, this._dragInitHandler, false);\n dragger.removeEventListener(UI.DragDropEventType.Drag, this._draggingHandler, false);\n dragger.removeEventListener(UI.DragDropEventType.End, this._dragEndHandler, false);\n dragger.remove();\n }\n super.disconnectedCallback();\n }\n invalidateSize(scene, size) {\n const scenes = this._scenes;\n if (!Utils.isNull(scene) && !Utils.isNullOrEmpty(size)) {\n if (scenes.has(scene)) {\n var svg = scenes.get(scene);\n svg.setAttribute('width', size.width + '');\n svg.setAttribute('height', size.height + '');\n const rect = scene.viewbox, aspectRatio = scene.aspectRatio;\n if (AdapterUtils.isValidViewbox(rect)) {\n svg.setAttribute('viewBox', `${rect.x} ${rect.y} ${rect.width} ${rect.height}`);\n }\n else {\n svg.removeAttribute('viewBox');\n }\n if (Utils.isNullOrEmpty(aspectRatio) || typeof aspectRatio === 'string') {\n svg.removeAttribute('preserveAspectRatio');\n }\n else {\n svg.setAttribute('preserveAspectRatio', `xM${aspectRatio.x.substring(1)}YM${aspectRatio.y.substring(1)} ${(aspectRatio.slice ? 'slice' : 'meet')}`);\n }\n }\n }\n }\n initialize(scene) {\n if (Utils.isNull(scene)) {\n throw 'Provided scene is null or undefined.';\n }\n const scenes = this._scenes;\n // already in the store?\n if (scenes.has(scene)) {\n return scenes.get(scene);\n }\n const stage = scene.stage;\n // empty stage DOM and clear dictionary\n stage.innerHTML = '';\n this._items = new WeakMap();\n var svg = document.createElementNS(SVG_NS, 'svg');\n svg.setAttribute('part', 'stage');\n SETVAR(svg, STAGE_VAR, scene);\n stage.appendChild(svg);\n scenes.set(scene, svg);\n const options = { passive: false, capture: true };\n svg.addEventListener('mousemove', this._mousemoveHandler, false);\n svg.addEventListener('click', this._mouseDownUpHandler, false);\n svg.addEventListener('mousedown', this._mouseDownUpHandler, false);\n svg.addEventListener('mouseup', this._mouseDownUpHandler, false);\n svg.addEventListener('mouseleave', this._mouseleaveHandler, false);\n // draw right away\n // this.draw(scene);\n return svg;\n }\n dispose(scene) {\n const scenes = this._scenes;\n if (scenes.has(scene)) {\n var svg = scenes.get(scene);\n svg.removeEventListener('mousemove', this._mousemoveHandler);\n svg.removeEventListener('click', this._mouseDownUpHandler);\n svg.removeEventListener('mousedown', this._mouseDownUpHandler);\n svg.removeEventListener('mouseup', this._mouseDownUpHandler);\n svg.removeEventListener('mouseleave', this._mouseleaveHandler);\n // remove\n DELVAR(svg, STAGE_VAR);\n svg.remove();\n scenes.delete(scene);\n }\n }\n getHitTarget(scene) {\n return this._hitTarget;\n }\n draw(scene, item, deepRedraw = false) {\n const scenes = this._scenes, dict = this._items;\n if (!Utils.isNull(scene)) {\n if (scene.adapter === this) {\n if (!scenes.has(scene)) {\n // forgiving behavior (call initialize() if it's the case)\n this.initialize(scene);\n }\n }\n else {\n if (scenes.has(scene)) {\n scenes.delete(scene);\n }\n return;\n }\n }\n else {\n return;\n }\n var items = scene.datasource, flow = true, parent = scenes.get(scene);\n // item provided?\n if (!Utils.isNull(item) && dict.has(item)) {\n items = [item];\n parent = dict.get(item).parentNode;\n flow = false;\n }\n if (flow) {\n // sweep everything, quick and dirty\n parent.innerHTML = '<defs></defs>';\n this._markers = new WeakMap();\n }\n this._draw(scene, parent, items || [], flow, deepRedraw);\n }\n #dragging;\n _hasItems(object) {\n return isGroup(object);\n }\n _disposeSvg(el) {\n if (!Utils.isNull(el)) {\n var drawable = GETVAR(el, DRAWABLE_VAR);\n DELVAR(el, DRAWABLE_VAR);\n this._items.delete(drawable);\n }\n }\n _draw(scene, parent, items, flow, deepRedraw) {\n const dict = this._items;\n // children counter\n let j = 0;\n if (parent.firstElementChild instanceof SVGDefsElement) {\n j++;\n }\n if (!Utils.isNullOrEmpty(items)) {\n for (let item of items) {\n item.stage ??= scene;\n let el;\n if (!dict.has(item)) {\n el = this._buildSVGElement(item);\n SETVAR(el, DRAWABLE_VAR, item);\n this._disposeSvg(replaceChildAt(parent, el, j));\n dict.set(item, el);\n }\n else {\n el = dict.get(item);\n if (el.parentNode !== parent) {\n this._disposeSvg(replaceChildAt(parent, el, j));\n }\n }\n if (isDrawable(item)) {\n if (item.hide) {\n el.setAttribute('display', 'none');\n }\n else {\n el.removeAttribute('display');\n }\n el.style.transform = '';\n }\n if (isShape(item)) {\n const path = el;\n path.setAttribute('d', fallback(item.pathData, 'M0,0'));\n // markers\n for (let { marker, suffix } of [{ marker: item.markerStart, suffix: 'start' }, { marker: item.markerEnd, suffix: 'end' }, { marker: item.markerMid, suffix: 'mid' }]) {\n if (marker) {\n const markerSvg = this._ensureMarker(parent, marker);\n path.setAttribute('marker-' + suffix, `url(#${markerSvg.id})`);\n }\n else {\n path.removeAttribute('marker-' + suffix);\n }\n }\n }\n else if (isText(item)) {\n const text = el;\n text.textContent = item.text;\n text.style.fill = Utils.isNullOrEmpty(item.color) ? '' : item.color;\n text.style.fontFamily = Utils.isNullOrEmpty(item.fontFamily) ? '' : item.fontFamily;\n //if (item.fontSize > 0) {\n // text.setAttribute('font-size', item.fontSize.toString());\n //} else {\n // text.removeAttribute('font-size');\n //}\n text.style.fontSize = Utils.isNull(item.fontSize) ? '' : item.fontSize + 'px';\n if (!Utils.isNullOrEmpty(item.fontWeight)) {\n text.style.fontWeight = item.fontWeight;\n }\n if (!Utils.isNullOrEmpty(item.fontStyle)) {\n text.style.fontStyle = item.fontStyle;\n }\n text.setAttribute('text-anchor', fallback(item.textAnchor, 'start'));\n if (!Utils.isNull(item.anchor)) {\n text.setAttribute('x', item.anchor.x.toString());\n text.setAttribute('y', item.anchor.y.toString());\n }\n else {\n text.removeAttribute('x');\n text.removeAttribute('y');\n }\n }\n else if (isImage(item)) {\n const img = el;\n img.setAttribute('href', item.src);\n img.setAttribute('preserveAspectRatio', 'none');\n if (item.width > 0) {\n img.setAttribute('width', '' + item.width);\n }\n else {\n img.removeAttribute('width');\n }\n if (item.height > 0) {\n img.setAttribute('height', '' + item.height);\n }\n else {\n img.removeAttribute('height');\n }\n if (!Utils.isNull(item.x)) {\n img.setAttribute('x', '' + item.x);\n }\n else {\n img.removeAttribute('x');\n }\n if (!Utils.isNull(item.y)) {\n img.setAttribute('y', '' + item.y);\n }\n else {\n img.removeAttribute('y');\n }\n }\n if (isUiObject(item)) {\n const t = item.transformMatrix;\n if (Utils.isNull(t) || Matrix2D.isIdentity(t)) {\n el.removeAttribute('transform');\n }\n else {\n el.setAttribute('transform', `matrix(${t.a} ${t.b} ${t.c} ${t.d} ${t.e} ${t.f})`);\n }\n const opacity = fallback(item.opacity, 1);\n if (opacity === 1) {\n el.removeAttribute('opacity');\n }\n else {\n el.setAttribute('opacity', '' + opacity);\n }\n }\n if (isPresentationObject(item)) {\n if (Utils.isNullOrEmpty(item.fill)) {\n el.removeAttribute('fill');\n }\n else if (typeof item.fill === 'string') {\n el.setAttribute('fill', item.fill);\n }\n else {\n const grad = this._ensureGradient(parent, item.fill);\n el.setAttribute('fill', `url(#${grad.id})`);\n }\n if (Utils.isNullOrEmpty(item.stroke)) {\n el.removeAttribute('stroke');\n }\n else {\n el.setAttribute('stroke', item.stroke);\n }\n if (Utils.isNullOrEmpty(item.dashArray)) {\n el.removeAttribute('stroke-dasharray');\n }\n else {\n el.setAttribute('stroke-dasharray', item.dashArray.join(' '));\n }\n if (Utils.isNullOrEmpty(item.lineCap)) {\n el.removeAttribute('stroke-linecap');\n }\n else {\n el.setAttribute('stroke-linecap', item.lineCap);\n }\n if (Utils.isNullOrEmpty(item.lineJoin)) {\n el.removeAttribute('stroke-linejoin');\n }\n else {\n el.setAttribute('stroke-linejoin', item.lineJoin);\n }\n if (Utils.isNullOrEmpty(item.lineWidth)) {\n el.removeAttribute('stroke-width');\n }\n else {\n el.setAttribute('stroke-width', '' + item.lineWidth);\n }\n //let css = '';\n //if (!Utils.isNullOrEmpty(item.dashArray)) {\n // css += `stroke-dasharray: ${item.dashArray.join(',')};`;\n //}\n //if (!Utils.isNullOrEmpty(item.lineCap)) {\n // css += `stroke-linecap: ${item.lineCap};`;\n //}\n //if (!Utils.isNullOrEmpty(item.lineJoin)) {\n // css += `stroke-linejoin: ${item.lineJoin};`;\n //}\n //el.style.cssText = css;\n //el.setAttribute('stroke-width', '' + fallback(item.lineWidth, defaults.lineWidth));\n }\n // hit test visibility\n if (item.inert) {\n el.style.pointerEvents = 'none';\n }\n else {\n el.style.pointerEvents = '';\n }\n if ((flow || deepRedraw) && this._hasItems(item)) {\n // recursion\n this._draw(scene, el, item.childDrawables, true, deepRedraw);\n }\n j++;\n }\n }\n if (flow) {\n // remove exceeding children (except defs)\n for (let k = parent.children.length - 1; k >= j; k--) {\n const el = parent.children.item(k);\n this._disposeSvg(el);\n el.remove();\n }\n }\n }\n _buildSVGElement(item) {\n if (isShape(item) || item instanceof ShapeElement) {\n return document.createElementNS(SVG_NS, 'path');\n }\n if (isText(item) || item instanceof PacemTextElement) {\n return document.createElementNS(SVG_NS, 'text');\n }\n if (isImage(item) || item instanceof PacemImageElement) {\n return document.createElementNS(SVG_NS, 'image');\n }\n return document.createElementNS(SVG_NS, 'g');\n }\n _ensureGradient(parent, gradient) {\n const store = this._gradients;\n if (!store.has(parent)) {\n store.set(parent, new WeakMap());\n }\n const map = store.get(parent);\n // linear or radial?\n const isLinear = isLinearGradient(gradient), isRadial = isRadialGradient(gradient);\n if (map.has(gradient)) {\n const current = map.get(gradient);\n if ((isLinear && current instanceof SVGLinearGradientElement)\n || (isRadial && current instanceof SVGRadialGradientElement)) {\n // remove from DOM\n current.remove();\n // remove from memoizer\n map.delete(gradient);\n }\n }\n if (!map.has(gradient)) {\n // <defs>\n let defsContainer = parent;\n let defs;\n while (Utils.isNull(defs = defsContainer.querySelector(':scope > defs'))) {\n const parent1 = defsContainer.parentElement;\n if (parent1 instanceof SVGElement) {\n defsContainer = parent1;\n }\n else {\n break;\n }\n }\n if (Utils.isNull(defs)) {\n throw new Error('Must provide a <defs> element.');\n }\n var gradientSvg = null;\n if (isLinear) {\n // create linear gradient node\n gradientSvg = document.createElementNS(SVG_NS, 'linearGradient');\n }\n else if (isRadialGradient(gradient)) {\n // create radial gradient node\n gradientSvg = document.createElementNS(SVG_NS, 'radialGradient');\n }\n else {\n throw new Error('Unmanaged gradient type.');\n }\n gradientSvg.setAttribute('gradientUnits', 'userSpaceOnUse');\n gradientSvg.setAttribute('id', `grad-${Utils.uniqueCode()}`);\n defs.appendChild(gradientSvg);\n map.set(gradient, gradientSvg);\n }\n const retval = map.get(gradient);\n if (isLinear) {\n // linear\n retval.setAttribute('x1', gradient.start.x.toString());\n retval.setAttribute('y1', gradient.start.y.toString());\n retval.setAttribute('x2', gradient.end.x.toString());\n retval.setAttribute('y2', gradient.end.y.toString());\n }\n else if (isRadial) {\n retval.setAttribute('cx', gradient.center.x.toString());\n retval.setAttribute('cy', gradient.center.y.toString());\n retval.setAttribute('r', gradient.radius.toString());\n }\n // stops\n let j = 0;\n for (let stop of gradient.stops) {\n while (retval.children.length <= j) {\n const stopSvgAdd = document.createElementNS(SVG_NS, 'stop');\n retval.appendChild(stopSvgAdd);\n }\n const stopSvg = retval.children.item(j);\n stopSvg.setAttribute('offset', (stop.offset * 100) + '%');\n stopSvg.setAttribute('stop-color', stop.color);\n if (!Utils.isNull(stop.opacity)) {\n stopSvg.setAttribute('stop-opacity', stop.opacity.toString());\n }\n j++;\n }\n while (retval.children.length > gradient.stops.length) {\n const lastChild = retval.children.item(retval.children.length - 1);\n retval.removeChild(lastChild);\n }\n return retval;\n }\n _ensureMarker(parent, marker) {\n const store = this._markers;\n if (!store.has(parent)) {\n store.set(parent, new WeakMap());\n }\n const map = store.get(parent);\n if (!map.has(marker)) {\n const markerSvg = document.createElementNS(SVG_NS, 'marker');\n map.set(marker, markerSvg);\n const markerPath = document.createElementNS(SVG_NS, 'path');\n markerSvg.appendChild(markerPath);\n markerSvg.setAttribute('id', 'mark' + Utils.uniqueCode());\n let defsContainer = parent;\n let defs;\n while (Utils.isNull(defs = defsContainer.querySelector(':scope > defs'))) {\n const parent1 = defsContainer.parentElement;\n if (parent1 instanceof SVGElement) {\n defsContainer = parent1;\n }\n else {\n break;\n }\n }\n if (Utils.isNull(defs)) {\n throw new Error('Must provide a <defs> element.');\n }\n defs.appendChild(markerSvg);\n }\n const markerSvg = map.get(marker), markerPath = markerSvg.firstElementChild;\n // marker attributes\n markerSvg.setAttribute('orient', 'auto-start-reverse');\n if (!Utils.isNullOrEmpty(marker.viewbox)) {\n markerSvg.setAttribute('viewBox', `${marker.viewbox.x} ${marker.viewbox.y} ${marker.viewbox.width} ${marker.viewbox.height}`);\n }\n else {\n markerSvg.removeAttribute('viewBox');\n }\n if (!Utils.isNullOrEmpty(marker.ref)) {\n markerSvg.setAttribute('refX', marker.ref.x.toString());\n markerSvg.setAttribute('refY', marker.ref.y.toString());\n }\n else {\n markerSvg.removeAttribute('refX');\n markerSvg.removeAttribute('refY');\n }\n if (marker.height > 0) {\n markerSvg.setAttribute('markerHeight', marker.height.toString());\n }\n else {\n markerSvg.removeAttribute('markerHeight');\n }\n if (marker.width > 0) {\n markerSvg.setAttribute('markerWidth', marker.width.toString());\n }\n else {\n markerSvg.removeAttribute('markerWidth');\n }\n // path attributes\n markerPath.setAttribute('d', marker.pathData);\n if (!Utils.isNullOrEmpty(marker.fill)) {\n markerPath.setAttribute('fill', marker.fill);\n }\n else {\n markerPath.removeAttribute('fill');\n }\n if (!Utils.isNullOrEmpty(marker.stroke)) {\n markerPath.setAttribute('stroke', marker.stroke);\n }\n else {\n markerPath.removeAttribute('stroke');\n }\n return markerSvg;\n }\n};\nPacemSvgAdapterElement = __decorate([\n CustomElement({ tagName: P + '-' + TAG_MIDDLE_NAME + '-svg-adapter' })\n], PacemSvgAdapterElement);\nexport { PacemSvgAdapterElement };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["Components", "PropertyConverters", "Watch", "Utils", "Matrix2D", "Utils", "Pacem2DElement", "Matrix2D", "__decorate", "Components", "Watch", "PropertyConverters", "Watch", "PropertyConverters", "Utils", "Matrix2D", "__decorate", "Matrix2D", "Watch", "PropertyConverters", "Utils", "CustomElement", "Watch", "P", "Utils", "__decorate", "PacemGroupElement", "Utils", "Watch", "CustomElement", "P", "CustomElement", "Watch", "PropertyConverters", "P", "Utils", "Rect", "__decorate", "Rect", "PacemEllipseElement", "Utils", "Watch", "PropertyConverters", "CustomElement", "P", "PacemCircleElement", "Utils", "__decorate", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "Watch", "PropertyConverters", "P", "Utils", "__decorate", "CornerType", "PacemRectElement", "Utils", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "Watch", "PropertyConverters", "P", "Utils", "__decorate", "PacemLineElement", "Utils", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "Watch", "PropertyConverters", "P", "__decorate", "PacemPathElement", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "Watch", "PropertyConverters", "P", "Utils", "__decorate", "PacemPolygonElement", "Utils", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "Watch", "PropertyConverters", "P", "Utils", "__decorate", "PacemPolylineElement", "Utils", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "Watch", "PropertyConverters", "P", "__decorate", "PacemImageElement", "Watch", "PropertyConverters", "CustomElement", "P", "CustomElement", "Watch", "PropertyConverters", "P", "Utils", "__decorate", "PacemTextElement", "Utils", "Watch", "PropertyConverters", "CustomElement", "P", "Utils", "Rect", "Utils", "Rect", "CustomElement", "P", "CustomElementUtils", "Utils", "CustomEventUtils", "UI", "avoidHandler", "Matrix2D", "Rect", "Utils", "__decorate", "CustomElementUtils", "Utils", "PacemCanvasAdapterElement", "Matrix2D", "avoidHandler", "CustomEventUtils", "P", "UI", "Rect", "canvas", "CustomElement", "CustomElement", "P", "CustomElementUtils", "CustomEventUtils", "Utils", "UI", "avoidHandler", "Matrix2D", "__decorate", "GETVAR", "CustomElementUtils", "SETVAR", "fallback", "Utils", "PacemSvgAdapterElement", "Matrix2D", "avoidHandler", "CustomEventUtils", "P", "UI", "markerSvg", "markerPath", "CustomElement"]
|
|
7
7
|
}
|