@pacem/pacem 1.0.0-babbage → 1.0.0-bernoulli

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/browser/pacem-2d.js +1 -1
  2. package/dist/browser/pacem-2d.min.js +2 -2
  3. package/dist/browser/pacem-2d.min.js.map +1 -1
  4. package/dist/browser/pacem-3d.js +1 -1
  5. package/dist/browser/pacem-3d.min.js +2 -2
  6. package/dist/browser/pacem-3d.min.js.map +1 -1
  7. package/dist/browser/pacem-charts.js +1 -1
  8. package/dist/browser/pacem-charts.min.js +2 -2
  9. package/dist/browser/pacem-charts.min.js.map +1 -1
  10. package/dist/browser/pacem-cms.js +1 -1
  11. package/dist/browser/pacem-cms.min.js +2 -2
  12. package/dist/browser/pacem-cms.min.js.map +1 -1
  13. package/dist/browser/pacem-core.js +1 -1
  14. package/dist/browser/pacem-core.min.js +2 -2
  15. package/dist/browser/pacem-core.min.js.map +1 -1
  16. package/dist/browser/pacem-foundation.js +1 -1
  17. package/dist/browser/pacem-foundation.min.js +2 -2
  18. package/dist/browser/pacem-foundation.min.js.map +1 -1
  19. package/dist/browser/pacem-fx.js +1 -1
  20. package/dist/browser/pacem-fx.min.js +2 -2
  21. package/dist/browser/pacem-fx.min.js.map +1 -1
  22. package/dist/browser/pacem-logging.js +1 -1
  23. package/dist/browser/pacem-logging.min.js +2 -2
  24. package/dist/browser/pacem-logging.min.js.map +1 -1
  25. package/dist/browser/pacem-maps.js +1 -1
  26. package/dist/browser/pacem-maps.min.js +2 -2
  27. package/dist/browser/pacem-maps.min.js.map +1 -1
  28. package/dist/browser/pacem-media.js +1 -1
  29. package/dist/browser/pacem-media.min.js +2 -2
  30. package/dist/browser/pacem-media.min.js.map +1 -1
  31. package/dist/browser/pacem-networking.js +1 -1
  32. package/dist/browser/pacem-networking.min.js +2 -2
  33. package/dist/browser/pacem-networking.min.js.map +1 -1
  34. package/dist/browser/pacem-numerical.js +1 -1
  35. package/dist/browser/pacem-numerical.min.js +2 -2
  36. package/dist/browser/pacem-numerical.min.js.map +1 -1
  37. package/dist/browser/pacem-plus.js +1 -1
  38. package/dist/browser/pacem-plus.min.js +2 -2
  39. package/dist/browser/pacem-plus.min.js.map +1 -1
  40. package/dist/browser/pacem-scaffolding.js +1 -1
  41. package/dist/browser/pacem-scaffolding.min.js +2 -2
  42. package/dist/browser/pacem-scaffolding.min.js.map +1 -1
  43. package/dist/browser/pacem-ui.js +1 -1
  44. package/dist/browser/pacem-ui.min.js +2 -2
  45. package/dist/browser/pacem-ui.min.js.map +1 -1
  46. package/dist/bundle/pacem.min.mjs +1 -1
  47. package/dist/bundle/pacem.mjs +1 -1
  48. package/dist/typings/index.d.ts +1 -1
  49. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pacem-2d.min.js","sources":["../esm/constants.js","../esm/drawing.js","../esm/stage.js","../esm/drawable-element.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/adapter.js","../esm/adapters/canvasadapter.js","../esm/adapters/svgadapter.js","../esm/index-iife.js"],"sourcesContent":["export const TAG_MIDDLE_NAME = \"2d\";\nexport const TWO_PI = 2 * Math.PI;\n","import { Utils, CustomUIEvent } from '@pacem/pacem-core';\nimport { Point, Matrix2D } from '@pacem/pacem-foundation';\nexport function isDrawable(object) {\n return !Utils.isNull(object) && 'stage' in object;\n}\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}\nexport function isLinearGradient(object) {\n return isGradient(object) && 'start' in object && Point.isPoint(object.start)\n && 'end' in object && Point.isPoint(object.end);\n}\nexport function isRadialGradient(object) {\n return isGradient(object) && 'center' in object && Point.isPoint(object.center)\n && 'radius' in object && typeof object.radius === 'number';\n}\nexport class PresentationState {\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}\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}\nexport function isShape(object) {\n return isUiObject(object) && 'pathData' in object;\n}\nexport function isGroup(object) {\n return isUiObject(object) && 'childDrawables' in object && !Utils.isNullOrEmpty(object['childDrawables']);\n}\nexport function isText(object) {\n return isUiObject(object) && 'text' in object && typeof object['text'] === 'string';\n}\nexport function isImage(object) {\n return isUiObject(object) && 'src' in object && typeof object['src'] === 'string';\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 project(pt = { x: this.screenX, y: this.screenY }) {\n return Matrix2D.multiply(pt, this.#transformMatrix);\n }\n}\nexport class Shape {\n static empty() {\n return { pathData: '', vertices: [], boundingRect: { x: 0, y: 0, width: 0, height: 0 } };\n }\n}\nexport class DragEvent extends UI2DEvent {\n}\nexport class DrawableEvent extends UI2DEvent {\n constructor(type, args, originalEvent, m) {\n super(type, { detail: args, bubbles: true, cancelable: true }, originalEvent, m);\n }\n}\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 { 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};\nexport function getStageOptions(stage) {\n const options = stage instanceof Pacem2DElement ? stage.options : {};\n return Utils.extend({}, DEFAULT_STAGE_OPTIONS, options);\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 get stage() {\n return this._stage;\n }\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 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","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';\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 get stage() {\n return this['_scene'] = this['_scene'] || CustomElementUtils.findAncestorOfType(this, Pacem2DElement);\n }\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 { 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;\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);\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);\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 recomputeShape() {\n const { pathData, vertices, boundingRect } = this.getShapeGeometry();\n this.#vertices = vertices;\n this.#boundingRect = boundingRect;\n this.data = pathData;\n }\n get pathData() {\n return this.data;\n }\n #boundingRect;\n get boundingRect() {\n return this.#boundingRect;\n }\n #vertices;\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 {\nlet PacemGroupElement = class PacemGroupElement extends PresentationElement {\n validate(item) {\n return item instanceof DrawableElement && item.parent === this;\n }\n #children = [];\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}\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 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 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 };\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 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 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}\nexport var CornerType;\n(function (CornerType) {\n CornerType[\"Rounded\"] = \"rounded\";\n CornerType[\"Cut\"] = \"cut\";\n})(CornerType || (CornerType = {}));\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 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 {\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 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 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 {\nlet PacemPathElement = class PacemPathElement extends ShapeElement {\n constructor() {\n super(...arguments);\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 {\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 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 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 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 {\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};\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 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 getPathData() {\n const { pathData } = this.getShapeGeometry();\n return pathData;\n }\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 {\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 {\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 {\nexport class AdapterUtils {\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 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","import { PacemEventTarget, Utils } from '@pacem/pacem-core';\nconst JPEG_QUALITY = .9;\nexport class Pacem2DAdapterElement extends PacemEventTarget {\n constructor() {\n super(...arguments);\n this.DefaultShapeValues = {\n stroke: \"#000\",\n lineWidth: 1,\n fill: \"#fff\"\n };\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, 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/** Implementation postponed. Focus on SVG adapter. */\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","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}\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","import { DeepMerger } from '@pacem/pacem-foundation';\nimport * as Output from './index';\nDeepMerger.merge(Output);\n"],"names":["TAG_MIDDLE_NAME","isDrawable","object","Utils","isNull","isUiObject","isGradient","isArray","stops","isLinearGradient","Point","isPoint","start","end","isRadialGradient","center","radius","PresentationState","combine","lhs","rhs","precomputedMatrix","opacity","transformMatrix","Matrix2D","multiply","dashArray","fill","lineCap","lineJoin","lineWidth","stroke","isPresentationObject","isShape","isGroup","isNullOrEmpty","isText","isImage","UI2DEvent","CustomUIEvent","constructor","type","eventInit","originalEvent","super","this","project","pt","x","screenX","y","screenY","Shape","empty","pathData","vertices","boundingRect","width","height","DragEvent","DrawableEvent","args","m","detail","bubbles","cancelable","StageEvent","__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","ASPECTRATIO_PATTERN","aspectRatioPropertyConverter","convert","attr","regArr","exec","toLowerCase","slice","convertBack","val","substring","DEFAULT_STAGE_OPTIONS","panControl","zoomControl","panModifiers","EventKeyModifier","AltKey","zoomModifiers","clickModifiers","getStageOptions","stage","options","Pacem2DElement","extend","Components","PacemItemsContainerElement","identity","_resizeHandler","evt","size","left","top","adapter","_invalidateSize","_zoomHandler","isTrusted","opts","CustomEventUtils","matchModifiers","avoidHandler","scale","deltaY","stageRect","offsetRect","currentTarget","clientX","clientY","_zoom","_panHandler","state","panningStart","actual","_getPanPoint","point","factor","vbox","box","viewbox","_panStartHandler","_stage","style","pointerEvents","aspectRatio","_getActualAspectRatio","wBased","hBased","Math","min","max","_panEndHandler","snapshot","bgColor","quality","Promise","resolve","originalViewBox","_transformMatrixScale","sizeObj","origVbox","mode","Rect","findTransform","a","validate","item","DrawableElement","parent","draw","redraw","disabled","CustomEvent","dispatchEvent","defaultPrevented","_drawDebounced","force","requestDraw","_buildUpDatasourceFromDOM","datasource","items","_zoomFromValue","sizeRect","original","incrementalInverseScale","vsize","targetWidth","targetHeight","alignmentX","alignmentY","vboxRatio","adjX","adjY","targetX","targetY","MouseEvent","getEventCoordinates","page","invalidateSize","prevTransformMatrix","getTransformMatrix","PropertyChangeEvent","propertyName","currentValue","oldValue","zoom","ResizeEvent","viewActivatedCallback","initialize","resize","_resize","addEventListener","ResizeEventName","capture","passive","window","propertyChangedCallback","name","old","first","dispose","disconnectedCallback","resizer","removeEventListener","Watch","converter","PropertyConverters","Element","prototype","reflectBack","emit","Json","Number","ViewChild","PCSS","P","Debounce","CustomElement","tagName","shadow","template","PacemCrossItemsContainerElement","_","findContainer","CustomElementUtils","findAncestorOfType","findAncestor","String","Boolean","DEG2RAD","PI","UiElement","_updateTransformMatrix","rotation","rotate","cos","sin","scaleX","b","scaleY","e","translateX","f","translateY","PresentationElement","split","map","parseInt","filter","isNaN","prop","join","ShapeElement","recomputeShape","getShapeGeometry","data","PacemGroupElement","children","childDrawables","scene","PacemEllipseElement_1","PacemCircleElement_1","rx","ry","isCloseTo","cx","cy","full","degToRad","s","polar","theta","sqrt","pow","rhoStart","rhoEnd","cartesian","rho","cartStart","cartEnd","p0","p1","expand","flag","sect","PacemEllipseElement","getPathData","NaN","PacemCircleElement","PacemRectElement_1","parseCornerRadius","CornerType","Cut","Rounded","parseCornerRadiusComponent","value","parseFloat","unit","endsWith","stringifyCornerRadiusComponent","CORNERS_PATTERN","PacemRectElement","w","h","cornerType","x1","y1","tl","tr","br","bl","vx","vy","tlX","tlY","trX","trY","brX","brY","blX","blY","retval","radii","numbers","acc","push","single","parseCornerRadii","topLeft","topRight","bottomRight","bottomLeft","stringifyCornerRadii","PacemLineElement_1","PacemLineElement","from","to","x0","y0","abs","PacemPathElement","PacemPolygonElement_1","PacemPolygonElement","sides","starIndent","si","theta2","isStar","apothem","j","angle","innerRadius","angle2","PacemPolylineElement_1","PointArrayOrJsonConverter","arr","parseAsNumericalArray","JSON","parse","stringify","PacemPolylineElement","points","closed","xmin","MAX_VALUE","ymin","xmax","MIN_VALUE","ymax","PacemImageElement","PacemTextElement","AdapterUtils","stageDispatch","EventTarget","isValidViewbox","isRect","isFinite","itemDispatch","offset","dragArgs","evtType","Event","itemevt","UI","DragDropEventType","Init","Drag","prevent","evnt","Pacem2DAdapterElement","PacemEventTarget","DefaultShapeValues","snapshotElement","element","jpeg","mime","compression","CANVAS_SCENE_VAR","PARENT_MATRIX_VAR","SETVAR","setAttachedPropertyValue","GETVAR","getAttachedPropertyValue","isNone","fillOrStroke","fallback","v","PacemCanvasAdapterElement","_pointer","screen","client","_dragInitHandler","hitTarget","_hitTarget","draggable","preventDefault","drawable","initialMatrix","parentMatrix","initialTransformMatrix","_draggingHandler","_dragging","screenOffset","currentPosition","origin","stageTransformMatrix","init","_dragEndHandler","transform","_mouseleaveHandler","_scopeEvent","nap","canvas","srcElement","_requestDraw","_mousemoveHandler","_mouseDownUpHandler","HTMLCanvasElement","replace","fineType","_scenes","WeakMap","_handles","backgroundColor","scenes","has","srcCanvas","get","context","getCanvas","_getScreenInverseMatrix","invert","screenInverseMatrix","dragger","dragDrop","document","createElement","DragDataMode","Copy","dropBehavior","DropBehavior","None","spillBehavior","DropTargetMissedBehavior","floater","hidden","findAncestorShell","appendChild","End","remove","tuple","ctx","align","valign","mscale","translate","getHitTarget","register","innerHTML","setAttribute","getContext","set","unregister","delete","handles","cancelAnimationFrame","requestAnimationFrame","throttle","canvasCssStyle","formerHitTarget","getComputedStyle","resetTransform","clearRect","setTransform","pointer","_draw","currentHitTarget","hide","t","inert","getTransform","inverse","isIdentity","contextPresentationState","_setPresentationState","_drawShape","_drawText","_drawImage","child","strokeStyle","setLineDash","fillStyle","gradient","createLinearGradient","Error","createRadialGradient","stop","addColorStop","color","globalAlpha","CANVAS_IMAGESOURCE_VAR","img","imgLoadHandler","dw","naturalWidth","dh","naturalHeight","path2D","Path2D","isPointInPath","drawImage","Image","src","onload","defaults","fontSize","fontStyle","fontWeight","font","fontFamily","textAlign","textAnchor","fillText","text","anchor","hasColor","bbox","measureText","actualBoundingBoxAscent","actualBoundingBoxDescent","actualBoundingBoxLeft","beginPath","hasFill","hasStroke","isPointInStroke","hasEnoughVertices","hasMarkerEnd","markerEnd","hasMarkerStart","markerStart","hasMarkerMid","markerMid","log","Logging","LogLevel","Warn","matrix","marker","orientation","atan2","_drawMarker","refX","ref","refY","hasMarkerFill","hasMarkerStroke","markerPath2D","SVG_NS","DRAWABLE_VAR","STAGE_VAR","DELVAR","deleteAttachedPropertyValue","replaceChildAt","newChild","targetIndex","replaceChild","PacemSvgAdapterElement","el","dragging","stageOffset","deserializeTransform","_items","getRootNode","elementsFromPoint","find","svg","SVGSVGElement","_markers","_gradients","background","getScreenCTM","Self","rect","removeAttribute","createElementNS","deepRedraw","dict","flow","parentNode","_hasItems","_disposeSvg","firstElementChild","SVGDefsElement","_buildSVGElement","path","suffix","markerSvg","_ensureMarker","id","textContent","toString","grad","_ensureGradient","k","store","isLinear","isRadial","current","SVGLinearGradientElement","SVGRadialGradientElement","defs","defsContainer","querySelector","parent1","parentElement","SVGElement","gradientSvg","uniqueCode","stopSvgAdd","stopSvg","lastChild","removeChild","markerPath","DeepMerger","merge","Output"],"mappings":"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"}
1
+ {"version":3,"file":"pacem-2d.min.js","sources":["../esm/constants.js","../esm/drawing.js","../esm/stage.js","../esm/drawable-element.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/adapter.js","../esm/adapters/canvasadapter.js","../esm/adapters/svgadapter.js","../esm/index-iife.js"],"sourcesContent":["export const TAG_MIDDLE_NAME = \"2d\";\nexport const TWO_PI = 2 * Math.PI;\n","import { Utils, CustomUIEvent } from '@pacem/pacem-core';\nimport { Point, Matrix2D } from '@pacem/pacem-foundation';\nexport function isDrawable(object) {\n return !Utils.isNull(object) && 'stage' in object;\n}\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}\nexport function isLinearGradient(object) {\n return isGradient(object) && 'start' in object && Point.isPoint(object.start)\n && 'end' in object && Point.isPoint(object.end);\n}\nexport function isRadialGradient(object) {\n return isGradient(object) && 'center' in object && Point.isPoint(object.center)\n && 'radius' in object && typeof object.radius === 'number';\n}\nexport class PresentationState {\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}\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}\nexport function isShape(object) {\n return isUiObject(object) && 'pathData' in object;\n}\nexport function isGroup(object) {\n return isUiObject(object) && 'childDrawables' in object && !Utils.isNullOrEmpty(object['childDrawables']);\n}\nexport function isText(object) {\n return isUiObject(object) && 'text' in object && typeof object['text'] === 'string';\n}\nexport function isImage(object) {\n return isUiObject(object) && 'src' in object && typeof object['src'] === 'string';\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 project(pt = { x: this.screenX, y: this.screenY }) {\n return Matrix2D.multiply(pt, this.#transformMatrix);\n }\n}\nexport class Shape {\n static empty() {\n return { pathData: '', vertices: [], boundingRect: { x: 0, y: 0, width: 0, height: 0 } };\n }\n}\nexport class DragEvent extends UI2DEvent {\n}\nexport class DrawableEvent extends UI2DEvent {\n constructor(type, args, originalEvent, m) {\n super(type, { detail: args, bubbles: true, cancelable: true }, originalEvent, m);\n }\n}\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 { 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};\nexport function getStageOptions(stage) {\n const options = stage instanceof Pacem2DElement ? stage.options : {};\n return Utils.extend({}, DEFAULT_STAGE_OPTIONS, options);\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 get stage() {\n return this._stage;\n }\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 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","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';\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 get stage() {\n return this['_scene'] = this['_scene'] || CustomElementUtils.findAncestorOfType(this, Pacem2DElement);\n }\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 { 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;\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);\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);\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 recomputeShape() {\n const { pathData, vertices, boundingRect } = this.getShapeGeometry();\n this.#vertices = vertices;\n this.#boundingRect = boundingRect;\n this.data = pathData;\n }\n get pathData() {\n return this.data;\n }\n #boundingRect;\n get boundingRect() {\n return this.#boundingRect;\n }\n #vertices;\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 {\nlet PacemGroupElement = class PacemGroupElement extends PresentationElement {\n validate(item) {\n return item instanceof DrawableElement && item.parent === this;\n }\n #children = [];\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}\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 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 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 };\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 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 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}\nexport var CornerType;\n(function (CornerType) {\n CornerType[\"Rounded\"] = \"rounded\";\n CornerType[\"Cut\"] = \"cut\";\n})(CornerType || (CornerType = {}));\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 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 {\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 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 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 {\nlet PacemPathElement = class PacemPathElement extends ShapeElement {\n constructor() {\n super(...arguments);\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 {\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 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 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 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 {\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};\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 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 getPathData() {\n const { pathData } = this.getShapeGeometry();\n return pathData;\n }\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 {\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 {\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 {\nexport class AdapterUtils {\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 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","import { PacemEventTarget, Utils } from '@pacem/pacem-core';\nconst JPEG_QUALITY = .9;\nexport class Pacem2DAdapterElement extends PacemEventTarget {\n constructor() {\n super(...arguments);\n this.DefaultShapeValues = {\n stroke: \"#000\",\n lineWidth: 1,\n fill: \"#fff\"\n };\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, 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/** Implementation postponed. Focus on SVG adapter. */\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","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}\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","import { DeepMerger } from '@pacem/pacem-foundation';\nimport * as Output from './index';\nDeepMerger.merge(Output);\n"],"names":["TAG_MIDDLE_NAME","isDrawable","object","Utils","isNull","isUiObject","isGradient","isArray","stops","isLinearGradient","Point","isPoint","start","end","isRadialGradient","center","radius","PresentationState","combine","lhs","rhs","precomputedMatrix","opacity","transformMatrix","Matrix2D","multiply","dashArray","fill","lineCap","lineJoin","lineWidth","stroke","isPresentationObject","isShape","isGroup","isNullOrEmpty","isText","isImage","UI2DEvent","CustomUIEvent","constructor","type","eventInit","originalEvent","super","this","project","pt","x","screenX","y","screenY","Shape","empty","pathData","vertices","boundingRect","width","height","DragEvent","DrawableEvent","args","m","detail","bubbles","cancelable","StageEvent","__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","ASPECTRATIO_PATTERN","aspectRatioPropertyConverter","convert","attr","regArr","exec","toLowerCase","slice","convertBack","val","substring","DEFAULT_STAGE_OPTIONS","panControl","zoomControl","panModifiers","EventKeyModifier","AltKey","zoomModifiers","clickModifiers","getStageOptions","stage","options","Pacem2DElement","extend","Components","PacemItemsContainerElement","identity","_resizeHandler","evt","size","left","top","adapter","_invalidateSize","_zoomHandler","isTrusted","opts","CustomEventUtils","matchModifiers","avoidHandler","scale","deltaY","stageRect","offsetRect","currentTarget","clientX","clientY","_zoom","_panHandler","state","panningStart","actual","_getPanPoint","point","factor","vbox","box","viewbox","_panStartHandler","_stage","style","pointerEvents","aspectRatio","_getActualAspectRatio","wBased","hBased","Math","min","max","_panEndHandler","snapshot","bgColor","quality","Promise","resolve","originalViewBox","_transformMatrixScale","sizeObj","origVbox","mode","Rect","findTransform","a","validate","item","DrawableElement","parent","draw","redraw","disabled","CustomEvent","dispatchEvent","defaultPrevented","_drawDebounced","force","requestDraw","_buildUpDatasourceFromDOM","datasource","items","_zoomFromValue","sizeRect","original","incrementalInverseScale","vsize","targetWidth","targetHeight","alignmentX","alignmentY","vboxRatio","adjX","adjY","targetX","targetY","MouseEvent","getEventCoordinates","page","invalidateSize","prevTransformMatrix","getTransformMatrix","PropertyChangeEvent","propertyName","currentValue","oldValue","zoom","ResizeEvent","viewActivatedCallback","initialize","resize","_resize","addEventListener","ResizeEventName","capture","passive","window","propertyChangedCallback","name","old","first","dispose","disconnectedCallback","resizer","removeEventListener","Watch","converter","PropertyConverters","Element","prototype","reflectBack","emit","Json","Number","ViewChild","PCSS","P","Debounce","CustomElement","tagName","shadow","template","PacemCrossItemsContainerElement","_","findContainer","CustomElementUtils","findAncestorOfType","findAncestor","String","Boolean","DEG2RAD","PI","UiElement","_updateTransformMatrix","rotation","rotate","cos","sin","scaleX","b","scaleY","e","translateX","f","translateY","PresentationElement","split","map","parseInt","filter","isNaN","prop","join","ShapeElement","recomputeShape","getShapeGeometry","data","PacemGroupElement","children","childDrawables","scene","PacemEllipseElement_1","PacemCircleElement_1","rx","ry","isCloseTo","cx","cy","full","degToRad","s","polar","theta","sqrt","pow","rhoStart","rhoEnd","cartesian","rho","cartStart","cartEnd","p0","p1","expand","flag","sect","PacemEllipseElement","getPathData","NaN","PacemCircleElement","PacemRectElement_1","parseCornerRadius","CornerType","Cut","Rounded","parseCornerRadiusComponent","value","parseFloat","unit","endsWith","stringifyCornerRadiusComponent","CORNERS_PATTERN","PacemRectElement","w","h","cornerType","x1","y1","tl","tr","br","bl","vx","vy","tlX","tlY","trX","trY","brX","brY","blX","blY","retval","radii","numbers","acc","push","single","parseCornerRadii","topLeft","topRight","bottomRight","bottomLeft","stringifyCornerRadii","PacemLineElement_1","PacemLineElement","from","to","x0","y0","abs","PacemPathElement","PacemPolygonElement_1","PacemPolygonElement","sides","starIndent","si","theta2","isStar","apothem","j","angle","innerRadius","angle2","PacemPolylineElement_1","PointArrayOrJsonConverter","arr","parseAsNumericalArray","JSON","parse","stringify","PacemPolylineElement","points","closed","xmin","MAX_VALUE","ymin","xmax","MIN_VALUE","ymax","PacemImageElement","PacemTextElement","AdapterUtils","stageDispatch","EventTarget","isValidViewbox","isRect","isFinite","itemDispatch","offset","dragArgs","evtType","Event","itemevt","UI","DragDropEventType","Init","Drag","prevent","evnt","Pacem2DAdapterElement","PacemEventTarget","DefaultShapeValues","snapshotElement","element","jpeg","mime","compression","CANVAS_SCENE_VAR","PARENT_MATRIX_VAR","SETVAR","setAttachedPropertyValue","GETVAR","getAttachedPropertyValue","isNone","fillOrStroke","fallback","v","PacemCanvasAdapterElement","_pointer","screen","client","_dragInitHandler","hitTarget","_hitTarget","draggable","preventDefault","drawable","initialMatrix","parentMatrix","initialTransformMatrix","_draggingHandler","_dragging","screenOffset","currentPosition","origin","stageTransformMatrix","init","_dragEndHandler","transform","_mouseleaveHandler","_scopeEvent","nap","canvas","srcElement","_requestDraw","_mousemoveHandler","_mouseDownUpHandler","HTMLCanvasElement","replace","fineType","_scenes","WeakMap","_handles","backgroundColor","scenes","has","srcCanvas","get","context","getCanvas","_getScreenInverseMatrix","invert","screenInverseMatrix","dragger","dragDrop","document","createElement","DragDataMode","Copy","dropBehavior","DropBehavior","None","spillBehavior","DropTargetMissedBehavior","floater","hidden","findAncestorShell","appendChild","End","remove","tuple","ctx","align","valign","mscale","translate","getHitTarget","register","innerHTML","setAttribute","getContext","set","unregister","delete","handles","cancelAnimationFrame","requestAnimationFrame","throttle","canvasCssStyle","formerHitTarget","getComputedStyle","resetTransform","clearRect","setTransform","pointer","_draw","currentHitTarget","hide","t","inert","getTransform","inverse","isIdentity","contextPresentationState","_setPresentationState","_drawShape","_drawText","_drawImage","child","strokeStyle","setLineDash","fillStyle","gradient","createLinearGradient","Error","createRadialGradient","stop","addColorStop","color","globalAlpha","CANVAS_IMAGESOURCE_VAR","img","imgLoadHandler","dw","naturalWidth","dh","naturalHeight","path2D","Path2D","isPointInPath","drawImage","Image","src","onload","defaults","fontSize","fontStyle","fontWeight","font","fontFamily","textAlign","textAnchor","fillText","text","anchor","hasColor","bbox","measureText","actualBoundingBoxAscent","actualBoundingBoxDescent","actualBoundingBoxLeft","beginPath","hasFill","hasStroke","isPointInStroke","hasEnoughVertices","hasMarkerEnd","markerEnd","hasMarkerStart","markerStart","hasMarkerMid","markerMid","log","Logging","LogLevel","Warn","matrix","marker","orientation","atan2","_drawMarker","refX","ref","refY","hasMarkerFill","hasMarkerStroke","markerPath2D","SVG_NS","DRAWABLE_VAR","STAGE_VAR","DELVAR","deleteAttachedPropertyValue","replaceChildAt","newChild","targetIndex","replaceChild","PacemSvgAdapterElement","el","dragging","stageOffset","deserializeTransform","_items","getRootNode","elementsFromPoint","find","svg","SVGSVGElement","_markers","_gradients","background","getScreenCTM","Self","rect","removeAttribute","createElementNS","deepRedraw","dict","flow","parentNode","_hasItems","_disposeSvg","firstElementChild","SVGDefsElement","_buildSVGElement","path","suffix","markerSvg","_ensureMarker","id","textContent","toString","grad","_ensureGradient","k","store","isLinear","isRadial","current","SVGLinearGradientElement","SVGRadialGradientElement","defs","defsContainer","querySelector","parent1","parentElement","SVGElement","gradientSvg","uniqueCode","stopSvgAdd","stopSvg","lastChild","removeChild","markerPath","DeepMerger","merge","Output"],"mappings":"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"}