@d3-polytree/editor 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.js","../src/index.ts","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespaces.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespace.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/creator.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selector.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/select.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/array.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selectorAll.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectAll.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/matcher.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChild.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChildren.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/filter.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sparse.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/enter.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/constant.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/data.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/exit.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/join.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/merge.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/order.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sort.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/call.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/nodes.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/node.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/size.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/empty.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/each.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/attr.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/window.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/style.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/property.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/classed.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/text.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/html.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/raise.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/lower.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/append.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/insert.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/remove.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/clone.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/datum.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/on.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/dispatch.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/iterator.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/index.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/select.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/sourceEvent.js","../../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/pointer.js","../../../node_modules/.pnpm/ids@1.0.5/node_modules/ids/node_modules/hat/index.js","../../../node_modules/.pnpm/ids@1.0.5/node_modules/ids/index.js","../../../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.mjs","../../canvas/src/Canvas.ts","../../canvas/src/SvgExportingUtils.ts","../../canvas/src/ElementRegistry.ts","../../canvas/src/ElementBuilder.ts","../../canvas/src/module.ts","../../../node_modules/.pnpm/min-dash@4.2.3/node_modules/min-dash/dist/index.esm.js","../../../node_modules/.pnpm/moddle@7.2.0/node_modules/moddle/lib/base.js","../../../node_modules/.pnpm/moddle@7.2.0/node_modules/moddle/lib/factory.js","../../../node_modules/.pnpm/moddle@7.2.0/node_modules/moddle/lib/types.js","../../../node_modules/.pnpm/moddle@7.2.0/node_modules/moddle/lib/ns.js","../../../node_modules/.pnpm/moddle@7.2.0/node_modules/moddle/lib/descriptor-builder.js","../../../node_modules/.pnpm/moddle@7.2.0/node_modules/moddle/lib/registry.js","../../../node_modules/.pnpm/moddle@7.2.0/node_modules/moddle/lib/properties.js","../../../node_modules/.pnpm/moddle@7.2.0/node_modules/moddle/lib/moddle.js","../../../node_modules/.pnpm/saxen@10.0.0/node_modules/saxen/lib/decode.js","../../../node_modules/.pnpm/saxen@10.0.0/node_modules/saxen/lib/parser.js","../../../node_modules/.pnpm/moddle-xml@11.0.0_moddle@7.2.0/node_modules/moddle-xml/lib/common.js","../../../node_modules/.pnpm/moddle-xml@11.0.0_moddle@7.2.0/node_modules/moddle-xml/lib/read.js","../../../node_modules/.pnpm/moddle-xml@11.0.0_moddle@7.2.0/node_modules/moddle-xml/lib/write.js","../../pfdn-moddle/src/pfdn.json","../../pfdn-moddle/src/PfdnModdle.ts","../../pfdn-moddle/src/index.ts","../../../node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/dispatch.js","../../../node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/noevent.js","../../../node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/nodrag.js","../../../node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/constant.js","../../../node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/event.js","../../../node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/drag.js","../../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/define.js","../../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/color.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/basis.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/basisClosed.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/constant.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/color.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/rgb.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/numberArray.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/array.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/date.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/number.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/object.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/string.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/value.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/round.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/decompose.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/parse.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/index.js","../../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/zoom.js","../../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timer.js","../../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timeout.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/schedule.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/interrupt.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/interrupt.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/tween.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/interpolate.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attr.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attrTween.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/delay.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/duration.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/ease.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/easeVarying.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/filter.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/merge.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/on.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/remove.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/select.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selectAll.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selection.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/style.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/styleTween.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/text.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/textTween.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/transition.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/end.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/index.js","../../../node_modules/.pnpm/d3-ease@3.0.1/node_modules/d3-ease/src/cubic.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/transition.js","../../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.js","../../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/constant.js","../../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/event.js","../../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.js","../../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/noevent.js","../../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/zoom.js","../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ascending.js","../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/descending.js","../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisector.js","../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/number.js","../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisect.js","../../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ticks.js","../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/init.js","../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/constant.js","../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/number.js","../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/continuous.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/formatDecimal.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/exponent.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/formatGroup.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/formatNumerals.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/formatSpecifier.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/formatTrim.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/formatPrefixAuto.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/formatRounded.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/formatTypes.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/identity.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/locale.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/defaultLocale.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/precisionFixed.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/precisionPrefix.js","../../../node_modules/.pnpm/d3-format@3.1.2/node_modules/d3-format/src/precisionRound.js","../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/tickFormat.js","../../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/linear.js","../../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/identity.js","../../../node_modules/.pnpm/d3-axis@3.0.0/node_modules/d3-axis/src/axis.js","../../../node_modules/.pnpm/didi@9.0.2/node_modules/didi/dist/index.esm.js","../../core/src/index.ts","../../core/src/draw/DrawingRegistry.ts","../../core/src/draw/BaseElement.ts","../../core/src/draw/Labels.ts","../../core/src/draw/Zones.ts","../../core/src/draw/Links.ts","../../core/src/draw/Markers.ts","../../core/src/draw/Nodes.ts","../../core/src/draw/Icons.ts","../../core/src/draw/IconLoader.ts","../../core/src/draw/Defs.ts","../../core/src/draw/index.ts","../../core/src/utils/collections.ts","../../core/src/utils/localName.ts","../../core/src/features/mouseEvents.ts","../../core/src/features/selection.ts","../../core/src/features/zoom.ts","../../core/src/features/zoomScroll.ts","../../core/src/features/backgroundColor.ts","../../core/src/features/axes.ts","../../core/src/features/outline.ts","../../core/src/features/drag.ts","../../core/src/features/exporting.ts","../../core/src/features/localStorage.ts","../../core/src/features/upload.ts","../../core/src/features/resizeElement.ts","../../core/src/features/noticePopup.ts","../../core/src/features/alertIcons.ts","../../core/src/features/tooltip.ts","../../core/src/features/palette/BaseAddHandler.ts","../../core/src/features/palette/AddNodeHandler.ts","../../core/src/features/palette/AddLabelHandler.ts","../../core/src/features/palette/AddLinkTool.ts","../../core/src/features/palette/PaletteProvider.ts","../../core/src/features/palette/Palette.ts","../../core/src/features/notifications.ts","../../core/src/modelling/ModellingElement.ts","../../core/src/modelling/Labels.ts","../../core/src/modelling/Zones.ts","../../core/src/modelling/Nodes.ts","../../core/src/modelling/Links.ts","../../core/src/modelling/Modelling.ts","../../core/src/modelling/index.ts","../../core/src/utils/calculateCenter.ts","../../core/src/features/index.ts","../../core/src/Diagram.ts","../../core/src/model/model.ts","../../viewer/src/index.ts","../../side-tabs/src/SideTabs.ts","../../side-tabs/src/SideTabsProvider.ts","../../side-tabs/src/index.ts","../../search-panel/src/SearchPanel.ts","../../search-panel/src/index.ts","../../interactive-viewer/src/index.ts","../../properties-panel/src/utils.ts","../../properties-panel/src/EntryFactory.ts","../../properties-panel/src/PfdnPropertiesProvider.ts","../../properties-panel/src/PropertiesPanel.ts","../../properties-panel/src/index.ts"],"sourcesContent":["'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/**\n * @d3-polytree/editor — create and modify polytree diagrams.\n *\n * Extends the {@link InteractiveViewer} with the editing layer: element\n * dragging plus the modelling create/save/delete flows. Element creation is\n * exposed programmatically here; the palette toolbar UI is layered on next.\n */\nimport { InteractiveViewer, type InteractiveViewerOptions } from '@d3-polytree/interactive-viewer';\nimport { Viewer } from '@d3-polytree/viewer';\nimport {\n dragModule,\n modellingModule,\n exportingModule,\n localStorageModule,\n uploadModule,\n paletteModule,\n resizeElementModule,\n type DiagramModule,\n type DrawingRegistry,\n type ModellingNodes,\n type ModellingModelElement,\n type CreateParameters,\n type Selection\n} from '@d3-polytree/core';\nimport {\n entryFactoryModule,\n pfdnPropertiesProviderModule,\n propertiesPanelModule\n} from '@d3-polytree/properties-panel';\n\n/** The document a fresh editor opens with. */\nconst INITIAL_DIAGRAM =\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>' +\n '<pfdn:diagram xmlns:pfdn=\"http://pfdn\" xmlns=\"http://pfdn\">' +\n '<settings author=\"No Author\" name=\"No Name Diagram\" status=\"1\">' +\n '<zoom><offset x=\"0\" y=\"0\" /><scale>1</scale></zoom><grid />' +\n '</settings>' +\n '<node id=\"node_1\" label=\"label_1\" status=\"1\"><position x=\"20\" y=\"100\" /></node>' +\n '<label id=\"label_1\" fontSize=\"12\" isReadOnly=\"true\" status=\"1\">' +\n '<position x=\"33\" y=\"140\" /><text>Node 1</text></label>' +\n '</pfdn:diagram>';\n\nexport type EditorOptions = InteractiveViewerOptions;\n\nexport class Editor extends InteractiveViewer {\n /** Editing modules on top of the interaction layer. */\n static readonly editionModules: readonly DiagramModule[] = [\n dragModule as DiagramModule,\n modellingModule as DiagramModule,\n exportingModule as DiagramModule,\n localStorageModule as DiagramModule,\n uploadModule as DiagramModule,\n paletteModule as DiagramModule,\n resizeElementModule as DiagramModule,\n // the properties panel (registers a side tab; side-tabs + search-panel are\n // inherited from InteractiveViewer)\n entryFactoryModule as DiagramModule,\n pfdnPropertiesProviderModule as DiagramModule,\n propertiesPanelModule as DiagramModule\n ];\n\n /** The document a fresh editor opens with (used by {@link createDiagram}). */\n initialDiagram = INITIAL_DIAGRAM;\n\n /** (Re)open the initial diagram. */\n createDiagram(): Promise<void> {\n return this.importDiagram(this.initialDiagram);\n }\n\n getModules(): readonly DiagramModule[] {\n // interaction + editing features first (they subscribe / swap the layer),\n // then the drawers\n return [\n ...InteractiveViewer.interactionModules,\n ...Editor.editionModules,\n ...Viewer.modules\n ];\n }\n\n /** Create a node (and its associated label) at an optional position. */\n createNode(parameters: CreateParameters = {}): ModellingModelElement {\n return this.get<ModellingNodes>('modellingNodes').create(parameters);\n }\n\n /** Select an element by definition (e.g. to prepare a delete). */\n select(definition: ModellingModelElement): void {\n const element = this.get<DrawingRegistry>('drawingRegistry').get(definition.id as string);\n if (element) {\n this.get<Selection>('selection').select(element, definition);\n }\n }\n\n /** Delete the current selection (cascading to associated labels). */\n deleteSelected(): void {\n this.get<Selection>('selection').deleteSelected();\n }\n}\n\nexport default Editor;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","var hat = module.exports = function (bits, base) {\n if (!base) base = 16;\n if (bits === undefined) bits = 128;\n if (bits <= 0) return '0';\n \n var digits = Math.log(Math.pow(2, bits)) / Math.log(base);\n for (var i = 2; digits === Infinity; i *= 2) {\n digits = Math.log(Math.pow(2, bits / i)) / Math.log(base) * i;\n }\n \n var rem = digits - Math.floor(digits);\n \n var res = '';\n \n for (var i = 0; i < Math.floor(digits); i++) {\n var x = Math.floor(Math.random() * base).toString(base);\n res = x + res;\n }\n \n if (rem) {\n var b = Math.pow(base, rem);\n var x = Math.floor(Math.random() * b).toString(base);\n res = x + res;\n }\n \n var parsed = parseInt(res, base);\n if (parsed !== Infinity && parsed >= Math.pow(2, bits)) {\n return hat(bits, base)\n }\n else return res;\n};\n\nhat.rack = function (bits, base, expandBy) {\n var fn = function (data) {\n var iters = 0;\n do {\n if (iters ++ > 10) {\n if (expandBy) bits += expandBy;\n else throw new Error('too many ID collisions, use more bits')\n }\n \n var id = hat(bits, base);\n } while (Object.hasOwnProperty.call(hats, id));\n \n hats[id] = data;\n return id;\n };\n var hats = fn.hats = {};\n \n fn.get = function (id) {\n return fn.hats[id];\n };\n \n fn.set = function (id, value) {\n fn.hats[id] = value;\n return fn;\n };\n \n fn.bits = bits || 128;\n fn.base = base || 16;\n return fn;\n};\n","import hat from 'hat';\n\n\n/**\n * Create a new id generator / cache instance.\n *\n * You may optionally provide a seed that is used internally.\n *\n * @param {Seed} seed\n */\nexport default function Ids(seed) {\n\n if (!(this instanceof Ids)) {\n return new Ids(seed);\n }\n\n seed = seed || [ 128, 36, 1 ];\n this._seed = seed.length ? hat.rack(seed[0], seed[1], seed[2]) : seed;\n}\n\n/**\n * Generate a next id.\n *\n * @param {Object} [element] element to bind the id to\n *\n * @return {String} id\n */\nIds.prototype.next = function(element) {\n return this._seed(element || true);\n};\n\n/**\n * Generate a next id with a given prefix.\n *\n * @param {Object} [element] element to bind the id to\n *\n * @return {String} id\n */\nIds.prototype.nextPrefixed = function(prefix, element) {\n var id;\n\n do {\n id = prefix + this.next(true);\n } while (this.assigned(id));\n\n // claim {prefix}{random}\n this.claim(id, element);\n\n // return\n return id;\n};\n\n/**\n * Manually claim an existing id.\n *\n * @param {String} id\n * @param {String} [element] element the id is claimed by\n */\nIds.prototype.claim = function(id, element) {\n this._seed.set(id, element || true);\n};\n\n/**\n * Returns true if the given id has already been assigned.\n *\n * @param {String} id\n * @return {Boolean}\n */\nIds.prototype.assigned = function(id) {\n return this._seed.get(id) || false;\n};\n\n/**\n * Unclaim an id.\n *\n * @param {String} id the id to unclaim\n */\nIds.prototype.unclaim = function(id) {\n delete this._seed.hats[id];\n};\n\n\n/**\n * Clear all claimed ids.\n */\nIds.prototype.clear = function() {\n\n var hats = this._seed.hats,\n id;\n\n for (id in hats) {\n this.unclaim(id);\n }\n};","import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n","import { select } from 'd3-selection';\nimport type EventEmitter from 'eventemitter3';\nimport { getSvgString } from './SvgExportingUtils';\nimport type { CanvasConfig, CanvasSize, GroupSelection, SvgSelection, TransformMatrix } from './types';\n\nfunction ensurePx(value: number | string): string {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nfunction createContainer(options: CanvasConfig): HTMLElement {\n const container = options.container ?? document.body;\n const parent = document.createElement('div');\n parent.setAttribute('class', 'pfdjs-container');\n Object.assign(parent.style, {\n position: 'absolute',\n overflow: 'hidden',\n width: ensurePx(options.width ?? '100%'),\n height: ensurePx(options.height ?? '100%')\n });\n container.appendChild(parent);\n return parent;\n}\n\n/**\n * The main drawing canvas: a `<div>`-wrapped `<svg>` with a root `<g>` layer.\n *\n * Emits `canvas.init` (once `d3canvas.init` is received), `canvas.resized` and\n * `canvas.destroy` on the injected event bus.\n */\nexport class Canvas {\n static readonly $inject = ['config', 'eventBus'];\n\n private readonly _eventBus: EventEmitter;\n private _container!: HTMLElement;\n private _svg!: SvgSelection;\n private _rootLayer!: GroupSelection;\n private _drawingLayer!: GroupSelection;\n\n constructor(config: CanvasConfig | undefined, eventBus: EventEmitter) {\n this._eventBus = eventBus;\n this._init(config ?? {});\n }\n\n private _init(config: CanvasConfig): void {\n const eventBus = this._eventBus;\n\n this._container = createContainer(config);\n this._svg = select(this._container)\n .append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('pointer-events', 'all');\n this._rootLayer = this._drawingLayer = this._svg.append('g').attr('class', 'full-group');\n\n eventBus.on('d3canvas.init', () => {\n eventBus.emit('canvas.init', { svg: this._svg });\n this.resized();\n });\n eventBus.on('d3canvas.destroy', () => this._destroy());\n }\n\n private _destroy(): void {\n this._eventBus.emit('canvas.destroy', { svg: this._svg });\n const parent = this._container?.parentNode;\n if (parent) {\n parent.removeChild(this._container);\n }\n }\n\n /** The `<div>` that encloses the drawing canvas. */\n getContainer(): HTMLElement {\n return this._container;\n }\n\n /** The `<svg>` selection. */\n getSVG(): SvgSelection {\n return this._svg;\n }\n\n /** The serialized `<svg>` string with applicable CSS inlined. */\n getSVGStr(): string {\n return getSvgString(this._svg.node() as SVGSVGElement);\n }\n\n getRootLayer(): GroupSelection {\n return this._rootLayer;\n }\n\n getDrawingLayer(): GroupSelection {\n return this._drawingLayer;\n }\n\n setDrawingLayer(drawingLayer: GroupSelection): void {\n this._drawingLayer = drawingLayer;\n }\n\n /** Normalized transform of `element` (defaults to the drawing layer). */\n getTransform(element?: GroupSelection): TransformMatrix {\n const target = element ?? this._drawingLayer;\n const transform = target.attr('transform');\n const identity: TransformMatrix = { a: 1, d: 1, e: 0, f: 0 };\n if (!transform) {\n return identity;\n }\n const g = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n g.setAttributeNS(null, 'transform', transform);\n // `SVGGraphicsElement.transform` is not implemented in every environment\n // (e.g. jsdom); fall back to identity rather than throwing.\n const baseVal = (g as SVGGraphicsElement).transform?.baseVal;\n const matrix = baseVal?.consolidate?.()?.matrix;\n return matrix ? { a: matrix.a, d: matrix.d, e: matrix.e, f: matrix.f } : identity;\n }\n\n getSize(): CanvasSize {\n return {\n width: this._container.clientWidth,\n height: this._container.clientHeight\n };\n }\n\n resized(): void {\n this._eventBus.emit('canvas.resized');\n }\n}\n","/**\n * Serialize an SVG node to a string with the CSS rules that apply to it (and its\n * descendants) inlined, so the exported SVG renders standalone.\n *\n * Ported from the original `d3-canvas` util. Fixes a latent bug where the\n * selector-match predicate never returned a value (so no CSS was ever inlined),\n * and drops debug `console.log`s.\n */\nexport function getSvgString(svgNode: SVGSVGElement): string {\n svgNode.setAttribute('xlink', 'http://www.w3.org/1999/xlink');\n appendCSS(getCSSStyles(svgNode), svgNode);\n\n const serializer = new XMLSerializer();\n let svgString = serializer.serializeToString(svgNode);\n svgString = svgString.replace(/(\\w+)?:?xlink=/g, 'xmlns:xlink='); // root xlink ns\n svgString = svgString.replace(/NS\\d+:href/g, 'xlink:href'); // Safari ns fix\n return svgString;\n}\n\nfunction escapeRegExp(str: string): string {\n return str.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n}\n\nfunction contains(str: string, matchers: RegExp[]): boolean {\n return matchers.some((re) => str.match(re) !== null);\n}\n\nfunction getCSSStyles(parentElement: SVGSVGElement): string {\n const sels = '[\\\\.,#\\\\s\\\\*>+~\\\\[=:]';\n const createRegExp = (str: string): RegExp =>\n new RegExp(`.*${sels}${escapeRegExp(str)}${sels}.*`, 'gi');\n\n const matchers: RegExp[] = [];\n const pushSelector = (selector: string): void => {\n if (!contains(selector, matchers)) {\n matchers.push(createRegExp(selector));\n }\n };\n\n pushSelector(`#${parentElement.id}`);\n parentElement.classList.forEach((cls) => pushSelector(`.${cls}`));\n\n const nodes = parentElement.getElementsByTagName('*');\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i] as Element;\n if (node.id) {\n pushSelector(`#${node.id}`);\n }\n node.classList.forEach((cls) => pushSelector(`.${cls}`));\n }\n\n let extractedCSSText = '';\n for (let i = 0; i < document.styleSheets.length; i++) {\n const sheet = document.styleSheets[i];\n let rules: CSSRuleList | null = null;\n try {\n rules = sheet.cssRules;\n } catch (e) {\n if ((e as DOMException).name !== 'SecurityError') {\n throw e;\n }\n continue;\n }\n if (!rules) {\n continue;\n }\n for (let r = 0; r < rules.length; r++) {\n const rule = rules[r] as CSSStyleRule;\n if (rule.selectorText && contains(`${rule.selectorText} `, matchers)) {\n extractedCSSText += rule.cssText;\n }\n }\n }\n\n return extractedCSSText;\n}\n\nfunction appendCSS(cssText: string, element: SVGSVGElement): void {\n const styleElement = document.createElement('style');\n styleElement.setAttribute('type', 'text/css');\n styleElement.textContent = cssText;\n const refNode = element.hasChildNodes() ? element.children[0] : null;\n element.insertBefore(styleElement, refNode);\n}\n","import Ids from 'ids';\nimport type { RegisteredElement } from './types';\n\n/**\n * Tracks diagram elements by id and hands out collision-free ids.\n *\n * Ported from the original `d3-canvas` ElementRegistry: id generation still uses\n * `ids`, but elements are kept in an owned `Map` rather than reaching into the\n * `ids` internals, which makes the store robust and fully typed.\n */\nexport class ElementRegistry {\n private readonly _ids = new Ids([8, 24, 86]);\n private readonly _elements = new Map<string, RegisteredElement>();\n\n /** Register `element` under an explicit `id`. */\n claim(id: string, element: RegisteredElement): void {\n this._ids.claim(id, element);\n this._elements.set(id, element);\n }\n\n /** Assign `element` a `prefix_`-scoped id if it has none, then register it. */\n claimId(element: RegisteredElement, prefix: string): void {\n element.id = element.id || this._ids.nextPrefixed(`${prefix}_`, element);\n this._ids.claim(element.id, element);\n this._elements.set(element.id, element);\n }\n\n /** Release the id held by `element`. */\n unClaim(element: RegisteredElement): void {\n if (element.id) {\n this._ids.unclaim(element.id);\n this._elements.delete(element.id);\n }\n }\n\n removeElement(element: RegisteredElement): void {\n this.unClaim(element);\n }\n\n removeElementById(id: string): void {\n this._ids.unclaim(id);\n this._elements.delete(id);\n }\n\n /** Look up an element by id, or `false` when unknown. */\n get(id: string): RegisteredElement | false {\n return this._elements.get(id) ?? false;\n }\n\n /** Snapshot of all registered elements keyed by id. */\n getAll(): Record<string, RegisteredElement> {\n return Object.fromEntries(this._elements);\n }\n}\n","import type { ElementRegistry } from './ElementRegistry';\nimport type { RegisteredElement } from './types';\n\nexport type ElementBuildFn = (this: unknown, definition: RegisteredElement) => void;\n\n/** Assigns an id to a definition and runs a builder callback for it. */\nexport class ElementBuilder {\n static readonly $inject = ['elementRegistry'];\n\n constructor(private readonly _elementRegistry: ElementRegistry) {}\n\n create(\n definition: RegisteredElement,\n prefix: string,\n builder: ElementBuildFn,\n builderContext?: unknown\n ): void {\n if (prefix !== '') {\n this._elementRegistry.claimId(definition, prefix);\n builder.call(builderContext, definition);\n }\n }\n}\n","import EventEmitter from 'eventemitter3';\nimport { Canvas } from './Canvas';\nimport { ElementBuilder } from './ElementBuilder';\nimport { ElementRegistry } from './ElementRegistry';\n\n/**\n * didi module descriptor wiring the canvas services. Consumed by the higher-level\n * packages (core/viewer/editor) when they assemble their injector.\n */\nexport const canvasModule = {\n __init__: ['canvas'],\n canvas: ['type', Canvas],\n elementRegistry: ['type', ElementRegistry],\n elementBuilder: ['type', ElementBuilder],\n eventBus: ['type', EventEmitter]\n};\n","/**\n * Flatten array, one level deep.\n *\n * @template T\n *\n * @param {T[][] | T[] | null} [arr]\n *\n * @return {T[]}\n */\nfunction flatten(arr) {\n return Array.prototype.concat.apply([], arr);\n}\n\nconst nativeToString = Object.prototype.toString;\nconst nativeHasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isUndefined(obj) {\n return obj === undefined;\n}\n\nfunction isDefined(obj) {\n return obj !== undefined;\n}\n\nfunction isNil(obj) {\n return obj == null;\n}\n\nfunction isArray(obj) {\n return nativeToString.call(obj) === '[object Array]';\n}\n\nfunction isObject(obj) {\n return nativeToString.call(obj) === '[object Object]';\n}\n\nfunction isNumber(obj) {\n return nativeToString.call(obj) === '[object Number]';\n}\n\n/**\n * @param {any} obj\n *\n * @return {boolean}\n */\nfunction isFunction(obj) {\n const tag = nativeToString.call(obj);\n\n return (\n tag === '[object Function]' ||\n tag === '[object AsyncFunction]' ||\n tag === '[object GeneratorFunction]' ||\n tag === '[object AsyncGeneratorFunction]' ||\n tag === '[object Proxy]'\n );\n}\n\nfunction isString(obj) {\n return nativeToString.call(obj) === '[object String]';\n}\n\n\n/**\n * Ensure collection is an array.\n *\n * @param {Object} obj\n */\nfunction ensureArray(obj) {\n\n if (isArray(obj)) {\n return;\n }\n\n throw new Error('must supply array');\n}\n\n/**\n * Return true, if target owns a property with the given key.\n *\n * @param {Object} target\n * @param {String} key\n *\n * @return {Boolean}\n */\nfunction has(target, key) {\n return !isNil(target) && nativeHasOwnProperty.call(target, key);\n}\n\n/**\n * @template T\n * @typedef { (\n * ((e: T) => boolean) |\n * ((e: T, idx: number) => boolean) |\n * ((e: T, key: string) => boolean) |\n * string |\n * number\n * ) } Matcher\n */\n\n/**\n * @template T\n * @template U\n *\n * @typedef { (\n * ((e: T) => U) | string | number\n * ) } Extractor\n */\n\n\n/**\n * @template T\n * @typedef { (val: T, key: any) => boolean } MatchFn\n */\n\n/**\n * @template T\n * @typedef { T[] } ArrayCollection\n */\n\n/**\n * @template T\n * @typedef { { [key: string]: T } } StringKeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { { [key: number]: T } } NumberKeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { StringKeyValueCollection<T> | NumberKeyValueCollection<T> } KeyValueCollection\n */\n\n/**\n * @template T\n * @typedef { KeyValueCollection<T> | ArrayCollection<T> } Collection\n */\n\n/**\n * Find element in collection.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param {Matcher<T>} matcher\n *\n * @return {Object}\n */\nfunction find(collection, matcher) {\n\n const matchFn = toMatcher(matcher);\n\n let match;\n\n forEach(collection, function(val, key) {\n if (matchFn(val, key)) {\n match = val;\n\n return false;\n }\n });\n\n return match;\n\n}\n\n\n/**\n * Find element index in collection.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param {Matcher<T>} matcher\n *\n * @return {number | string | undefined}\n */\nfunction findIndex(collection, matcher) {\n\n const matchFn = toMatcher(matcher);\n\n let idx = isArray(collection) ? -1 : undefined;\n\n forEach(collection, function(val, key) {\n if (matchFn(val, key)) {\n idx = key;\n\n return false;\n }\n });\n\n return idx;\n}\n\n\n/**\n * Filter elements in collection.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param {Matcher<T>} matcher\n *\n * @return {T[]} result\n */\nfunction filter(collection, matcher) {\n\n const matchFn = toMatcher(matcher);\n\n let result = [];\n\n forEach(collection, function(val, key) {\n if (matchFn(val, key)) {\n result.push(val);\n }\n });\n\n return result;\n}\n\n\n/**\n * Iterate over collection; returning something\n * (non-undefined) will stop iteration.\n *\n * @template T\n * @param {Collection<T>} collection\n * @param { ((item: T, idx: number) => (boolean|void)) | ((item: T, key: string) => (boolean|void)) } iterator\n *\n * @return {T} return result that stopped the iteration\n */\nfunction forEach(collection, iterator) {\n\n let val,\n result;\n\n if (isUndefined(collection)) {\n return;\n }\n\n const convertKey = isArray(collection) ? toNum : identity;\n\n for (let key in collection) {\n\n if (has(collection, key)) {\n val = collection[key];\n\n result = iterator(val, convertKey(key));\n\n if (result === false) {\n return val;\n }\n }\n }\n}\n\n/**\n * Return collection without element.\n *\n * @template T\n * @param {ArrayCollection<T>} arr\n * @param {Matcher<T>} matcher\n *\n * @return {T[]}\n */\nfunction without(arr, matcher) {\n\n if (isUndefined(arr)) {\n return [];\n }\n\n ensureArray(arr);\n\n const matchFn = toMatcher(matcher);\n\n return arr.filter(function(el, idx) {\n return !matchFn(el, idx);\n });\n\n}\n\n\n/**\n * Reduce collection, returning a single result.\n *\n * @template T\n * @template V\n *\n * @param {Collection<T>} collection\n * @param {(result: V, entry: T, index: any) => V} iterator\n * @param {V} result\n *\n * @return {V} result returned from last iterator\n */\nfunction reduce(collection, iterator, result) {\n\n forEach(collection, function(value, idx) {\n result = iterator(result, value, idx);\n });\n\n return result;\n}\n\n\n/**\n * Return true if every element in the collection\n * matches the criteria.\n *\n * @param {Object|Array} collection\n * @param {Function} matcher\n *\n * @return {Boolean}\n */\nfunction every(collection, matcher) {\n\n return !!reduce(collection, function(matches, val, key) {\n return matches && matcher(val, key);\n }, true);\n}\n\n\n/**\n * Return true if some elements in the collection\n * match the criteria.\n *\n * @param {Object|Array} collection\n * @param {Function} matcher\n *\n * @return {Boolean}\n */\nfunction some(collection, matcher) {\n\n return !!find(collection, matcher);\n}\n\n\n/**\n * Transform a collection into another collection\n * by piping each member through the given fn.\n *\n * @param {Object|Array} collection\n * @param {Function} fn\n *\n * @return {Array} transformed collection\n */\nfunction map(collection, fn) {\n\n let result = [];\n\n forEach(collection, function(val, key) {\n result.push(fn(val, key));\n });\n\n return result;\n}\n\n\n/**\n * Get the collections keys.\n *\n * @param {Object|Array} collection\n *\n * @return {Array}\n */\nfunction keys(collection) {\n return collection && Object.keys(collection) || [];\n}\n\n\n/**\n * Shorthand for `keys(o).length`.\n *\n * @param {Object|Array} collection\n *\n * @return {Number}\n */\nfunction size(collection) {\n return keys(collection).length;\n}\n\n\n/**\n * Get the values in the collection.\n *\n * @param {Object|Array} collection\n *\n * @return {Array}\n */\nfunction values(collection) {\n return map(collection, (val) => val);\n}\n\n\n/**\n * Group collection members by attribute.\n *\n * @param {Object|Array} collection\n * @param {Extractor} extractor\n *\n * @return {Object} map with { attrValue => [ a, b, c ] }\n */\nfunction groupBy(collection, extractor, grouped = {}) {\n\n extractor = toExtractor(extractor);\n\n forEach(collection, function(val) {\n let discriminator = extractor(val) || '_';\n\n let group = grouped[discriminator];\n\n if (!group) {\n group = grouped[discriminator] = [];\n }\n\n group.push(val);\n });\n\n return grouped;\n}\n\n\nfunction uniqueBy(extractor, ...collections) {\n\n extractor = toExtractor(extractor);\n\n let grouped = {};\n\n forEach(collections, (c) => groupBy(c, extractor, grouped));\n\n let result = map(grouped, function(val, key) {\n return val[0];\n });\n\n return result;\n}\n\n\nconst unionBy = uniqueBy;\n\n\n\n/**\n * Sort collection by criteria.\n *\n * @template T\n *\n * @param {Collection<T>} collection\n * @param {Extractor<T, number | string>} extractor\n *\n * @return {Array}\n */\nfunction sortBy(collection, extractor) {\n\n extractor = toExtractor(extractor);\n\n let sorted = [];\n\n forEach(collection, function(value, key) {\n let disc = extractor(value, key);\n\n let entry = {\n d: disc,\n v: value\n };\n\n for (var idx = 0; idx < sorted.length; idx++) {\n let { d } = sorted[idx];\n\n if (disc < d) {\n sorted.splice(idx, 0, entry);\n return;\n }\n }\n\n // not inserted, append (!)\n sorted.push(entry);\n });\n\n return map(sorted, (e) => e.v);\n}\n\n\n/**\n * Create an object pattern matcher.\n *\n * @example\n *\n * ```javascript\n * const matcher = matchPattern({ id: 1 });\n *\n * let element = find(elements, matcher);\n * ```\n *\n * @template T\n *\n * @param {T} pattern\n *\n * @return { (el: any) => boolean } matcherFn\n */\nfunction matchPattern(pattern) {\n\n return function(el) {\n\n return every(pattern, function(val, key) {\n return el[key] === val;\n });\n\n };\n}\n\n\n/**\n * @param {string | ((e: any) => any) } extractor\n *\n * @return { (e: any) => any }\n */\nfunction toExtractor(extractor) {\n\n /**\n * @satisfies { (e: any) => any }\n */\n return isFunction(extractor) ? extractor : (e) => {\n\n // @ts-ignore: just works\n return e[extractor];\n };\n}\n\n\n/**\n * @template T\n * @param {Matcher<T>} matcher\n *\n * @return {MatchFn<T>}\n */\nfunction toMatcher(matcher) {\n return isFunction(matcher) ? matcher : (e) => {\n return e === matcher;\n };\n}\n\n\nfunction identity(arg) {\n return arg;\n}\n\nfunction toNum(arg) {\n return Number(arg);\n}\n\n/* global setTimeout clearTimeout */\n\n/**\n * @typedef { {\n * (...args: any[]): any;\n * flush: () => void;\n * cancel: () => void;\n * } } DebouncedFunction\n */\n\n/**\n * Debounce fn, calling it only once if the given time\n * elapsed between calls.\n *\n * Lodash-style the function exposes methods to `#clear`\n * and `#flush` to control internal behavior.\n *\n * @param {Function} fn\n * @param {Number} timeout\n *\n * @return {DebouncedFunction} debounced function\n */\nfunction debounce(fn, timeout) {\n\n let timer;\n\n let lastArgs;\n let lastThis;\n\n let lastNow;\n\n function fire(force) {\n\n let now = Date.now();\n\n let scheduledDiff = force ? 0 : (lastNow + timeout) - now;\n\n if (scheduledDiff > 0) {\n return schedule(scheduledDiff);\n }\n\n fn.apply(lastThis, lastArgs);\n\n clear();\n }\n\n function schedule(timeout) {\n timer = setTimeout(fire, timeout);\n }\n\n function clear() {\n if (timer) {\n clearTimeout(timer);\n }\n\n timer = lastNow = lastArgs = lastThis = undefined;\n }\n\n function flush() {\n if (timer) {\n fire(true);\n }\n\n clear();\n }\n\n /**\n * @type { DebouncedFunction }\n */\n function callback(...args) {\n lastNow = Date.now();\n\n lastArgs = args;\n lastThis = this;\n\n // ensure an execution is scheduled\n if (!timer) {\n schedule(timeout);\n }\n }\n\n callback.flush = flush;\n callback.cancel = clear;\n\n return callback;\n}\n\n/**\n * Throttle fn, calling at most once\n * in the given interval.\n *\n * @param {Function} fn\n * @param {Number} interval\n *\n * @return {Function} throttled function\n */\nfunction throttle(fn, interval) {\n let throttling = false;\n\n return function(...args) {\n\n if (throttling) {\n return;\n }\n\n fn(...args);\n throttling = true;\n\n setTimeout(() => {\n throttling = false;\n }, interval);\n };\n}\n\n/**\n * Bind function against target <this>.\n *\n * @param {Function} fn\n * @param {Object} target\n *\n * @return {Function} bound function\n */\nfunction bind(fn, target) {\n return fn.bind(target);\n}\n\n/**\n * Convenience wrapper for `Object.assign`.\n *\n * @param {Object} target\n * @param {...Object} others\n *\n * @return {Object} the target\n */\nfunction assign(target, ...others) {\n return Object.assign(target, ...others);\n}\n\n/**\n * Sets a nested property of a given object to the specified value.\n *\n * This mutates the object and returns it.\n *\n * @template T\n *\n * @param {T} target The target of the set operation.\n * @param {(string|number)[]} path The path to the nested value.\n * @param {any} value The value to set.\n *\n * @return {T}\n */\nfunction set(target, path, value) {\n\n let currentTarget = target;\n\n forEach(path, function(key, idx) {\n\n if (typeof key !== 'number' && typeof key !== 'string') {\n throw new Error('illegal key type: ' + typeof key + '. Key should be of type number or string.');\n }\n\n if (key === 'constructor') {\n throw new Error('illegal key: constructor');\n }\n\n if (key === '__proto__') {\n throw new Error('illegal key: __proto__');\n }\n\n let nextKey = path[idx + 1];\n let nextTarget = currentTarget[key];\n\n if (isDefined(nextKey) && isNil(nextTarget)) {\n nextTarget = currentTarget[key] = isNaN(+nextKey) ? {} : [];\n }\n\n if (isUndefined(nextKey)) {\n if (isUndefined(value)) {\n delete currentTarget[key];\n } else {\n currentTarget[key] = value;\n }\n } else {\n currentTarget = nextTarget;\n }\n });\n\n return target;\n}\n\n\n/**\n * Gets a nested property of a given object.\n *\n * @param {Object} target The target of the get operation.\n * @param {(string|number)[]} path The path to the nested value.\n * @param {any} [defaultValue] The value to return if no value exists.\n *\n * @return {any}\n */\nfunction get(target, path, defaultValue) {\n\n let currentTarget = target;\n\n forEach(path, function(key) {\n\n // accessing nil property yields <undefined>\n if (isNil(currentTarget)) {\n currentTarget = undefined;\n\n return false;\n }\n\n currentTarget = currentTarget[key];\n });\n\n return isUndefined(currentTarget) ? defaultValue : currentTarget;\n}\n\n/**\n * Pick properties from the given target.\n *\n * @template T\n * @template {any[]} V\n *\n * @param {T} target\n * @param {V} properties\n *\n * @return Pick<T, V>\n */\nfunction pick(target, properties) {\n\n let result = {};\n\n let obj = Object(target);\n\n forEach(properties, function(prop) {\n\n if (prop in obj) {\n result[prop] = target[prop];\n }\n });\n\n return result;\n}\n\n/**\n * Pick all target properties, excluding the given ones.\n *\n * @template T\n * @template {any[]} V\n *\n * @param {T} target\n * @param {V} properties\n *\n * @return {Omit<T, V>} target\n */\nfunction omit(target, properties) {\n\n let result = {};\n\n let obj = Object(target);\n\n forEach(obj, function(prop, key) {\n\n if (properties.indexOf(key) === -1) {\n result[key] = prop;\n }\n });\n\n return result;\n}\n\n/**\n * Recursively merge `...sources` into given target.\n *\n * Does support merging objects; does not support merging arrays.\n *\n * @param {Object} target\n * @param {...Object} sources\n *\n * @return {Object} the target\n */\nfunction merge(target, ...sources) {\n\n if (!sources.length) {\n return target;\n }\n\n forEach(sources, function(source) {\n\n // skip non-obj sources, i.e. null\n if (!source || !isObject(source)) {\n return;\n }\n\n forEach(source, function(sourceVal, key) {\n\n if (key === '__proto__') {\n return;\n }\n\n let targetVal = target[key];\n\n if (isObject(sourceVal)) {\n\n if (!isObject(targetVal)) {\n\n // override target[key] with object\n targetVal = {};\n }\n\n target[key] = merge(targetVal, sourceVal);\n } else {\n target[key] = sourceVal;\n }\n\n });\n });\n\n return target;\n}\n\nexport { assign, bind, debounce, ensureArray, every, filter, find, findIndex, flatten, forEach, get, groupBy, has, isArray, isDefined, isFunction, isNil, isNumber, isObject, isString, isUndefined, keys, map, matchPattern, merge, omit, pick, reduce, set, size, some, sortBy, throttle, unionBy, uniqueBy, values, without };\n","/**\n * Moddle base element.\n */\nexport default function Base() { }\n\nBase.prototype.get = function(name) {\n return this.$model.properties.get(this, name);\n};\n\nBase.prototype.set = function(name, value) {\n this.$model.properties.set(this, name, value);\n};","import {\n forEach,\n bind\n} from 'min-dash';\n\nimport Base from './base.js';\n\n/**\n * A model element factory.\n *\n * @param {Moddle} model\n * @param {Properties} properties\n */\nexport default function Factory(model, properties) {\n this.model = model;\n this.properties = properties;\n}\n\n\nFactory.prototype.createType = function(descriptor) {\n\n var model = this.model;\n\n var props = this.properties,\n prototype = Object.create(Base.prototype);\n\n // initialize default values\n forEach(descriptor.properties, function(p) {\n if (!p.isMany && p.default !== undefined) {\n prototype[p.name] = p.default;\n }\n });\n\n props.defineModel(prototype, model);\n props.defineDescriptor(prototype, descriptor);\n\n var name = descriptor.ns.name;\n\n /**\n * The new type constructor\n */\n function ModdleElement(attrs) {\n props.define(this, '$type', { value: name, enumerable: true });\n props.define(this, '$attrs', { value: {} });\n props.define(this, '$parent', { writable: true });\n\n forEach(attrs, bind(function(val, key) {\n this.set(key, val);\n }, this));\n }\n\n ModdleElement.prototype = prototype;\n\n ModdleElement.hasType = prototype.$instanceOf = this.model.hasType;\n\n // static links\n props.defineModel(ModdleElement, model);\n props.defineDescriptor(ModdleElement, descriptor);\n\n return ModdleElement;\n};","/**\n * Built-in moddle types\n */\nvar BUILTINS = {\n String: true,\n Boolean: true,\n Integer: true,\n Real: true,\n Element: true\n};\n\n/**\n * Converters for built in types from string representations\n */\nvar TYPE_CONVERTERS = {\n String: function(s) { return s; },\n Boolean: function(s) { return s === 'true'; },\n Integer: function(s) { return parseInt(s, 10); },\n Real: function(s) { return parseFloat(s); }\n};\n\n/**\n * Convert a type to its real representation\n */\nexport function coerceType(type, value) {\n\n var converter = TYPE_CONVERTERS[type];\n\n if (converter) {\n return converter(value);\n } else {\n return value;\n }\n}\n\n/**\n * Return whether the given type is built-in\n */\nexport function isBuiltIn(type) {\n return !!BUILTINS[type];\n}\n\n/**\n * Return whether the given type is simple\n */\nexport function isSimple(type) {\n return !!TYPE_CONVERTERS[type];\n}","/**\n * Parses a namespaced attribute name of the form (ns:)localName to an object,\n * given a default prefix to assume in case no explicit namespace is given.\n *\n * @param {String} name\n * @param {String} [defaultPrefix] the default prefix to take, if none is present.\n *\n * @return {Object} the parsed name\n */\nexport function parseName(name, defaultPrefix) {\n var parts = name.split(/:/),\n localName, prefix;\n\n // no prefix (i.e. only local name)\n if (parts.length === 1) {\n localName = name;\n prefix = defaultPrefix;\n }\n\n // prefix + local name\n else if (parts.length === 2) {\n localName = parts[1];\n prefix = parts[0];\n }\n\n else {\n throw new Error('expected <prefix:localName> or <localName>, got ' + name);\n }\n\n name = (prefix ? prefix + ':' : '') + localName;\n\n return {\n name: name,\n prefix: prefix,\n localName: localName\n };\n}","import {\n pick,\n assign,\n forEach,\n bind\n} from 'min-dash';\n\nimport {\n parseName as parseNameNs\n} from './ns.js';\n\n\n/**\n * A utility to build element descriptors.\n */\nexport default function DescriptorBuilder(nameNs) {\n this.ns = nameNs;\n this.name = nameNs.name;\n this.allTypes = [];\n this.allTypesByName = {};\n this.properties = [];\n this.propertiesByName = {};\n}\n\n\nDescriptorBuilder.prototype.build = function() {\n return pick(this, [\n 'ns',\n 'name',\n 'allTypes',\n 'allTypesByName',\n 'properties',\n 'propertiesByName',\n 'bodyProperty',\n 'idProperty'\n ]);\n};\n\n/**\n * Add property at given index.\n *\n * @param {Object} p\n * @param {Number} [idx]\n * @param {Boolean} [validate=true]\n */\nDescriptorBuilder.prototype.addProperty = function(p, idx, validate) {\n\n if (typeof idx === 'boolean') {\n validate = idx;\n idx = undefined;\n }\n\n this.addNamedProperty(p, validate !== false);\n\n var properties = this.properties;\n\n if (idx !== undefined) {\n properties.splice(idx, 0, p);\n } else {\n properties.push(p);\n }\n};\n\n\nDescriptorBuilder.prototype.replaceProperty = function(oldProperty, newProperty, replace) {\n var oldNameNs = oldProperty.ns;\n\n var props = this.properties,\n propertiesByName = this.propertiesByName,\n rename = oldProperty.name !== newProperty.name;\n\n if (oldProperty.isId) {\n if (!newProperty.isId) {\n throw new Error(\n 'property <' + newProperty.ns.name + '> must be id property ' +\n 'to refine <' + oldProperty.ns.name + '>');\n }\n\n this.setIdProperty(newProperty, false);\n }\n\n if (oldProperty.isBody) {\n\n if (!newProperty.isBody) {\n throw new Error(\n 'property <' + newProperty.ns.name + '> must be body property ' +\n 'to refine <' + oldProperty.ns.name + '>');\n }\n\n // TODO: Check compatibility\n this.setBodyProperty(newProperty, false);\n }\n\n // validate existence and get location of old property\n var idx = props.indexOf(oldProperty);\n if (idx === -1) {\n throw new Error('property <' + oldNameNs.name + '> not found in property list');\n }\n\n // remove old property\n props.splice(idx, 1);\n\n // replacing the named property is intentional\n //\n // * validate only if this is a \"rename\" operation\n // * add at specific index unless we \"replace\"\n //\n this.addProperty(newProperty, replace ? undefined : idx, rename);\n\n // make new property available under old name\n propertiesByName[oldNameNs.name] = propertiesByName[oldNameNs.localName] = newProperty;\n};\n\n\nDescriptorBuilder.prototype.redefineProperty = function(p, targetPropertyName, replace) {\n\n var nsPrefix = p.ns.prefix;\n var parts = targetPropertyName.split('#');\n\n var name = parseNameNs(parts[0], nsPrefix);\n var attrName = parseNameNs(parts[1], name.prefix).name;\n\n var redefinedProperty = this.propertiesByName[attrName];\n if (!redefinedProperty) {\n throw new Error('refined property <' + attrName + '> not found');\n } else {\n this.replaceProperty(redefinedProperty, p, replace);\n }\n\n delete p.redefines;\n};\n\nDescriptorBuilder.prototype.addNamedProperty = function(p, validate) {\n var ns = p.ns,\n propsByName = this.propertiesByName;\n\n if (validate) {\n this.assertNotDefined(p, ns.name);\n this.assertNotDefined(p, ns.localName);\n }\n\n propsByName[ns.name] = propsByName[ns.localName] = p;\n};\n\nDescriptorBuilder.prototype.removeNamedProperty = function(p) {\n var ns = p.ns,\n propsByName = this.propertiesByName;\n\n delete propsByName[ns.name];\n delete propsByName[ns.localName];\n};\n\nDescriptorBuilder.prototype.setBodyProperty = function(p, validate) {\n\n if (validate && this.bodyProperty) {\n throw new Error(\n 'body property defined multiple times ' +\n '(<' + this.bodyProperty.ns.name + '>, <' + p.ns.name + '>)');\n }\n\n this.bodyProperty = p;\n};\n\nDescriptorBuilder.prototype.setIdProperty = function(p, validate) {\n\n if (validate && this.idProperty) {\n throw new Error(\n 'id property defined multiple times ' +\n '(<' + this.idProperty.ns.name + '>, <' + p.ns.name + '>)');\n }\n\n this.idProperty = p;\n};\n\nDescriptorBuilder.prototype.assertNotTrait = function(typeDescriptor) {\n\n const _extends = typeDescriptor.extends || [];\n\n if (_extends.length) {\n throw new Error(\n `cannot create <${ typeDescriptor.name }> extending <${ typeDescriptor.extends }>`\n );\n }\n};\n\nDescriptorBuilder.prototype.assertNotDefined = function(p, name) {\n var propertyName = p.name,\n definedProperty = this.propertiesByName[propertyName];\n\n if (definedProperty) {\n throw new Error(\n 'property <' + propertyName + '> already defined; ' +\n 'override of <' + definedProperty.definedBy.ns.name + '#' + definedProperty.ns.name + '> by ' +\n '<' + p.definedBy.ns.name + '#' + p.ns.name + '> not allowed without redefines');\n }\n};\n\nDescriptorBuilder.prototype.hasProperty = function(name) {\n return this.propertiesByName[name];\n};\n\nDescriptorBuilder.prototype.addTrait = function(t, inherited) {\n\n if (inherited) {\n this.assertNotTrait(t);\n }\n\n var typesByName = this.allTypesByName,\n types = this.allTypes;\n\n var typeName = t.name;\n\n if (typeName in typesByName) {\n return;\n }\n\n forEach(t.properties, bind(function(p) {\n\n // clone property to allow extensions\n p = assign({}, p, {\n name: p.ns.localName,\n inherited: inherited\n });\n\n Object.defineProperty(p, 'definedBy', {\n value: t\n });\n\n var replaces = p.replaces,\n redefines = p.redefines;\n\n // add replace/redefine support\n if (replaces || redefines) {\n this.redefineProperty(p, replaces || redefines, replaces);\n } else {\n if (p.isBody) {\n this.setBodyProperty(p);\n }\n if (p.isId) {\n this.setIdProperty(p);\n }\n this.addProperty(p);\n }\n }, this));\n\n types.push(t);\n typesByName[typeName] = t;\n};","import {\n assign,\n forEach,\n bind\n} from 'min-dash';\n\nimport {\n isBuiltIn as isBuiltInType\n} from './types.js';\n\nimport DescriptorBuilder from './descriptor-builder.js';\n\nimport {\n parseName as parseNameNs\n} from './ns.js';\n\n\n/**\n * A registry of Moddle packages.\n *\n * @param {Array<Package>} packages\n * @param {Properties} properties\n */\nexport default function Registry(packages, properties) {\n this.packageMap = {};\n this.typeMap = {};\n\n this.packages = [];\n\n this.properties = properties;\n\n forEach(packages, bind(this.registerPackage, this));\n}\n\n\nRegistry.prototype.getPackage = function(uriOrPrefix) {\n return this.packageMap[uriOrPrefix];\n};\n\nRegistry.prototype.getPackages = function() {\n return this.packages;\n};\n\n\nRegistry.prototype.registerPackage = function(pkg) {\n\n // copy package\n pkg = assign({}, pkg);\n\n var pkgMap = this.packageMap;\n\n ensureAvailable(pkgMap, pkg, 'prefix');\n ensureAvailable(pkgMap, pkg, 'uri');\n\n // register types\n forEach(pkg.types, bind(function(descriptor) {\n this.registerType(descriptor, pkg);\n }, this));\n\n pkgMap[pkg.uri] = pkgMap[pkg.prefix] = pkg;\n this.packages.push(pkg);\n};\n\n\n/**\n * Register a type from a specific package with us\n */\nRegistry.prototype.registerType = function(type, pkg) {\n\n type = assign({}, type, {\n superClass: (type.superClass || []).slice(),\n extends: (type.extends || []).slice(),\n properties: (type.properties || []).slice(),\n meta: assign(({}, type.meta || {}))\n });\n\n var ns = parseNameNs(type.name, pkg.prefix),\n name = ns.name,\n propertiesByName = {};\n\n // parse properties\n forEach(type.properties, bind(function(p) {\n\n // namespace property names\n var propertyNs = parseNameNs(p.name, ns.prefix),\n propertyName = propertyNs.name;\n\n // namespace property types\n if (!isBuiltInType(p.type)) {\n p.type = parseNameNs(p.type, propertyNs.prefix).name;\n }\n\n assign(p, {\n ns: propertyNs,\n name: propertyName\n });\n\n propertiesByName[propertyName] = p;\n }, this));\n\n // update ns + name\n assign(type, {\n ns: ns,\n name: name,\n propertiesByName: propertiesByName\n });\n\n forEach(type.extends, bind(function(extendsName) {\n var extendsNameNs = parseNameNs(extendsName, ns.prefix);\n\n var extended = this.typeMap[extendsNameNs.name];\n\n extended.traits = extended.traits || [];\n extended.traits.push(name);\n }, this));\n\n // link to package\n this.definePackage(type, pkg);\n\n // register\n this.typeMap[name] = type;\n};\n\n\n/**\n * Traverse the type hierarchy from bottom to top,\n * calling iterator with (type, inherited) for all elements in\n * the inheritance chain.\n *\n * @param {Object} nsName\n * @param {Function} iterator\n * @param {Boolean} [trait=false]\n */\nRegistry.prototype.mapTypes = function(nsName, iterator, trait) {\n\n var type = isBuiltInType(nsName.name) ? { name: nsName.name } : this.typeMap[nsName.name];\n\n var self = this;\n\n /**\n * Traverse the selected super type or trait\n *\n * @param {String} cls\n * @param {Boolean} [trait=false]\n */\n function traverse(cls, trait) {\n var parentNs = parseNameNs(cls, isBuiltInType(cls) ? '' : nsName.prefix);\n self.mapTypes(parentNs, iterator, trait);\n }\n\n /**\n * Traverse the selected trait.\n *\n * @param {String} cls\n */\n function traverseTrait(cls) {\n return traverse(cls, true);\n }\n\n /**\n * Traverse the selected super type\n *\n * @param {String} cls\n */\n function traverseSuper(cls) {\n return traverse(cls, false);\n }\n\n if (!type) {\n throw new Error('unknown type <' + nsName.name + '>');\n }\n\n forEach(type.superClass, trait ? traverseTrait : traverseSuper);\n\n // call iterator with (type, inherited=!trait)\n iterator(type, !trait);\n\n forEach(type.traits, traverseTrait);\n};\n\n\n/**\n * Returns the effective descriptor for a type.\n *\n * @param {String} type the namespaced name (ns:localName) of the type\n *\n * @return {Descriptor} the resulting effective descriptor\n */\nRegistry.prototype.getEffectiveDescriptor = function(name) {\n\n var nsName = parseNameNs(name);\n\n var builder = new DescriptorBuilder(nsName);\n\n this.mapTypes(nsName, function(type, inherited) {\n builder.addTrait(type, inherited);\n });\n\n var descriptor = builder.build();\n\n // define package link\n this.definePackage(descriptor, descriptor.allTypes[descriptor.allTypes.length - 1].$pkg);\n\n return descriptor;\n};\n\n\nRegistry.prototype.definePackage = function(target, pkg) {\n this.properties.define(target, '$pkg', { value: pkg });\n};\n\n\n\n// helpers ////////////////////////////\n\nfunction ensureAvailable(packageMap, pkg, identifierKey) {\n\n var value = pkg[identifierKey];\n\n if (value in packageMap) {\n throw new Error('package with ' + identifierKey + ' <' + value + '> already defined');\n }\n}\n","import {\n assign,\n isString\n} from 'min-dash';\n\n/**\n * A utility that gets and sets properties of model elements.\n *\n * @param {Model} model\n */\nexport default function Properties(model) {\n this.model = model;\n}\n\n\n/**\n * Sets a named property on the target element.\n * If the value is undefined, the property gets deleted.\n *\n * @param {Object} target\n * @param {String} name\n * @param {Object} value\n */\nProperties.prototype.set = function(target, name, value) {\n\n if (!isString(name) || !name.length) {\n throw new TypeError('property name must be a non-empty string');\n }\n\n var property = this.getProperty(target, name);\n\n var propertyName = property && property.name;\n\n if (isUndefined(value)) {\n\n // unset the property, if the specified value is undefined;\n // delete from $attrs (for extensions) or the target itself\n if (property) {\n delete target[propertyName];\n } else {\n delete target.$attrs[stripGlobal(name)];\n }\n } else {\n\n // set the property, defining well defined properties on the fly\n // or simply updating them in target.$attrs (for extensions)\n if (property) {\n if (propertyName in target) {\n target[propertyName] = value;\n } else {\n defineProperty(target, property, value);\n }\n } else {\n target.$attrs[stripGlobal(name)] = value;\n }\n }\n};\n\n/**\n * Returns the named property of the given element\n *\n * @param {Object} target\n * @param {String} name\n *\n * @return {Object}\n */\nProperties.prototype.get = function(target, name) {\n\n var property = this.getProperty(target, name);\n\n if (!property) {\n return target.$attrs[stripGlobal(name)];\n }\n\n var propertyName = property.name;\n\n // check if access to collection property and lazily initialize it\n if (!target[propertyName] && property.isMany) {\n defineProperty(target, property, []);\n }\n\n return target[propertyName];\n};\n\n\n/**\n * Define a property on the target element\n *\n * @param {Object} target\n * @param {String} name\n * @param {Object} options\n */\nProperties.prototype.define = function(target, name, options) {\n\n if (!options.writable) {\n\n var value = options.value;\n\n // use getters for read-only variables to support ES6 proxies\n // cf. https://github.com/bpmn-io/internal-docs/issues/386\n options = assign({}, options, {\n get: function() { return value; }\n });\n\n delete options.value;\n }\n\n Object.defineProperty(target, name, options);\n};\n\n\n/**\n * Define the descriptor for an element\n */\nProperties.prototype.defineDescriptor = function(target, descriptor) {\n this.define(target, '$descriptor', { value: descriptor });\n};\n\n/**\n * Define the model for an element\n */\nProperties.prototype.defineModel = function(target, model) {\n this.define(target, '$model', { value: model });\n};\n\n/**\n * Return property with the given name on the element.\n *\n * @param {any} target\n * @param {string} name\n *\n * @return {object | null} property\n */\nProperties.prototype.getProperty = function(target, name) {\n\n var model = this.model;\n\n var property = model.getPropertyDescriptor(target, name);\n\n if (property) {\n return property;\n }\n\n if (name.includes(':')) {\n return null;\n }\n\n const strict = model.config.strict;\n\n if (typeof strict !== 'undefined') {\n const error = new TypeError(`unknown property <${ name }> on <${ target.$type }>`);\n\n if (strict) {\n throw error;\n } else {\n\n // eslint-disable-next-line no-undef\n typeof console !== 'undefined' && console.warn(error);\n }\n }\n\n return null;\n};\n\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\nfunction defineProperty(target, property, value) {\n Object.defineProperty(target, property.name, {\n enumerable: !property.isReference,\n writable: true,\n value: value,\n configurable: true\n });\n}\n\nfunction stripGlobal(name) {\n return name.replace(/^:/, '');\n}","import {\n isString,\n isObject,\n forEach,\n set\n} from 'min-dash';\n\nimport Factory from './factory.js';\nimport Registry from './registry.js';\nimport Properties from './properties.js';\n\nimport {\n parseName as parseNameNs\n} from './ns.js';\n\n\n// Moddle implementation /////////////////////////////////////////////////\n\n/**\n * @class Moddle\n *\n * A model that can be used to create elements of a specific type.\n *\n * @example\n *\n * var Moddle = require('moddle');\n *\n * var pkg = {\n * name: 'mypackage',\n * prefix: 'my',\n * types: [\n * { name: 'Root' }\n * ]\n * };\n *\n * var moddle = new Moddle([pkg]);\n *\n * @param {Array<Package>} packages the packages to contain\n *\n * @param { { strict?: boolean } } [config] moddle configuration\n */\nexport default function Moddle(packages, config = {}) {\n\n this.properties = new Properties(this);\n\n this.factory = new Factory(this, this.properties);\n this.registry = new Registry(packages, this.properties);\n\n this.typeCache = {};\n\n this.config = config;\n}\n\n\n/**\n * Create an instance of the specified type.\n *\n * @method Moddle#create\n *\n * @example\n *\n * var foo = moddle.create('my:Foo');\n * var bar = moddle.create('my:Bar', { id: 'BAR_1' });\n *\n * @param {String|Object} descriptor the type descriptor or name know to the model\n * @param {Object} attrs a number of attributes to initialize the model instance with\n * @return {Object} model instance\n */\nModdle.prototype.create = function(descriptor, attrs) {\n var Type = this.getType(descriptor);\n\n if (!Type) {\n throw new Error('unknown type <' + descriptor + '>');\n }\n\n return new Type(attrs);\n};\n\n\n/**\n * Returns the type representing a given descriptor\n *\n * @method Moddle#getType\n *\n * @example\n *\n * var Foo = moddle.getType('my:Foo');\n * var foo = new Foo({ 'id' : 'FOO_1' });\n *\n * @param {String|Object} descriptor the type descriptor or name know to the model\n * @return {Object} the type representing the descriptor\n */\nModdle.prototype.getType = function(descriptor) {\n\n var cache = this.typeCache;\n\n var name = isString(descriptor) ? descriptor : descriptor.ns.name;\n\n var type = cache[name];\n\n if (!type) {\n descriptor = this.registry.getEffectiveDescriptor(name);\n type = cache[name] = this.factory.createType(descriptor);\n }\n\n return type;\n};\n\n\n/**\n * Creates an any-element type to be used within model instances.\n *\n * This can be used to create custom elements that lie outside the meta-model.\n * The created element contains all the meta-data required to serialize it\n * as part of meta-model elements.\n *\n * @method Moddle#createAny\n *\n * @example\n *\n * var foo = moddle.createAny('vendor:Foo', 'http://vendor', {\n * value: 'bar'\n * });\n *\n * var container = moddle.create('my:Container', 'http://my', {\n * any: [ foo ]\n * });\n *\n * // go ahead and serialize the stuff\n *\n *\n * @param {String} name the name of the element\n * @param {String} nsUri the namespace uri of the element\n * @param {Object} [properties] a map of properties to initialize the instance with\n * @return {Object} the any type instance\n */\nModdle.prototype.createAny = function(name, nsUri, properties) {\n\n var nameNs = parseNameNs(name);\n\n var element = {\n $type: name,\n $instanceOf: function(type) {\n return type === this.$type;\n },\n get: function(key) {\n return this[key];\n },\n set: function(key, value) {\n set(this, [ key ], value);\n }\n };\n\n var descriptor = {\n name: name,\n isGeneric: true,\n ns: {\n prefix: nameNs.prefix,\n localName: nameNs.localName,\n uri: nsUri\n }\n };\n\n this.properties.defineDescriptor(element, descriptor);\n this.properties.defineModel(element, this);\n this.properties.define(element, 'get', { enumerable: false, writable: true });\n this.properties.define(element, 'set', { enumerable: false, writable: true });\n this.properties.define(element, '$parent', { enumerable: false, writable: true });\n this.properties.define(element, '$instanceOf', { enumerable: false, writable: true });\n\n forEach(properties, function(a, key) {\n if (isObject(a) && a.value !== undefined) {\n element[a.name] = a.value;\n } else {\n element[key] = a;\n }\n });\n\n return element;\n};\n\n/**\n * Returns a registered package by uri or prefix\n *\n * @return {Object} the package\n */\nModdle.prototype.getPackage = function(uriOrPrefix) {\n return this.registry.getPackage(uriOrPrefix);\n};\n\n/**\n * Returns a snapshot of all known packages\n *\n * @return {Object} the package\n */\nModdle.prototype.getPackages = function() {\n return this.registry.getPackages();\n};\n\n/**\n * Returns the descriptor for an element\n */\nModdle.prototype.getElementDescriptor = function(element) {\n return element.$descriptor;\n};\n\n/**\n * Returns true if the given descriptor or instance\n * represents the given type.\n *\n * May be applied to this, if element is omitted.\n */\nModdle.prototype.hasType = function(element, type) {\n if (type === undefined) {\n type = element;\n element = this;\n }\n\n var descriptor = element.$model.getElementDescriptor(element);\n\n return (type in descriptor.allTypesByName);\n};\n\n/**\n * Returns the descriptor of an elements named property\n */\nModdle.prototype.getPropertyDescriptor = function(element, property) {\n return this.getElementDescriptor(element).propertiesByName[property];\n};\n\n/**\n * Returns a mapped type's descriptor\n */\nModdle.prototype.getTypeDescriptor = function(type) {\n return this.registry.typeMap[type];\n};","var fromCharCode = String.fromCharCode;\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar ENTITY_PATTERN = /&#(\\d+);|&#x([0-9a-f]+);|&(\\w+);/ig;\n\nvar ENTITY_MAPPING = {\n 'amp': '&',\n 'apos': '\\'',\n 'gt': '>',\n 'lt': '<',\n 'quot': '\"'\n};\n\n// map UPPERCASE variants of supported special chars\nObject.keys(ENTITY_MAPPING).forEach(function(k) {\n ENTITY_MAPPING[k.toUpperCase()] = ENTITY_MAPPING[k];\n});\n\n\nfunction replaceEntities(_, d, x, z) {\n\n // reserved names, i.e. &nbsp;\n if (z) {\n if (hasOwnProperty.call(ENTITY_MAPPING, z)) {\n return ENTITY_MAPPING[z];\n } else {\n\n // fall back to original value\n return '&' + z + ';';\n }\n }\n\n // decimal encoded char\n if (d) {\n return fromCharCode(d);\n }\n\n // hex encoded char\n return fromCharCode(parseInt(x, 16));\n}\n\n\n/**\n * A basic entity decoder that can decode a minimal\n * sub-set of reserved names (&amp;) as well as\n * hex (&#xaaf;) and decimal (&#1231;) encoded characters.\n *\n * @param {string} s\n *\n * @return {string} decoded string\n */\nexport default function decodeEntities(s) {\n if (s.length > 3 && s.indexOf('&') !== -1) {\n return s.replace(ENTITY_PATTERN, replaceEntities);\n }\n\n return s;\n}","import decodeEntities from './decode.js';\n\nvar NON_WHITESPACE_OUTSIDE_ROOT_NODE = 'non-whitespace outside of root node';\n\nfunction error(msg) {\n return new Error(msg);\n}\n\nfunction missingNamespaceForPrefix(prefix) {\n return 'missing namespace for prefix <' + prefix + '>';\n}\n\nfunction getter(getFn) {\n return {\n 'get': getFn,\n 'enumerable': true\n };\n}\n\nfunction cloneNsMatrix(nsMatrix) {\n var clone = {}, key;\n for (key in nsMatrix) {\n clone[key] = nsMatrix[key];\n }\n return clone;\n}\n\nfunction uriPrefix(prefix) {\n return prefix + '$uri';\n}\n\nfunction buildNsMatrix(nsUriToPrefix) {\n var nsMatrix = {},\n uri,\n prefix;\n\n for (uri in nsUriToPrefix) {\n prefix = nsUriToPrefix[uri];\n nsMatrix[prefix] = prefix;\n nsMatrix[uriPrefix(prefix)] = uri;\n }\n\n return nsMatrix;\n}\n\nfunction noopGetContext() {\n return { line: 0, column: 0 };\n}\n\nfunction throwFunc(err) {\n throw err;\n}\n\n/**\n * Creates a new parser with the given options.\n *\n * @constructor\n *\n * @param {!Object<string, ?>=} options\n */\nexport default function Parser(options) {\n\n if (!this) {\n return new Parser(options);\n }\n\n var proxy = options && options['proxy'];\n\n var onText,\n onOpenTag,\n onCloseTag,\n onCDATA,\n onError = throwFunc,\n onWarning,\n onComment,\n onQuestion,\n onAttention;\n\n var getContext = noopGetContext;\n\n /**\n * Do we need to parse the current elements attributes for namespaces?\n *\n * @type {boolean}\n */\n var maybeNS = false;\n\n /**\n * Do we process namespaces at all?\n *\n * @type {boolean}\n */\n var isNamespace = false;\n\n /**\n * The caught error returned on parse end\n *\n * @type {Error}\n */\n var returnError = null;\n\n /**\n * Should we stop parsing?\n *\n * @type {boolean}\n */\n var parseStop = false;\n\n /**\n * A map of { uri: prefix } used by the parser.\n *\n * This map will ensure we can normalize prefixes during processing;\n * for each uri, only one prefix will be exposed to the handlers.\n *\n * @type {!Object<string, string>}}\n */\n var nsUriToPrefix;\n\n /**\n * Handle parse error.\n *\n * @param {string|Error} err\n */\n function handleError(err) {\n if (!(err instanceof Error)) {\n err = error(err);\n }\n\n returnError = err;\n\n onError(err, getContext);\n }\n\n /**\n * Handle parse error.\n *\n * @param {string|Error} err\n */\n function handleWarning(err) {\n\n if (!onWarning) {\n return;\n }\n\n if (!(err instanceof Error)) {\n err = error(err);\n }\n\n onWarning(err, getContext);\n }\n\n /**\n * Register parse listener.\n *\n * @param {string} name\n * @param {Function} cb\n *\n * @return {Parser}\n */\n this['on'] = function(name, cb) {\n\n if (typeof cb !== 'function') {\n throw error('required args <name, cb>');\n }\n\n switch (name) {\n case 'openTag': onOpenTag = cb; break;\n case 'text': onText = cb; break;\n case 'closeTag': onCloseTag = cb; break;\n case 'error': onError = cb; break;\n case 'warn': onWarning = cb; break;\n case 'cdata': onCDATA = cb; break;\n case 'attention': onAttention = cb; break; // <!XXXXX zzzz=\"eeee\">\n case 'question': onQuestion = cb; break; // <? .... ?>\n case 'comment': onComment = cb; break;\n default:\n throw error('unsupported event: ' + name);\n }\n\n return this;\n };\n\n /**\n * Set the namespace to prefix mapping.\n *\n * @example\n *\n * parser.ns({\n * 'http://foo': 'foo',\n * 'http://bar': 'bar'\n * });\n *\n * @param {!Object<string, string>} nsMap\n *\n * @return {Parser}\n */\n this['ns'] = function(nsMap) {\n\n if (typeof nsMap === 'undefined') {\n nsMap = {};\n }\n\n if (typeof nsMap !== 'object') {\n throw error('required args <nsMap={}>');\n }\n\n var _nsUriToPrefix = {}, k;\n\n for (k in nsMap) {\n _nsUriToPrefix[k] = nsMap[k];\n }\n\n isNamespace = true;\n nsUriToPrefix = _nsUriToPrefix;\n\n return this;\n };\n\n /**\n * Parse xml string.\n *\n * @param {string} xml\n *\n * @return {Error} returnError, if not thrown\n */\n this['parse'] = function(xml) {\n if (typeof xml !== 'string') {\n throw error('required args <xml=string>');\n }\n\n returnError = null;\n\n parse(xml);\n\n getContext = noopGetContext;\n parseStop = false;\n\n return returnError;\n };\n\n /**\n * Stop parsing.\n */\n this['stop'] = function() {\n parseStop = true;\n };\n\n /**\n * Parse string, invoking configured listeners on element.\n *\n * @param {string} xml\n */\n function parse(xml) {\n var nsMatrixStack = isNamespace ? [] : null,\n nsMatrix = isNamespace ? buildNsMatrix(nsUriToPrefix) : null,\n _nsMatrix,\n nodeStack = [],\n anonymousNsCount = 0,\n tagStart = false,\n tagEnd = false,\n i = 0, j = 0,\n x, y, q, w, v,\n xmlns,\n elementName,\n _elementName,\n elementProxy\n ;\n\n var attrsString = '',\n attrsStart = 0,\n cachedAttrs // false = parsed with errors, null = needs parsing\n ;\n\n /**\n * Parse attributes on demand and returns the parsed attributes.\n *\n * Return semantics: (1) `false` on attribute parse error,\n * (2) object hash on extracted attrs.\n *\n * @return {boolean|Object}\n */\n function getAttrs() {\n if (cachedAttrs !== null) {\n return cachedAttrs;\n }\n\n var nsUri,\n nsUriPrefix,\n nsName,\n defaultAlias = isNamespace && nsMatrix['xmlns'],\n attrList = isNamespace && maybeNS ? [] : null,\n i = attrsStart,\n s = attrsString,\n l = s.length,\n hasNewMatrix,\n newalias,\n value,\n alias,\n name,\n attrs = {},\n seenAttrs = {},\n skipAttr,\n w,\n j;\n\n parseAttr:\n for (; i < l; i++) {\n skipAttr = false;\n w = s.charCodeAt(i);\n\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE={ \\f\\n\\r\\t\\v}\n continue;\n }\n\n // wait for non whitespace character\n if (w < 65 || w > 122 || (w > 90 && w < 97)) {\n if (w !== 95 && w !== 58) { // char 95\"_\" 58\":\"\n handleWarning('illegal first char attribute name');\n skipAttr = true;\n }\n }\n\n // parse attribute name\n for (j = i + 1; j < l; j++) {\n w = s.charCodeAt(j);\n\n if (\n w > 96 && w < 123 ||\n w > 64 && w < 91 ||\n w > 47 && w < 59 ||\n w === 46 || // '.'\n w === 45 || // '-'\n w === 95 // '_'\n ) {\n continue;\n }\n\n // unexpected whitespace\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE\n handleWarning('missing attribute value');\n i = j;\n\n continue parseAttr;\n }\n\n // expected \"=\"\n if (w === 61) { // \"=\" == 61\n break;\n }\n\n handleWarning('illegal attribute name char');\n skipAttr = true;\n }\n\n name = s.substring(i, j);\n\n if (name === 'xmlns:xmlns') {\n handleWarning('illegal declaration of xmlns');\n skipAttr = true;\n }\n\n w = s.charCodeAt(j + 1);\n\n if (w === 34) { // '\"'\n j = s.indexOf('\"', i = j + 2);\n\n if (j === -1) {\n j = s.indexOf('\\'', i);\n\n if (j !== -1) {\n handleWarning('attribute value quote missmatch');\n skipAttr = true;\n }\n }\n\n } else if (w === 39) { // \"'\"\n j = s.indexOf('\\'', i = j + 2);\n\n if (j === -1) {\n j = s.indexOf('\"', i);\n\n if (j !== -1) {\n handleWarning('attribute value quote missmatch');\n skipAttr = true;\n }\n }\n\n } else {\n handleWarning('missing attribute value quotes');\n skipAttr = true;\n\n // skip to next space\n for (j = j + 1; j < l; j++) {\n w = s.charCodeAt(j + 1);\n\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE\n break;\n }\n }\n\n }\n\n if (j === -1) {\n handleWarning('missing closing quotes');\n\n j = l;\n skipAttr = true;\n }\n\n if (!skipAttr) {\n value = s.substring(i, j);\n }\n\n i = j;\n\n // ensure SPACE follows attribute\n // skip illegal content otherwise\n // example a=\"b\"c\n for (; j + 1 < l; j++) {\n w = s.charCodeAt(j + 1);\n\n if (w === 32 || (w < 14 && w > 8)) { // WHITESPACE\n break;\n }\n\n // FIRST ILLEGAL CHAR\n if (i === j) {\n handleWarning('illegal character after attribute end');\n skipAttr = true;\n }\n }\n\n // advance cursor to next attribute\n i = j + 1;\n\n if (skipAttr) {\n continue parseAttr;\n }\n\n // check attribute re-declaration\n if (name in seenAttrs) {\n handleWarning('attribute <' + name + '> already defined');\n continue;\n }\n\n seenAttrs[name] = true;\n\n if (!isNamespace) {\n attrs[name] = value;\n continue;\n }\n\n // try to extract namespace information\n if (maybeNS) {\n newalias = (\n name === 'xmlns'\n ? 'xmlns'\n : (name.charCodeAt(0) === 120 && name.substr(0, 6) === 'xmlns:')\n ? name.substr(6)\n : null\n );\n\n // handle xmlns(:alias) assignment\n if (newalias !== null) {\n nsUri = decodeEntities(value);\n nsUriPrefix = uriPrefix(newalias);\n\n alias = nsUriToPrefix[nsUri];\n\n if (!alias) {\n\n // no prefix defined or prefix collision\n if (\n (newalias === 'xmlns') ||\n (nsUriPrefix in nsMatrix && nsMatrix[nsUriPrefix] !== nsUri)\n ) {\n\n // alocate free ns prefix\n do {\n alias = 'ns' + (anonymousNsCount++);\n } while (typeof nsMatrix[alias] !== 'undefined');\n } else {\n alias = newalias;\n }\n\n nsUriToPrefix[nsUri] = alias;\n }\n\n if (nsMatrix[newalias] !== alias) {\n if (!hasNewMatrix) {\n nsMatrix = cloneNsMatrix(nsMatrix);\n hasNewMatrix = true;\n }\n\n nsMatrix[newalias] = alias;\n if (newalias === 'xmlns') {\n nsMatrix[uriPrefix(alias)] = nsUri;\n defaultAlias = alias;\n }\n\n nsMatrix[nsUriPrefix] = nsUri;\n }\n\n // expose xmlns(:asd)=\"...\" in attributes\n attrs[name] = value;\n continue;\n }\n\n // collect attributes until all namespace\n // declarations are processed\n attrList.push(name, value);\n continue;\n\n } /** end if (maybeNs) */\n\n // handle attributes on element without\n // namespace declarations\n w = name.indexOf(':');\n if (w === -1) {\n attrs[name] = value;\n continue;\n }\n\n // normalize ns attribute name\n if (!(nsName = nsMatrix[name.substring(0, w)])) {\n handleWarning(missingNamespaceForPrefix(name.substring(0, w)));\n continue;\n }\n\n name = defaultAlias === nsName\n ? name.substr(w + 1)\n : nsName + name.substr(w);\n\n // end: normalize ns attribute name\n\n attrs[name] = value;\n }\n\n\n // handle deferred, possibly namespaced attributes\n if (maybeNS) {\n\n // normalize captured attributes\n for (i = 0, l = attrList.length; i < l; i++) {\n\n name = attrList[i++];\n value = attrList[i];\n\n w = name.indexOf(':');\n\n if (w !== -1) {\n\n // normalize ns attribute name\n if (!(nsName = nsMatrix[name.substring(0, w)])) {\n handleWarning(missingNamespaceForPrefix(name.substring(0, w)));\n continue;\n }\n\n name = defaultAlias === nsName\n ? name.substr(w + 1)\n : nsName + name.substr(w);\n\n // end: normalize ns attribute name\n }\n\n attrs[name] = value;\n }\n\n // end: normalize captured attributes\n }\n\n return cachedAttrs = attrs;\n }\n\n /**\n * Extract the parse context { line, column, part }\n * from the current parser position.\n *\n * @return {Object} parse context\n */\n function getParseContext() {\n var splitsRe = /(\\r\\n|\\r|\\n)/g;\n\n var line = 0;\n var column = 0;\n var startOfLine = 0;\n var endOfLine = j;\n var match;\n var data;\n\n while (i >= startOfLine) {\n\n match = splitsRe.exec(xml);\n\n if (!match) {\n break;\n }\n\n // end of line = (break idx + break chars)\n endOfLine = match[0].length + match.index;\n\n if (endOfLine > i) {\n break;\n }\n\n // advance to next line\n line += 1;\n\n startOfLine = endOfLine;\n }\n\n // EOF errors\n if (i == -1) {\n column = endOfLine;\n data = xml.substring(j);\n } else\n\n // start errors\n if (j === 0) {\n data = xml.substring(j, i);\n }\n\n // other errors\n else {\n column = i - startOfLine;\n data = (j == -1 ? xml.substring(i) : xml.substring(i, j + 1));\n }\n\n return {\n 'data': data,\n 'line': line,\n 'column': column\n };\n }\n\n getContext = getParseContext;\n\n\n if (proxy) {\n elementProxy = Object.create({}, {\n 'name': getter(function() {\n return elementName;\n }),\n 'originalName': getter(function() {\n return _elementName;\n }),\n 'attrs': getter(getAttrs),\n 'ns': getter(function() {\n return nsMatrix;\n })\n });\n }\n\n // actual parse logic\n while (j !== -1) {\n\n if (xml.charCodeAt(j) === 60) { // \"<\"\n i = j;\n } else {\n i = xml.indexOf('<', j);\n }\n\n // parse end\n if (i === -1) {\n if (nodeStack.length) {\n return handleError('unexpected end of file');\n }\n\n if (j === 0) {\n return handleError('missing start tag');\n }\n\n if (j < xml.length) {\n if (xml.substring(j).trim()) {\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\n }\n }\n\n return;\n }\n\n // parse text\n if (j !== i) {\n\n if (nodeStack.length) {\n if (onText) {\n onText(xml.substring(j, i), decodeEntities, getContext);\n\n if (parseStop) {\n return;\n }\n }\n } else {\n if (xml.substring(j, i).trim()) {\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\n\n if (parseStop) {\n return;\n }\n }\n }\n }\n\n w = xml.charCodeAt(i + 1);\n\n // parse comments + CDATA\n if (w === 33) { // \"!\"\n q = xml.charCodeAt(i + 2);\n\n // CDATA section\n if (q === 91 && xml.substr(i + 3, 6) === 'CDATA[') { // 91 == \"[\"\n j = xml.indexOf(']]>', i);\n if (j === -1) {\n return handleError('unclosed cdata');\n }\n\n if (onCDATA) {\n onCDATA(xml.substring(i + 9, j), getContext);\n if (parseStop) {\n return;\n }\n }\n\n j += 3;\n continue;\n }\n\n // comment\n if (q === 45 && xml.charCodeAt(i + 3) === 45) { // 45 == \"-\"\n j = xml.indexOf('-->', i);\n if (j === -1) {\n return handleError('unclosed comment');\n }\n\n\n if (onComment) {\n onComment(xml.substring(i + 4, j), decodeEntities, getContext);\n if (parseStop) {\n return;\n }\n }\n\n j += 3;\n continue;\n }\n }\n\n // parse question <? ... ?>\n if (w === 63) { // \"?\"\n j = xml.indexOf('?>', i);\n if (j === -1) {\n return handleError('unclosed question');\n }\n\n if (onQuestion) {\n onQuestion(xml.substring(i, j + 2), getContext);\n if (parseStop) {\n return;\n }\n }\n\n j += 2;\n continue;\n }\n\n // find matching closing tag for attention or standard tags\n // for that we must skip through attribute values\n // (enclosed in single or double quotes)\n for (x = i + 1; ; x++) {\n v = xml.charCodeAt(x);\n if (isNaN(v)) {\n j = -1;\n return handleError('unclosed tag');\n }\n\n // [10] AttValue ::= '\"' ([^<&\"] | Reference)* '\"' | \"'\" ([^<&'] | Reference)* \"'\"\n // skips the quoted string\n // (double quotes) does not appear in a literal enclosed by (double quotes)\n // (single quote) does not appear in a literal enclosed by (single quote)\n if (v === 34) { // '\"'\n q = xml.indexOf('\"', x + 1);\n x = q !== -1 ? q : x;\n } else if (v === 39) { // \"'\"\n q = xml.indexOf(\"'\", x + 1);\n x = q !== -1 ? q : x;\n } else if (v === 62) { // '>'\n j = x;\n break;\n }\n }\n\n\n // parse attention <! ...>\n // previously comment and CDATA have already been parsed\n if (w === 33) { // \"!\"\n\n if (onAttention) {\n onAttention(xml.substring(i, j + 1), decodeEntities, getContext);\n if (parseStop) {\n return;\n }\n }\n\n j += 1;\n continue;\n }\n\n // don't process attributes;\n // there are none\n cachedAttrs = {};\n\n // if (xml.charCodeAt(i+1) === 47) { // </...\n if (w === 47) { // </...\n tagStart = false;\n tagEnd = true;\n\n if (!nodeStack.length) {\n return handleError('missing open tag');\n }\n\n // verify open <-> close tag match\n x = elementName = nodeStack.pop();\n q = i + 2 + x.length;\n\n if (xml.substring(i + 2, q) !== x) {\n return handleError('closing tag mismatch');\n }\n\n // verify chars in close tag\n for (; q < j; q++) {\n w = xml.charCodeAt(q);\n\n if (w === 32 || (w > 8 && w < 14)) { // \\f\\n\\r\\t\\v space\n continue;\n }\n\n return handleError('close tag');\n }\n\n } else {\n if (xml.charCodeAt(j - 1) === 47) { // .../>\n x = elementName = xml.substring(i + 1, j - 1);\n\n tagStart = true;\n tagEnd = true;\n\n } else {\n x = elementName = xml.substring(i + 1, j);\n\n tagStart = true;\n tagEnd = false;\n }\n\n if (!(w > 96 && w < 123 || w > 64 && w < 91 || w === 95 || w === 58)) { // char 95\"_\" 58\":\"\n return handleError('illegal first char nodeName');\n }\n\n for (q = 1, y = x.length; q < y; q++) {\n w = x.charCodeAt(q);\n\n if (w > 96 && w < 123 || w > 64 && w < 91 || w > 47 && w < 59 || w === 45 || w === 95 || w == 46) {\n continue;\n }\n\n if (w === 32 || (w < 14 && w > 8)) { // \\f\\n\\r\\t\\v space\n elementName = x.substring(0, q);\n\n // maybe there are attributes\n cachedAttrs = null;\n break;\n }\n\n return handleError('invalid nodeName');\n }\n\n if (!tagEnd) {\n nodeStack.push(elementName);\n }\n }\n\n if (isNamespace) {\n\n _nsMatrix = nsMatrix;\n\n if (tagStart) {\n\n // remember old namespace\n // unless we're self-closing\n if (!tagEnd) {\n nsMatrixStack.push(_nsMatrix);\n }\n\n if (cachedAttrs === null) {\n\n // quick check, whether there may be namespace\n // declarations on the node; if that is the case\n // we need to eagerly parse the node attributes\n if ((maybeNS = x.indexOf('xmlns', q) !== -1)) {\n attrsStart = q;\n attrsString = x;\n\n getAttrs();\n\n maybeNS = false;\n }\n }\n }\n\n _elementName = elementName;\n\n w = elementName.indexOf(':');\n if (w !== -1) {\n xmlns = nsMatrix[elementName.substring(0, w)];\n\n // prefix given; namespace must exist\n if (!xmlns) {\n return handleError('missing namespace on <' + _elementName + '>');\n }\n\n elementName = elementName.substr(w + 1);\n } else {\n xmlns = nsMatrix['xmlns'];\n\n // if no default namespace is defined,\n // we'll import the element as anonymous.\n //\n // it is up to users to correct that to the document defined\n // targetNamespace, or whatever their undersanding of the\n // XML spec mandates.\n }\n\n // adjust namespace prefixs as configured\n if (xmlns) {\n elementName = xmlns + ':' + elementName;\n }\n\n }\n\n if (tagStart) {\n attrsStart = q;\n attrsString = x;\n\n if (onOpenTag) {\n if (proxy) {\n onOpenTag(elementProxy, decodeEntities, tagEnd, getContext);\n } else {\n onOpenTag(elementName, getAttrs, decodeEntities, tagEnd, getContext);\n }\n\n if (parseStop) {\n return;\n }\n }\n\n }\n\n if (tagEnd) {\n\n if (onCloseTag) {\n onCloseTag(proxy ? elementProxy : elementName, decodeEntities, tagStart, getContext);\n\n if (parseStop) {\n return;\n }\n }\n\n // restore old namespace\n if (isNamespace) {\n if (!tagStart) {\n nsMatrix = nsMatrixStack.pop();\n } else {\n nsMatrix = _nsMatrix;\n }\n }\n }\n\n j += 1;\n }\n } /** end parse */\n\n}","export function hasLowerCaseAlias(pkg) {\n return pkg.xml && pkg.xml.tagAlias === 'lowerCase';\n}\n\nexport var DEFAULT_NS_MAP = {\n 'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n 'xml': 'http://www.w3.org/XML/1998/namespace'\n};\n\nexport var SERIALIZE_PROPERTY = 'property';\n\nexport function getSerialization(element) {\n return element.xml && element.xml.serialize;\n}\n\nexport function getSerializationType(element) {\n const type = getSerialization(element);\n\n return type !== SERIALIZE_PROPERTY && (type || null);\n}","import {\n forEach,\n find,\n assign\n} from 'min-dash';\n\nimport {\n Parser as SaxParser\n} from 'saxen';\n\nimport {\n Moddle,\n parseNameNS,\n coerceType,\n isSimpleType\n} from 'moddle';\n\nimport {\n DEFAULT_NS_MAP,\n getSerializationType,\n hasLowerCaseAlias\n} from './common.js';\n\nfunction capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction aliasToName(aliasNs, pkg) {\n\n if (!hasLowerCaseAlias(pkg)) {\n return aliasNs.name;\n }\n\n return aliasNs.prefix + ':' + capitalize(aliasNs.localName);\n}\n\n/**\n * Un-prefix a potentially prefixed type name.\n *\n * @param {NsName} nameNs\n * @param {Object} [pkg]\n *\n * @return {string}\n */\nfunction prefixedToName(nameNs, pkg) {\n\n var name = nameNs.name,\n localName = nameNs.localName;\n\n var typePrefix = pkg && pkg.xml && pkg.xml.typePrefix;\n\n if (typePrefix && localName.indexOf(typePrefix) === 0) {\n return nameNs.prefix + ':' + localName.slice(typePrefix.length);\n } else {\n return name;\n }\n}\n\nfunction normalizeTypeName(name, nsMap, model) {\n\n // normalize against actual NS\n const nameNs = parseNameNS(name, nsMap.xmlns);\n\n const normalizedName = `${ nsMap[nameNs.prefix] || nameNs.prefix }:${ nameNs.localName }`;\n\n const normalizedNameNs = parseNameNS(normalizedName);\n\n // determine actual type name, based on package-defined prefix\n var pkg = model.getPackage(normalizedNameNs.prefix);\n\n return prefixedToName(normalizedNameNs, pkg);\n}\n\nfunction error(message) {\n return new Error(message);\n}\n\n/**\n * Get the moddle descriptor for a given instance or type.\n *\n * @param {ModdleElement|Function} element\n *\n * @return {Object} the moddle descriptor\n */\nfunction getModdleDescriptor(element) {\n return element.$descriptor;\n}\n\n\n/**\n * A parse context.\n *\n * @class\n *\n * @param {Object} options\n * @param {ElementHandler} options.rootHandler the root handler for parsing a document\n * @param {boolean} [options.lax=false] whether or not to ignore invalid elements\n */\nexport function Context(options) {\n\n /**\n * @property {ElementHandler} rootHandler\n */\n\n /**\n * @property {Boolean} lax\n */\n\n assign(this, options);\n\n this.elementsById = {};\n this.references = [];\n this.warnings = [];\n\n /**\n * Add an unresolved reference.\n *\n * @param {Object} reference\n */\n this.addReference = function(reference) {\n this.references.push(reference);\n };\n\n /**\n * Add a processed element.\n *\n * @param {ModdleElement} element\n */\n this.addElement = function(element) {\n\n if (!element) {\n throw error('expected element');\n }\n\n var elementsById = this.elementsById;\n\n var descriptor = getModdleDescriptor(element);\n\n var idProperty = descriptor.idProperty,\n id;\n\n if (idProperty) {\n id = element.get(idProperty.name);\n\n if (id) {\n\n // for QName validation as per http://www.w3.org/TR/REC-xml/#NT-NameChar\n if (!/^([a-z][\\w-.]*:)?[a-z_][\\w-.]*$/i.test(id)) {\n throw new Error('illegal ID <' + id + '>');\n }\n\n if (elementsById[id]) {\n throw error('duplicate ID <' + id + '>');\n }\n\n elementsById[id] = element;\n }\n }\n };\n\n /**\n * Add an import warning.\n *\n * @param {Object} warning\n * @param {String} warning.message\n * @param {Error} [warning.error]\n */\n this.addWarning = function(warning) {\n this.warnings.push(warning);\n };\n}\n\nfunction BaseHandler() {}\n\nBaseHandler.prototype.handleEnd = function() {};\nBaseHandler.prototype.handleText = function() {};\nBaseHandler.prototype.handleNode = function() {};\n\n\n/**\n * A simple pass through handler that does nothing except for\n * ignoring all input it receives.\n *\n * This is used to ignore unknown elements and\n * attributes.\n */\nfunction NoopHandler() { }\n\nNoopHandler.prototype = Object.create(BaseHandler.prototype);\n\nNoopHandler.prototype.handleNode = function() {\n return this;\n};\n\nfunction BodyHandler() {}\n\nBodyHandler.prototype = Object.create(BaseHandler.prototype);\n\nBodyHandler.prototype.handleText = function(text) {\n this.body = (this.body || '') + text;\n};\n\nfunction ReferenceHandler(property, context) {\n this.property = property;\n this.context = context;\n}\n\nReferenceHandler.prototype = Object.create(BodyHandler.prototype);\n\nReferenceHandler.prototype.handleNode = function(node) {\n\n if (this.element) {\n throw error('expected no sub nodes');\n } else {\n this.element = this.createReference(node);\n }\n\n return this;\n};\n\nReferenceHandler.prototype.handleEnd = function() {\n this.element.id = this.body;\n};\n\nReferenceHandler.prototype.createReference = function(node) {\n return {\n property: this.property.ns.name,\n id: ''\n };\n};\n\nfunction ValueHandler(propertyDesc, element) {\n this.element = element;\n this.propertyDesc = propertyDesc;\n}\n\nValueHandler.prototype = Object.create(BodyHandler.prototype);\n\nValueHandler.prototype.handleEnd = function() {\n\n var value = this.body || '',\n element = this.element,\n propertyDesc = this.propertyDesc;\n\n value = coerceType(propertyDesc.type, value);\n\n if (propertyDesc.isMany) {\n element.get(propertyDesc.name).push(value);\n } else {\n element.set(propertyDesc.name, value);\n }\n};\n\n\nfunction BaseElementHandler() {}\n\nBaseElementHandler.prototype = Object.create(BodyHandler.prototype);\n\nBaseElementHandler.prototype.handleNode = function(node) {\n var parser = this,\n element = this.element;\n\n if (!element) {\n element = this.element = this.createElement(node);\n\n this.context.addElement(element);\n } else {\n parser = this.handleChild(node);\n }\n\n return parser;\n};\n\n/**\n * @class Reader.ElementHandler\n *\n */\nexport function ElementHandler(model, typeName, context) {\n this.model = model;\n this.type = model.getType(typeName);\n this.context = context;\n}\n\nElementHandler.prototype = Object.create(BaseElementHandler.prototype);\n\nElementHandler.prototype.addReference = function(reference) {\n this.context.addReference(reference);\n};\n\nElementHandler.prototype.handleText = function(text) {\n\n var element = this.element,\n descriptor = getModdleDescriptor(element),\n bodyProperty = descriptor.bodyProperty;\n\n if (!bodyProperty) {\n throw error('unexpected body text <' + text + '>');\n }\n\n BodyHandler.prototype.handleText.call(this, text);\n};\n\nElementHandler.prototype.handleEnd = function() {\n\n var value = this.body,\n element = this.element,\n descriptor = getModdleDescriptor(element),\n bodyProperty = descriptor.bodyProperty;\n\n if (bodyProperty && value !== undefined) {\n value = coerceType(bodyProperty.type, value);\n element.set(bodyProperty.name, value);\n }\n};\n\n/**\n * Create an instance of the model from the given node.\n *\n * @param {Element} node the xml node\n */\nElementHandler.prototype.createElement = function(node) {\n var attributes = node.attributes,\n Type = this.type,\n descriptor = getModdleDescriptor(Type),\n context = this.context,\n instance = new Type({}),\n model = this.model,\n propNameNs;\n\n forEach(attributes, function(value, name) {\n\n var prop = descriptor.propertiesByName[name],\n values;\n\n if (prop && prop.isReference) {\n\n if (!prop.isMany) {\n context.addReference({\n element: instance,\n property: prop.ns.name,\n id: value\n });\n } else {\n\n // IDREFS: parse references as whitespace-separated list\n values = value.split(' ');\n\n forEach(values, function(v) {\n context.addReference({\n element: instance,\n property: prop.ns.name,\n id: v\n });\n });\n }\n\n } else {\n if (prop) {\n value = coerceType(prop.type, value);\n } else if (name === 'xmlns') {\n name = ':' + name;\n } else {\n propNameNs = parseNameNS(name, descriptor.ns.prefix);\n\n // check whether attribute is defined in a well-known namespace\n // if that is the case we emit a warning to indicate potential misuse\n if (model.getPackage(propNameNs.prefix)) {\n\n context.addWarning({\n message: 'unknown attribute <' + name + '>',\n element: instance,\n property: name,\n value: value\n });\n }\n }\n\n instance.set(name, value);\n }\n });\n\n return instance;\n};\n\nElementHandler.prototype.getPropertyForNode = function(node) {\n\n var name = node.name;\n var nameNs = parseNameNS(name);\n\n var type = this.type,\n model = this.model,\n descriptor = getModdleDescriptor(type);\n\n var propertyName = nameNs.name,\n property = descriptor.propertiesByName[propertyName];\n\n // search for properties by name first\n\n if (property && !property.isAttr) {\n\n const serializationType = getSerializationType(property);\n\n if (serializationType) {\n const elementTypeName = node.attributes[serializationType];\n\n // type is optional, if it does not exists the\n // default type is assumed\n if (elementTypeName) {\n\n // convert the prefix used to the mapped form, but also\n // take possible type prefixes from XML\n // into account, i.e.: xsi:type=\"t{ActualType}\",\n const normalizedTypeName = normalizeTypeName(elementTypeName, node.ns, model);\n\n const elementType = model.getType(normalizedTypeName);\n\n return assign({}, property, {\n effectiveType: getModdleDescriptor(elementType).name\n });\n }\n }\n\n // search for properties by name first\n return property;\n }\n\n var pkg = model.getPackage(nameNs.prefix);\n\n if (pkg) {\n const elementTypeName = aliasToName(nameNs, pkg);\n const elementType = model.getType(elementTypeName);\n\n // search for collection members later\n property = find(descriptor.properties, function(p) {\n return !p.isVirtual && !p.isReference && !p.isAttribute && elementType.hasType(p.type);\n });\n\n if (property) {\n return assign({}, property, {\n effectiveType: getModdleDescriptor(elementType).name\n });\n }\n } else {\n\n // parse unknown element (maybe extension)\n property = find(descriptor.properties, function(p) {\n return !p.isReference && !p.isAttribute && p.type === 'Element';\n });\n\n if (property) {\n return property;\n }\n }\n\n throw error('unrecognized element <' + nameNs.name + '>');\n};\n\nElementHandler.prototype.toString = function() {\n return 'ElementDescriptor[' + getModdleDescriptor(this.type).name + ']';\n};\n\nElementHandler.prototype.valueHandler = function(propertyDesc, element) {\n return new ValueHandler(propertyDesc, element);\n};\n\nElementHandler.prototype.referenceHandler = function(propertyDesc) {\n return new ReferenceHandler(propertyDesc, this.context);\n};\n\nElementHandler.prototype.handler = function(type) {\n if (type === 'Element') {\n return new GenericElementHandler(this.model, type, this.context);\n } else {\n return new ElementHandler(this.model, type, this.context);\n }\n};\n\n/**\n * Handle the child element parsing\n *\n * @param {Element} node the xml node\n */\nElementHandler.prototype.handleChild = function(node) {\n var propertyDesc, type, element, childHandler;\n\n propertyDesc = this.getPropertyForNode(node);\n element = this.element;\n\n type = propertyDesc.effectiveType || propertyDesc.type;\n\n if (isSimpleType(type)) {\n return this.valueHandler(propertyDesc, element);\n }\n\n if (propertyDesc.isReference) {\n childHandler = this.referenceHandler(propertyDesc).handleNode(node);\n } else {\n childHandler = this.handler(type).handleNode(node);\n }\n\n var newElement = childHandler.element;\n\n // child handles may decide to skip elements\n // by not returning anything\n if (newElement !== undefined) {\n\n if (propertyDesc.isMany) {\n element.get(propertyDesc.name).push(newElement);\n } else {\n element.set(propertyDesc.name, newElement);\n }\n\n if (propertyDesc.isReference) {\n assign(newElement, {\n element: element\n });\n\n this.context.addReference(newElement);\n } else {\n\n // establish child -> parent relationship\n newElement.$parent = element;\n }\n }\n\n return childHandler;\n};\n\n/**\n * An element handler that performs special validation\n * to ensure the node it gets initialized with matches\n * the handlers type (namespace wise).\n *\n * @param {Moddle} model\n * @param {String} typeName\n * @param {Context} context\n */\nfunction RootElementHandler(model, typeName, context) {\n ElementHandler.call(this, model, typeName, context);\n}\n\nRootElementHandler.prototype = Object.create(ElementHandler.prototype);\n\nRootElementHandler.prototype.createElement = function(node) {\n\n var name = node.name,\n nameNs = parseNameNS(name),\n model = this.model,\n type = this.type,\n pkg = model.getPackage(nameNs.prefix),\n typeName = pkg && aliasToName(nameNs, pkg) || name;\n\n // verify the correct namespace if we parse\n // the first element in the handler tree\n //\n // this ensures we don't mistakenly import wrong namespace elements\n if (!type.hasType(typeName)) {\n throw error('unexpected element <' + node.originalName + '>');\n }\n\n return ElementHandler.prototype.createElement.call(this, node);\n};\n\n\nfunction GenericElementHandler(model, typeName, context) {\n this.model = model;\n this.context = context;\n}\n\nGenericElementHandler.prototype = Object.create(BaseElementHandler.prototype);\n\nGenericElementHandler.prototype.createElement = function(node) {\n\n var name = node.name,\n ns = parseNameNS(name),\n prefix = ns.prefix,\n uri = node.ns[prefix + '$uri'],\n attributes = node.attributes;\n\n return this.model.createAny(name, uri, attributes);\n};\n\nGenericElementHandler.prototype.handleChild = function(node) {\n\n var handler = new GenericElementHandler(this.model, 'Element', this.context).handleNode(node),\n element = this.element;\n\n var newElement = handler.element,\n children;\n\n if (newElement !== undefined) {\n children = element.$children = element.$children || [];\n children.push(newElement);\n\n // establish child -> parent relationship\n newElement.$parent = element;\n }\n\n return handler;\n};\n\nGenericElementHandler.prototype.handleEnd = function() {\n if (this.body) {\n this.element.$body = this.body;\n }\n};\n\n/**\n * A reader for a meta-model\n *\n * @param {Object} options\n * @param {Model} options.model used to read xml files\n * @param {Boolean} options.lax whether to make parse errors warnings\n */\nexport function Reader(options) {\n\n if (options instanceof Moddle) {\n options = {\n model: options\n };\n }\n\n assign(this, { lax: false }, options);\n}\n\n/**\n * The fromXML result.\n *\n * @typedef {Object} ParseResult\n *\n * @property {ModdleElement} rootElement\n * @property {Array<Object>} references\n * @property {Array<Error>} warnings\n * @property {Object} elementsById - a mapping containing each ID -> ModdleElement\n */\n\n/**\n * The fromXML result.\n *\n * @typedef {Error} ParseError\n *\n * @property {Array<Error>} warnings\n */\n\n/**\n * Parse the given XML into a moddle document tree.\n *\n * @param {String} xml\n * @param {ElementHandler|Object} options or rootHandler\n *\n * @returns {Promise<ParseResult, ParseError>}\n */\nReader.prototype.fromXML = function(xml, options, done) {\n\n var rootHandler = options.rootHandler;\n\n if (options instanceof ElementHandler) {\n\n // root handler passed via (xml, { rootHandler: ElementHandler }, ...)\n rootHandler = options;\n options = {};\n } else {\n if (typeof options === 'string') {\n\n // rootHandler passed via (xml, 'someString', ...)\n rootHandler = this.handler(options);\n options = {};\n } else if (typeof rootHandler === 'string') {\n\n // rootHandler passed via (xml, { rootHandler: 'someString' }, ...)\n rootHandler = this.handler(rootHandler);\n }\n }\n\n var model = this.model,\n lax = this.lax;\n\n var context = new Context(assign({}, options, { rootHandler: rootHandler })),\n parser = new SaxParser({ proxy: true }),\n stack = createStack();\n\n rootHandler.context = context;\n\n // push root handler\n stack.push(rootHandler);\n\n\n /**\n * Handle error.\n *\n * @param {Error} err\n * @param {Function} getContext\n * @param {boolean} lax\n *\n * @return {boolean} true if handled\n */\n function handleError(err, getContext, lax) {\n\n var ctx = getContext();\n\n var line = ctx.line,\n column = ctx.column,\n data = ctx.data;\n\n // we receive the full context data here,\n // for elements trim down the information\n // to the tag name, only\n if (data.charAt(0) === '<' && data.indexOf(' ') !== -1) {\n data = data.slice(0, data.indexOf(' ')) + '>';\n }\n\n var message =\n 'unparsable content ' + (data ? data + ' ' : '') + 'detected\\n\\t' +\n 'line: ' + line + '\\n\\t' +\n 'column: ' + column + '\\n\\t' +\n 'nested error: ' + err.message;\n\n if (lax) {\n context.addWarning({\n message: message,\n error: err\n });\n\n return true;\n } else {\n throw error(message);\n }\n }\n\n function handleWarning(err, getContext) {\n\n // just like handling errors in <lax=true> mode\n return handleError(err, getContext, true);\n }\n\n /**\n * Resolve collected references on parse end.\n */\n function resolveReferences() {\n\n var elementsById = context.elementsById;\n var references = context.references;\n\n var i, r;\n\n for (i = 0; (r = references[i]); i++) {\n var element = r.element;\n var reference = elementsById[r.id];\n var property = getModdleDescriptor(element).propertiesByName[r.property];\n\n if (!reference) {\n context.addWarning({\n message: 'unresolved reference <' + r.id + '>',\n element: r.element,\n property: r.property,\n value: r.id\n });\n }\n\n if (property.isMany) {\n var collection = element.get(property.name),\n idx = collection.indexOf(r);\n\n // we replace an existing place holder (idx != -1) or\n // append to the collection instead\n if (idx === -1) {\n idx = collection.length;\n }\n\n if (!reference) {\n\n // remove unresolvable reference\n collection.splice(idx, 1);\n } else {\n\n // add or update reference in collection\n collection[idx] = reference;\n }\n } else {\n element.set(property.name, reference);\n }\n }\n }\n\n function handleClose() {\n stack.pop().handleEnd();\n }\n\n var PREAMBLE_START_PATTERN = /^<\\?xml /i;\n\n var ENCODING_PATTERN = / encoding=\"([^\"]+)\"/i;\n\n var UTF_8_PATTERN = /^utf-8$/i;\n\n function handleQuestion(question) {\n\n if (!PREAMBLE_START_PATTERN.test(question)) {\n return;\n }\n\n var match = ENCODING_PATTERN.exec(question);\n var encoding = match && match[1];\n\n if (!encoding || UTF_8_PATTERN.test(encoding)) {\n return;\n }\n\n context.addWarning({\n message:\n 'unsupported document encoding <' + encoding + '>, ' +\n 'falling back to UTF-8'\n });\n }\n\n function handleOpen(node, getContext) {\n var handler = stack.peek();\n\n try {\n stack.push(handler.handleNode(node));\n } catch (err) {\n\n if (handleError(err, getContext, lax)) {\n stack.push(new NoopHandler());\n }\n }\n }\n\n function handleCData(text, getContext) {\n\n try {\n stack.peek().handleText(text);\n } catch (err) {\n handleWarning(err, getContext);\n }\n }\n\n function handleText(text, getContext) {\n\n // strip whitespace only nodes, i.e. before\n // <!CDATA[ ... ]> sections and in between tags\n\n if (!text.trim()) {\n return;\n }\n\n handleCData(text, getContext);\n }\n\n var uriMap = model.getPackages().reduce(function(uriMap, p) {\n uriMap[p.uri] = p.prefix;\n\n return uriMap;\n }, Object.entries(DEFAULT_NS_MAP).reduce(function(map, [ prefix, url ]) {\n map[url] = prefix;\n\n return map;\n }, model.config && model.config.nsMap || {}));\n\n parser\n .ns(uriMap)\n .on('openTag', function(obj, decodeStr, selfClosing, getContext) {\n\n // gracefully handle unparsable attributes (attrs=false)\n var attrs = obj.attrs || {};\n\n var decodedAttrs = Object.keys(attrs).reduce(function(d, key) {\n var value = decodeStr(attrs[key]);\n\n d[key] = value;\n\n return d;\n }, {});\n\n var node = {\n name: obj.name,\n originalName: obj.originalName,\n attributes: decodedAttrs,\n ns: obj.ns\n };\n\n handleOpen(node, getContext);\n })\n .on('question', handleQuestion)\n .on('closeTag', handleClose)\n .on('cdata', handleCData)\n .on('text', function(text, decodeEntities, getContext) {\n handleText(decodeEntities(text), getContext);\n })\n .on('error', handleError)\n .on('warn', handleWarning);\n\n // async XML parsing to make sure the execution environment\n // (node or brower) is kept responsive and that certain optimization\n // strategies can kick in.\n return new Promise(function(resolve, reject) {\n\n var err;\n\n try {\n parser.parse(xml);\n\n resolveReferences();\n } catch (e) {\n err = e;\n }\n\n var rootElement = rootHandler.element;\n\n if (!err && !rootElement) {\n err = error('failed to parse document as <' + rootHandler.type.$descriptor.name + '>');\n }\n\n var warnings = context.warnings;\n var references = context.references;\n var elementsById = context.elementsById;\n\n if (err) {\n err.warnings = warnings;\n\n return reject(err);\n } else {\n return resolve({\n rootElement: rootElement,\n elementsById: elementsById,\n references: references,\n warnings: warnings\n });\n }\n });\n};\n\nReader.prototype.handler = function(name) {\n return new RootElementHandler(this.model, name);\n};\n\n\n// helpers //////////////////////////\n\nfunction createStack() {\n var stack = [];\n\n Object.defineProperty(stack, 'peek', {\n value: function() {\n return this[this.length - 1];\n }\n });\n\n return stack;\n}\n","import {\n forEach,\n isString,\n filter,\n assign,\n has,\n findIndex\n} from 'min-dash';\n\nimport {\n isSimpleType,\n parseNameNS\n} from 'moddle';\n\nimport {\n hasLowerCaseAlias,\n getSerialization,\n SERIALIZE_PROPERTY,\n DEFAULT_NS_MAP\n} from './common.js';\n\nvar XML_PREAMBLE = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\n\nvar ESCAPE_ATTR_CHARS = /<|>|'|\"|&|\\n\\r|\\n/g;\nvar ESCAPE_CHARS = /<|>|&/g;\n\n\nexport function Namespaces(parent) {\n\n this.prefixMap = {};\n this.uriMap = {};\n this.used = {};\n\n this.wellknown = [];\n this.custom = [];\n this.parent = parent;\n\n this.defaultPrefixMap = parent && parent.defaultPrefixMap || {};\n}\n\nNamespaces.prototype.mapDefaultPrefixes = function(defaultPrefixMap) {\n this.defaultPrefixMap = defaultPrefixMap;\n};\n\nNamespaces.prototype.defaultUriByPrefix = function(prefix) {\n return this.defaultPrefixMap[prefix];\n};\n\nNamespaces.prototype.byUri = function(uri) {\n return this.uriMap[uri] || (\n this.parent && this.parent.byUri(uri)\n );\n};\n\nNamespaces.prototype.add = function(ns, isWellknown) {\n\n this.uriMap[ns.uri] = ns;\n\n if (isWellknown) {\n this.wellknown.push(ns);\n } else {\n this.custom.push(ns);\n }\n\n this.mapPrefix(ns.prefix, ns.uri);\n};\n\nNamespaces.prototype.uriByPrefix = function(prefix) {\n return this.prefixMap[prefix || 'xmlns'] || (\n this.parent && this.parent.uriByPrefix(prefix)\n );\n};\n\nNamespaces.prototype.mapPrefix = function(prefix, uri) {\n this.prefixMap[prefix || 'xmlns'] = uri;\n};\n\nNamespaces.prototype.getNSKey = function(ns) {\n return (ns.prefix !== undefined) ? (ns.uri + '|' + ns.prefix) : ns.uri;\n};\n\nNamespaces.prototype.logUsed = function(ns) {\n\n var uri = ns.uri;\n var nsKey = this.getNSKey(ns);\n\n this.used[nsKey] = this.byUri(uri);\n\n // Inform parent recursively about the usage of this NS\n if (this.parent) {\n this.parent.logUsed(ns);\n }\n};\n\nNamespaces.prototype.getUsed = function(ns) {\n\n var allNs = [].concat(this.wellknown, this.custom);\n\n return allNs.filter(ns => {\n var nsKey = this.getNSKey(ns);\n\n return this.used[nsKey];\n });\n};\n\n\nfunction lower(string) {\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\nfunction nameToAlias(name, pkg) {\n if (hasLowerCaseAlias(pkg)) {\n return lower(name);\n } else {\n return name;\n }\n}\n\nfunction inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n}\n\nfunction nsName(ns) {\n if (isString(ns)) {\n return ns;\n } else {\n return (ns.prefix ? ns.prefix + ':' : '') + ns.localName;\n }\n}\n\nfunction getNsAttrs(namespaces) {\n\n return namespaces.getUsed().filter(function(ns) {\n\n // do not serialize built in <xml> namespace\n return ns.prefix !== 'xml';\n }).map(function(ns) {\n var name = 'xmlns' + (ns.prefix ? ':' + ns.prefix : '');\n return { name: name, value: ns.uri };\n });\n\n}\n\nfunction getElementNs(ns, descriptor) {\n if (descriptor.isGeneric) {\n return assign({ localName: descriptor.ns.localName }, ns);\n } else {\n return assign({ localName: nameToAlias(descriptor.ns.localName, descriptor.$pkg) }, ns);\n }\n}\n\nfunction getPropertyNs(ns, descriptor) {\n return assign({ localName: descriptor.ns.localName }, ns);\n}\n\nfunction getSerializableProperties(element) {\n var descriptor = element.$descriptor;\n\n return filter(descriptor.properties, function(p) {\n var name = p.name;\n\n if (p.isVirtual) {\n return false;\n }\n\n // do not serialize defaults\n if (!has(element, name)) {\n return false;\n }\n\n var value = element[name];\n\n // do not serialize default equals\n if (value === p.default) {\n return false;\n }\n\n // do not serialize null properties\n if (value === null) {\n return false;\n }\n\n return p.isMany ? value.length : true;\n });\n}\n\nvar ESCAPE_ATTR_MAP = {\n '\\n': '#10',\n '\\n\\r': '#10',\n '\"': '#34',\n '\\'': '#39',\n '<': '#60',\n '>': '#62',\n '&': '#38'\n};\n\nvar ESCAPE_MAP = {\n '<': 'lt',\n '>': 'gt',\n '&': 'amp'\n};\n\nfunction escape(str, charPattern, replaceMap) {\n\n // ensure we are handling strings here\n str = isString(str) ? str : '' + str;\n\n return str.replace(charPattern, function(s) {\n return '&' + replaceMap[s] + ';';\n });\n}\n\n/**\n * Escape a string attribute to not contain any bad values (line breaks, '\"', ...)\n *\n * @param {String} str the string to escape\n * @return {String} the escaped string\n */\nfunction escapeAttr(str) {\n return escape(str, ESCAPE_ATTR_CHARS, ESCAPE_ATTR_MAP);\n}\n\nfunction escapeBody(str) {\n return escape(str, ESCAPE_CHARS, ESCAPE_MAP);\n}\n\nfunction filterAttributes(props) {\n return filter(props, function(p) { return p.isAttr; });\n}\n\nfunction filterContained(props) {\n return filter(props, function(p) { return !p.isAttr; });\n}\n\n\nfunction ReferenceSerializer(tagName) {\n this.tagName = tagName;\n}\n\nReferenceSerializer.prototype.build = function(element) {\n this.element = element;\n return this;\n};\n\nReferenceSerializer.prototype.serializeTo = function(writer) {\n writer\n .appendIndent()\n .append('<' + this.tagName + '>' + this.element.id + '</' + this.tagName + '>')\n .appendNewLine();\n};\n\nfunction BodySerializer() {}\n\nBodySerializer.prototype.serializeValue =\nBodySerializer.prototype.serializeTo = function(writer) {\n writer.append(\n this.escape\n ? escapeBody(this.value)\n : this.value\n );\n};\n\nBodySerializer.prototype.build = function(prop, value) {\n this.value = value;\n\n if (prop.type === 'String' && value.search(ESCAPE_CHARS) !== -1) {\n this.escape = true;\n }\n\n return this;\n};\n\nfunction ValueSerializer(tagName) {\n this.tagName = tagName;\n}\n\ninherits(ValueSerializer, BodySerializer);\n\nValueSerializer.prototype.serializeTo = function(writer) {\n\n writer\n .appendIndent()\n .append('<' + this.tagName + '>');\n\n this.serializeValue(writer);\n\n writer\n .append('</' + this.tagName + '>')\n .appendNewLine();\n};\n\nfunction ElementSerializer(parent, propertyDescriptor) {\n this.body = [];\n this.attrs = [];\n\n this.parent = parent;\n this.propertyDescriptor = propertyDescriptor;\n}\n\nElementSerializer.prototype.build = function(element) {\n this.element = element;\n\n var elementDescriptor = element.$descriptor,\n propertyDescriptor = this.propertyDescriptor;\n\n var otherAttrs,\n properties;\n\n var isGeneric = elementDescriptor.isGeneric;\n\n if (isGeneric) {\n otherAttrs = this.parseGenericNsAttributes(element);\n } else {\n otherAttrs = this.parseNsAttributes(element);\n }\n\n if (propertyDescriptor) {\n this.ns = this.nsPropertyTagName(propertyDescriptor);\n } else {\n this.ns = this.nsTagName(elementDescriptor);\n }\n\n // compute tag name\n this.tagName = this.addTagName(this.ns);\n\n if (isGeneric) {\n this.parseGenericContainments(element);\n } else {\n properties = getSerializableProperties(element);\n\n this.parseAttributes(filterAttributes(properties));\n this.parseContainments(filterContained(properties));\n }\n\n this.parseGenericAttributes(element, otherAttrs);\n\n return this;\n};\n\nElementSerializer.prototype.nsTagName = function(descriptor) {\n var effectiveNs = this.logNamespaceUsed(descriptor.ns);\n return getElementNs(effectiveNs, descriptor);\n};\n\nElementSerializer.prototype.nsPropertyTagName = function(descriptor) {\n var effectiveNs = this.logNamespaceUsed(descriptor.ns);\n return getPropertyNs(effectiveNs, descriptor);\n};\n\nElementSerializer.prototype.isLocalNs = function(ns) {\n return ns.uri === this.ns.uri;\n};\n\n/**\n * Get the actual ns attribute name for the given element.\n *\n * @param {Object} element\n * @param {Boolean} [element.inherited=false]\n *\n * @return {Object} nsName\n */\nElementSerializer.prototype.nsAttributeName = function(element) {\n\n var ns;\n\n if (isString(element)) {\n ns = parseNameNS(element);\n } else {\n ns = element.ns;\n }\n\n // return just local name for inherited attributes\n if (element.inherited) {\n return { localName: ns.localName };\n }\n\n // parse + log effective ns\n var effectiveNs = this.logNamespaceUsed(ns);\n\n // LOG ACTUAL namespace use\n this.getNamespaces().logUsed(effectiveNs);\n\n // strip prefix if same namespace like parent\n if (this.isLocalNs(effectiveNs)) {\n return { localName: ns.localName };\n } else {\n return assign({ localName: ns.localName }, effectiveNs);\n }\n};\n\nElementSerializer.prototype.parseGenericNsAttributes = function(element) {\n\n return Object.entries(element).filter(\n ([ key, value ]) => !key.startsWith('$') && this.parseNsAttribute(element, key, value)\n ).map(\n ([ key, value ]) => ({ name: key, value: value })\n );\n};\n\nElementSerializer.prototype.parseGenericContainments = function(element) {\n var body = element.$body;\n\n if (body) {\n this.body.push(new BodySerializer().build({ type: 'String' }, body));\n }\n\n var children = element.$children;\n\n if (children) {\n forEach(children, child => {\n this.body.push(new ElementSerializer(this).build(child));\n });\n }\n};\n\nElementSerializer.prototype.parseNsAttribute = function(element, name, value) {\n var model = element.$model;\n\n var nameNs = parseNameNS(name);\n\n var ns;\n\n // parse xmlns:foo=\"http://foo.bar\"\n if (nameNs.prefix === 'xmlns') {\n ns = { prefix: nameNs.localName, uri: value };\n }\n\n // parse xmlns=\"http://foo.bar\"\n if (!nameNs.prefix && nameNs.localName === 'xmlns') {\n ns = { uri: value };\n }\n\n if (!ns) {\n return {\n name: name,\n value: value\n };\n }\n\n if (model && model.getPackage(value)) {\n\n // register well known namespace\n this.logNamespace(ns, true, true);\n } else {\n\n // log custom namespace directly as used\n var actualNs = this.logNamespaceUsed(ns, true);\n\n this.getNamespaces().logUsed(actualNs);\n }\n};\n\n\n/**\n * Parse namespaces and return a list of left over generic attributes\n *\n * @param {Object} element\n * @return {Array<Object>}\n */\nElementSerializer.prototype.parseNsAttributes = function(element) {\n var self = this;\n\n var genericAttrs = element.$attrs;\n\n var attributes = [];\n\n // parse namespace attributes first\n // and log them. push non namespace attributes to a list\n // and process them later\n forEach(genericAttrs, function(value, name) {\n\n var nonNsAttr = self.parseNsAttribute(element, name, value);\n\n if (nonNsAttr) {\n attributes.push(nonNsAttr);\n }\n });\n\n return attributes;\n};\n\nElementSerializer.prototype.parseGenericAttributes = function(element, attributes) {\n\n var self = this;\n\n forEach(attributes, function(attr) {\n\n try {\n self.addAttribute(self.nsAttributeName(attr.name), attr.value);\n } catch (e) {\n\n // eslint-disable-next-line no-undef\n typeof console !== 'undefined' && console.warn(\n `missing namespace information for <${\n attr.name\n }=${ attr.value }> on`, element, e\n );\n }\n });\n};\n\nElementSerializer.prototype.parseContainments = function(properties) {\n\n var self = this,\n body = this.body,\n element = this.element;\n\n forEach(properties, function(p) {\n var value = element.get(p.name),\n isReference = p.isReference,\n isMany = p.isMany;\n\n if (!isMany) {\n value = [ value ];\n }\n\n if (p.isBody) {\n body.push(new BodySerializer().build(p, value[0]));\n } else if (isSimpleType(p.type)) {\n forEach(value, function(v) {\n body.push(new ValueSerializer(self.addTagName(self.nsPropertyTagName(p))).build(p, v));\n });\n } else if (isReference) {\n forEach(value, function(v) {\n body.push(new ReferenceSerializer(self.addTagName(self.nsPropertyTagName(p))).build(v));\n });\n } else {\n\n // allow serialization via type\n // rather than element name\n var serialization = getSerialization(p);\n\n forEach(value, function(v) {\n var serializer;\n\n if (serialization) {\n if (serialization === SERIALIZE_PROPERTY) {\n serializer = new ElementSerializer(self, p);\n } else {\n serializer = new TypeSerializer(self, p, serialization);\n }\n } else {\n serializer = new ElementSerializer(self);\n }\n\n body.push(serializer.build(v));\n });\n }\n });\n};\n\nElementSerializer.prototype.getNamespaces = function(local) {\n\n var namespaces = this.namespaces,\n parent = this.parent,\n parentNamespaces;\n\n if (!namespaces) {\n parentNamespaces = parent && parent.getNamespaces();\n\n if (local || !parentNamespaces) {\n this.namespaces = namespaces = new Namespaces(parentNamespaces);\n } else {\n namespaces = parentNamespaces;\n }\n }\n\n return namespaces;\n};\n\nElementSerializer.prototype.logNamespace = function(ns, wellknown, local) {\n var namespaces = this.getNamespaces(local);\n\n var nsUri = ns.uri,\n nsPrefix = ns.prefix;\n\n var existing = namespaces.byUri(nsUri);\n\n if (!existing || local) {\n namespaces.add(ns, wellknown);\n }\n\n namespaces.mapPrefix(nsPrefix, nsUri);\n\n return ns;\n};\n\nElementSerializer.prototype.logNamespaceUsed = function(ns, local) {\n var namespaces = this.getNamespaces(local);\n\n // ns may be\n //\n // * prefix only\n // * prefix:uri\n // * localName only\n\n var prefix = ns.prefix,\n uri = ns.uri,\n newPrefix, idx,\n wellknownUri;\n\n // handle anonymous namespaces (elementForm=unqualified), cf. #23\n if (!prefix && !uri) {\n return { localName: ns.localName };\n }\n\n wellknownUri = namespaces.defaultUriByPrefix(prefix);\n\n uri = uri || wellknownUri || namespaces.uriByPrefix(prefix);\n\n if (!uri) {\n throw new Error('no namespace uri given for prefix <' + prefix + '>');\n }\n\n ns = namespaces.byUri(uri);\n\n // register new default prefix <xmlns> in local scope\n if (!ns && !prefix) {\n ns = this.logNamespace({ uri }, wellknownUri === uri, true);\n }\n\n if (!ns) {\n newPrefix = prefix;\n idx = 1;\n\n // find a prefix that is not mapped yet\n while (namespaces.uriByPrefix(newPrefix)) {\n newPrefix = prefix + '_' + idx++;\n }\n\n ns = this.logNamespace({ prefix: newPrefix, uri: uri }, wellknownUri === uri);\n }\n\n if (prefix) {\n namespaces.mapPrefix(prefix, uri);\n }\n\n return ns;\n};\n\nElementSerializer.prototype.parseAttributes = function(properties) {\n var self = this,\n element = this.element;\n\n forEach(properties, function(p) {\n\n var value = element.get(p.name);\n\n if (p.isReference) {\n\n if (!p.isMany) {\n value = value.id;\n } else {\n var values = [];\n forEach(value, function(v) {\n values.push(v.id);\n });\n\n // IDREFS is a whitespace-separated list of references.\n value = values.join(' ');\n }\n\n }\n\n self.addAttribute(self.nsAttributeName(p), value);\n });\n};\n\nElementSerializer.prototype.addTagName = function(nsTagName) {\n var actualNs = this.logNamespaceUsed(nsTagName);\n\n this.getNamespaces().logUsed(actualNs);\n\n return nsName(nsTagName);\n};\n\nElementSerializer.prototype.addAttribute = function(name, value) {\n var attrs = this.attrs;\n\n if (isString(value)) {\n value = escapeAttr(value);\n }\n\n // de-duplicate attributes\n // https://github.com/bpmn-io/moddle-xml/issues/66\n var idx = findIndex(attrs, function(element) {\n return (\n element.name.localName === name.localName &&\n element.name.uri === name.uri &&\n element.name.prefix === name.prefix\n );\n });\n\n var attr = { name: name, value: value };\n\n if (idx !== -1) {\n attrs.splice(idx, 1, attr);\n } else {\n attrs.push(attr);\n }\n};\n\nElementSerializer.prototype.serializeAttributes = function(writer) {\n var attrs = this.attrs,\n namespaces = this.namespaces;\n\n if (namespaces) {\n attrs = getNsAttrs(namespaces).concat(attrs);\n }\n\n forEach(attrs, function(a) {\n writer\n .append(' ')\n .append(nsName(a.name)).append('=\"').append(a.value).append('\"');\n });\n};\n\nElementSerializer.prototype.serializeTo = function(writer) {\n var firstBody = this.body[0],\n indent = firstBody && firstBody.constructor !== BodySerializer;\n\n writer\n .appendIndent()\n .append('<' + this.tagName);\n\n this.serializeAttributes(writer);\n\n writer.append(firstBody ? '>' : ' />');\n\n if (firstBody) {\n\n if (indent) {\n writer\n .appendNewLine()\n .indent();\n }\n\n forEach(this.body, function(b) {\n b.serializeTo(writer);\n });\n\n if (indent) {\n writer\n .unindent()\n .appendIndent();\n }\n\n writer.append('</' + this.tagName + '>');\n }\n\n writer.appendNewLine();\n};\n\n/**\n * A serializer for types that handles serialization of data types\n */\nfunction TypeSerializer(parent, propertyDescriptor, serialization) {\n ElementSerializer.call(this, parent, propertyDescriptor);\n\n this.serialization = serialization;\n}\n\ninherits(TypeSerializer, ElementSerializer);\n\nTypeSerializer.prototype.parseNsAttributes = function(element) {\n\n // extracted attributes with serialization attribute\n // <type=typeName> stripped; it may be later\n var attributes = ElementSerializer.prototype.parseNsAttributes.call(this, element).filter(\n attr => attr.name !== this.serialization\n );\n\n var descriptor = element.$descriptor;\n\n // only serialize <type=typeName> if necessary\n if (descriptor.name === this.propertyDescriptor.type) {\n return attributes;\n }\n\n var typeNs = this.typeNs = this.nsTagName(descriptor);\n this.getNamespaces().logUsed(this.typeNs);\n\n // add xsi:type attribute to represent the elements\n // actual type\n\n var pkg = element.$model.getPackage(typeNs.uri),\n typePrefix = (pkg.xml && pkg.xml.typePrefix) || '';\n\n this.addAttribute(\n this.nsAttributeName(this.serialization),\n (typeNs.prefix ? typeNs.prefix + ':' : '') + typePrefix + descriptor.ns.localName\n );\n\n return attributes;\n};\n\nTypeSerializer.prototype.isLocalNs = function(ns) {\n return ns.uri === (this.typeNs || this.ns).uri;\n};\n\nfunction SavingWriter() {\n this.value = '';\n\n this.write = function(str) {\n this.value += str;\n };\n}\n\nfunction FormatingWriter(out, format) {\n\n var indent = [ '' ];\n\n this.append = function(str) {\n out.write(str);\n\n return this;\n };\n\n this.appendNewLine = function() {\n if (format) {\n out.write('\\n');\n }\n\n return this;\n };\n\n this.appendIndent = function() {\n if (format) {\n out.write(indent.join(' '));\n }\n\n return this;\n };\n\n this.indent = function() {\n indent.push('');\n return this;\n };\n\n this.unindent = function() {\n indent.pop();\n return this;\n };\n}\n\n/**\n * A writer for meta-model backed document trees\n *\n * @param {Object} options output options to pass into the writer\n */\nexport function Writer(options) {\n\n options = assign({ format: false, preamble: true }, options || {});\n\n function toXML(tree, writer) {\n var internalWriter = writer || new SavingWriter();\n var formatingWriter = new FormatingWriter(internalWriter, options.format);\n\n if (options.preamble) {\n formatingWriter.append(XML_PREAMBLE);\n }\n\n var serializer = new ElementSerializer();\n\n var model = tree.$model;\n\n serializer.getNamespaces().mapDefaultPrefixes(getDefaultPrefixMappings(model));\n\n serializer.build(tree).serializeTo(formatingWriter);\n\n if (!writer) {\n return internalWriter.value;\n }\n }\n\n return {\n toXML: toXML\n };\n}\n\n\n// helpers ///////////\n\n/**\n * @param {Moddle} model\n *\n * @return { Record<string, string> } map from prefix to URI\n */\nfunction getDefaultPrefixMappings(model) {\n\n const nsMap = model.config && model.config.nsMap || {};\n\n const prefixMap = {};\n\n // { prefix -> uri }\n for (const prefix in DEFAULT_NS_MAP) {\n prefixMap[prefix] = DEFAULT_NS_MAP[prefix];\n }\n\n // { uri -> prefix }\n for (const uri in nsMap) {\n const prefix = nsMap[uri];\n\n prefixMap[prefix] = uri;\n }\n\n for (const pkg of model.getPackages()) {\n prefixMap[pkg.prefix] = pkg.uri;\n }\n\n return prefixMap;\n}","{\n \"name\": \"Process Flow Diagram Definition\",\n \"uri\": \"http://pfdn\",\n \"associations\": [],\n \"types\": [\n {\n \"name\": \"Statusable\",\n \"isAbstract\": true,\n \"properties\": [\n {\n \"name\": \"status\",\n \"type\": \"Real\",\n \"isAttr\": true,\n \"default\": 0\n }\n ]\n },\n {\n \"name\": \"Base\",\n \"isAbstract\": true,\n \"superClass\": [\n \"Statusable\"\n ],\n \"properties\": [\n {\n \"name\": \"id\",\n \"type\": \"String\",\n \"isAttr\": true,\n \"isId\": true\n },\n {\n \"name\": \"name\",\n \"type\": \"String\",\n \"isAttr\": true\n }\n ]\n },\n {\n \"name\": \"Property\",\n \"superClass\": [\n \"Statusable\"\n ],\n \"properties\": [\n {\n \"name\": \"name\",\n \"type\": \"String\",\n \"isAttr\": true\n },\n {\n \"name\": \"type\",\n \"type\": \"String\",\n \"isAttr\": true,\n \"default\": \"string\"\n },\n {\n \"name\": \"value\",\n \"type\": \"String\",\n \"isAttr\": true,\n \"default\": \"\"\n }\n ]\n },\n {\n \"name\": \"PropertiesSet\",\n \"superClass\": [\n \"Statusable\"\n ],\n \"properties\": [\n {\n \"name\": \"id\",\n \"type\": \"String\",\n \"isAttr\": true,\n \"isId\": true\n },\n {\n \"name\": \"property\",\n \"type\": \"Property\",\n \"isMany\": true,\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n }\n ]\n },\n {\n \"name\": \"Coordinates\",\n \"properties\": [\n {\n \"name\": \"x\",\n \"type\": \"Real\",\n \"isAttr\": true,\n \"default\": 0\n },\n {\n \"name\": \"y\",\n \"type\": \"Real\",\n \"isAttr\": true,\n \"default\": 0\n }\n ]\n },\n {\n \"name\": \"Zoom\",\n \"superClass\": [\n \"Statusable\"\n ],\n \"properties\": [\n {\n \"name\": \"offset\",\n \"type\": \"Coordinates\",\n \"default\": {\n \"x\": 0,\n \"y\": 0,\n \"scale\": 2\n },\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n },\n {\n \"name\": \"scale\",\n \"type\": \"Real\",\n \"default\": 1\n }\n ]\n },\n {\n \"name\": \"Grid\",\n \"properties\": [\n {\n \"name\": \"show\",\n \"type\": \"Boolean\",\n \"isAttr\": true,\n \"default\": true\n },\n {\n \"name\": \"lineColor\",\n \"type\": \"String\",\n \"isAttr\": true,\n \"default\": \"#dddddd\"\n },\n {\n \"name\": \"size\",\n \"type\": \"Real\",\n \"isAttr\": true,\n \"default\": 25\n },\n {\n \"name\": \"lineWidth\",\n \"type\": \"Real\",\n \"isAttr\": true,\n \"default\": 1\n }\n ]\n },\n {\n \"name\": \"Settings\",\n \"superClass\": [\n \"Base\"\n ],\n \"properties\": [\n {\n \"name\": \"author\",\n \"type\": \"String\",\n \"default\": \"No Author\",\n \"isAttr\": true\n },\n {\n \"name\": \"backgroundColor\",\n \"type\": \"String\",\n \"default\": \"#ffffff\",\n \"isAttr\": true\n },\n {\n \"name\": \"zoom\",\n \"type\": \"Zoom\",\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n },\n {\n \"name\": \"grid\",\n \"type\": \"Grid\",\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n }\n ]\n },\n {\n \"name\": \"Label\",\n \"superClass\": [\n \"Base\"\n ],\n \"properties\": [\n {\n \"name\": \"position\",\n \"type\": \"Coordinates\",\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n },\n {\n \"name\": \"isReadOnly\",\n \"type\": \"Boolean\",\n \"isAttr\": true,\n \"default\": false\n },\n {\n \"name\": \"text\",\n \"type\": \"String\"\n },\n {\n \"name\": \"color\",\n \"type\": \"String\",\n \"isAttr\": true,\n \"default\": \"#303030\"\n },\n {\n \"name\": \"fontSize\",\n \"type\": \"Real\",\n \"isAttr\": true,\n \"default\": 13\n }\n ]\n },\n {\n \"name\": \"Node\",\n \"superClass\": [\n \"Base\"\n ],\n \"properties\": [\n {\n \"name\": \"label\",\n \"type\": \"Label\",\n \"isAttr\": true,\n \"isReference\": true\n },\n {\n \"name\": \"type\",\n \"type\": \"String\",\n \"isAttr\": true,\n \"default\": \"default\"\n },\n {\n \"name\": \"tag\",\n \"isAttr\": true,\n \"type\": \"String\"\n },\n {\n \"name\": \"propertiesSet\",\n \"type\": \"PropertiesSet\",\n \"isAttr\": true,\n \"isReference\": true\n },\n {\n \"name\": \"position\",\n \"type\": \"Coordinates\",\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n },\n {\n \"name\": \"size\",\n \"type\": \"Real\",\n \"isAttr\": true,\n \"default\": 25\n }\n ]\n },\n {\n \"name\": \"Border\",\n \"properties\": [\n {\n \"name\": \"lineWidth\",\n \"type\": \"Real\",\n \"isAttr\": true,\n \"default\": 1\n },\n {\n \"name\": \"lineColor\",\n \"type\": \"String\",\n \"isAttr\": true,\n \"default\": \"#dddddd\"\n }\n ]\n },\n {\n \"name\": \"Zone\",\n \"superClass\": [\n \"Base\"\n ],\n \"properties\": [\n {\n \"name\": \"label\",\n \"type\": \"Label\",\n \"isAttr\": true,\n \"isReference\": true\n },\n {\n \"name\": \"position\",\n \"type\": \"Coordinates\",\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n },\n {\n \"name\": \"width\",\n \"type\": \"Real\",\n \"isAttr\": true,\n \"default\": 25\n },\n {\n \"name\": \"height\",\n \"type\": \"Real\",\n \"isAttr\": true,\n \"default\": 25\n },\n {\n \"name\": \"fillColor\",\n \"type\": \"String\",\n \"isAttr\": true,\n \"default\": \"#dddddd\"\n },\n {\n \"name\": \"opacity\",\n \"type\": \"Real\",\n \"isAttr\": true,\n \"default\": 0.6\n },\n {\n \"name\": \"border\",\n \"type\": \"Border\",\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n }\n ]\n },\n {\n \"name\": \"Link\",\n \"superClass\": [\n \"Base\"\n ],\n \"properties\": [\n {\n \"name\": \"label\",\n \"type\": \"Label\",\n \"isAttr\": true,\n \"isReference\": true\n },\n {\n \"name\": \"source\",\n \"type\": \"String\",\n \"isAttr\": true,\n \"isReference\": true\n },\n {\n \"name\": \"target\",\n \"type\": \"String\",\n \"isAttr\": true,\n \"isReference\": true\n },\n {\n \"name\": \"lineColor\",\n \"type\": \"String\",\n \"isAttr\": true,\n \"default\": \"#000000\"\n },\n {\n \"name\": \"lineWidth\",\n \"type\": \"Real\",\n \"isAttr\": true,\n \"default\": 4\n },\n {\n \"name\": \"fillColor\",\n \"type\": \"String\",\n \"isAttr\": true,\n \"default\": \"#ffffff\"\n },\n {\n \"name\": \"waypoint\",\n \"type\": \"Coordinates\",\n \"isMany\": true,\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n },\n {\n \"name\": \"tag\",\n \"isAttr\": true,\n \"type\": \"String\"\n },\n {\n \"name\": \"propertiesSet\",\n \"type\": \"PropertiesSet\",\n \"isAttr\": true,\n \"isReference\": true\n }\n ]\n },\n {\n \"name\": \"Diagram\",\n \"superClass\": [\n \"Base\"\n ],\n \"properties\": [\n {\n \"name\": \"settings\",\n \"type\": \"Settings\",\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n },\n {\n \"name\": \"node\",\n \"type\": \"Node\",\n \"isMany\": true,\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n },\n {\n \"name\": \"link\",\n \"type\": \"Link\",\n \"isMany\": true,\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n },\n {\n \"name\": \"label\",\n \"type\": \"Label\",\n \"isMany\": true,\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n },\n {\n \"name\": \"zone\",\n \"type\": \"Zone\",\n \"isMany\": true,\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n },\n {\n \"name\": \"propertiesSet\",\n \"type\": \"PropertiesSet\",\n \"isMany\": true,\n \"xml\": {\n \"serialize\": \"xsi:type\"\n }\n }\n ]\n }\n ],\n \"prefix\": \"pfdn\",\n \"xml\": {\n \"tagAlias\": \"lowerCase\"\n }\n}","import { Moddle } from 'moddle';\nimport type { ModdleElement } from 'moddle';\nimport { Reader, Writer } from 'moddle-xml';\n\n/**\n * A PFDN model element. The public shape is defined here (not re-exported from\n * the untyped `moddle` package) so consumers get a self-contained type surface.\n */\nexport interface ModelElement {\n $type: string;\n id?: string;\n [key: string]: unknown;\n}\n\n/** Result of {@link PfdnModdle.fromXML}. */\nexport interface ParseResult {\n rootElement: ModelElement;\n references: unknown[];\n warnings: Error[];\n elementsById: Record<string, ModelElement>;\n}\n\nexport interface FromXmlOptions {\n lax?: boolean;\n [key: string]: unknown;\n}\n\n/**\n * A {@link Moddle} subclass that reads and writes Process Flow Diagram Notation\n * (`.pfdn`) documents.\n */\nexport class PfdnModdle extends Moddle {\n /**\n * Instantiate a PFDN model element. Inherited from `Moddle` at runtime;\n * declared here so the public type surface does not depend on `moddle`\n * (which ships no types).\n */\n declare create: (descriptor: string, attrs?: Record<string, unknown>) => ModelElement;\n\n /**\n * Parse a PFDN XML string into a model tree.\n *\n * @param xml the document\n * @param typeName root element type (default `pfdn:Diagram`)\n * @param options forwarded to the moddle-xml Reader (e.g. `lax`)\n */\n async fromXML(\n xml: string,\n typeName = 'pfdn:Diagram',\n options: FromXmlOptions = {}\n ): Promise<ParseResult> {\n const reader = new Reader({ model: this, lax: true, ...options });\n return reader.fromXML(xml, typeName) as unknown as Promise<ParseResult>;\n }\n\n /** Serialize a PFDN model tree (typically a `pfdn:Diagram`) to XML. */\n toXML(element: ModelElement, options: Record<string, unknown> = {}): string {\n return new Writer(options).toXML(element as unknown as ModdleElement);\n }\n}\n","import pfdnPackage from './pfdn.json';\nimport { PfdnModdle } from './PfdnModdle';\n\nexport { PfdnModdle };\nexport type { FromXmlOptions, ModelElement, ParseResult } from './PfdnModdle';\n\nconst packages: Record<string, unknown> = { pfdn: pfdnPackage };\n\n/**\n * Create a {@link PfdnModdle} instance, optionally extended with additional\n * moddle packages.\n */\nexport function createPfdnModdle(\n additionalPackages: Record<string, unknown> = {},\n options?: Record<string, unknown>\n): PfdnModdle {\n return new PfdnModdle({ ...packages, ...additionalPackages }, options);\n}\n\nexport default createPfdnModdle;\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default x => () => x;\n","export default function DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved, nonpassive)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n select(event.view)\n .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n nodrag(event.view);\n nopropagation(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n noevent(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n nopropagation(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = pointer(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // falls through\n case \"drag\": p = pointer(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new DragEvent(type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if (!isFinite(x) || x === 0) return null; // NaN, ±Infinity, ±0\n var i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\"), coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return prefixExponent = undefined, x.toPrecision(p);\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier, options) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = (options && options.prefix !== undefined ? options.prefix : \"\") + (symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\"),\n suffix = (symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\") + (options && options.suffix !== undefined ? options.suffix : \"\");\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" && !isNaN(value) && prefixExponent !== undefined ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier), {suffix: prefixes[8 + e / 3]});\n return function(value) {\n return f(k * value);\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","export default function(x) {\n return x;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","const CLASS_PATTERN = /^class[ {]/;\n\n\n/**\n * @param {function} fn\n *\n * @return {boolean}\n */\nfunction isClass(fn) {\n return CLASS_PATTERN.test(fn.toString());\n}\n\n/**\n * @param {any} obj\n *\n * @return {boolean}\n */\nfunction isArray(obj) {\n return Array.isArray(obj);\n}\n\n/**\n * @param {any} obj\n * @param {string} prop\n *\n * @return {boolean}\n */\nfunction hasOwnProp(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n/**\n * @typedef {import('./index').InjectAnnotated } InjectAnnotated\n */\n\n/**\n * @template T\n *\n * @params {[...string[], T] | ...string[], T} args\n *\n * @return {T & InjectAnnotated}\n */\nfunction annotate(...args) {\n\n if (args.length === 1 && isArray(args[0])) {\n args = args[0];\n }\n\n args = [ ...args ];\n\n const fn = args.pop();\n\n fn.$inject = args;\n\n return fn;\n}\n\n\n// Current limitations:\n// - can't put into \"function arg\" comments\n// function /* (no parenthesis like this) */ (){}\n// function abc( /* xx (no parenthesis like this) */ a, b) {}\n//\n// Just put the comment before function or inside:\n// /* (((this is fine))) */ function(a, b) {}\n// function abc(a) { /* (((this is fine))) */}\n//\n// - can't reliably auto-annotate constructor; we'll match the\n// first constructor(...) pattern found which may be the one\n// of a nested class, too.\n\nconst CONSTRUCTOR_ARGS = /constructor\\s*[^(]*\\(\\s*([^)]*)\\)/m;\nconst FN_ARGS = /^(?:async\\s+)?(?:function\\s*[^(]*)?(?:\\(\\s*([^)]*)\\)|(\\w+))/m;\nconst FN_ARG = /\\/\\*([^*]*)\\*\\//m;\n\n/**\n * @param {unknown} fn\n *\n * @return {string[]}\n */\nfunction parseAnnotations(fn) {\n\n if (typeof fn !== 'function') {\n throw new Error(`Cannot annotate \"${fn}\". Expected a function!`);\n }\n\n const match = fn.toString().match(isClass(fn) ? CONSTRUCTOR_ARGS : FN_ARGS);\n\n // may parse class without constructor\n if (!match) {\n return [];\n }\n\n const args = match[1] || match[2];\n\n return args && args.split(',').map(arg => {\n const argMatch = arg.match(FN_ARG);\n return (argMatch && argMatch[1] || arg).trim();\n }) || [];\n}\n\n/**\n * @typedef { import('./index').ModuleDeclaration } ModuleDeclaration\n * @typedef { import('./index').ModuleDefinition } ModuleDefinition\n * @typedef { import('./index').InjectorContext } InjectorContext\n */\n\n/**\n * Create a new injector with the given modules.\n *\n * @param {ModuleDefinition[]} modules\n * @param {InjectorContext} [parent]\n */\nfunction Injector(modules, parent) {\n parent = parent || {\n get: function(name, strict) {\n currentlyResolving.push(name);\n\n if (strict === false) {\n return null;\n } else {\n throw error(`No provider for \"${ name }\"!`);\n }\n }\n };\n\n const currentlyResolving = [];\n const providers = this._providers = Object.create(parent._providers || null);\n const instances = this._instances = Object.create(null);\n\n const self = instances.injector = this;\n\n const error = function(msg) {\n const stack = currentlyResolving.join(' -> ');\n currentlyResolving.length = 0;\n return new Error(stack ? `${ msg } (Resolving: ${ stack })` : msg);\n };\n\n /**\n * Return a named service.\n *\n * @param {string} name\n * @param {boolean} [strict=true] if false, resolve missing services to null\n *\n * @return {any}\n */\n function get(name, strict) {\n if (!providers[name] && name.indexOf('.') !== -1) {\n const parts = name.split('.');\n let pivot = get(parts.shift());\n\n while (parts.length) {\n pivot = pivot[parts.shift()];\n }\n\n return pivot;\n }\n\n if (hasOwnProp(instances, name)) {\n return instances[name];\n }\n\n if (hasOwnProp(providers, name)) {\n if (currentlyResolving.indexOf(name) !== -1) {\n currentlyResolving.push(name);\n throw error('Cannot resolve circular dependency!');\n }\n\n currentlyResolving.push(name);\n instances[name] = providers[name][0](providers[name][1]);\n currentlyResolving.pop();\n\n return instances[name];\n }\n\n return parent.get(name, strict);\n }\n\n function fnDef(fn, locals) {\n\n if (typeof locals === 'undefined') {\n locals = {};\n }\n\n if (typeof fn !== 'function') {\n if (isArray(fn)) {\n fn = annotate(fn.slice());\n } else {\n throw error(`Cannot invoke \"${ fn }\". Expected a function!`);\n }\n }\n\n const inject = fn.$inject || parseAnnotations(fn);\n const dependencies = inject.map(dep => {\n if (hasOwnProp(locals, dep)) {\n return locals[dep];\n } else {\n return get(dep);\n }\n });\n\n return {\n fn: fn,\n dependencies: dependencies\n };\n }\n\n function instantiate(Type) {\n const {\n fn,\n dependencies\n } = fnDef(Type);\n\n // instantiate var args constructor\n const Constructor = Function.prototype.bind.apply(fn, [ null ].concat(dependencies));\n\n return new Constructor();\n }\n\n function invoke(func, context, locals) {\n const {\n fn,\n dependencies\n } = fnDef(func, locals);\n\n return fn.apply(context, dependencies);\n }\n\n /**\n * @param {Injector} childInjector\n *\n * @return {Function}\n */\n function createPrivateInjectorFactory(childInjector) {\n return annotate(key => childInjector.get(key));\n }\n\n /**\n * @param {ModuleDefinition[]} modules\n * @param {string[]} [forceNewInstances]\n *\n * @return {Injector}\n */\n function createChild(modules, forceNewInstances) {\n if (forceNewInstances && forceNewInstances.length) {\n const fromParentModule = Object.create(null);\n const matchedScopes = Object.create(null);\n\n const privateInjectorsCache = [];\n const privateChildInjectors = [];\n const privateChildFactories = [];\n\n let provider;\n let cacheIdx;\n let privateChildInjector;\n let privateChildInjectorFactory;\n\n for (let name in providers) {\n provider = providers[name];\n\n if (forceNewInstances.indexOf(name) !== -1) {\n if (provider[2] === 'private') {\n cacheIdx = privateInjectorsCache.indexOf(provider[3]);\n if (cacheIdx === -1) {\n privateChildInjector = provider[3].createChild([], forceNewInstances);\n privateChildInjectorFactory = createPrivateInjectorFactory(privateChildInjector);\n privateInjectorsCache.push(provider[3]);\n privateChildInjectors.push(privateChildInjector);\n privateChildFactories.push(privateChildInjectorFactory);\n fromParentModule[name] = [ privateChildInjectorFactory, name, 'private', privateChildInjector ];\n } else {\n fromParentModule[name] = [ privateChildFactories[cacheIdx], name, 'private', privateChildInjectors[cacheIdx] ];\n }\n } else {\n fromParentModule[name] = [ provider[2], provider[1] ];\n }\n matchedScopes[name] = true;\n }\n\n if ((provider[2] === 'factory' || provider[2] === 'type') && provider[1].$scope) {\n /* jshint -W083 */\n forceNewInstances.forEach(scope => {\n if (provider[1].$scope.indexOf(scope) !== -1) {\n fromParentModule[name] = [ provider[2], provider[1] ];\n matchedScopes[scope] = true;\n }\n });\n }\n }\n\n forceNewInstances.forEach(scope => {\n if (!matchedScopes[scope]) {\n throw new Error('No provider for \"' + scope + '\". Cannot use provider from the parent!');\n }\n });\n\n modules.unshift(fromParentModule);\n }\n\n return new Injector(modules, self);\n }\n\n const factoryMap = {\n factory: invoke,\n type: instantiate,\n value: function(value) {\n return value;\n }\n };\n\n /**\n * @param {ModuleDefinition} moduleDefinition\n * @param {Injector} injector\n */\n function createInitializer(moduleDefinition, injector) {\n\n const initializers = moduleDefinition.__init__ || [];\n\n return function() {\n initializers.forEach(initializer => {\n\n // eagerly resolve component (fn or string)\n if (typeof initializer === 'string') {\n injector.get(initializer);\n } else {\n injector.invoke(initializer);\n }\n });\n };\n }\n\n /**\n * @param {ModuleDefinition} moduleDefinition\n */\n function loadModule(moduleDefinition) {\n\n const moduleExports = moduleDefinition.__exports__;\n\n // private module\n if (moduleExports) {\n const nestedModules = moduleDefinition.__modules__;\n\n const clonedModule = Object.keys(moduleDefinition).reduce((clonedModule, key) => {\n\n if (key !== '__exports__' && key !== '__modules__' && key !== '__init__' && key !== '__depends__') {\n clonedModule[key] = moduleDefinition[key];\n }\n\n return clonedModule;\n }, Object.create(null));\n\n const childModules = (nestedModules || []).concat(clonedModule);\n\n const privateInjector = createChild(childModules);\n const getFromPrivateInjector = annotate(function(key) {\n return privateInjector.get(key);\n });\n\n moduleExports.forEach(function(key) {\n providers[key] = [ getFromPrivateInjector, key, 'private', privateInjector ];\n });\n\n // ensure child injector initializes\n const initializers = (moduleDefinition.__init__ || []).slice();\n\n initializers.unshift(function() {\n privateInjector.init();\n });\n\n moduleDefinition = Object.assign({}, moduleDefinition, {\n __init__: initializers\n });\n\n return createInitializer(moduleDefinition, privateInjector);\n }\n\n // normal module\n Object.keys(moduleDefinition).forEach(function(key) {\n\n if (key === '__init__' || key === '__depends__') {\n return;\n }\n\n if (moduleDefinition[key][2] === 'private') {\n providers[key] = moduleDefinition[key];\n return;\n }\n\n const type = moduleDefinition[key][0];\n const value = moduleDefinition[key][1];\n\n providers[key] = [ factoryMap[type], arrayUnwrap(type, value), type ];\n });\n\n return createInitializer(moduleDefinition, self);\n }\n\n /**\n * @param {ModuleDefinition[]} moduleDefinitions\n * @param {ModuleDefinition} moduleDefinition\n *\n * @return {ModuleDefinition[]}\n */\n function resolveDependencies(moduleDefinitions, moduleDefinition) {\n\n if (moduleDefinitions.indexOf(moduleDefinition) !== -1) {\n return moduleDefinitions;\n }\n\n moduleDefinitions = (moduleDefinition.__depends__ || []).reduce(resolveDependencies, moduleDefinitions);\n\n if (moduleDefinitions.indexOf(moduleDefinition) !== -1) {\n return moduleDefinitions;\n }\n\n return moduleDefinitions.concat(moduleDefinition);\n }\n\n /**\n * @param {ModuleDefinition[]} moduleDefinitions\n *\n * @return { () => void } initializerFn\n */\n function bootstrap(moduleDefinitions) {\n\n const initializers = moduleDefinitions\n .reduce(resolveDependencies, [])\n .map(loadModule);\n\n let initialized = false;\n\n return function() {\n\n if (initialized) {\n return;\n }\n\n initialized = true;\n\n initializers.forEach(initializer => initializer());\n };\n }\n\n // public API\n this.get = get;\n this.invoke = invoke;\n this.instantiate = instantiate;\n this.createChild = createChild;\n\n // setup\n this.init = bootstrap(modules);\n}\n\n\n// helpers ///////////////\n\nfunction arrayUnwrap(type, value) {\n if (type !== 'value' && isArray(value)) {\n value = annotate(value.slice());\n }\n\n return value;\n}\n\nexport { Injector, annotate, parseAnnotations };\n","/**\n * @d3-polytree/core — the diagram engine.\n *\n * B3 carves `core-v2beta`'s `draw` / `features` / `modelling` layers into this\n * package incrementally. Wires the base canvas services, the PFDN model, and the\n * draw layer into the `coreModules` didi stack the higher-level packages build on.\n */\nimport { canvasModule } from '@d3-polytree/canvas';\nimport { drawingRegistryModule } from './draw';\n\nexport { canvasModule } from '@d3-polytree/canvas';\nexport { createPfdnModdle, PfdnModdle } from '@d3-polytree/pfdn-moddle';\nexport * from './draw';\nexport * as collections from './utils/collections';\nexport { getLocalName } from './utils/localName';\nexport type { Descriptored } from './utils/localName';\nexport * from './features';\nexport * from './modelling';\nexport * from './Diagram';\nexport * from './model/model';\n\n/** didi modules that make up the core engine (extended as B3 lands more draw/features). */\nexport const coreModules: unknown[] = [canvasModule, drawingRegistryModule];\n\n","import type { DrawingSelection } from './types';\n\n/** Maps element ids to their rendered `<g>` selections. */\nexport class DrawingRegistry {\n private readonly _drawings = new Map<string, DrawingSelection>();\n\n set(id: string, drawing: DrawingSelection): void {\n this._drawings.set(id, drawing);\n }\n\n remove(id: string): void {\n this._drawings.delete(id);\n }\n\n get(id: string): DrawingSelection | false {\n return this._drawings.get(id) ?? false;\n }\n\n getAll(): DrawingSelection[] {\n return [...this._drawings.values()];\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport type { Canvas, ElementBuilder, ElementRegistry } from '@d3-polytree/canvas';\nimport type { DrawingRegistry } from './DrawingRegistry';\nimport type { ContainerSelection, DiagramElement, DrawingSelection } from './types';\n\n/**\n * Abstract base for a class of drawn diagram elements (nodes, links, labels, …).\n *\n * Owns a `<g>` container on the canvas drawing layer and reconciles a set of\n * model definitions into rendered `<g>` elements, emitting\n * `<className>.created|updated|removed` on the event bus. Concrete subclasses\n * implement {@link _createElement} and {@link _updateElement}.\n */\nexport abstract class BaseElement {\n protected readonly _className: string;\n protected readonly _canvas: Canvas;\n protected readonly _eventBus: EventEmitter;\n protected readonly _elementBuilder: ElementBuilder;\n protected readonly _elementRegistry: ElementRegistry;\n protected readonly _drawingRegistry: DrawingRegistry;\n\n protected readonly _elements = new Map<string, DiagramElement>();\n protected _elementsContainer: ContainerSelection | null = null;\n\n constructor(\n className: string,\n items: DiagramElement[] | undefined,\n canvas: Canvas,\n eventBus: EventEmitter,\n elementBuilder: ElementBuilder,\n elementRegistry: ElementRegistry,\n drawingRegistry: DrawingRegistry\n ) {\n this._className = className;\n this._canvas = canvas;\n this._eventBus = eventBus;\n this._elementBuilder = elementBuilder;\n this._elementRegistry = elementRegistry;\n this._drawingRegistry = drawingRegistry;\n this._init(items);\n }\n\n /** Render `definition` into `elem` (a fresh drawing group). */\n protected abstract _createElement(elem: DrawingSelection, definition: DiagramElement): void;\n\n /** Re-render `definition` into its existing `elem`. */\n protected abstract _updateElement(elem: DrawingSelection, definition: DiagramElement): void;\n\n /**\n * Public reconcile entry point for the modelling layer: create, update, or\n * remove the drawing for `definition` (remove when it is omitted).\n */\n reconcile(elementId: string, definition: DiagramElement | undefined): void {\n this._builder(elementId, definition);\n }\n\n /** Reconcile a single definition: create, update, or remove. */\n protected _builder(elementId: string, definition: DiagramElement | undefined): void {\n const element = this._elementRegistry.get(elementId);\n if (element && definition) {\n if (definition.get('status') !== 1) {\n definition.set('status', 2);\n }\n this.updateElement(definition);\n } else if (element && !definition) {\n this.removeElementById((element as DiagramElement).id as string);\n } else if (!element && definition) {\n this.appendElement(definition);\n }\n }\n\n protected _drawContainer(): void {\n if (this._elementsContainer) {\n this._elementsContainer.remove();\n }\n this._elementsContainer = this._canvas\n .getDrawingLayer()\n .append('g')\n .attr('class', `${this._className}-group`);\n }\n\n removeElement(definition: { id?: string }): void {\n const id = definition.id;\n if (typeof id !== 'string') {\n return;\n }\n this._elements.delete(id);\n const elem = this._drawingRegistry.get(id);\n if (elem) {\n this._drawingRegistry.remove(id);\n this._elementRegistry.removeElementById(id);\n this._eventBus.emit(`${this._className}.removed`, elem, definition);\n elem.remove();\n }\n }\n\n removeElementById(id: string): void {\n this.removeElement({ id });\n }\n\n appendElement(definition: DiagramElement): void {\n this._elementRegistry.claimId(definition, this._className);\n\n const newElem = this._elementsContainer!\n .append('g')\n .datum(definition)\n .attr('element-id', definition.id as string)\n .attr('class', `${this._className}Item element`);\n\n newElem\n .append('g')\n .attr('class', 'innerElement')\n .attr('transform', 'translate(3, 3)');\n\n this._createElement(newElem, definition);\n this._drawingRegistry.set(definition.id as string, newElem);\n this._elements.set(definition.id as string, definition);\n\n this._eventBus.emit(`${this._className}.created`, newElem, definition);\n }\n\n updateElement(definition: DiagramElement): void {\n const element = this._drawingRegistry.get(definition.id as string);\n if (!element) {\n return;\n }\n element.datum(definition);\n this._updateElement(element, definition);\n this._drawingRegistry.set(definition.id as string, element);\n this._elements.set(definition.id as string, definition);\n this._eventBus.emit(`${this._className}.updated`, element, definition);\n }\n\n getAll(): DiagramElement[] {\n return [...this._elements.values()];\n }\n\n getContainer(): ContainerSelection | null {\n return this._elementsContainer;\n }\n\n protected _init(items: DiagramElement[] | undefined): void {\n this._drawContainer();\n if (items) {\n items.forEach((definition) => this._builder(definition.id as string, definition));\n }\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport type { Canvas, ElementBuilder, ElementRegistry } from '@d3-polytree/canvas';\nimport { BaseElement } from './BaseElement';\nimport type { DrawingRegistry } from './DrawingRegistry';\nimport type { DiagramElement, DrawingSelection } from './types';\nimport type { LabelDefinition } from './definitions';\n\nconst LABEL_FONT =\n '\"HelveticaNeue-Light\", \"Helvetica Neue Light\", \"Helvetica Neue\", Helvetica, Arial, ' +\n '\"Lucida Grande\", sans-serif';\n\n/** Draws floating text labels. */\nexport class Labels extends BaseElement {\n static readonly $inject = [\n 'd3polytree.definitions.label',\n 'canvas',\n 'eventBus',\n 'elementBuilder',\n 'elementRegistry',\n 'drawingRegistry'\n ];\n\n constructor(\n labels: LabelDefinition[] | undefined,\n canvas: Canvas,\n eventBus: EventEmitter,\n elementBuilder: ElementBuilder,\n elementRegistry: ElementRegistry,\n drawingRegistry: DrawingRegistry\n ) {\n super('label', labels, canvas, eventBus, elementBuilder, elementRegistry, drawingRegistry);\n }\n\n protected _createElement(label: DrawingSelection, definition: DiagramElement): void {\n const def = definition as LabelDefinition;\n const { x, y } = def.position;\n\n label.attr('x', x).attr('y', y).attr('transform', `translate(${x},${y})`);\n\n label\n .select('.innerElement')\n .attr('transform', 'translate(3.66,3.66)')\n .append('text')\n .style('font-family', LABEL_FONT)\n .attr('dominant-baseline', 'hanging')\n .attr('fill', def.color ?? null)\n .style('font-size', `${def.fontSize}px`)\n .text(def.text ?? '');\n }\n\n protected _updateElement(label: DrawingSelection, definition: DiagramElement): void {\n const def = definition as LabelDefinition;\n const { x, y } = def.position;\n\n label.attr('x', x).attr('y', y).attr('transform', `translate(${x},${y})`);\n\n label\n .select('.innerElement')\n .select('text')\n .attr('fill', def.color ?? null)\n .style('font-size', `${def.fontSize}px`)\n .text(def.text ?? '');\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport type { Canvas, ElementBuilder, ElementRegistry } from '@d3-polytree/canvas';\nimport { BaseElement } from './BaseElement';\nimport type { DrawingRegistry } from './DrawingRegistry';\nimport type { DiagramElement, DrawingSelection } from './types';\nimport type { ZoneDefinition } from './definitions';\n\n/** Draws background zone rectangles (inserted behind other elements). */\nexport class Zones extends BaseElement {\n static readonly $inject = [\n 'd3polytree.definitions.zone',\n 'canvas',\n 'eventBus',\n 'elementBuilder',\n 'elementRegistry',\n 'drawingRegistry'\n ];\n\n constructor(\n zones: ZoneDefinition[] | undefined,\n canvas: Canvas,\n eventBus: EventEmitter,\n elementBuilder: ElementBuilder,\n elementRegistry: ElementRegistry,\n drawingRegistry: DrawingRegistry\n ) {\n super('zone', zones, canvas, eventBus, elementBuilder, elementRegistry, drawingRegistry);\n }\n\n protected _createElement(zone: DrawingSelection, definition: DiagramElement): void {\n const def = definition as ZoneDefinition;\n const { x, y } = def.position;\n\n zone.attr('x', x).attr('y', y).attr('transform', `translate(${x},${y})`);\n\n zone\n .append('rect')\n .attr('height', def.height ?? 0)\n .attr('width', def.width ?? 0)\n .style('stroke', def.border.lineColor ?? '')\n .style('fill', def.fillColor ?? '')\n .style('opacity', def.opacity ?? '')\n .style('stroke-width', def.border.lineWidth ?? '');\n }\n\n protected _updateElement(zone: DrawingSelection, definition: DiagramElement): void {\n const def = definition as ZoneDefinition;\n zone\n .select('rect')\n .attr('height', def.height ?? 0)\n .attr('width', def.width ?? 0)\n .style('stroke', def.border.lineColor ?? '')\n .style('fill', def.fillColor ?? '')\n .style('opacity', def.opacity ?? '')\n .style('stroke-width', def.border.lineWidth ?? '');\n }\n\n /** Zones render behind everything else, so insert the container first. */\n protected override _drawContainer(): void {\n if (this._elementsContainer) {\n this._elementsContainer.remove();\n }\n this._elementsContainer = this._canvas\n .getDrawingLayer()\n .insert('g', ':first-child')\n .attr('class', `${this._className}-group`);\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport type { Canvas, ElementBuilder, ElementRegistry } from '@d3-polytree/canvas';\nimport { BaseElement } from './BaseElement';\nimport type { DrawingRegistry } from './DrawingRegistry';\nimport type { DiagramElement, DrawingSelection } from './types';\nimport type { LinkDefinition, Point } from './definitions';\nimport type { Markers } from './Markers';\n\nfunction generateWayPointPath(waypoints: Point[]): string {\n return `M ${waypoints.map((p) => `${p.x} ${p.y}`).join(', L ')}`;\n}\n\n/** Draws links as poly-line paths with an arrowhead marker. */\nexport class Links extends BaseElement {\n static readonly $inject = [\n 'd3polytree.definitions.link',\n 'canvas',\n 'eventBus',\n 'markers',\n 'elementBuilder',\n 'elementRegistry',\n 'drawingRegistry'\n ];\n\n private readonly _markers: Markers;\n\n constructor(\n links: LinkDefinition[] | undefined,\n canvas: Canvas,\n eventBus: EventEmitter,\n markers: Markers,\n elementBuilder: ElementBuilder,\n elementRegistry: ElementRegistry,\n drawingRegistry: DrawingRegistry\n ) {\n // Defer item processing until `_markers` is assigned: BaseElement's\n // constructor would otherwise run _createElement (which needs markers)\n // before this subclass field is set.\n super('link', undefined, canvas, eventBus, elementBuilder, elementRegistry, drawingRegistry);\n this._markers = markers;\n this._init(links);\n }\n\n protected _createElement(link: DrawingSelection, definition: DiagramElement): void {\n const def = definition as LinkDefinition;\n const wPath = generateWayPointPath(def.waypoint);\n const inner = link.select('.innerElement');\n\n inner\n .append('path')\n .attr('class', 'line-path')\n .attr(\n 'marker-end',\n `url(#${this._markers.getMarker(def.id as string, def.lineColor, def.fillColor)})`\n )\n .attr('d', wPath)\n .style('stroke', def.lineColor ?? '')\n .style('fill', 'none')\n .style('stroke-width', `${def.lineWidth ?? 0}px`)\n .attr('stroke-linejoin', 'round')\n .style('stroke-linecap', 'round');\n\n inner\n .append('path')\n .attr('class', 'line-subpath')\n .attr('d', wPath)\n .style('stroke', def.fillColor ?? '')\n .style('fill', 'none')\n .style('stroke-width', `${0.375 * (def.lineWidth ?? 0)}px`)\n .attr('stroke-linejoin', 'round')\n .style('stroke-linecap', 'round');\n }\n\n protected _updateElement(link: DrawingSelection, definition: DiagramElement): void {\n const def = definition as LinkDefinition;\n const wPath = generateWayPointPath(def.waypoint);\n const inner = link.select('.innerElement');\n\n inner\n .select('.line-path')\n .attr(\n 'marker-end',\n `url(#${this._markers.getMarker(def.id as string, def.lineColor, def.fillColor)})`\n )\n .attr('d', wPath)\n .style('stroke', def.lineColor ?? '')\n .style('stroke-width', `${def.lineWidth ?? 0}px`);\n\n inner\n .select('.line-subpath')\n .attr('d', wPath)\n .style('stroke', def.fillColor ?? '')\n .style('stroke-width', `${0.375 * (def.lineWidth ?? 0)}px`);\n }\n\n /** Links render behind nodes: insert before the node group when present. */\n protected override _drawContainer(): void {\n if (this._elementsContainer) {\n this._elementsContainer.remove();\n }\n this._elementsContainer = this._canvas\n .getDrawingLayer()\n .insert('g', '.node-group')\n .attr('class', `${this._className}-group`);\n }\n}\n","import type { Selection } from 'd3-selection';\nimport type { DefsSelection } from './Defs';\n\ntype MarkerSelection = Selection<SVGMarkerElement, unknown, null, undefined>;\n\n/**\n * Manages reusable arrowhead `<marker>` definitions for links.\n *\n * (The original kept the marker map in a module-level variable — shared across\n * instances; here it is per-instance, closing that class of bug.)\n */\nexport class Markers {\n static readonly $inject = ['defs'];\n\n private readonly _defs: DefsSelection;\n private readonly _markers = new Map<string, MarkerSelection>();\n\n constructor(defs: DefsSelection) {\n this._defs = defs;\n }\n\n /** Ensure a marker for `linkId` exists/updated; return its id for `url(#…)`. */\n getMarker(linkId: string, strokeColor?: string, fillColor?: string): string {\n if (!this._markers.has(linkId)) {\n this._createMarker(linkId, strokeColor, fillColor);\n } else {\n this._updateMarker(linkId, strokeColor, fillColor);\n }\n return `${linkId}_markerEnd`;\n }\n\n private _createMarker(linkId: string, strokeColor?: string, fillColor?: string): void {\n const marker = this._defs\n .append('marker')\n .attr('stroke', strokeColor ?? '')\n .attr('id', `${linkId}_markerEnd`)\n .attr('fill', fillColor ?? '')\n .attr('viewBox', '-4 -8 15 15')\n .attr('refX', 5)\n .attr('refY', 0)\n .attr('markerWidth', 4)\n .attr('markerHeight', 4)\n .attr('orient', 'auto')\n .style('stroke-width', 4 * 0.375);\n\n marker.append('path').attr('d', 'M0,-5L8.67,0L0,5Z');\n\n this._markers.set(linkId, marker);\n }\n\n private _updateMarker(linkId: string, strokeColor?: string, fillColor?: string): void {\n this._markers\n .get(linkId)!\n .attr('stroke', strokeColor ?? '')\n .attr('fill', fillColor ?? '')\n .attr('markerWidth', 4)\n .attr('markerHeight', 4);\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport type { Canvas, ElementBuilder, ElementRegistry } from '@d3-polytree/canvas';\nimport { BaseElement } from './BaseElement';\nimport type { DrawingRegistry } from './DrawingRegistry';\nimport type { DiagramElement, DrawingSelection } from './types';\nimport type { NodeDefinition } from './definitions';\nimport type { IconLoader } from './IconLoader';\n\n/** Draws nodes as an icon (`<use>` of a symbol) at the node position. */\nexport class Nodes extends BaseElement {\n static readonly $inject = [\n 'd3polytree.definitions.node',\n 'canvas',\n 'eventBus',\n 'iconLoader',\n 'elementBuilder',\n 'elementRegistry',\n 'drawingRegistry'\n ];\n\n private readonly _iconLoader: IconLoader;\n\n constructor(\n nodes: NodeDefinition[] | undefined,\n canvas: Canvas,\n eventBus: EventEmitter,\n iconLoader: IconLoader,\n elementBuilder: ElementBuilder,\n elementRegistry: ElementRegistry,\n drawingRegistry: DrawingRegistry\n ) {\n // Defer processing until `_iconLoader` is set (see Links for the rationale).\n super('node', undefined, canvas, eventBus, elementBuilder, elementRegistry, drawingRegistry);\n this._iconLoader = iconLoader;\n this._init(nodes);\n }\n\n protected _createElement(node: DrawingSelection, definition: DiagramElement): void {\n const def = definition as NodeDefinition;\n const type = def.type ?? 'default';\n const { x, y } = def.position;\n\n node.attr('x', x).attr('y', y).attr('transform', `translate(${x},${y})`);\n\n node\n .select('.innerElement')\n .append('svg')\n .attr('width', def.size ?? 0)\n .attr('height', def.size ?? 0)\n .attr('viewBox', this._iconLoader.getViewBox(type))\n .attr('preserveAspectRatio', 'xMaxYMax meet')\n .append('use')\n .attr('href', this._iconLoader.symbolHref(type));\n }\n\n protected _updateElement(node: DrawingSelection, definition: DiagramElement): void {\n const def = definition as NodeDefinition;\n const type = def.type ?? 'default';\n const { x, y } = def.position;\n\n node.attr('x', x).attr('y', y).attr('transform', `translate(${x},${y})`);\n\n node\n .select('.innerElement')\n .select('svg')\n .attr('width', def.size ?? 0)\n .attr('height', def.size ?? 0)\n .attr('viewBox', this._iconLoader.getViewBox(type))\n .select('use')\n .attr('href', this._iconLoader.symbolHref(type));\n }\n\n /** Nodes render above links but below labels: insert before the label group. */\n protected override _drawContainer(): void {\n if (this._elementsContainer) {\n this._elementsContainer.remove();\n }\n this._elementsContainer = this._canvas\n .getDrawingLayer()\n .insert('g', '.label-group')\n .attr('class', `${this._className}-group`);\n }\n}\n","/** The fallback icon rendered for nodes with no matching icon type. */\nexport const DEFAULT_ICON =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\">' +\n '<rect rx=\"8\" ry=\"8\" width=\"100\" height=\"100\" fill=\"#888\"/></svg>';\n\n/** Icon registry: a map of icon type → SVG source string. */\nexport type IconMap = Record<string, string>;\n\n/** Create the default icon registry. Icon packs extend/override this map. */\nexport function createIcons(): IconMap {\n return { default: DEFAULT_ICON };\n}\ncreateIcons.$inject = [] as string[];\n","import type { DefsSelection } from './Defs';\nimport { DEFAULT_ICON, type IconMap } from './Icons';\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst XLINK_NS = 'http://www.w3.org/1999/xlink';\nconst REF_ATTRS = [\n 'clip-path',\n 'fill',\n 'stroke',\n 'mask',\n 'filter',\n 'marker-start',\n 'marker-mid',\n 'marker-end'\n];\n\n/** Prefix every id in `root` with `key_` and rewrite local `#id` references. */\nfunction namespaceIds(root: Element, key: string): void {\n const idMap = new Map<string, string>();\n root.querySelectorAll('[id]').forEach((el) => {\n const oldId = el.getAttribute('id') as string;\n const newId = `${key}_${oldId}`;\n idMap.set(oldId, newId);\n el.setAttribute('id', newId);\n });\n if (idMap.size === 0) {\n return;\n }\n const rewrite = (value: string): string =>\n value.replace(/#([^\\s)'\"]+)/g, (match, id: string) =>\n idMap.has(id) ? `#${idMap.get(id)}` : match\n );\n\n root.querySelectorAll('*').forEach((el) => {\n const xlink = el.getAttributeNS(XLINK_NS, 'href');\n if (xlink && xlink.includes('#')) {\n el.setAttributeNS(XLINK_NS, 'href', rewrite(xlink));\n }\n const href = el.getAttribute('href');\n if (href && href.includes('#')) {\n el.setAttribute('href', rewrite(href));\n }\n REF_ATTRS.forEach((attr) => {\n const value = el.getAttribute(attr);\n if (value && value.includes('#')) {\n el.setAttribute(attr, rewrite(value));\n }\n });\n });\n}\n\n/**\n * Parses icon SVG sources into reusable `<symbol>` definitions in the shared\n * `<defs>` element. Uses the native DOMParser (the original used a bundled\n * Node XML parser, `xml2js` — dropped here).\n */\nexport class IconLoader {\n static readonly $inject = ['icons', 'defs'];\n\n private readonly _defs: DefsSelection;\n private readonly _icons: IconMap;\n private readonly _viewBoxes: Record<string, string> = {};\n\n constructor(icons: IconMap, defs: DefsSelection) {\n this._icons = { ...icons };\n this._defs = defs;\n this._init();\n }\n\n private _init(): void {\n if (!this._icons.default) {\n this._icons.default = DEFAULT_ICON;\n }\n const defsNode = this._defs.node();\n if (!defsNode) {\n return;\n }\n Object.entries(this._icons).forEach(([key, source]) => {\n const doc = new DOMParser().parseFromString(source, 'image/svg+xml');\n const svg = doc.documentElement;\n if (!svg || svg.nodeName.toLowerCase() !== 'svg') {\n return; // malformed icon source\n }\n const viewBox = svg.getAttribute('viewBox') ?? '';\n const symbol = document.createElementNS(SVG_NS, 'symbol');\n symbol.setAttribute('id', `${key}_icon_def`);\n if (viewBox) {\n symbol.setAttribute('viewBox', viewBox);\n }\n Array.from(svg.childNodes).forEach((child) =>\n symbol.appendChild(document.importNode(child, true))\n );\n namespaceIds(symbol, key);\n defsNode.appendChild(symbol);\n this._viewBoxes[key] = viewBox;\n });\n }\n\n hasIcon(type: string): boolean {\n return Object.prototype.hasOwnProperty.call(this._viewBoxes, type);\n }\n\n /** viewBox for `type`, falling back to the default icon's. */\n getViewBox(type: string): string {\n return this._viewBoxes[type] ?? this._viewBoxes.default ?? '';\n }\n\n /** `#…_icon_def` reference for a `<use>`, falling back to the default. */\n symbolHref(type: string): string {\n return `#${this.hasIcon(type) ? type : 'default'}_icon_def`;\n }\n}\n","import type { Selection } from 'd3-selection';\nimport type { Canvas } from '@d3-polytree/canvas';\n\n/** The shared `<defs>` element selection. */\nexport type DefsSelection = Selection<SVGDefsElement, unknown, null, undefined>;\n\n/** Create (and return) a `<defs>` element on the canvas SVG. */\nexport function createDefs(canvas: Canvas): DefsSelection {\n return canvas.getSVG().append('defs');\n}\ncreateDefs.$inject = ['canvas'];\n","import { DrawingRegistry } from './DrawingRegistry';\nimport { Labels } from './Labels';\nimport { Zones } from './Zones';\nimport { Links } from './Links';\nimport { Markers } from './Markers';\nimport { Nodes } from './Nodes';\nimport { IconLoader } from './IconLoader';\nimport { createDefs } from './Defs';\nimport { createIcons } from './Icons';\n\nexport { BaseElement } from './BaseElement';\nexport { DrawingRegistry } from './DrawingRegistry';\nexport { Labels } from './Labels';\nexport { Zones } from './Zones';\nexport { Links } from './Links';\nexport { Markers } from './Markers';\nexport { Nodes } from './Nodes';\nexport { IconLoader } from './IconLoader';\nexport { createDefs } from './Defs';\nexport { createIcons, DEFAULT_ICON } from './Icons';\nexport type { IconMap } from './Icons';\nexport type { DefsSelection } from './Defs';\nexport type { ContainerSelection, DiagramElement, DrawingSelection } from './types';\nexport type {\n LabelDefinition,\n LinkDefinition,\n NodeDefinition,\n Point,\n ZoneBorder,\n ZoneDefinition\n} from './definitions';\n\n/** didi module contributing the drawing registry service. */\nexport const drawingRegistryModule = {\n __init__: ['drawingRegistry'],\n drawingRegistry: ['type', DrawingRegistry]\n};\n\n/** didi module contributing the shared `<defs>` element. */\nexport const defsModule = {\n __init__: ['defs'],\n defs: ['factory', createDefs]\n};\n\n/** didi module contributing the icon registry. */\nexport const iconsModule = {\n icons: ['factory', createIcons]\n};\n\n/** didi module contributing the icon loader (parses icons into `<symbol>`s). */\nexport const iconLoaderModule = {\n __init__: ['iconLoader'],\n iconLoader: ['type', IconLoader],\n __depends__: [iconsModule, defsModule]\n};\n\n/** didi module contributing the label drawer. */\nexport const labelsModule = {\n __init__: ['labels'],\n labels: ['type', Labels],\n __depends__: [drawingRegistryModule]\n};\n\n/** didi module contributing the zone drawer. */\nexport const zonesModule = {\n __init__: ['zones'],\n zones: ['type', Zones],\n __depends__: [drawingRegistryModule, labelsModule]\n};\n\n/** didi module contributing arrowhead markers. */\nexport const markersModule = {\n __init__: ['markers'],\n markers: ['type', Markers],\n __depends__: [defsModule]\n};\n\n/** didi module contributing the link drawer. */\nexport const linksModule = {\n __init__: ['links'],\n links: ['type', Links],\n __depends__: [drawingRegistryModule, markersModule]\n};\n\n/** didi module contributing the node drawer. */\nexport const nodesModule = {\n __init__: ['nodes'],\n nodes: ['type', Nodes],\n __depends__: [drawingRegistryModule, iconLoaderModule, labelsModule, zonesModule]\n};\n","/**\n * Fail-safe array helpers (ported from diagram-js's Collections util) used by\n * the modelling layer to maintain definition collections.\n */\n\n/** Remove `element` from `collection`; returns its previous index (or -1). */\nexport function remove<T>(collection: T[] | undefined, element: T | undefined): number {\n if (!collection || !element) {\n return -1;\n }\n const idx = collection.indexOf(element);\n if (idx !== -1) {\n collection.splice(idx, 1);\n }\n return idx;\n}\n\n/** Add `element` to `collection` (at `idx`, or the end), avoiding duplicates. */\nexport function add<T>(collection: T[] | undefined, element: T | undefined, idx = -1): void {\n if (!collection || !element) {\n return;\n }\n const currentIdx = collection.indexOf(element);\n if (currentIdx !== -1) {\n if (currentIdx === idx) {\n return;\n }\n if (idx !== -1) {\n collection.splice(currentIdx, 1);\n } else {\n return; // already present\n }\n }\n if (idx !== -1) {\n collection.splice(idx, 0, element);\n } else {\n collection.push(element);\n }\n}\n\n/** Index of `element` in `collection`, or -1 (fail-safe on missing args). */\nexport function indexOf<T>(collection: T[] | undefined, element: T | undefined): number {\n if (!collection || !element) {\n return -1;\n }\n return collection.indexOf(element);\n}\n","/** An object carrying a moddle descriptor (as model elements do). */\nexport interface Descriptored {\n $descriptor: { ns: { localName: string } };\n}\n\n/** The lower-cased local name of a model element's descriptor (e.g. `node`). */\nexport function getLocalName(element: Descriptored): string {\n return element.$descriptor.ns.localName.toLowerCase();\n}\n","import type EventEmitter from 'eventemitter3';\nimport { getLocalName } from '../utils/localName';\nimport type { DrawingSelection } from '../draw';\nimport type { ModellingModelElement } from '../modelling/types';\n\n/** DOM mouse events re-broadcast on the bus for each drawn element. */\nconst MOUSE_EVENTS = [\n 'mouseenter',\n 'mouseover',\n 'mousedown',\n 'mouseup',\n 'click',\n 'dblclick',\n 'mouseleave',\n 'mouseout',\n 'contextmenu'\n] as const;\n\n/**\n * Bridges raw DOM mouse events on drawn elements to typed bus events.\n *\n * For every created element it attaches listeners that re-emit as\n * `<localName>.<kind>` (e.g. `node.click`), carrying the element selection, its\n * definition, and the original DOM event. Ported from `core-v2beta`'s\n * `features/mouseEvents/MouseEvents.js` (updated to d3's event-argument\n * listener signature instead of the removed `d3.event` global).\n */\nexport class MouseEvents {\n static readonly $inject = ['eventBus'];\n\n private readonly _eventBus: EventEmitter;\n\n constructor(eventBus: EventEmitter) {\n this._eventBus = eventBus;\n this._init();\n }\n\n private _addListeners(\n element: DrawingSelection,\n definition: ModellingModelElement,\n className?: string\n ): void {\n const type = className ?? getLocalName(definition);\n MOUSE_EVENTS.forEach((kind) => {\n element.on(kind, (event: Event) => {\n this._eventBus.emit(`${type}.${kind}`, element, definition, event);\n });\n });\n }\n\n private _init(): void {\n (['label', 'link', 'node', 'zone'] as const).forEach((cls) => {\n this._eventBus.on(`${cls}.created`, this._addListeners, this);\n });\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport { getLocalName } from '../utils/localName';\nimport type { DrawingSelection } from '../draw';\nimport type { ModellingModelElement } from '../modelling/types';\n\n/** A currently-selected element: its drawing and its model definition. */\nexport interface SelectionEntry {\n element: DrawingSelection;\n definition: ModellingModelElement;\n}\n\n/**\n * Tracks the set of selected elements and emits `selection.changed`.\n *\n * Listens for `<class>.click` (from {@link MouseEvents}) to select, and\n * `background.click` to clear. `deleteSelected` clears the selection and emits\n * `<localName>.deleted` for each, which the modelling orchestrator turns into a\n * model delete. Ported from `core-v2beta`'s `features/selection/Selection.js`\n * (object map → typed `Map`).\n */\nexport class Selection {\n static readonly $inject = ['eventBus'];\n\n private readonly _eventBus: EventEmitter;\n private readonly _currentSelection = new Map<string, SelectionEntry>();\n\n constructor(eventBus: EventEmitter) {\n this._eventBus = eventBus;\n this._init();\n }\n\n private _snapshot(): SelectionEntry[] {\n return [...this._currentSelection.values()];\n }\n\n private _unSelectElement(\n element: DrawingSelection,\n definition: ModellingModelElement,\n emitChange?: boolean\n ): void {\n const prevSelection = this._snapshot();\n this._currentSelection.delete(definition.id as string);\n element.classed('selected', false);\n if (emitChange) {\n this._eventBus.emit('selection.changed', prevSelection, this._snapshot());\n }\n }\n\n private _selectElement(\n element: DrawingSelection,\n definition: ModellingModelElement,\n event?: { ctrlKey?: boolean }\n ): void {\n if (!event || !event.ctrlKey) {\n // replace the selection with the clicked element\n this._unSelectAllElements(true);\n }\n element.classed('selected', true);\n const prevSelection = this._snapshot();\n this._currentSelection.set(definition.id as string, { element, definition });\n this._eventBus.emit('selection.changed', prevSelection, this._snapshot());\n }\n\n private _unSelectAllElements(cancelEmitChange?: boolean): void {\n this._snapshot().forEach((v) => {\n this._unSelectElement(v.element, v.definition, !cancelEmitChange);\n });\n }\n\n deleteSelected(): void {\n this._snapshot().forEach((v) => {\n this._unSelectElement(v.element, v.definition);\n this._eventBus.emit(`${getLocalName(v.definition)}.deleted`, v.element, v.definition);\n });\n }\n\n getSelectedElements(): SelectionEntry[] {\n return this._snapshot();\n }\n\n /** Public entry point to select an element (used by the drag feature). */\n select(\n element: DrawingSelection,\n definition: ModellingModelElement,\n event?: { ctrlKey?: boolean }\n ): void {\n this._selectElement(element, definition, event);\n }\n\n private _init(): void {\n (['label', 'link', 'node', 'zone'] as const).forEach((cls) => {\n this._eventBus.on(`${cls}.click`, this._selectElement, this);\n });\n this._eventBus.on('background.click', this._unSelectAllElements, this);\n }\n}\n","import { select } from 'd3-selection';\nimport { zoom as d3zoom, zoomIdentity, type D3ZoomEvent, type ZoomBehavior } from 'd3-zoom';\n// side-effect import: augments d3-selection with `.transition()`\nimport 'd3-transition';\nimport type EventEmitter from 'eventemitter3';\nimport type { Canvas } from '@d3-polytree/canvas';\nimport { getLocalName } from '../utils/localName';\nimport type { CalculateCenter } from '../utils/calculateCenter';\nimport type { Point } from '../draw';\nimport type { ModellingModelElement } from '../modelling/types';\n\n/** Zoom limits: min/max scale. */\nconst SCALE_EXTENT: [number, number] = [0.1, 15];\n/** Scale applied when zooming to a specific element. */\nconst ZOOM_TO_SCALE = 1.2;\n/** Duration (ms) of the animated zoom-to-element. */\nconst ZOOM_TO_DURATION = 1800;\n\n/** The `pfdn:Zoom` settings element: an offset point and a scale. */\ninterface ZoomModel extends ModellingModelElement {\n scale?: number;\n offset?: Point;\n}\n\n/**\n * Pan/zoom behaviour on the canvas drawing layer.\n *\n * Wraps `d3-zoom`, persists the transform back to the model's `settings.zoom`,\n * emits `background.click` for empty-space clicks, and animates a\n * `zoom.to.element` request. Ported from `core-v2beta`'s `features/zoom/Zoom.js`\n * — moved off the removed `d3.event` global and the module-level zoom singleton\n * onto d3's event-argument listeners and a per-instance behaviour.\n */\nexport class Zoom {\n static readonly $inject = [\n 'd3polytree.definitions.settings.zoom',\n 'canvas',\n 'eventBus',\n 'calculateCenter'\n ];\n\n private readonly _canvas: Canvas;\n private readonly _eventBus: EventEmitter;\n private readonly _options: ZoomModel;\n private readonly _calculateCenter: CalculateCenter;\n private _isZoomable = false;\n private _zoom!: ZoomBehavior<SVGGElement, unknown>;\n\n constructor(\n options: ZoomModel,\n canvas: Canvas,\n eventBus: EventEmitter,\n calculateCenter: CalculateCenter\n ) {\n this._canvas = canvas;\n this._eventBus = eventBus;\n this._options = options;\n this._calculateCenter = calculateCenter;\n\n const offset = options.get('offset') as ModellingModelElement;\n const tX = offset.get('x') as number;\n const tY = offset.get('y') as number;\n const s = options.get('scale') as number;\n\n this._init();\n\n this.setZoomable(true);\n this.setInitialZoom(tX, tY, s);\n this.setZoomable(false);\n }\n\n setZoom(translateX?: number, translateY?: number, scale?: number): void {\n this._eventBus.emit('zoom.preZoom', translateX, translateY, scale);\n\n if (this._isZoomable) {\n // Only read the current transform to fill in any omitted argument; the\n // interactive and programmatic paths supply all three.\n const needsCurrent = translateX === undefined || translateY === undefined || scale === undefined;\n const current = needsCurrent ? this._canvas.getTransform() : null;\n const tx = translateX ?? current!.e;\n const ty = translateY ?? current!.f;\n const s = scale ?? current!.a;\n\n this._canvas.getDrawingLayer().attr('transform', `translate(${tx}, ${ty}) scale(${s})`);\n\n // persist the transform back onto the model\n this._options.scale = s;\n if (this._options.offset) {\n this._options.offset.x = tx;\n this._options.offset.y = ty;\n }\n\n this._eventBus.emit('canvas.zoomed');\n }\n }\n\n setZoomable(isZoomable: boolean): void {\n this._isZoomable = isZoomable;\n }\n\n /** Whether interactive zoom is currently enabled. */\n isZoomable(): boolean {\n return this._isZoomable;\n }\n\n setInitialZoom(tX: number, tY: number, s: number, duration?: number): void {\n const drawingLayer = this._canvas.getDrawingLayer();\n const parent = drawingLayer.node()!.parentNode as SVGGElement;\n const selection = select<SVGGElement, unknown>(parent);\n const transform = zoomIdentity.translate(tX, tY).scale(s);\n if (duration) {\n selection.transition().duration(duration).call(this._zoom.transform, transform);\n } else {\n selection.call(this._zoom.transform, transform);\n }\n }\n\n private _init(): void {\n let drawingLayer = this._canvas.getDrawingLayer();\n\n this._zoom = d3zoom<SVGGElement, unknown>()\n .scaleExtent(SCALE_EXTENT)\n // Derive the viewport extent explicitly from the canvas size instead of\n // letting d3-zoom read SVG layout (`width.baseVal`), which keeps the\n // behaviour correct headlessly as well as in the browser.\n .extent((): [[number, number], [number, number]] => {\n const { width, height } = this._canvas.getSize();\n return [\n [0, 0],\n [width, height]\n ];\n })\n .on('start', () => this._eventBus.emit('zoom.start'))\n .on('zoom', (event: D3ZoomEvent<SVGGElement, unknown>) => {\n if (!this._isZoomable) {\n return;\n }\n const { x, y, k } = event.transform;\n this.setZoom(x, y, k);\n })\n .on('end', () => this._eventBus.emit('zoom.end'));\n\n drawingLayer.on('click', (event: Event) => {\n const isOutline = select(event.target as Element).classed('element-outline');\n if (!isOutline) {\n this._eventBus.emit('background.click');\n }\n });\n\n drawingLayer = drawingLayer.call(this._zoom).append('g');\n this._canvas.setDrawingLayer(drawingLayer);\n\n this._eventBus.on('zoom.to.element', (_element: unknown, definition: ModellingModelElement) => {\n const wasZoomable = this._isZoomable;\n const localName = getLocalName(definition);\n const center = this._calculateCenter.getCenterPosition();\n const centralPoint: Point = { x: 0, y: 0 };\n\n this.setZoomable(true);\n if (localName === 'node') {\n const position = definition.position as Point;\n const size = (definition.size as number) ?? 0;\n centralPoint.x = 1.5 + position.x + size / 2;\n centralPoint.y = 1.5 + position.y + size / 2;\n } else if (localName === 'link') {\n const waypoint = definition.waypoint as Point[];\n const last = waypoint.length - 1;\n if (last >= 0) {\n centralPoint.x = waypoint[last].x;\n centralPoint.y = waypoint[last].y;\n }\n }\n this.setInitialZoom(\n center.x - centralPoint.x * ZOOM_TO_SCALE,\n center.y - centralPoint.y * ZOOM_TO_SCALE,\n ZOOM_TO_SCALE,\n ZOOM_TO_DURATION\n );\n this.setZoomable(wasZoomable);\n });\n\n this._eventBus.emit('zoom.init');\n }\n}\n","import type { Zoom } from './zoom';\n\n/**\n * Enables interactive (scroll/drag) zooming by marking the {@link Zoom}\n * behaviour zoomable. Ported from `core-v2beta`'s\n * `features/zoomScroll/ZoomScroll.js`.\n */\nexport class ZoomScroll {\n static readonly $inject = ['zoom'];\n\n constructor(zoom: Zoom) {\n zoom.setZoomable(true);\n }\n}\n","import type { Selection } from 'd3-selection';\nimport type EventEmitter from 'eventemitter3';\nimport type { Canvas } from '@d3-polytree/canvas';\nimport type { ModellingModelElement } from '../modelling/types';\n\n/** The `pfdn:Settings` element carrying the diagram background colour. */\ninterface SettingsModel extends ModellingModelElement {\n backgroundColor?: string;\n}\n\n/**\n * Paints the canvas background from `settings.backgroundColor`.\n *\n * Inserts a full-size `<rect>` behind everything on the root layer and keeps it\n * in sync with the model. Ported from `core-v2beta`'s\n * `features/backgroundColor/BackgroundColor.js`.\n */\nexport class BackgroundColor {\n static readonly $inject = ['canvas', 'd3polytree.definitions.settings', 'eventBus'];\n\n private readonly _canvas: Canvas;\n private readonly _settings: SettingsModel;\n private readonly _eventBus: EventEmitter;\n private _bgRect: Selection<SVGRectElement, unknown, null, undefined> | null = null;\n\n constructor(canvas: Canvas, settings: SettingsModel, eventBus: EventEmitter) {\n this._canvas = canvas;\n this._settings = settings;\n this._eventBus = eventBus;\n this._init();\n }\n\n setColor(color: string): void {\n if (this._bgRect) {\n this._settings.backgroundColor = color;\n this._refill();\n }\n }\n\n private _refill(): void {\n this._bgRect?.attr('fill', this._settings.backgroundColor ?? '');\n }\n\n private _init(): void {\n this._bgRect = this._canvas\n .getRootLayer()\n .insert('rect', ':first-child')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('fill', this._settings.backgroundColor ?? '');\n\n // re-apply the fill on resize (the source stubbed this out; enabling it is\n // harmless — the rect is sized in percentages — and keeps the hook honest)\n this._eventBus.on('canvas.resized', () => this._refill());\n }\n}\n","import { scaleLinear, type ScaleLinear } from 'd3-scale';\nimport { axisBottom, axisRight, type Axis } from 'd3-axis';\nimport { zoomIdentity } from 'd3-zoom';\nimport type { Selection } from 'd3-selection';\nimport type EventEmitter from 'eventemitter3';\nimport type { Canvas } from '@d3-polytree/canvas';\nimport type { ModellingModelElement } from '../modelling/types';\nimport type { Zoom } from './zoom';\n\n/** The `pfdn:Grid` settings element. */\ninterface GridModel extends ModellingModelElement {\n show?: boolean;\n size?: number;\n lineColor?: string;\n lineWidth?: number;\n}\n\ntype LinearScale = ScaleLinear<number, number>;\ntype NumberAxis = Axis<number>;\ntype GSelection = Selection<SVGGElement, unknown, null, undefined>;\n\n/**\n * Draws the background grid (two crossed axes) and keeps it aligned with the\n * canvas zoom transform. Hidden during interactive zoom, redrawn on zoom end.\n *\n * Ported from `core-v2beta`'s `features/axes/Axes.js` — the module-level scale/\n * axis singletons (a latent cross-instance bug) become instance fields, and the\n * d3 sub-modules are imported slim (`d3-scale`, `d3-axis`, `d3-zoom`).\n */\nexport class Axes {\n static readonly $inject = ['d3polytree.definitions.settings.grid', 'canvas', 'eventBus', 'zoom'];\n\n private readonly _options: GridModel;\n private readonly _canvas: Canvas;\n private readonly _eventBus: EventEmitter;\n private readonly _zoom: Zoom;\n private _isVisible: boolean;\n\n private _svg: GSelection | null = null;\n private _x: LinearScale | null = null;\n private _y: LinearScale | null = null;\n private _xAxis: NumberAxis | null = null;\n private _yAxis: NumberAxis | null = null;\n private _gX: GSelection | null = null;\n private _gY: GSelection | null = null;\n\n constructor(options: GridModel, canvas: Canvas, eventBus: EventEmitter, zoom: Zoom) {\n this._options = options;\n this._isVisible = options.show ?? true;\n this._canvas = canvas;\n this._eventBus = eventBus;\n this._zoom = zoom;\n this._init();\n }\n\n setVisible(visible: boolean): void {\n if (this._svg) {\n this._isVisible = visible;\n this._svg.style('display', visible ? 'inline' : 'none');\n }\n }\n\n toggleVisible(): void {\n if (this._svg) {\n this.setVisible(!this._isVisible);\n }\n }\n\n private _init(): void {\n let wasVisible = false;\n\n this._eventBus.on('zoom.start', () => {\n if (this._zoom && !this._zoom.isZoomable()) {\n return;\n }\n wasVisible = this._isVisible;\n this.setVisible(false);\n });\n this._eventBus.on('zoom.end', () => {\n if (wasVisible) {\n this.setVisible(true);\n this._rescale();\n }\n });\n\n this._draw();\n this._rescale();\n this.setVisible(this._options.show ?? true);\n }\n\n private _rescale(): void {\n if (!this._x || !this._y || !this._xAxis || !this._yAxis || !this._gX || !this._gY) {\n return;\n }\n const { width, height } = this._canvas.getSize();\n const transform = this._canvas.getTransform();\n const scale = transform.a;\n const size = this._options.size ?? 1;\n const zoomTransform = zoomIdentity.translate(transform.e, transform.f).scale(scale);\n\n this._x.domain([-1, width - 1]).range([-1, width - 1]);\n this._y.domain([-1, height - 1]).range([-1, height - 1]);\n\n this._gX.call(\n this._xAxis\n .scale(zoomTransform.rescaleX(this._x))\n .ticks(width / scale / size)\n .tickSize(height)\n );\n this._gY.call(\n this._yAxis\n .scale(zoomTransform.rescaleY(this._y))\n .ticks(height / scale / size)\n .tickSize(width)\n );\n\n for (const g of [this._gX, this._gY]) {\n g.selectAll<SVGElement, unknown>('line, path')\n .style('stroke-width', String(this._options.lineWidth ?? 1))\n .style('stroke', this._options.lineColor ?? '')\n .style('stroke-dasharray', '2');\n }\n }\n\n private _draw(): void {\n if (this._svg) {\n this._svg.remove();\n }\n\n this._svg = this._canvas\n .getRootLayer()\n .insert('g', ':first-child') // send to the background\n .attr('class', 'axis');\n\n const { width, height } = this._canvas.getSize();\n\n this._x = scaleLinear().domain([-1, width - 1]).range([-1, width - 1]);\n this._y = scaleLinear().domain([-1, height - 1]).range([-1, height - 1]);\n\n this._xAxis = axisBottom<number>(this._x)\n .tickFormat(() => '')\n .tickSize(height);\n this._yAxis = axisRight<number>(this._y)\n .tickFormat(() => '')\n .tickSize(width);\n\n this._gX = this._svg.append('g').call(this._xAxis);\n this._gY = this._svg.append('g').call(this._yAxis);\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport { getLocalName } from '../utils/localName';\nimport type { DrawingSelection } from '../draw';\nimport type { Point } from '../draw';\nimport type { ModellingModelElement } from '../modelling/types';\n\n/** The bounding box an outline rect is sized from. */\ninterface OutlineBox {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/** Padding added around a computed box to form the outline rect. */\nconst OUTLINE_PADDING = 6;\n\n/**\n * Adds a dashed selection outline (`.element-outline` rect) to every drawn\n * element and keeps it sized to the element. Emits `outline.created` /\n * `outline.updated` (consumed by the drag feature). Ported from\n * `core-v2beta`'s `features/outline/Outline.js`.\n */\nexport class Outline {\n static readonly $inject = ['eventBus'];\n\n private readonly _eventBus: EventEmitter;\n\n constructor(eventBus: EventEmitter) {\n this._eventBus = eventBus;\n this._init();\n }\n\n private _computeBox(element: DrawingSelection, definition: ModellingModelElement): OutlineBox {\n const type = getLocalName(definition);\n if (type === 'link') {\n const waypoint = (definition.waypoint as Point[] | undefined) ?? [];\n if (waypoint.length > 0) {\n const p1 = waypoint[0];\n const p2 = waypoint[waypoint.length - 1];\n return {\n x: Math.min(p1.x, p2.x),\n y: Math.min(p1.y, p2.y),\n width: Math.abs(p2.x - p1.x),\n height: Math.abs(p2.y - p1.y)\n };\n }\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n if (type === 'node') {\n const size = Number(definition.size ?? 0);\n return { x: 0, y: 0, width: size, height: size };\n }\n // labels / zones: measure the rendered inner element. `getBBox` is not\n // implemented in every environment (jsdom); fall back to a zero box.\n const inner = element.select<SVGGElement>('.innerElement').node();\n const bbox =\n inner && typeof inner.getBBox === 'function'\n ? inner.getBBox()\n : { width: 0, height: 0 };\n return { x: 0, y: 0, width: bbox.width, height: bbox.height };\n }\n\n private _createOutline(element: DrawingSelection, definition: ModellingModelElement): void {\n const box = this._computeBox(element, definition);\n const outline = element\n .insert('rect', ':first-child')\n .attr('class', 'element-outline')\n .attr('x', box.x)\n .attr('y', box.y)\n .attr('fill', 'none')\n .attr('stroke', 'red')\n .attr('stroke-width', 0)\n .attr('stroke-dasharray', '3')\n .attr('width', box.width + OUTLINE_PADDING)\n .attr('height', box.height + OUTLINE_PADDING);\n this._eventBus.emit('outline.created', element, definition, outline);\n }\n\n private _updateOutline(element: DrawingSelection, definition: ModellingModelElement): void {\n const box = this._computeBox(element, definition);\n const outline = element\n .select('.element-outline')\n .attr('x', box.x)\n .attr('y', box.y)\n .attr('width', box.width + OUTLINE_PADDING)\n .attr('height', box.height + OUTLINE_PADDING);\n this._eventBus.emit('outline.updated', element, definition, outline);\n }\n\n private _init(): void {\n (['node', 'label', 'zone', 'link'] as const).forEach((cls) => {\n this._eventBus.on(`${cls}.created`, this._createOutline, this);\n this._eventBus.on(`${cls}.updated`, this._updateOutline, this);\n });\n }\n}\n","import { drag as d3drag, type D3DragEvent } from 'd3-drag';\nimport type EventEmitter from 'eventemitter3';\nimport type { Canvas } from '@d3-polytree/canvas';\nimport { getLocalName } from '../utils/localName';\nimport type { DrawingRegistry, DrawingSelection, DiagramElement, Point } from '../draw';\nimport type { ModellingModelElement } from '../modelling/types';\nimport type { Selection } from './selection';\n\ntype DragEvent = D3DragEvent<SVGGElement, DiagramElement, DiagramElement>;\n\n/**\n * Dragging of outlined elements.\n *\n * Attaches `d3-drag` to each outlined (non-link) element; dragging moves the\n * whole selection (and each element's associated label), emitting `<class>.moving`\n * live and `<class>.moved` on release — the latter is what the modelling link\n * router re-routes on. Ported from `core-v2beta`'s `features/drag/Drag.js`,\n * moved off the removed `d3.event` global onto d3's event-argument listeners.\n *\n * The offset/commit steps are public so the drag can be driven programmatically\n * and unit-tested without synthesising pointer gestures.\n */\nexport class Drag {\n static readonly $inject = ['canvas', 'eventBus', 'drawingRegistry', 'selection'];\n\n private readonly _canvas: Canvas;\n private readonly _eventBus: EventEmitter;\n private readonly _drawingRegistry: DrawingRegistry;\n private readonly _selection: Selection;\n\n constructor(\n canvas: Canvas,\n eventBus: EventEmitter,\n drawingRegistry: DrawingRegistry,\n selection: Selection\n ) {\n this._canvas = canvas;\n this._eventBus = eventBus;\n this._drawingRegistry = drawingRegistry;\n this._selection = selection;\n this._init();\n }\n\n /** Move every selected non-link element (and its label) by (dx, dy). */\n applyOffsetToSelected(dx: number, dy: number): void {\n this._selection.getSelectedElements().forEach((v) => {\n if (getLocalName(v.definition) === 'link') {\n return;\n }\n this._applyOffset(v.element, v.definition, dx, dy);\n const label = v.definition.label as ModellingModelElement | undefined;\n if (label) {\n const labelElem = this._drawingRegistry.get(label.id as string);\n if (labelElem) {\n this._applyOffset(labelElem, label, dx, dy);\n }\n }\n });\n }\n\n /** Emit `<class>.moved` for every selected non-link element. */\n notifyMovedSelected(): void {\n this._selection.getSelectedElements().forEach((v) => {\n if (getLocalName(v.definition) !== 'link') {\n this._eventBus.emit(`${getLocalName(v.definition)}.moved`, v.element, v.definition);\n }\n });\n }\n\n private _applyOffset(\n elem: DrawingSelection,\n def: ModellingModelElement,\n dx: number,\n dy: number\n ): void {\n const x = Number(elem.attr('x')) + dx;\n const y = Number(elem.attr('y')) + dy;\n elem.attr('x', x).attr('y', y).attr('transform', `translate(${x},${y})`);\n\n const position = def.position as Point;\n position.x = x;\n position.y = y;\n\n if (def.get('status') !== 1) {\n def.set('status', 2);\n }\n this._eventBus.emit(`${getLocalName(def)}.moving`, elem, def);\n }\n\n private _setElemToDrag(element: DrawingSelection, definition: ModellingModelElement): void {\n element.call(\n d3drag<SVGGElement, DiagramElement>().on('start', (event: DragEvent) => {\n this._selection.select(element, definition, event.sourceEvent as { ctrlKey?: boolean });\n if (!this._canvas.getRootLayer().classed('no-drag')) {\n event\n .on('drag', (e: DragEvent) => this.applyOffsetToSelected(e.dx, e.dy))\n .on('end', () => this.notifyMovedSelected());\n }\n })\n );\n }\n\n private _init(): void {\n this._eventBus.on(\n 'outline.created',\n (element: DrawingSelection, definition: ModellingModelElement) => {\n if (getLocalName(definition) !== 'link') {\n this._setElemToDrag(element, definition);\n }\n }\n );\n }\n}\n","import type { Canvas } from '@d3-polytree/canvas';\n\n/** The `d3polytree` host surface the exporter needs (provided by the viewer). */\nexport interface ExportHost {\n exportDiagram(): string;\n exportSVG(): string;\n}\n\n/** Supported export formats. */\nexport type ExportFormat = 'pfdn' | 'svg' | 'png';\n\n/** UTF-8-safe base64 (replaces the source's `btoa(unescape(encodeURIComponent()))`). */\nfunction toBase64(data: string): string {\n const bytes = new TextEncoder().encode(data);\n let binary = '';\n bytes.forEach((b) => {\n binary += String.fromCharCode(b);\n });\n return btoa(binary);\n}\n\n/**\n * Exports the diagram as `.pfdn`, SVG or PNG via a hidden download anchor.\n *\n * Ported from `core-v2beta`'s `features/exporting/Exporting.js`, modernised off\n * `q`/`min-dom`/`lodash` onto native Promises and DOM. The model/SVG sources\n * come from the `d3polytree` host (the viewer).\n */\nexport class Exporting {\n static readonly $inject = ['canvas', 'd3polytree'];\n\n private readonly _canvas: Canvas;\n private readonly _host: ExportHost;\n private readonly _exporter: HTMLAnchorElement;\n\n constructor(canvas: Canvas, host: ExportHost) {\n this._canvas = canvas;\n this._host = host;\n this._exporter = this._createExporter();\n }\n\n async trigger(fileType: ExportFormat): Promise<void> {\n let exportStr: string;\n if (fileType === 'pfdn') {\n exportStr = this._encodeXml(this._host.exportDiagram());\n } else if (fileType === 'svg') {\n exportStr = this._encodeXml(this._host.exportSVG());\n } else if (fileType === 'png') {\n exportStr = await this._svgToImage(this._host.exportSVG());\n } else {\n console.error('Format not supported');\n return;\n }\n this._exporter.setAttribute('href', exportStr);\n this._exporter.setAttribute('download', `diagram.${fileType}`);\n this._exporter.click();\n }\n\n private _encodeXml(data: string): string {\n return `data:application/xml;base64,${toBase64(data)}`;\n }\n\n private _svgToImage(data: string): Promise<string> {\n return new Promise((resolve) => {\n const imgSrc = `data:image/svg+xml;base64,${toBase64(data)}`;\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n const host = this._canvas.getSVG().node()?.parentNode as HTMLElement | null;\n const width = host?.offsetWidth ?? 0;\n const height = host?.offsetHeight ?? 0;\n canvas.width = width;\n canvas.height = height;\n\n const image = new Image();\n image.onload = () => {\n context?.clearRect(0, 0, width, height);\n context?.drawImage(image, 0, 0, width, height);\n resolve(canvas.toDataURL('image/png'));\n };\n image.src = imgSrc;\n });\n }\n\n private _createExporter(): HTMLAnchorElement {\n const exporter = document.createElement('a');\n Object.assign(exporter.style, {\n width: '1px',\n height: '1px',\n display: 'none',\n overflow: 'hidden'\n });\n const container = this._canvas.getContainer();\n container.insertBefore(exporter, container.firstChild);\n return exporter;\n }\n}\n","import type { NotificationService } from './notifications';\n\n/** The `d3polytree` host surface local storage needs (provided by the viewer). */\nexport interface StorageHost {\n exportDiagram(): string;\n importDiagram(xml: string): Promise<void>;\n /** Fallback document used when nothing is stored (e.g. the editor's initial). */\n initialDiagram?: string;\n}\n\n/** Key the diagram is stored under. */\nconst STORAGE_KEY = 'diagram';\n\n/**\n * Persists the diagram to the browser's `localStorage`.\n *\n * Ported from `core-v2beta`'s `features/localStorage/LocalStorage.js`,\n * modernised off the `local-storage` package onto `window.localStorage`.\n *\n * The source auto-loaded on a `diagram.ready` event using a module-level guard;\n * because loading re-boots the engine (and would re-fire the event), that guard\n * had to be global. Here `loadSaved()` is an explicit operation instead — no\n * hidden global state, no re-boot loop.\n */\nexport class LocalStorage {\n static readonly $inject = ['d3polytree', 'notifications'];\n\n private readonly _host: StorageHost;\n private readonly _notifications: NotificationService;\n\n constructor(host: StorageHost, notifications: NotificationService) {\n this._host = host;\n this._notifications = notifications;\n }\n\n /** Read the stored (or fallback) document and import it. */\n loadSaved(): void {\n const stored = this._read() ?? this._host.initialDiagram;\n if (stored) {\n void this._host.importDiagram(stored);\n }\n }\n\n /** Serialize the current diagram and store it. */\n save(): void {\n this._write(this._host.exportDiagram());\n this._notifications.success({ title: 'Success', text: 'Diagram saved' });\n }\n\n private _read(): string | null {\n try {\n return window.localStorage.getItem(STORAGE_KEY);\n } catch {\n return null;\n }\n }\n\n private _write(xml: string): void {\n try {\n window.localStorage.setItem(STORAGE_KEY, xml);\n } catch {\n this._notifications.error({ title: 'Error', text: 'Could not save the diagram' });\n }\n }\n}\n","import type { Canvas } from '@d3-polytree/canvas';\n\n/** The `d3polytree` host surface upload needs (provided by the viewer). */\nexport interface UploadHost {\n importDiagram(xml: string): Promise<void>;\n}\n\n/**\n * Opens a `.pfdn` document from the user's disk via a hidden file input.\n *\n * Ported from `core-v2beta`'s `features/upload/Upload.js`, modernised off\n * `min-dom` / `lodash` onto native DOM and the `FileReader` API.\n */\nexport class Upload {\n static readonly $inject = ['canvas', 'd3polytree'];\n\n private readonly _host: UploadHost;\n private readonly _fileInput: HTMLInputElement;\n\n constructor(canvas: Canvas, host: UploadHost) {\n this._host = host;\n this._fileInput = this._createInput(canvas);\n }\n\n /** Prompt the user to choose a file. */\n openDialog(): void {\n this._fileInput.click();\n }\n\n private _createInput(canvas: Canvas): HTMLInputElement {\n const input = document.createElement('input');\n input.type = 'file';\n Object.assign(input.style, {\n width: '1px',\n height: '1px',\n display: 'none',\n overflow: 'hidden'\n });\n const container = canvas.getContainer();\n container.insertBefore(input, container.firstChild);\n\n input.addEventListener('change', (event) => {\n const file = (event.target as HTMLInputElement).files?.[0];\n void this._openFile(file);\n });\n return input;\n }\n\n private _openFile(file: File | undefined): void {\n if (typeof FileReader === 'undefined') {\n window.alert('Your browser does not support file upload. Try a modern browser.');\n return;\n }\n if (!file) {\n return;\n }\n const reader = new FileReader();\n reader.onload = (event) => {\n const xml = event.target?.result;\n if (typeof xml === 'string') {\n void this._host.importDiagram(xml);\n }\n };\n reader.readAsText(file);\n }\n}\n","import { drag as d3drag, type D3DragEvent } from 'd3-drag';\nimport { pointer, select, type Selection } from 'd3-selection';\nimport type EventEmitter from 'eventemitter3';\nimport type { Canvas } from '@d3-polytree/canvas';\nimport type { DrawingSelection, Point } from '../draw';\nimport type { ModellingModelElement } from '../modelling/types';\n\ntype OutlineSelection = Selection<SVGGraphicsElement, unknown, null, undefined>;\ntype ContainerSelection = Selection<SVGGElement, unknown, null, undefined>;\ntype CornerSelection = Selection<SVGRectElement, unknown, null, undefined>;\ntype CornerDragEvent = D3DragEvent<SVGRectElement, unknown, unknown>;\n\n/** Minimum node size when resizing. */\nconst MIN_SIZE = 16;\n/** Half a corner handle (5px) plus the outline offset. */\nconst HANDLE_OFFSET = 2.5 + 3;\n/** Outline padding around the node. */\nconst OUTLINE_PADDING = 6;\n\n/**\n * Adds drag handles to node outlines so nodes can be resized.\n *\n * Ported from `core-v2beta`'s `features/resizeElement/ResizeElement.js`, moved\n * off `d3.mouse`/`d3.event` onto d3's `pointer(event, node)` and event-argument\n * drag listeners. Emits `element.updated` on release (the modelling\n * orchestrator reconciles the drawing).\n */\nexport class ResizeElement {\n static readonly $inject = ['eventBus', 'canvas'];\n\n private readonly _eventBus: EventEmitter;\n private readonly _canvas: Canvas;\n\n constructor(eventBus: EventEmitter, canvas: Canvas) {\n this._eventBus = eventBus;\n this._canvas = canvas;\n this._init();\n }\n\n private _createCorners(\n element: DrawingSelection,\n definition: ModellingModelElement,\n outline: OutlineSelection\n ): void {\n const outlineSize = Number(outline.attr('width'));\n const container = select(outline.node()!.parentNode as Element)\n .append('g')\n .attr('class', 'resize-container') as unknown as ContainerSelection;\n\n const nwCorner = container.append('rect');\n const neCorner = corner(container, 'resize-drag-ne', outlineSize - 2.5, -2.5);\n const swCorner = corner(container, 'resize-drag-sw', -2.5, outlineSize - 2.5);\n const seCorner = corner(container, 'resize-drag-se', outlineSize - 2.5, outlineSize - 2.5);\n\n const commit = (): void => {\n this._eventBus.emit('element.updated', definition.id, definition);\n };\n\n const setInnerSize = (size: number): void => {\n element.select('.innerElement').select('svg').attr('width', size).attr('height', size);\n };\n\n // top-right handle — measured against the SW corner\n this._setCornerToDrag(\n neCorner,\n (event) => {\n const pos = pointer(event, swCorner.node());\n const newSize = Math.max(MIN_SIZE, pos[0], pos[1] * -1.0) - HANDLE_OFFSET;\n const oldSize = Number(definition.size);\n setInnerSize(newSize);\n const newY = Number(element.attr('y')) + oldSize - newSize;\n const oldX = Number(element.attr('x'));\n element.attr('y', newY).attr('transform', `translate(${oldX},${newY})`);\n definition.size = newSize;\n (definition.position as Point).y = newY;\n this._updateOutlineAndCorners(outline, container, newSize + OUTLINE_PADDING);\n },\n commit\n );\n\n // bottom-left handle — measured against the NE corner\n this._setCornerToDrag(\n swCorner,\n (event) => {\n const pos = pointer(event, neCorner.node());\n const newSize = Math.max(MIN_SIZE, pos[0] * -1.0, pos[1]) - HANDLE_OFFSET;\n const oldSize = Number(definition.size);\n setInnerSize(newSize);\n const newX = Number(element.attr('x')) + oldSize - newSize;\n const oldY = Number(element.attr('y'));\n element.attr('x', newX).attr('transform', `translate(${newX},${oldY})`);\n definition.size = newSize;\n (definition.position as Point).x = newX;\n this._updateOutlineAndCorners(outline, container, newSize + OUTLINE_PADDING);\n },\n commit\n );\n\n // bottom-right handle — measured against the NW corner\n this._setCornerToDrag(\n seCorner,\n (event) => {\n const pos = pointer(event, nwCorner.node());\n const newSize = Math.max(MIN_SIZE, pos[0], pos[1]) - HANDLE_OFFSET;\n definition.size = newSize;\n setInnerSize(newSize);\n this._updateOutlineAndCorners(outline, container, newSize + OUTLINE_PADDING);\n },\n commit\n );\n }\n\n private _updateOutlineAndCorners(\n outline: OutlineSelection,\n container: ContainerSelection,\n newOutlineSize: number\n ): void {\n outline.attr('width', newOutlineSize).attr('height', newOutlineSize);\n container.select('.resize-drag-ne').attr('x', newOutlineSize - 2.5);\n container.select('.resize-drag-sw').attr('y', newOutlineSize - 2.5);\n container\n .select('.resize-drag-se')\n .attr('x', newOutlineSize - 2.5)\n .attr('y', newOutlineSize - 2.5);\n }\n\n private _setCornerToDrag(\n corner: CornerSelection,\n draggedFn: (event: CornerDragEvent) => void,\n commitFn: () => void\n ): void {\n corner.call(\n d3drag<SVGRectElement, unknown>().on('start', (event: CornerDragEvent) => {\n if (!this._canvas.getRootLayer().classed('no-drag')) {\n event.on('drag', draggedFn).on('end', commitFn);\n }\n })\n );\n }\n\n private _init(): void {\n this._eventBus.on(\n 'outline.created',\n (element: DrawingSelection, definition: ModellingModelElement, outline: OutlineSelection) => {\n if (definition.$instanceOf('pfdn:Node')) {\n this._createCorners(element, definition, outline);\n }\n }\n );\n this._eventBus.on(\n 'outline.updated',\n (element: DrawingSelection, definition: ModellingModelElement, outline: OutlineSelection) => {\n if (definition.$instanceOf('pfdn:Node')) {\n const container = element.select('.resize-container') as unknown as ContainerSelection;\n this._updateOutlineAndCorners(\n outline,\n container,\n OUTLINE_PADDING + Number(definition.size)\n );\n }\n }\n );\n }\n}\n\n/** Append a 5×5 corner handle rect at (x, y). */\nfunction corner(\n container: ContainerSelection,\n className: string,\n x: number,\n y: number\n): CornerSelection {\n return container\n .append('rect')\n .attr('fill', 'none')\n .attr('x', x)\n .attr('y', y)\n .attr('width', 5)\n .attr('height', 5)\n .attr('class', className);\n}\n","import type { Canvas } from '@d3-polytree/canvas';\nimport type { NotificationService } from './notifications';\n\nconst NOTICE_TEXT =\n 'More info about this project in ' +\n '<a href=\"https://github.com/davcs86/d3-polytree\" target=\"_blank\" rel=\"noopener\">' +\n 'https://github.com/davcs86/d3-polytree</a>';\n\n/**\n * A small info button that shows a project notice. Ported from `core-v2beta`'s\n * `features/noticePopup/NoticePopup.js`, modernised off `min-dom` onto native\n * DOM.\n */\nexport class NoticePopup {\n static readonly $inject = ['canvas', 'notifications'];\n\n constructor(canvas: Canvas, notifications: NotificationService) {\n const button = document.createElement('div');\n button.className = 'noticePopup';\n canvas.getContainer().appendChild(button);\n button.addEventListener('click', () => {\n notifications.notify({ title: 'D3-Polytree', text: NOTICE_TEXT, html: true }, 'info');\n });\n }\n}\n","import type { Selection } from 'd3-selection';\nimport type { DefsSelection, DrawingRegistry, DrawingSelection } from '../draw';\nimport type { NotificationService, NotificationType } from './notifications';\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\n/** The four alert kinds. */\nexport type AlertType = 'error' | 'info' | 'success' | 'warning';\n\nconst ALERT_TYPES: Record<string, AlertType> = {\n error: 'error',\n info: 'info',\n success: 'success',\n warning: 'warning'\n};\n\n/** Inline alert icon sources (were separate SVG assets in the source engine). */\nconst ALERT_ICONS: Record<AlertType, string> = {\n error:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 200\"><g fill=\"#D8000C\">' +\n '<circle cx=\"100\" cy=\"100\" r=\"100\" fill=\"#fff\"/><circle cx=\"100\" cy=\"100\" r=\"95\"/>' +\n '<circle cx=\"100\" cy=\"100\" r=\"90\" fill=\"#fff\"/><circle cx=\"100\" cy=\"100\" r=\"87\"/></g>' +\n '<path fill=\"#fff\" d=\"M153.663 134.653l-35.265-32.672 35.265-32.67-16.566-15.345-35.265 32.67-35.265-32.67L50 69.31l35.265 32.67L50 134.654 66.567 150l35.265-32.67L137.097 150\"/></svg>',\n info:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 200\"><g fill=\"#1F75FE\">' +\n '<circle cx=\"100\" cy=\"100\" r=\"100\" fill=\"#fff\"/><circle cx=\"100\" cy=\"100\" r=\"95\"/>' +\n '<circle cx=\"100\" cy=\"100\" r=\"90\" fill=\"#fff\"/><circle cx=\"100\" cy=\"100\" r=\"87\"/></g>' +\n '<path fill=\"#fff\" d=\"M114.605 39.133c-5.14 0-9.307 4.167-9.307 9.307 0 5.14 4.167 9.307 9.307 9.307 5.14 0 9.307-4.167 9.307-9.307 0-5.14-4.167-9.307-9.307-9.307zM103.22 63.106c-6.1.304-12.586 3.594-18.03 8.227l-.583 7.063c5.145-2.234 10.427-2.245 12.008 3.075 3.848 12.943-9.362 35.627-12.963 47.49-9.77 32.19 13.684 35.91 30.413 22.645l.665-7.644c-9.102 3.16-15.607-.716-10.346-17.533 2.535-8.112 23.754-48.99 9.1-60.245-3.07-2.356-6.603-3.256-10.263-3.074z\"/></svg>',\n success:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 200\"><g fill=\"#4BB543\">' +\n '<circle cx=\"100\" cy=\"100\" r=\"100\" fill=\"#fff\"/><circle cx=\"100\" cy=\"100\" r=\"95\"/>' +\n '<circle cx=\"100\" cy=\"100\" r=\"90\" fill=\"#fff\"/><circle cx=\"100\" cy=\"100\" r=\"87\"/></g>' +\n '<path fill=\"#fff\" d=\"M150.003 52.712c-1.95-1.952-5.15-1.952-7.102 0l-62.994 63c-1.952 1.952-5.15 1.952-7.103 0l-15.516-15.515c-1.952-1.952-5.15-1.952-7.102 0l-9.516 9.52c-1.953 1.953-1.953 5.152 0 7.104l32.133 32.13c1.952 1.95 5.15 1.95 7.103 0l79.614-79.62c1.952-1.952 1.952-5.15 0-7.102z\"/></svg>',\n warning:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 200\"><g fill=\"#F8CA00\">' +\n '<circle cx=\"100\" cy=\"100\" r=\"100\" fill=\"#fff\"/><circle cx=\"100\" cy=\"100\" r=\"95\"/>' +\n '<circle cx=\"100\" cy=\"100\" r=\"90\" fill=\"#fff\"/><circle cx=\"100\" cy=\"100\" r=\"87\"/></g>' +\n '<path fill=\"#fff\" d=\"M102.506 40.44c-7.136 0-12.922 5.786-12.922 12.923l2.585 51.687c0 5.71 4.626 10.338 10.335 10.338 5.71 0 10.338-4.63 10.338-10.338l2.584-51.687c0-7.137-5.785-12.922-12.922-12.922zm0 87.87c-8.564 0-15.506 6.94-15.506 15.505 0 8.563 6.942 15.506 15.506 15.506s15.507-6.942 15.507-15.505c0-8.564-6.943-15.507-15.507-15.507z\"/></svg>'\n};\n\ninterface Alert {\n element: DrawingSelection;\n selection: Selection<SVGSVGElement, unknown, null, undefined>;\n message: string;\n type: AlertType;\n}\n\n/**\n * Shows blinking alert badges on nodes; clicking one raises a notification.\n *\n * Ported from `core-v2beta`'s `features/alertIcons/AlertIcons.js`, modernised\n * off `xml2js` onto `DOMParser` (the alert icon `<symbol>`s are built directly\n * into the shared `<defs>`, as {@link IconLoader} does for node icons) and off\n * the inlined SVG asset imports onto string constants.\n */\nexport class AlertIcons {\n static readonly $inject = ['defs', 'notifications', 'drawingRegistry'];\n\n private readonly _defs: DefsSelection;\n private readonly _notifications: NotificationService;\n private readonly _drawingRegistry: DrawingRegistry;\n private readonly _viewBoxes: Record<string, string> = {};\n private _alerts: Record<string, Alert> = {};\n\n constructor(\n defs: DefsSelection,\n notifications: NotificationService,\n drawingRegistry: DrawingRegistry\n ) {\n this._defs = defs;\n this._notifications = notifications;\n this._drawingRegistry = drawingRegistry;\n this._buildSymbols();\n }\n\n showAlert(nodeId: string, message: string, type: string): void {\n const element = this._drawingRegistry.get(nodeId);\n if (!element) {\n return;\n }\n const resolved = ALERT_TYPES[type] ?? 'info';\n const existing = this.getAlert(nodeId);\n this._alerts[nodeId] = existing\n ? this._updateAlert(existing, message, resolved)\n : this._createAlert(element, message, resolved);\n }\n\n getAlert(nodeId: string): Alert | undefined {\n return this._alerts[nodeId];\n }\n\n removeAlert(nodeId: string): void {\n const alert = this.getAlert(nodeId);\n if (alert) {\n this._clearAlert(alert);\n delete this._alerts[nodeId];\n }\n }\n\n clear(): void {\n Object.values(this._alerts).forEach((alert) => this._clearAlert(alert));\n this._alerts = {};\n }\n\n private _clearAlert(alert: Alert): void {\n alert.element.select('.innerElement').classed('blink', false);\n alert.selection.on('mousedown', null);\n alert.selection.remove();\n }\n\n private _createAlert(element: DrawingSelection, message: string, type: AlertType): Alert {\n const selection = element\n .select('.innerElement')\n .append('svg')\n .attr('class', 'alertIcon')\n .attr('x', -2)\n .attr('y', -2)\n .attr('width', 10)\n .attr('height', 10)\n .attr('preserveAspectRatio', 'xMaxYMax meet') as Selection<\n SVGSVGElement,\n unknown,\n null,\n undefined\n >;\n selection.append('use');\n\n const alert: Alert = { element, selection, message, type };\n return this._updateAlert(alert, message, type);\n }\n\n private _updateAlert(alert: Alert, message: string, type: AlertType): Alert {\n alert.selection\n .attr('viewBox', this._viewBoxes[type] ?? '')\n .select('use')\n .attr('href', `#${type}_alerticon_def`);\n\n alert.message = message.replace(/(<([^>]+)>)/gi, '');\n alert.type = type;\n alert.selection.on('mousedown', () => {\n this._notifications.notify(\n { title: alert.type, text: alert.message },\n alert.type as NotificationType\n );\n });\n alert.element.select('.innerElement').classed('blink', true);\n return alert;\n }\n\n private _buildSymbols(): void {\n const defsNode = this._defs.node();\n if (!defsNode) {\n return;\n }\n (Object.entries(ALERT_ICONS) as [AlertType, string][]).forEach(([type, source]) => {\n const doc = new DOMParser().parseFromString(source, 'image/svg+xml');\n const svg = doc.documentElement;\n if (!svg || svg.nodeName.toLowerCase() !== 'svg') {\n return;\n }\n const viewBox = svg.getAttribute('viewBox') ?? '';\n const symbol = document.createElementNS(SVG_NS, 'symbol');\n symbol.setAttribute('id', `${type}_alerticon_def`);\n if (viewBox) {\n symbol.setAttribute('viewBox', viewBox);\n }\n Array.from(svg.childNodes).forEach((child) =>\n symbol.appendChild(document.importNode(child, true))\n );\n defsNode.appendChild(symbol);\n this._viewBoxes[type] = viewBox;\n });\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport type { Canvas } from '@d3-polytree/canvas';\nimport type { DrawingSelection } from '../draw';\nimport type { ModellingModelElement } from '../modelling/types';\n\n/** A tooltip HTML provider: given a node definition, returns tooltip HTML. */\nexport type TooltipFn = (definition: ModellingModelElement) => string;\n\n/** Below this zoom scale, node labels are too small to read, so show tooltips. */\nconst TOOLTIP_ZOOM_THRESHOLD = 0.8;\n\n/**\n * Shows a hover tooltip over nodes when zoomed out, using a caller-supplied HTML\n * function (`options.tooltip`). Ported from `core-v2beta`'s\n * `features/tooltip/Tooltip.js`, reimplemented off the unmaintained `d3-tip`\n * onto a plain positioned `<div>`. A no-op unless a tooltip function is given.\n */\nexport class Tooltip {\n static readonly $inject = ['d3polytree.options.tooltip', 'canvas', 'eventBus'];\n\n private _tip: HTMLElement | null = null;\n\n constructor(tooltip: TooltipFn | undefined, canvas: Canvas, eventBus: EventEmitter) {\n if (typeof tooltip !== 'function') {\n return;\n }\n\n this._tip = document.createElement('div');\n this._tip.className = 'd3-tip';\n this._tip.style.position = 'absolute';\n this._tip.style.display = 'none';\n document.body.appendChild(this._tip);\n\n eventBus.on(\n 'node.mouseover',\n (_element: DrawingSelection, definition: ModellingModelElement, event: Event) => {\n if (canvas.getTransform().a < TOOLTIP_ZOOM_THRESHOLD) {\n this._show(tooltip(definition), event);\n }\n }\n );\n eventBus.on('node.mouseout', () => this._hide());\n }\n\n private _show(html: string, event: Event): void {\n if (!this._tip) {\n return;\n }\n this._tip.innerHTML = html;\n this._tip.style.display = 'block';\n const mouse = event as MouseEvent;\n this._tip.style.left = `${mouse.pageX}px`;\n this._tip.style.top = `${mouse.pageY - 10}px`;\n }\n\n private _hide(): void {\n if (this._tip) {\n this._tip.style.display = 'none';\n }\n }\n}\n","import { select } from 'd3-selection';\nimport type { Canvas } from '@d3-polytree/canvas';\nimport type { DrawingRegistry, Point } from '../../draw';\nimport type { GroupSelection } from '@d3-polytree/canvas';\nimport type { Modelling } from '../../modelling';\nimport type { CreateParameters, ModellingModelElement } from '../../modelling/types';\nimport type { Selection } from '../selection';\n\n/**\n * Base for the palette \"add element\" handlers: computes a drop position at the\n * viewport centre, creates the element through the modelling orchestrator, and\n * selects it. Ported from `core-v2beta`'s\n * `paletteProvider/handlers/baseAddHandler`.\n */\nexport abstract class BaseAddHandler {\n protected constructor(\n protected readonly _className: 'node' | 'label',\n protected readonly _drawingRegistry: DrawingRegistry,\n protected readonly _selection: Selection,\n protected readonly _canvas: Canvas,\n protected readonly _modelling: Modelling\n ) {}\n\n private _getElemOfReference(): GroupSelection {\n const elements = this._drawingRegistry.getAll();\n if (elements.length > 0) {\n return select<SVGGElement, unknown>(elements[0].node() as SVGGElement);\n }\n return this._canvas.getDrawingLayer();\n }\n\n protected _calculatePosition(): Point {\n const elemOfRef = this._getElemOfReference();\n const container = this._canvas.getContainer().getBoundingClientRect();\n const refRect = elemOfRef.node()!.getBoundingClientRect();\n const refTransform = this._canvas.getTransform(elemOfRef);\n const canvasTransform = this._canvas.getTransform();\n const translateX = refTransform.e;\n const translateY = refTransform.f;\n const scale = canvasTransform.a || 1;\n\n return {\n x: (-1.0 * (refRect.left - translateX * scale - (container.left + container.width / 2))) / scale,\n y: (-1.0 * (refRect.top - translateY * scale - (container.top + container.height / 2))) / scale\n };\n }\n\n protected _create(parameters: CreateParameters): ModellingModelElement {\n return this._modelling.doAction(this._className, 'create', [parameters]) as ModellingModelElement;\n }\n\n /** Create an element at the viewport centre and select it. */\n append(parameters: CreateParameters = {}): ModellingModelElement {\n parameters.position = this._calculatePosition();\n const definition = this._create(parameters);\n const element = this._drawingRegistry.get(definition.id as string);\n if (element) {\n this._selection.select(element, definition, {});\n }\n return definition;\n }\n}\n","import type { Canvas } from '@d3-polytree/canvas';\nimport type { DrawingRegistry } from '../../draw';\nimport type { Modelling } from '../../modelling';\nimport type { Selection } from '../selection';\nimport { BaseAddHandler } from './BaseAddHandler';\n\n/** Palette handler that adds a node. */\nexport class AddNodeHandler extends BaseAddHandler {\n static readonly $inject = ['drawingRegistry', 'selection', 'canvas', 'modelling'];\n\n constructor(\n drawingRegistry: DrawingRegistry,\n selection: Selection,\n canvas: Canvas,\n modelling: Modelling\n ) {\n super('node', drawingRegistry, selection, canvas, modelling);\n }\n}\n","import type { Canvas } from '@d3-polytree/canvas';\nimport type { DrawingRegistry } from '../../draw';\nimport type { Modelling } from '../../modelling';\nimport type { Selection } from '../selection';\nimport { BaseAddHandler } from './BaseAddHandler';\n\n/** Palette handler that adds a free-floating label. */\nexport class AddLabelHandler extends BaseAddHandler {\n static readonly $inject = ['drawingRegistry', 'selection', 'canvas', 'modelling'];\n\n constructor(\n drawingRegistry: DrawingRegistry,\n selection: Selection,\n canvas: Canvas,\n modelling: Modelling\n ) {\n super('label', drawingRegistry, selection, canvas, modelling);\n }\n}\n","import { pointer, type Selection } from 'd3-selection';\nimport type EventEmitter from 'eventemitter3';\nimport type { Canvas } from '@d3-polytree/canvas';\nimport type { DrawingSelection, Point } from '../../draw';\nimport type { Modelling } from '../../modelling';\nimport type { ModellingModelElement } from '../../modelling/types';\nimport type { Tool } from './Tool';\n\ninterface PickedNode {\n element: DrawingSelection;\n definition: ModellingModelElement;\n}\n\n/**\n * Two-click link tool: click a source node, then a target node, to connect\n * them. A \"fake\" preview path follows the pointer between the two clicks.\n *\n * Ported from `core-v2beta`'s `paletteProvider/handlers/addLinkTool`, moved off\n * `d3.mouse` onto d3's `pointer(event, node)`.\n */\nexport class AddLinkTool implements Tool {\n static readonly $inject = ['eventBus', 'canvas', 'modelling'];\n\n active = false;\n\n private readonly _eventBus: EventEmitter;\n private readonly _canvas: Canvas;\n private readonly _modelling: Modelling;\n private readonly _fakeLink: Selection<SVGPathElement, unknown, null, undefined>;\n private _selectedNodes: PickedNode[] = [];\n\n constructor(eventBus: EventEmitter, canvas: Canvas, modelling: Modelling) {\n this._eventBus = eventBus;\n this._canvas = canvas;\n this._modelling = modelling;\n\n this._fakeLink = this._canvas\n .getDrawingLayer()\n .insert('path', '.node-group') // under the node layer\n .attr('class', 'fake-link')\n .attr('d', 'M0,0L0,0')\n .style('stroke', 'black')\n .style('fill', 'none');\n }\n\n activate(): void {\n this.active = true;\n this._selectedNodes = [];\n this._canvas.getRootLayer().classed('no-drag', true).classed('cursor-add-link', true);\n this._registerMouseMove();\n this._registerNodeClick();\n }\n\n deactivate(): void {\n this.active = false;\n this._canvas.getRootLayer().classed('no-drag', false).classed('cursor-add-link', false);\n this._resetFakeLink();\n }\n\n private _registerNodeClick(): void {\n this._eventBus.once(\n 'node.click',\n (element: DrawingSelection, definition: ModellingModelElement, event: Event) => {\n if (!this.active) {\n return;\n }\n event.stopImmediatePropagation();\n\n const picked = this._selectedNodes;\n if (picked.length === 0 || (picked.length === 1 && picked[0].element !== element)) {\n picked.push({ element, definition });\n }\n\n if (picked.length === 2) {\n this._appendLink();\n this.deactivate();\n } else {\n if (picked.length === 1) {\n this._showFakeLink();\n }\n this._registerNodeClick();\n }\n }\n );\n }\n\n private _registerMouseMove(): void {\n this._canvas.getRootLayer().on('mousemove', (event: Event) => {\n if (!this.active || this._selectedNodes.length !== 1) {\n return;\n }\n const sourceDef = this._selectedNodes[0].definition;\n const position = sourceDef.position as Point;\n const size = (sourceDef.size as number) ?? 0;\n const drawingLayer = this._canvas.getDrawingLayer().node();\n const [x1, y1] = pointer(event, drawingLayer);\n const x = position.x + size / 2;\n const y = position.y + size / 2;\n this._fakeLink.attr('d', `M${x},${y}L${x1},${y1}`);\n });\n }\n\n private _showFakeLink(): void {\n const position = this._selectedNodes[0].definition.position as Point;\n this._fakeLink.attr('d', `M${position.x},${position.y}L${position.x},${position.y}`);\n }\n\n private _resetFakeLink(): void {\n this._fakeLink.attr('d', 'M0,0L0,0');\n }\n\n private _appendLink(): void {\n this._modelling.doAction('link', 'create', [\n this._selectedNodes[0].definition,\n this._selectedNodes[1].definition\n ]);\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport type { NotificationService } from '../notifications';\nimport type { Axes } from '../axes';\nimport type { Selection } from '../selection';\nimport type { Exporting } from '../exporting';\nimport type { LocalStorage } from '../localStorage';\nimport type { Upload } from '../upload';\nimport type { AddNodeHandler } from './AddNodeHandler';\nimport type { AddLabelHandler } from './AddLabelHandler';\nimport type { AddLinkTool } from './AddLinkTool';\nimport type { Tool } from './Tool';\n\n/** A palette action: a click callback, or a map of gesture → callback. */\nexport type PaletteAction =\n | ((event?: Event) => void)\n | { click?: (event?: Event) => void; [gesture: string]: ((event?: Event) => void) | undefined };\n\n/** A palette entry (a toolbar button). */\nexport interface PaletteEntry {\n title?: string;\n group?: string;\n iconClassName?: string;\n className?: string;\n html?: string;\n action: PaletteAction;\n}\n\n/** The `d3polytree` host surface the palette provider needs. */\nexport interface PaletteHost {\n createDiagram(): void | Promise<void>;\n}\n\n/**\n * Supplies the palette's entries (toolbar buttons) and stateful tools. Ported\n * from `core-v2beta`'s `features/paletteProvider/PaletteProvider.js`.\n */\nexport class PaletteProvider {\n static readonly $inject = [\n 'd3polytree',\n 'eventBus',\n 'localStorage',\n 'upload',\n 'exporting',\n 'axes',\n 'selection',\n 'addNodeHandler',\n 'addLabelHandler',\n 'addLinkTool',\n 'notifications'\n ];\n\n private readonly _host: PaletteHost;\n private readonly _localStorage: LocalStorage;\n private readonly _upload: Upload;\n private readonly _exporting: Exporting;\n private readonly _axes: Axes;\n private readonly _selection: Selection;\n private readonly _addNodeHandler: AddNodeHandler;\n private readonly _addLabelHandler: AddLabelHandler;\n private readonly _notifications: NotificationService;\n private readonly _tools: Record<string, Tool>;\n\n constructor(\n host: PaletteHost,\n _eventBus: EventEmitter,\n localStorage: LocalStorage,\n upload: Upload,\n exporting: Exporting,\n axes: Axes,\n selection: Selection,\n addNodeHandler: AddNodeHandler,\n addLabelHandler: AddLabelHandler,\n addLinkTool: AddLinkTool,\n notifications: NotificationService\n ) {\n this._host = host;\n this._localStorage = localStorage;\n this._upload = upload;\n this._exporting = exporting;\n this._axes = axes;\n this._selection = selection;\n this._addNodeHandler = addNodeHandler;\n this._addLabelHandler = addLabelHandler;\n this._notifications = notifications;\n this._tools = { addLinkTool };\n }\n\n getPaletteTools(): Record<string, Tool> {\n return this._tools;\n }\n\n getPaletteEntries(): Record<string, PaletteEntry> {\n return {\n new: {\n title: 'New diagram',\n group: 'file-ops',\n iconClassName: 'icon-doc',\n action: {\n click: () => {\n this._notifications.warning(\n { title: 'Are you sure?', text: 'All current progress will be unrecoverable.' },\n (confirmed) => {\n if (confirmed) {\n void this._host.createDiagram();\n }\n }\n );\n }\n }\n },\n save: {\n title: 'Save diagram',\n group: 'file-ops',\n iconClassName: 'icon-floppy',\n action: { click: () => this._localStorage.save() }\n },\n open: {\n title: 'Open diagram',\n group: 'file-ops',\n iconClassName: 'icon-folder-open-empty',\n action: { click: () => this._upload.openDialog() }\n },\n download: {\n title: 'Download diagram',\n group: 'file-ops',\n iconClassName: 'icon-download',\n action: { click: () => void this._exporting.trigger('pfdn') }\n },\n 'export-svg': {\n title: 'Download as SVG image',\n group: 'file-export',\n iconClassName: 'icon-file-code',\n action: { click: () => void this._exporting.trigger('svg') }\n },\n 'export-png': {\n title: 'Download as PNG image',\n group: 'file-export',\n iconClassName: 'icon-image',\n action: { click: () => void this._exporting.trigger('png') }\n },\n 'new-connection': {\n title: 'New connection',\n group: 'drawing',\n iconClassName: 'icon-arrow',\n action: { click: () => this._tools.addLinkTool.activate() }\n },\n 'new-label': {\n title: 'New label',\n group: 'drawing',\n iconClassName: 'icon-text',\n action: { click: () => this._addLabelHandler.append() }\n },\n 'new-node': {\n title: 'New node',\n group: 'drawing',\n iconClassName: 'icon-check-empty',\n action: { click: () => this._addNodeHandler.append() }\n },\n 'delete-item': {\n title: 'Delete selected item(s)',\n group: 'utils',\n iconClassName: 'icon-trash',\n action: { click: () => this._selection.deleteSelected() }\n },\n 'toggle-grid': {\n title: 'Show/hide grid',\n group: 'settings',\n iconClassName: 'icon-grid',\n action: { click: () => this._axes.toggleVisible() }\n }\n };\n }\n}\n","import type { Canvas } from '@d3-polytree/canvas';\nimport type { PaletteEntry, PaletteProvider } from './PaletteProvider';\n\n/** Parse a small HTML fragment into its first element. */\nfunction fromHtml(html: string): HTMLElement {\n const template = document.createElement('template');\n template.innerHTML = html.trim();\n return template.content.firstElementChild as HTMLElement;\n}\n\n/**\n * The palette toolbar. Builds grouped entry buttons from the\n * {@link PaletteProvider} and delegates their clicks to the entry actions.\n *\n * Ported from `core-v2beta`'s `features/palette/Palette.js`, modernised off\n * `min-dom` onto native DOM + event delegation (`closest`).\n */\nexport class Palette {\n static readonly $inject = ['canvas', 'paletteProvider'];\n\n private readonly _canvas: Canvas;\n private readonly _paletteProvider: PaletteProvider;\n private _paletteContainer!: HTMLElement;\n private _entriesContainer!: HTMLElement;\n private _actions: Record<string, PaletteEntry> = {};\n\n constructor(canvas: Canvas, paletteProvider: PaletteProvider) {\n this._canvas = canvas;\n this._paletteProvider = paletteProvider;\n this._init();\n }\n\n trigger(action: string, event: Event, target?: Element | null): void {\n this._deactivateTools();\n const button = target ?? (event.target as Element).closest('.pfdjs-entry');\n if (!button) {\n return;\n }\n const entry = this._actions[button.getAttribute('data-action') ?? ''];\n if (!entry) {\n return;\n }\n const handler = entry.action;\n if (typeof handler === 'function') {\n if (action === 'click') {\n handler(event);\n }\n } else {\n handler[action]?.(event);\n }\n }\n\n getContainer(): HTMLElement {\n return this._paletteContainer;\n }\n\n private _deactivateTools(): void {\n const tools = this._paletteProvider.getPaletteTools();\n Object.values(tools).forEach((tool) => tool.deactivate());\n }\n\n private _drawContainer(): void {\n this._paletteContainer = fromHtml(Palette.HTML_MARKUP);\n const container = this._canvas.getContainer();\n container.insertBefore(this._paletteContainer, container.firstChild);\n this._entriesContainer = this._paletteContainer.querySelector('.pfdjs-entries') as HTMLElement;\n }\n\n private _drawEntry(entry: PaletteEntry, id: string): void {\n const grouping = entry.group ?? 'default';\n let group = this._entriesContainer.querySelector<HTMLElement>(`[data-group=\"${grouping}\"]`);\n if (!group) {\n group = fromHtml(`<div class=\"pfdjs-entries-group\" data-group=\"${grouping}\"></div>`);\n this._entriesContainer.appendChild(group);\n }\n\n const control = fromHtml(entry.html ?? '<div class=\"pfdjs-entry\"></div>');\n group.appendChild(control);\n\n control.setAttribute('data-action', id);\n if (entry.title) {\n control.setAttribute('title', entry.title);\n }\n if (entry.className) {\n control.classList.add(entry.className);\n }\n if (entry.iconClassName) {\n const icon = document.createElement('span');\n icon.className = entry.iconClassName;\n control.appendChild(icon);\n }\n }\n\n private _drawEntries(): void {\n this._actions = this._paletteProvider.getPaletteEntries();\n Object.entries(this._actions).forEach(([id, action]) => this._drawEntry(action, id));\n }\n\n private _createDelegates(): void {\n this._paletteContainer.addEventListener('click', (event) => {\n const button = (event.target as Element).closest('.pfdjs-entry');\n if (button) {\n this.trigger('click', event, button);\n event.stopImmediatePropagation();\n }\n });\n // deactivate any active tool when interacting with the palette itself\n this._paletteContainer.addEventListener('mousedown', () => this._deactivateTools());\n }\n\n private _init(): void {\n this._drawContainer();\n this._drawEntries();\n this._createDelegates();\n }\n\n static readonly HTML_MARKUP =\n '<div class=\"pfdjs-palette\"><div class=\"pfdjs-entries\"></div></div>';\n}\n","export interface NotificationParams {\n title?: string;\n text?: string;\n [key: string]: unknown;\n}\n\nexport type NotificationType = 'info' | 'success' | 'warning' | 'error';\n\n/** Called with the user's confirmation result (true = confirmed). */\nexport type NotificationCallback = (confirmed: boolean) => void;\n\n/**\n * User notifications / confirmations. Injected under the `notifications` token;\n * interactive UIs (the editor) provide their own implementation. The original\n * bound this directly to `sweetalert`; core now defines only the interface and a\n * dependency-light default, keeping the engine UI-agnostic.\n */\nexport interface NotificationService {\n info(params: NotificationParams, callback?: NotificationCallback): void;\n success(params: NotificationParams, callback?: NotificationCallback): void;\n warning(params: NotificationParams, callback?: NotificationCallback): void;\n error(params: NotificationParams, callback?: NotificationCallback): void;\n notify(params: NotificationParams, type: NotificationType, callback?: NotificationCallback): void;\n}\n\n/**\n * Default, dependency-free notifications: logs to the console and treats any\n * confirmation as cancelled (a headless engine must not auto-confirm a\n * destructive action). Replace it by injecting your own `notifications`.\n */\nexport class ConsoleNotificationService implements NotificationService {\n info(params: NotificationParams, callback?: NotificationCallback): void {\n this.notify(params, 'info', callback);\n }\n success(params: NotificationParams, callback?: NotificationCallback): void {\n this.notify(params, 'success', callback);\n }\n warning(params: NotificationParams, callback?: NotificationCallback): void {\n this.notify(params, 'warning', callback);\n }\n error(params: NotificationParams, callback?: NotificationCallback): void {\n this.notify(params, 'error', callback);\n }\n notify(\n params: NotificationParams,\n type: NotificationType,\n callback?: NotificationCallback\n ): void {\n const message = [type.toUpperCase(), params.title, params.text].filter(Boolean).join(': ');\n const sink =\n type === 'error' ? console.error : type === 'warning' ? console.warn : console.info;\n sink.call(console, message);\n callback?.(false);\n }\n}\n\n/** didi module contributing the default notifications service. */\nexport const notificationsModule = {\n __init__: ['notifications'],\n notifications: ['type', ConsoleNotificationService]\n};\n","import type EventEmitter from 'eventemitter3';\nimport type { BaseElement } from '../draw';\nimport type { DrawingRegistry } from '../draw';\nimport type { NotificationService } from '../features/notifications';\nimport { getLocalName } from '../utils/localName';\nimport * as collections from '../utils/collections';\nimport type { ModellingModelElement } from './types';\n\n/**\n * Abstract base for the modelling element handlers (nodes, labels, zones,\n * links, …).\n *\n * Each handler owns the model-mutating side of one element class: it creates\n * fresh model elements, persists them into the diagram's definition\n * collections, and tears them down. The rendering side lives in the matching\n * draw-layer {@link BaseElement}; a handler reconciles the drawing through that\n * drawer's public {@link BaseElement.reconcile} entry point.\n *\n * Ported from `core-v2beta`'s `features/modelling/elements/base/Base.js`.\n */\nexport abstract class ModellingElement {\n protected readonly _definitions: ModellingModelElement;\n protected readonly _drawer: BaseElement;\n protected readonly _drawingRegistry: DrawingRegistry;\n protected readonly _notifications: NotificationService;\n protected readonly _eventBus: EventEmitter;\n\n constructor(\n definitions: ModellingModelElement,\n drawer: BaseElement,\n drawingRegistry: DrawingRegistry,\n notifications: NotificationService,\n eventBus: EventEmitter\n ) {\n this._definitions = definitions;\n this._drawer = drawer;\n this._drawingRegistry = drawingRegistry;\n this._notifications = notifications;\n this._eventBus = eventBus;\n }\n\n /** Build (and render) a new model element. Subclasses implement the shape. */\n abstract create(...args: unknown[]): ModellingModelElement | null;\n\n /** Reconcile a definition through this handler's drawer. */\n reconcile(elementId: string, definition: ModellingModelElement | undefined): void {\n this._drawer.reconcile(elementId, definition);\n }\n\n /** Persist a created element into the diagram's matching definition list. */\n saveToModel(_element: unknown, definition: ModellingModelElement): void {\n const localName = getLocalName(definition);\n collections.add(\n this._definitions.get(localName) as ModellingModelElement[] | undefined,\n definition\n );\n }\n\n /**\n * Remove an element from the diagram. Refuses to delete an associated label\n * on its own; when a non-label carries an associated label, that label is\n * released and its deletion cascaded through the event bus.\n */\n delete(_element: unknown, definition: ModellingModelElement): void {\n const localName = getLocalName(definition);\n if (localName === 'label' && definition.isReadOnly === true) {\n this._notifications.error({\n title: 'Not allowed!',\n text: \"You can't delete an associated label, you should remove the main element\"\n });\n return;\n }\n\n const label = definition.get('label') as ModellingModelElement | undefined;\n if (localName !== 'label' && label && label.$instanceOf('pfdn:Label')) {\n // cascade: release and delete the associated label\n label.isReadOnly = false;\n const lblElement = this._drawingRegistry.get(label.id as string);\n this._eventBus.emit('label.deleted', lblElement, label);\n }\n\n definition.set('status', 3);\n this._drawer.reconcile(definition.id as string, undefined);\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport type { BaseElement, DrawingRegistry } from '../draw';\nimport type { NotificationService } from '../features/notifications';\nimport type { PfdnModdle } from '@d3-polytree/pfdn-moddle';\nimport { ModellingElement } from './ModellingElement';\nimport type { CreateParameters, ModellingModelElement } from './types';\n\n/**\n * Modelling handler for labels.\n *\n * Ported from `core-v2beta`'s `features/modelling/elements/labels/Labels.js`.\n */\nexport class ModellingLabels extends ModellingElement {\n static readonly $inject = [\n 'd3polytree.definitions',\n 'd3polytree.moddle',\n 'drawingRegistry',\n 'notifications',\n 'eventBus',\n 'labels'\n ];\n\n private readonly _moddle: PfdnModdle;\n\n constructor(\n definitions: ModellingModelElement,\n moddle: PfdnModdle,\n drawingRegistry: DrawingRegistry,\n notifications: NotificationService,\n eventBus: EventEmitter,\n labels: BaseElement\n ) {\n super(definitions, labels, drawingRegistry, notifications, eventBus);\n this._moddle = moddle;\n }\n\n create(parameters: CreateParameters = {}): ModellingModelElement {\n const position = parameters.position ?? { x: 0, y: 0 };\n const positionDef = this._moddle.create('pfdn:Coordinates', { x: position.x, y: position.y });\n const labelDef = this._moddle.create('pfdn:Label', {\n position: positionDef,\n status: 1\n }) as unknown as ModellingModelElement;\n\n this._drawer.reconcile(labelDef.id as string, labelDef);\n\n labelDef.text = labelDef.id;\n\n this._drawer.reconcile(labelDef.id as string, labelDef);\n return labelDef;\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport type { BaseElement, DrawingRegistry } from '../draw';\nimport type { NotificationService } from '../features/notifications';\nimport { ModellingElement } from './ModellingElement';\nimport type { ModellingModelElement } from './types';\n\n/**\n * Modelling handler for zones.\n *\n * The create flow is a placeholder in the source engine; parity is preserved\n * here. Ported from `core-v2beta`'s\n * `features/modelling/elements/zones/Zones.js`.\n */\nexport class ModellingZones extends ModellingElement {\n static readonly $inject = [\n 'd3polytree.definitions',\n 'drawingRegistry',\n 'notifications',\n 'eventBus',\n 'zones'\n ];\n\n constructor(\n definitions: ModellingModelElement,\n drawingRegistry: DrawingRegistry,\n notifications: NotificationService,\n eventBus: EventEmitter,\n zones: BaseElement\n ) {\n super(definitions, zones, drawingRegistry, notifications, eventBus);\n }\n\n create(): ModellingModelElement | null {\n // Not yet implemented in the source engine.\n return null;\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport type { BaseElement, DrawingRegistry, Point } from '../draw';\nimport type { NotificationService } from '../features/notifications';\nimport type { PfdnModdle } from '@d3-polytree/pfdn-moddle';\nimport { ModellingElement } from './ModellingElement';\nimport type { ModellingLabels } from './Labels';\nimport type { CreateParameters, ModellingModelElement } from './types';\n\n/** Vertical gap between a node's baseline and its associated label. */\nconst NODE_LABEL_GAP = 15;\n\n/**\n * Modelling handler for nodes.\n *\n * Creating a node also creates a read-only associated label positioned beneath\n * it. Ported from `core-v2beta`'s\n * `features/modelling/elements/nodes/Nodes.js`.\n */\nexport class ModellingNodes extends ModellingElement {\n static readonly $inject = [\n 'd3polytree.definitions',\n 'd3polytree.moddle',\n 'drawingRegistry',\n 'notifications',\n 'eventBus',\n 'nodes',\n 'modellingLabels'\n ];\n\n private readonly _moddle: PfdnModdle;\n private readonly _modellingLabels: ModellingLabels;\n\n constructor(\n definitions: ModellingModelElement,\n moddle: PfdnModdle,\n drawingRegistry: DrawingRegistry,\n notifications: NotificationService,\n eventBus: EventEmitter,\n nodes: BaseElement,\n modellingLabels: ModellingLabels\n ) {\n super(definitions, nodes, drawingRegistry, notifications, eventBus);\n this._moddle = moddle;\n this._modellingLabels = modellingLabels;\n }\n\n create(parameters: CreateParameters = {}): ModellingModelElement {\n const type = parameters.type ?? 'default';\n const position = parameters.position ?? { x: 0, y: 0 };\n const positionDef = this._moddle.create('pfdn:Coordinates', { x: position.x, y: position.y });\n const nodeDef = this._moddle.create('pfdn:Node', {\n type,\n position: positionDef,\n status: 1\n }) as unknown as ModellingModelElement;\n\n this._drawer.reconcile(nodeDef.id as string, nodeDef);\n\n const nodePosition = nodeDef.position as Point;\n const nodeSize = nodeDef.size ?? 0;\n\n // create the associated label beneath the node\n const nodeLabel = this._modellingLabels.create({\n position: {\n x: nodePosition.x,\n y: nodePosition.y + nodeSize + NODE_LABEL_GAP\n }\n });\n nodeLabel.text = nodeDef.id;\n nodeLabel.isReadOnly = true;\n nodeDef.label = nodeLabel;\n\n this._modellingLabels.reconcile(nodeLabel.id as string, nodeLabel);\n return nodeDef;\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport type { BaseElement, DrawingRegistry, Point } from '../draw';\nimport type { NotificationService } from '../features/notifications';\nimport type { PfdnModdle } from '@d3-polytree/pfdn-moddle';\nimport { ModellingElement } from './ModellingElement';\nimport type { ModellingLabels } from './Labels';\nimport type { ModellingModelElement } from './types';\n\n/** A node position registered on one of the four sides of a node. */\ninterface SideEntry {\n obj: string;\n pos: Point;\n}\n\n/**\n * Transient link-routing state for a node, recomputed on each update.\n *\n * The source engine bolted these fields directly onto the node's d3 selection\n * in the drawing registry; the TS port keeps them in a handler-owned map keyed\n * by node id — behaviourally identical, but without polluting the draw layer.\n */\ninterface RoutingState {\n predecessors: ModellingModelElement[];\n successors: ModellingModelElement[];\n sides: SideEntry[][];\n}\n\n/** A mutable {x, y} the routing math nudges in place. */\ninterface MutablePoint {\n x: number;\n y: number;\n}\n\n/** Side index carrier (which of the four node sides a waypoint attaches to). */\ninterface SideIndex {\n idx: number;\n}\n\n/** Beyond this axis distance a target connector flips to an orthogonal side. */\nconst SIDE_FLIP_THRESHOLD = 80;\n/** Minimum axis gap before a straight run bends into a bezier. */\nconst CURVE_MIN_GAP = 20;\n\n/**\n * Modelling handler for links.\n *\n * Owns link creation and the orthogonal waypoint routing that keeps link paths\n * attached to node sides as nodes move. Ported from `core-v2beta`'s\n * `features/modelling/elements/links/Links.js`.\n */\nexport class ModellingLinks extends ModellingElement {\n static readonly $inject = [\n 'd3polytree.definitions',\n 'd3polytree.moddle',\n 'links',\n 'eventBus',\n 'drawingRegistry',\n 'notifications',\n 'modellingLabels'\n ];\n\n private readonly _moddle: PfdnModdle;\n private readonly _modellingLabels: ModellingLabels;\n private readonly _routing = new Map<string, RoutingState>();\n\n constructor(\n definitions: ModellingModelElement,\n moddle: PfdnModdle,\n links: BaseElement,\n eventBus: EventEmitter,\n drawingRegistry: DrawingRegistry,\n notifications: NotificationService,\n modellingLabels: ModellingLabels\n ) {\n super(definitions, links, drawingRegistry, notifications, eventBus);\n this._moddle = moddle;\n this._modellingLabels = modellingLabels;\n this.init();\n }\n\n /** Subscribe to node movement so attached links re-route. */\n init(): void {\n this._eventBus.on('node.moved', this.updateNodeLinks, this);\n this._eventBus.on('node.updated', this.updateNodeLinks, this);\n }\n\n create(nodeADef: ModellingModelElement, nodeBDef: ModellingModelElement): ModellingModelElement {\n const aPos = nodeADef.position as Point;\n const bPos = nodeBDef.position as Point;\n const aSize = nodeADef.size ?? 0;\n const bSize = nodeBDef.size ?? 0;\n\n const x = aPos.x + aSize / 2;\n const y = aPos.y + aSize / 2;\n const x1 = bPos.x + bSize / 2;\n const y1 = bPos.y + bSize / 2;\n\n const waypoint1 = this._createWaypoint(x, y);\n const waypoint2 = this._createWaypoint(x1, y1);\n const newLinkDef = this._moddle.create('pfdn:Link', {\n source: nodeADef,\n target: nodeBDef,\n waypoint: [waypoint1, waypoint2],\n status: 1\n }) as unknown as ModellingModelElement;\n\n this._drawer.reconcile(newLinkDef.id as string, newLinkDef);\n\n this.updateNodeLinks(undefined, newLinkDef.target as ModellingModelElement);\n this.updateNodeLinks(undefined, newLinkDef.source as ModellingModelElement);\n\n // create the associated label at the link midpoint\n const linkLabel = this._modellingLabels.create({\n position: {\n x: (waypoint1.x + waypoint2.x) / 2.0,\n y: (waypoint1.y + waypoint2.y) / 2.0\n }\n });\n linkLabel.text = newLinkDef.id;\n linkLabel.isReadOnly = true;\n newLinkDef.label = linkLabel;\n\n this._modellingLabels.reconcile(linkLabel.id as string, linkLabel);\n return newLinkDef;\n }\n\n /** Re-route every link attached to `definition` (a node). */\n updateNodeLinks(_element: unknown, definition: ModellingModelElement): void {\n const state = this._fillPredAndSuc(definition);\n state.predecessors.forEach((link) => this._updateLink(link));\n state.successors.forEach((link) => this._updateLink(link));\n }\n\n private get _links(): BaseElement {\n return this._drawer;\n }\n\n private _createWaypoint(x: number, y: number): Point {\n return this._moddle.create('pfdn:Coordinates', { x, y }) as unknown as Point;\n }\n\n // --- routing geometry ------------------------------------------------------\n\n /** Angle (radians) between two vectors. */\n private _calculateAngle(a: Point, b: Point): number {\n const dotProduct = a.x * b.x + a.y * b.y;\n const moduleA = Math.sqrt(a.x ** 2 + a.y ** 2);\n const moduleB = Math.sqrt(b.x ** 2 + b.y ** 2);\n return Math.acos(dotProduct / (moduleA * moduleB));\n }\n\n /** Order the connectors on one node side by their angle to a reference. */\n private _sortSide(side: SideEntry[], sideIdx: number, s: Point): SideEntry[] {\n const vector: MutablePoint = { x: 1, y: 1 };\n let factor = 1.0;\n if (sideIdx === 0) {\n vector.x = -1.0;\n } else if (sideIdx === 1) {\n factor = -1.0;\n } else if (sideIdx === 2) {\n vector.y = -1.0;\n factor = -1.0;\n } else if (sideIdx === 3) {\n vector.x = -1.0;\n vector.y = -1.0;\n }\n return [...side].sort((o1, o2) => {\n const key = (o: SideEntry): number => {\n const vectorB: Point = { x: o.pos.x - s.x, y: o.pos.y - s.y };\n return factor * this._calculateAngle(vector, vectorB);\n };\n return key(o1) - key(o2);\n });\n }\n\n /** Assign a connector to a node side (quadrant) and re-sort that side. */\n private _setQuadrants(\n sides: SideEntry[][],\n s: Point,\n t: Point,\n toSave: string,\n isTarget: boolean\n ): void {\n let sideIdx: number | false = false;\n const dx = Math.abs(t.x - s.x);\n const dy = Math.abs(t.y - s.y);\n\n if (t.x >= s.x && t.y >= s.y) {\n if (dx >= dy) {\n sideIdx = 3;\n if (isTarget && dy > SIDE_FLIP_THRESHOLD) sideIdx = 0;\n } else {\n sideIdx = 0;\n if (isTarget && dx > SIDE_FLIP_THRESHOLD) sideIdx = 3;\n }\n } else if (t.x < s.x && t.y >= s.y) {\n if (dx >= dy) {\n sideIdx = 1;\n if (isTarget && dy > SIDE_FLIP_THRESHOLD) sideIdx = 0;\n } else {\n sideIdx = 0;\n if (isTarget && dx > SIDE_FLIP_THRESHOLD) sideIdx = 1;\n }\n } else if (t.x >= s.x && t.y < s.y) {\n if (dx >= dy) {\n sideIdx = 3;\n if (isTarget && dy > SIDE_FLIP_THRESHOLD) sideIdx = 2;\n } else {\n sideIdx = 2;\n if (isTarget && dx > SIDE_FLIP_THRESHOLD) sideIdx = 3;\n }\n } else if (t.x < s.x && t.y < s.y) {\n if (dx >= dy) {\n sideIdx = 1;\n if (isTarget && dy > SIDE_FLIP_THRESHOLD) sideIdx = 2;\n } else {\n sideIdx = 2;\n if (isTarget && dx > SIDE_FLIP_THRESHOLD) sideIdx = 1;\n }\n }\n\n if (sideIdx === false) {\n return;\n }\n sides[sideIdx].push({ obj: toSave, pos: s });\n sides[sideIdx] = this._sortSide(sides[sideIdx], sideIdx, t);\n }\n\n /** Compute the four side buckets for a node and store them in routing state. */\n private _setSideConnectors(definition: ModellingModelElement, isTarget: boolean): void {\n const sides: SideEntry[][] = [[], [], [], []];\n const element = this._drawingRegistry.get(definition.id as string);\n if (!element) {\n return;\n }\n const state = this._fillPredAndSuc(definition);\n const position = definition.position as Point;\n\n state.predecessors.forEach((link) => {\n const sourceData = link.source as ModellingModelElement | undefined;\n if (sourceData) {\n this._setQuadrants(\n sides,\n sourceData.position as Point,\n position,\n sourceData.id as string,\n isTarget\n );\n }\n });\n state.successors.forEach((link) => {\n const targetData = link.target as ModellingModelElement | undefined;\n if (targetData) {\n this._setQuadrants(\n sides,\n targetData.position as Point,\n position,\n targetData.id as string,\n false\n );\n }\n });\n state.sides = sides;\n }\n\n /** Recompute the orthogonal waypoints of a single link and re-render it. */\n private _updateLink(link: ModellingModelElement): void {\n const source = link.source as ModellingModelElement | undefined;\n const target = link.target as ModellingModelElement | undefined;\n if (!source || !target) {\n console.error(`Link #${link.id} should have valid source and target.`);\n return;\n }\n\n this._setSideConnectors(source, false);\n this._setSideConnectors(target, true);\n\n const sourceState = this._routing.get(source.id as string);\n const targetState = this._routing.get(target.id as string);\n if (!sourceState || !targetState) {\n // one endpoint is not drawn yet; nothing to route\n return;\n }\n\n const sPos = source.position as Point;\n const tPos = target.position as Point;\n const sourcePoint: MutablePoint = { x: sPos.x, y: sPos.y };\n const targetPoint: MutablePoint = { x: tPos.x, y: tPos.y };\n const sourceSide: SideIndex = { idx: 0 };\n const targetSide: SideIndex = { idx: 0 };\n const waypoints: Point[] = [];\n let curve1RefPoint: MutablePoint | false = false;\n let curve2RefPoint: MutablePoint | false = false;\n\n this._adjustSidePoint(\n sourcePoint,\n sourceState.sides,\n target.id as string,\n source.size ?? 0,\n sourceSide\n );\n this._adjustSidePoint(\n targetPoint,\n targetState.sides,\n source.id as string,\n target.size ?? 0,\n targetSide\n );\n\n waypoints.push(this._createWaypoint(sourcePoint.x, sourcePoint.y));\n\n if (sourceSide.idx === 1 || sourceSide.idx === 3) {\n // source leaves from left or right\n if (targetSide.idx === 0 || targetSide.idx === 2) {\n // target arrives top or bottom → single elbow\n curve1RefPoint = { x: targetPoint.x, y: sourcePoint.y };\n } else if (Math.abs(sourcePoint.y - targetPoint.y) > CURVE_MIN_GAP) {\n const midPoint = {\n x: (targetPoint.x + sourcePoint.x) / 2,\n y: (targetPoint.y + sourcePoint.y) / 2\n };\n curve1RefPoint = { x: midPoint.x, y: sourcePoint.y };\n curve2RefPoint = { x: midPoint.x, y: targetPoint.y };\n }\n } else {\n // source leaves from top or bottom\n if (targetSide.idx === 1 || targetSide.idx === 3) {\n // target arrives left or right → single elbow\n curve1RefPoint = { x: sourcePoint.x, y: targetPoint.y };\n } else if (Math.abs(sourcePoint.x - targetPoint.x) > CURVE_MIN_GAP) {\n const midPoint = {\n x: (targetPoint.x + sourcePoint.x) / 2,\n y: (targetPoint.y + sourcePoint.y) / 2\n };\n curve1RefPoint = { x: sourcePoint.x, y: midPoint.y };\n curve2RefPoint = { x: targetPoint.x, y: midPoint.y };\n }\n }\n\n if (curve1RefPoint !== false) {\n waypoints.push(this._createWaypoint(curve1RefPoint.x, curve1RefPoint.y));\n }\n if (curve2RefPoint !== false) {\n waypoints.push(this._createWaypoint(curve2RefPoint.x, curve2RefPoint.y));\n }\n waypoints.push(this._createWaypoint(targetPoint.x, targetPoint.y));\n\n link.waypoint = waypoints;\n this._links.reconcile(link.id as string, link);\n }\n\n /**\n * Nudge `point` from a node's centre out to the connector slot matching\n * `referencePoint` on its side, distributing multiple connectors evenly.\n */\n private _adjustSidePoint(\n point: MutablePoint,\n sides: SideEntry[][],\n referencePoint: string,\n elemSize: number,\n saveIndex: SideIndex\n ): void {\n let found = false;\n const size = elemSize * 1.0;\n sides.forEach((side, sideIdx) => {\n const sideLen = side.length;\n if (found || sideLen === 0) {\n return;\n }\n const distBtwArrows = (size * 0.8) / (sideLen + 1);\n let origin = size / 2.0 - (distBtwArrows * (sideLen + 1)) / 2;\n side.forEach((v) => {\n origin += distBtwArrows;\n if (v.obj === referencePoint) {\n saveIndex.idx = sideIdx;\n if (sideIdx === 0) {\n point.x += origin;\n point.y -= 5;\n } else if (sideIdx === 1) {\n point.x += size + 5;\n point.y += origin;\n } else if (sideIdx === 2) {\n point.x += origin;\n point.y += size + 5;\n } else if (sideIdx === 3) {\n point.x -= 5;\n point.y += origin;\n }\n found = true;\n }\n });\n });\n }\n\n /** Collect the links entering (predecessors) and leaving (successors) a node. */\n private _fillPredAndSuc(definition: ModellingModelElement): RoutingState {\n const predecessors: ModellingModelElement[] = [];\n const successors: ModellingModelElement[] = [];\n\n (this._links.getAll() as ModellingModelElement[]).forEach((link) => {\n if (link.target === definition) {\n predecessors.push(link);\n }\n if (link.source === definition) {\n successors.push(link);\n }\n });\n\n const existing = this._routing.get(definition.id as string);\n const state: RoutingState = {\n predecessors,\n successors,\n sides: existing ? existing.sides : [[], [], [], []]\n };\n this._routing.set(definition.id as string, state);\n return state;\n }\n}\n","import type EventEmitter from 'eventemitter3';\nimport { getLocalName } from '../utils/localName';\nimport type { ModellingElement } from './ModellingElement';\nimport type { ModellingModelElement } from './types';\n\n/** The four element classes the orchestrator routes events for. */\nexport type ElementClass = 'label' | 'node' | 'zone' | 'link';\n\n/**\n * The actions dispatchable on an element handler: `saveToModel` / `delete` in\n * response to draw-layer events, and `create` for the palette add-handlers.\n */\nexport type MutatingAction = 'saveToModel' | 'delete' | 'create';\n\n/**\n * Orchestrates the modelling layer: it listens for element lifecycle events on\n * the bus and routes each to the matching handler's model-mutating action, so\n * the draw layer stays the single source of lifecycle truth and the model\n * follows it.\n *\n * Ported from `core-v2beta`'s `features/modelling/Modelling.js`. The source's\n * `element.updated` handler reached into a handler's private drawer field\n * (`this._elements[name]['_'+name+'s']._builder(...)`); the port routes through\n * the handler's public {@link ModellingElement.reconcile} instead.\n */\nexport class Modelling {\n static readonly $inject = [\n 'eventBus',\n 'd3polytree.definitions',\n 'modellingNodes',\n 'modellingLabels',\n 'modellingZones',\n 'modellingLinks'\n ];\n\n private readonly _eventBus: EventEmitter;\n private readonly _elements: Record<ElementClass, ModellingElement>;\n\n constructor(\n eventBus: EventEmitter,\n // `d3polytree.definitions` is injected for parity / forward use; the\n // orchestrator itself routes purely through the per-element handlers.\n _definitions: ModellingModelElement,\n modellingNodes: ModellingElement,\n modellingLabels: ModellingElement,\n modellingZones: ModellingElement,\n modellingLinks: ModellingElement\n ) {\n this._eventBus = eventBus;\n this._elements = {\n label: modellingLabels,\n node: modellingNodes,\n zone: modellingZones,\n link: modellingLinks\n };\n this._init();\n }\n\n /** Invoke `action` on the handler for `elementClassName` with `parameters`. */\n doAction(elementClassName: string, action: MutatingAction, parameters: unknown[]): unknown {\n const handler = this._elements[elementClassName as ElementClass];\n if (handler) {\n const fn = handler[action] as\n | ((this: ModellingElement, ...args: unknown[]) => unknown)\n | undefined;\n if (fn) {\n return fn.apply(handler, parameters);\n }\n }\n return null;\n }\n\n private _init(): void {\n const route = (event: string, cls: ElementClass, action: MutatingAction): void => {\n this._eventBus.on(event, (...args: unknown[]) => this.doAction(cls, action, args));\n };\n\n route('label.created', 'label', 'saveToModel');\n route('link.created', 'link', 'saveToModel');\n route('node.created', 'node', 'saveToModel');\n route('zone.created', 'zone', 'saveToModel');\n\n route('label.deleted', 'label', 'delete');\n route('link.deleted', 'link', 'delete');\n route('node.deleted', 'node', 'delete');\n route('zone.deleted', 'zone', 'delete');\n\n this._eventBus.on(\n 'element.updated',\n (elementId: string, elementDefinition: ModellingModelElement) => {\n const localName = getLocalName(elementDefinition);\n const handler = this._elements[localName as ElementClass];\n if (handler) {\n handler.reconcile(elementId, elementDefinition);\n }\n }\n );\n }\n}\n","import { labelsModule, linksModule, nodesModule, zonesModule } from '../draw';\nimport { notificationsModule } from '../features/notifications';\nimport { ModellingLabels } from './Labels';\nimport { ModellingZones } from './Zones';\nimport { ModellingNodes } from './Nodes';\nimport { ModellingLinks } from './Links';\nimport { Modelling } from './Modelling';\n\nexport { ModellingElement } from './ModellingElement';\nexport { ModellingLabels } from './Labels';\nexport { ModellingZones } from './Zones';\nexport { ModellingNodes } from './Nodes';\nexport { ModellingLinks } from './Links';\nexport { Modelling } from './Modelling';\nexport type { ElementClass, MutatingAction } from './Modelling';\nexport type { CreateParameters, ModellingModelElement } from './types';\n\n/** didi module contributing the label modelling handler. */\nexport const modellingLabelsModule = {\n __init__: ['modellingLabels'],\n modellingLabels: ['type', ModellingLabels],\n __depends__: [labelsModule, notificationsModule]\n};\n\n/** didi module contributing the zone modelling handler. */\nexport const modellingZonesModule = {\n __init__: ['modellingZones'],\n modellingZones: ['type', ModellingZones],\n __depends__: [zonesModule, notificationsModule]\n};\n\n/** didi module contributing the node modelling handler. */\nexport const modellingNodesModule = {\n __init__: ['modellingNodes'],\n modellingNodes: ['type', ModellingNodes],\n __depends__: [nodesModule, modellingLabelsModule, notificationsModule]\n};\n\n/** didi module contributing the link modelling handler (waypoint routing). */\nexport const modellingLinksModule = {\n __init__: ['modellingLinks'],\n modellingLinks: ['type', ModellingLinks],\n __depends__: [linksModule, modellingLabelsModule, notificationsModule]\n};\n\n/**\n * didi module contributing the modelling orchestrator — the event-bus glue that\n * routes element lifecycle events to the handlers above. Pulls in all four\n * handler modules.\n */\nexport const modellingModule = {\n __init__: ['modelling'],\n modelling: ['type', Modelling],\n __depends__: [\n modellingLabelsModule,\n modellingLinksModule,\n modellingNodesModule,\n modellingZonesModule\n ]\n};\n","import type { Canvas } from '@d3-polytree/canvas';\n\n/** A viewport centre point plus the current scale. */\nexport interface CenterPosition {\n x: number;\n y: number;\n s: number;\n}\n\n/**\n * Computes the centre of the canvas viewport (in screen pixels) and the current\n * scale. Ported from `core-v2beta`'s `utils/calculateCenter`.\n */\nexport class CalculateCenter {\n static readonly $inject = ['canvas'];\n\n private readonly _canvas: Canvas;\n\n constructor(canvas: Canvas) {\n this._canvas = canvas;\n }\n\n getCenterPosition(): CenterPosition {\n const rect = this._canvas.getSVG().node()!.getBoundingClientRect();\n const transform = this._canvas.getTransform();\n return {\n x: rect.width / 2.0,\n y: rect.height / 2.0,\n s: transform.a\n };\n }\n}\n\n/** didi module contributing the viewport-centre helper. */\nexport const calculateCenterModule = {\n __init__: ['calculateCenter'],\n calculateCenter: ['type', CalculateCenter]\n};\n","import { MouseEvents } from './mouseEvents';\nimport { Selection } from './selection';\nimport { Zoom } from './zoom';\nimport { ZoomScroll } from './zoomScroll';\nimport { BackgroundColor } from './backgroundColor';\nimport { Axes } from './axes';\nimport { Outline } from './outline';\nimport { Drag } from './drag';\nimport { Exporting } from './exporting';\nimport { LocalStorage } from './localStorage';\nimport { Upload } from './upload';\nimport { ResizeElement } from './resizeElement';\nimport { NoticePopup } from './noticePopup';\nimport { AlertIcons } from './alertIcons';\nimport { Tooltip } from './tooltip';\nimport { defsModule } from '../draw';\nimport { AddNodeHandler, AddLabelHandler, AddLinkTool, PaletteProvider, Palette } from './palette';\nimport { notificationsModule } from './notifications';\nimport { drawingRegistryModule } from '../draw';\nimport { modellingModule } from '../modelling';\nimport { calculateCenterModule } from '../utils/calculateCenter';\n\nexport * from './notifications';\nexport { MouseEvents } from './mouseEvents';\nexport { Selection } from './selection';\nexport type { SelectionEntry } from './selection';\nexport { Zoom } from './zoom';\nexport { ZoomScroll } from './zoomScroll';\nexport { BackgroundColor } from './backgroundColor';\nexport { Axes } from './axes';\nexport { Outline } from './outline';\nexport { Drag } from './drag';\nexport { Exporting } from './exporting';\nexport type { ExportFormat, ExportHost } from './exporting';\nexport { LocalStorage } from './localStorage';\nexport type { StorageHost } from './localStorage';\nexport { Upload } from './upload';\nexport type { UploadHost } from './upload';\nexport { ResizeElement } from './resizeElement';\nexport { NoticePopup } from './noticePopup';\nexport { AlertIcons } from './alertIcons';\nexport type { AlertType } from './alertIcons';\nexport { Tooltip } from './tooltip';\nexport type { TooltipFn } from './tooltip';\nexport {\n BaseAddHandler,\n AddNodeHandler,\n AddLabelHandler,\n AddLinkTool,\n PaletteProvider,\n Palette\n} from './palette';\nexport type { Tool, PaletteAction, PaletteEntry, PaletteHost } from './palette';\n\n/**\n * didi module contributing the mouse-event bridge: re-emits DOM mouse events on\n * drawn elements as typed `<class>.<kind>` bus events.\n */\nexport const mouseEventsModule = {\n __init__: ['mouseEvents'],\n mouseEvents: ['type', MouseEvents]\n};\n\n/** didi module contributing element selection tracking. */\nexport const selectionModule = {\n __init__: ['selection'],\n selection: ['type', Selection],\n __depends__: [mouseEventsModule]\n};\n\n/** didi module contributing pan/zoom on the canvas drawing layer. */\nexport const zoomModule = {\n __init__: ['zoom'],\n zoom: ['type', Zoom],\n __depends__: [calculateCenterModule]\n};\n\n/** didi module enabling interactive scroll/drag zoom. */\nexport const zoomScrollModule = {\n __init__: ['zoomScroll'],\n zoomScroll: ['type', ZoomScroll],\n __depends__: [zoomModule]\n};\n\n/** didi module painting the canvas background from settings. */\nexport const backgroundColorModule = {\n __init__: ['backgroundColor'],\n backgroundColor: ['type', BackgroundColor]\n};\n\n/** didi module drawing the background grid, aligned to the zoom transform. */\nexport const axesModule = {\n __init__: ['axes'],\n axes: ['type', Axes],\n __depends__: [zoomModule]\n};\n\n/** didi module adding a selection outline to every drawn element. */\nexport const outlineModule = {\n __init__: ['outline'],\n outline: ['type', Outline]\n};\n\n/** didi module enabling dragging of outlined elements. */\nexport const dragModule = {\n __init__: ['drag'],\n drag: ['type', Drag],\n __depends__: [outlineModule, selectionModule, drawingRegistryModule]\n};\n\n/** didi module providing diagram export (.pfdn / SVG / PNG). */\nexport const exportingModule = {\n __init__: ['exporting'],\n exporting: ['type', Exporting]\n};\n\n/** didi module persisting the diagram to browser localStorage. */\nexport const localStorageModule = {\n __init__: ['localStorage'],\n localStorage: ['type', LocalStorage]\n};\n\n/** didi module opening a `.pfdn` document from disk. */\nexport const uploadModule = {\n __init__: ['upload'],\n upload: ['type', Upload]\n};\n\n/** didi module contributing the add-node palette handler. */\nexport const addNodeHandlerModule = {\n __init__: ['addNodeHandler'],\n addNodeHandler: ['type', AddNodeHandler],\n __depends__: [drawingRegistryModule, selectionModule, modellingModule]\n};\n\n/** didi module contributing the add-label palette handler. */\nexport const addLabelHandlerModule = {\n __init__: ['addLabelHandler'],\n addLabelHandler: ['type', AddLabelHandler],\n __depends__: [drawingRegistryModule, selectionModule, modellingModule]\n};\n\n/** didi module contributing the two-click link tool. */\nexport const addLinkToolModule = {\n __init__: ['addLinkTool'],\n addLinkTool: ['type', AddLinkTool],\n __depends__: [modellingModule]\n};\n\n/** didi module supplying the palette entries and tools. */\nexport const paletteProviderModule = {\n __init__: ['paletteProvider'],\n paletteProvider: ['type', PaletteProvider],\n __depends__: [\n addNodeHandlerModule,\n addLabelHandlerModule,\n addLinkToolModule,\n localStorageModule,\n uploadModule,\n exportingModule,\n axesModule,\n selectionModule,\n notificationsModule\n ]\n};\n\n/** didi module contributing the palette toolbar. */\nexport const paletteModule = {\n __init__: ['palette'],\n palette: ['type', Palette],\n __depends__: [paletteProviderModule]\n};\n\n/** didi module adding resize handles to node outlines. */\nexport const resizeElementModule = {\n __init__: ['resizeElement'],\n resizeElement: ['type', ResizeElement],\n __depends__: [outlineModule]\n};\n\n/** didi module adding the project notice popup button. */\nexport const noticePopupModule = {\n __init__: ['noticePopup'],\n noticePopup: ['type', NoticePopup],\n __depends__: [notificationsModule]\n};\n\n/** didi module showing blinking alert badges on nodes. */\nexport const alertIconsModule = {\n __init__: ['alertIcons'],\n alertIcons: ['type', AlertIcons],\n __depends__: [defsModule, notificationsModule, drawingRegistryModule]\n};\n\n/** didi module showing hover tooltips on nodes when zoomed out. */\nexport const tooltipModule = {\n __init__: ['tooltip'],\n tooltip: ['type', Tooltip]\n};\n","import { Injector, type ModuleDeclaration } from 'didi';\nimport type EventEmitter from 'eventemitter3';\nimport { canvasModule } from '@d3-polytree/canvas';\n\n/** A didi module descriptor as consumed by {@link Diagram}. */\nexport interface DiagramModule {\n __init__?: string[];\n __depends__?: DiagramModule[];\n [name: string]: unknown;\n}\n\nexport interface DiagramOptions {\n /** Extra modules to bootstrap alongside the core. */\n modules?: DiagramModule[];\n [key: string]: unknown;\n}\n\n/**\n * Bootstrap an injector from `bootstrapModules`, eagerly instantiating each\n * module's `__init__` components (depth-first over `__depends__`).\n * (Ported from the diagram-js bootstrap the original was derived from.)\n */\nfunction bootstrap(bootstrapModules: DiagramModule[]): Injector {\n const modules: DiagramModule[] = [];\n const components: string[] = [];\n\n const visit = (m: DiagramModule): void => {\n if (modules.includes(m)) {\n return;\n }\n (m.__depends__ ?? []).forEach(visit);\n if (modules.includes(m)) {\n return;\n }\n modules.push(m);\n (m.__init__ ?? []).forEach((c) => components.push(c));\n };\n\n bootstrapModules.forEach(visit);\n\n const injector = new Injector(modules as unknown as ModuleDeclaration[]);\n components.forEach((c) => injector.get(c));\n return injector;\n}\n\nfunction createInjector(options: DiagramOptions): Injector {\n const configModule: DiagramModule = { config: ['value', options] };\n const modules: DiagramModule[] = [\n configModule,\n canvasModule as unknown as DiagramModule,\n ...(options.modules ?? [])\n ];\n return bootstrap(modules);\n}\n\n/**\n * The engine entry point: bootstraps the core (canvas) plus any extra modules\n * into a didi injector and signals readiness via `d3canvas.init`.\n */\nexport class Diagram {\n readonly injector: Injector;\n\n constructor(options: DiagramOptions = {}, injector?: Injector) {\n this.injector = injector ?? createInjector(options);\n this.get<EventEmitter>('eventBus').emit('d3canvas.init');\n }\n\n /** Resolve a service by name. */\n get<T>(name: string, strict?: boolean): T {\n return this.injector.get<T>(name, strict);\n }\n\n destroy(): void {\n this.get<EventEmitter>('eventBus').emit('d3canvas.destroy');\n }\n\n clear(): void {\n this.get<EventEmitter>('eventBus').emit('d3canvas.clear');\n }\n}\n","import { createPfdnModdle, type ModelElement, type PfdnModdle } from '@d3-polytree/pfdn-moddle';\nimport type { DiagramModule } from '../Diagram';\n\n/** A loaded PFDN model: the root `pfdn:Diagram` plus its moddle instance. */\nexport interface ModelHost {\n definitions: ModelElement;\n moddle: PfdnModdle;\n}\n\n/**\n * Ensure the diagram carries a complete `settings` sub-tree.\n *\n * The settings-bound features (zoom, background colour, grid/axes) inject deep\n * model tokens such as `d3polytree.definitions.settings.zoom.offset`; a diagram\n * that omitted `<settings>` would make those tokens throw at injection time.\n * The source engine relied on every input document providing them — this\n * normalisation makes the engine fault-tolerant to models that don't, filling\n * the gaps with the schema defaults rather than failing to boot.\n */\nexport function ensureSettings(definitions: ModelElement, moddle: PfdnModdle): ModelElement {\n let settings = definitions.settings as ModelElement | undefined;\n if (!settings) {\n settings = moddle.create('pfdn:Settings', {});\n definitions.settings = settings;\n }\n\n const zoom = settings.zoom as ModelElement | undefined;\n if (!zoom) {\n settings.zoom = moddle.create('pfdn:Zoom', {\n offset: moddle.create('pfdn:Coordinates', { x: 0, y: 0 }),\n scale: 1\n });\n } else if (!zoom.offset) {\n zoom.offset = moddle.create('pfdn:Coordinates', { x: 0, y: 0 });\n }\n\n if (!settings.grid) {\n settings.grid = moddle.create('pfdn:Grid', {});\n }\n\n return definitions;\n}\n\n/** Create an empty in-memory model (a fresh, normalised `pfdn:Diagram`). */\nexport function emptyModel(): ModelHost {\n const moddle = createPfdnModdle();\n const definitions = ensureSettings(moddle.create('pfdn:Diagram', {}), moddle);\n return { definitions, moddle };\n}\n\n/** Parse a `.pfdn` XML document into a normalised model. */\nexport async function loadModel(xml: string): Promise<ModelHost> {\n const moddle = createPfdnModdle();\n const { rootElement } = await moddle.fromXML(xml, 'pfdn:Diagram');\n return { definitions: ensureSettings(rootElement, moddle), moddle };\n}\n\n/**\n * A didi module that exposes the model to the engine. Registered as the\n * `d3polytree` value, so didi's property-path resolution supplies the tokens the\n * drawers and modelling layer inject: `d3polytree.moddle`, `d3polytree.definitions`,\n * and `d3polytree.definitions.<node|link|label|zone>` (the definition arrays).\n */\nexport function createModelModule(host: ModelHost): DiagramModule {\n return { d3polytree: ['value', host] };\n}\n","/**\n * @d3-polytree/viewer — static polytree viewer.\n *\n * Composes the ported core engine into a working read-only viewer: it boots the\n * canvas + draw layer against a loaded model and renders the diagram. Pan/zoom\n * and the other interactive features are layered on by `@d3-polytree/interactive-viewer`\n * and `@d3-polytree/editor`.\n */\nimport {\n Diagram,\n emptyModel,\n loadModel,\n labelsModule,\n zonesModule,\n linksModule,\n nodesModule,\n type DiagramModule,\n type ModelHost\n} from '@d3-polytree/core';\n\ntype ModelDefinitions = ModelHost['definitions'];\ntype ModelModdle = ModelHost['moddle'];\n\n/** The minimal canvas surface the viewer uses for SVG export. */\ninterface CanvasLike {\n getSVGStr(): string;\n}\n\nexport interface ViewerOptions {\n /** Host element the diagram is rendered into. */\n container?: HTMLElement;\n /**\n * Extra didi modules composed on top of the component's own. They are added\n * *after* {@link Viewer.getModules}, so a token they redefine wins (last\n * definition wins) — the same seam the icon packs use — and any `__init__`\n * they declare runs once the engine boots. Use this to layer in a custom\n * feature, drawer, or service without subclassing.\n */\n modules?: readonly DiagramModule[];\n [key: string]: unknown;\n}\n\nexport class Viewer {\n /** The draw-layer modules a static viewer boots with. */\n static readonly modules: readonly DiagramModule[] = [\n labelsModule as DiagramModule,\n zonesModule as DiagramModule,\n linksModule as DiagramModule,\n nodesModule as DiagramModule\n ];\n\n readonly options: ViewerOptions;\n /** The loaded diagram root — exposed so this instance is the `d3polytree` host. */\n definitions: ModelDefinitions | null = null;\n /** The moddle instance backing {@link definitions}. */\n moddle: ModelModdle | null = null;\n private _diagram: Diagram | null = null;\n private _host: ModelHost | null = null;\n\n constructor(options: ViewerOptions = {}) {\n this.options = options;\n }\n\n /** The modules this instance boots with (overridable by subclasses). */\n getModules(): readonly DiagramModule[] {\n return Viewer.modules;\n }\n\n /** Parse a `.pfdn` document and render it. */\n async importDiagram(xml: string): Promise<void> {\n this._boot(await loadModel(xml));\n }\n\n /** Render a fresh, empty diagram. */\n createEmpty(): void {\n this._boot(emptyModel());\n }\n\n /** The loaded model host (definitions + moddle), once a diagram is open. */\n getHost(): ModelHost | null {\n return this._host;\n }\n\n /** Serialize the current diagram to a `.pfdn` XML string. */\n exportDiagram(): string {\n if (!this.moddle || !this.definitions) {\n throw new Error('no diagram loaded');\n }\n return this.moddle.toXML(this.definitions);\n }\n\n /** The current rendered SVG as a string. */\n exportSVG(): string {\n return this.get<CanvasLike>('canvas').getSVGStr();\n }\n\n /** Resolve a service from the running engine. */\n get<T>(name: string, strict?: boolean): T {\n if (!this._diagram) {\n throw new Error('no diagram loaded');\n }\n return this._diagram.get<T>(name, strict);\n }\n\n /** Tear down the current diagram. */\n destroy(): void {\n this._diagram?.destroy();\n this._diagram = null;\n this._host = null;\n this.definitions = null;\n this.moddle = null;\n }\n\n private _boot(host: ModelHost): void {\n if (this._diagram) {\n this.destroy();\n }\n this._host = host;\n this.definitions = host.definitions;\n this.moddle = host.moddle;\n // Register this instance as the `d3polytree` host: didi's property-path\n // resolution then supplies `d3polytree.definitions[.settings…]` and\n // `d3polytree.moddle` to the drawers/modelling, and the IO methods above to\n // the file-ops features.\n this._diagram = new Diagram({\n container: this.options.container,\n // component modules first, then any caller-supplied modules (last wins),\n // then the `d3polytree` host value the drawers/modelling resolve against.\n modules: [\n ...this.getModules(),\n ...(this.options.modules ?? []),\n { d3polytree: ['value', this] } as DiagramModule\n ]\n });\n }\n}\n\nexport default Viewer;\n","import type EventEmitter from 'eventemitter3';\nimport type { Canvas } from '@d3-polytree/canvas';\nimport type { SideTabEntry, SideTabsProvider } from './SideTabsProvider';\n\n/** Parse a small HTML fragment into its first element. */\nfunction fromHtml(html: string): HTMLElement {\n const template = document.createElement('template');\n template.innerHTML = html.trim();\n return template.content.firstElementChild as HTMLElement;\n}\n\n/**\n * A collapsible tabbed side panel. Renders a tab strip and a matching content\n * area from the {@link SideTabsProvider}; clicking a tab opens its content,\n * the close button collapses the panel. Ported from `@d3-polytree/side-tabs`'\n * `lib/SideTabs.js`, modernised off `min-dom` / `lodash` onto native DOM.\n */\nexport class SideTabs {\n static readonly $inject = ['canvas', 'sideTabsProvider', 'eventBus'];\n\n private readonly _canvas: Canvas;\n private readonly _sideTabsProvider: SideTabsProvider;\n private readonly _eventBus: EventEmitter;\n\n private _container!: HTMLElement;\n private _tabsEl!: HTMLElement;\n private _contentsEl!: HTMLElement;\n private _actions: SideTabEntry[] = [];\n\n constructor(canvas: Canvas, sideTabsProvider: SideTabsProvider, eventBus: EventEmitter) {\n this._canvas = canvas;\n this._sideTabsProvider = sideTabsProvider;\n this._eventBus = eventBus;\n this._init();\n }\n\n trigger(action: string, button: Element | null, targetId?: string): void {\n const id = button ? (button.getAttribute('data-action') ?? undefined) : targetId;\n if (id === undefined) {\n return;\n }\n const entry = this._actions[Number(id)];\n if (!entry) {\n return;\n }\n\n if (action === 'click') {\n this._readjustTabs(id);\n } else if (action === 'close') {\n this._readjustTabs();\n }\n\n const content = this._contentsEl.querySelector<HTMLElement>(\n `.pfdjs-st-content[data-action=\"${id}\"] > .content-body`\n );\n const handler = entry.action;\n if (typeof handler === 'function') {\n if (action === 'click') {\n handler(content);\n }\n } else {\n handler[action]?.(content);\n }\n }\n\n private _readjustTabs(id?: string): void {\n if (id === undefined) {\n this._container.classList.remove('open');\n } else {\n this._container.classList.add('open');\n }\n this._actions.forEach((_action, n) => {\n const tab = this._tabsEl.querySelector(`[data-action=\"${n}\"]`);\n const content = this._contentsEl.querySelector(`.pfdjs-st-content[data-action=\"${n}\"]`);\n const active = String(n) === id;\n tab?.classList.toggle('active', active);\n content?.classList.toggle('hidden', !active);\n });\n }\n\n private _drawContainer(): void {\n this._container = fromHtml(SideTabs.HTML_MARKUP);\n const container = this._canvas.getContainer();\n container.insertBefore(this._container, container.firstChild);\n this._tabsEl = this._container.querySelector('.pfdjs-st-tabs') as HTMLElement;\n this._contentsEl = this._container.querySelector('.pfdjs-st-contents') as HTMLElement;\n }\n\n private _drawEntry(entry: SideTabEntry, id: number): void {\n const tab = fromHtml('<div class=\"pfdjs-st-tab\"></div>');\n this._tabsEl.appendChild(tab);\n tab.setAttribute('data-action', String(id));\n if (entry.title) {\n tab.setAttribute('title', entry.title);\n }\n if (entry.iconClassName) {\n const icon = document.createElement('span');\n icon.className = entry.iconClassName;\n tab.appendChild(icon);\n }\n\n const content = fromHtml(\n '<div class=\"pfdjs-st-content hidden\">' +\n '<div class=\"content-title\">' +\n `<span class=\"content-title-span\">${entry.title ?? ''}</span>` +\n '<span class=\"icon-cancel\" title=\"Close\"></span>' +\n '<span>&nbsp;</span>' +\n '</div>' +\n '<div class=\"content-body\"></div>' +\n '</div>'\n );\n this._contentsEl.appendChild(content);\n content.setAttribute('data-action', String(id));\n content.querySelector('.icon-cancel')?.setAttribute('data-action', String(id));\n\n this.trigger('created', null, String(id));\n }\n\n private _drawEntries(): void {\n this._actions = this._sideTabsProvider.getSideTabsEntries();\n this._actions.forEach((action, n) => this._drawEntry(action, n));\n }\n\n private _update(): void {\n if (this._tabsEl) {\n this._tabsEl.replaceChildren();\n this._contentsEl.replaceChildren();\n }\n this._drawEntries();\n }\n\n private _createDelegates(): void {\n this._tabsEl.addEventListener('click', (event) => {\n const tab = (event.target as Element).closest('.pfdjs-st-tab');\n if (tab) {\n this.trigger('click', tab);\n event.stopImmediatePropagation();\n }\n });\n this._contentsEl.addEventListener('click', (event) => {\n const cancel = (event.target as Element).closest('.icon-cancel');\n if (cancel) {\n this.trigger('close', cancel);\n event.stopImmediatePropagation();\n }\n });\n }\n\n private _init(): void {\n this._drawContainer();\n this._update();\n this._eventBus.on('sidetab.registered', () => this._update());\n this._createDelegates();\n }\n\n static readonly HTML_MARKUP =\n '<div class=\"pfdjs-st-container\">' +\n '<div class=\"pfdjs-st-tabs\"></div>' +\n '<div class=\"pfdjs-st-contents\"></div>' +\n '</div>';\n}\n","import type EventEmitter from 'eventemitter3';\n\n/** An action bound to a side tab: a click callback, or a map of gesture → callback. */\nexport type SideTabAction =\n | ((content: HTMLElement | null) => void)\n | { [gesture: string]: ((content: HTMLElement | null) => void) | undefined };\n\n/** A registered side tab. */\nexport interface SideTabEntry {\n title?: string;\n iconClassName?: string;\n action: SideTabAction;\n}\n\n/**\n * Registry of side-panel tabs. Consumers register tabs (in order or at an\n * index); the {@link SideTabs} component renders whatever is registered and\n * re-renders on `sidetab.registered`. Ported from `@d3-polytree/side-tabs`'\n * `lib/SideTabsProvider.js`.\n */\nexport class SideTabsProvider {\n static readonly $inject = ['eventBus'];\n\n private readonly _eventBus: EventEmitter;\n private _registeredSideTabs: SideTabEntry[] = [];\n\n constructor(eventBus: EventEmitter) {\n this._eventBus = eventBus;\n }\n\n registerSideTab(sideTab: SideTabEntry, index?: number): void {\n if (index === undefined) {\n this._registeredSideTabs.push(sideTab);\n } else {\n this._registeredSideTabs.splice(index, 0, sideTab);\n }\n this._eventBus.emit('sidetab.registered', sideTab);\n }\n\n getSideTabsEntries(): SideTabEntry[] {\n return this._registeredSideTabs;\n }\n}\n","/**\n * @d3-polytree/side-tabs — a collapsible tabbed side panel feature.\n *\n * Modernised (B6) from the 2017 `min-dom`/`lodash` source to TypeScript + native\n * DOM. Ships a didi module (`sideTabsModule`) that the editor composes.\n */\nimport { SideTabs } from './SideTabs';\nimport { SideTabsProvider } from './SideTabsProvider';\n\nexport { SideTabs } from './SideTabs';\nexport { SideTabsProvider } from './SideTabsProvider';\nexport type { SideTabAction, SideTabEntry } from './SideTabsProvider';\n\n/** didi module contributing the side-tabs panel and its provider. */\nexport const sideTabsModule = {\n __init__: ['sideTabs', 'sideTabsProvider'],\n sideTabs: ['type', SideTabs],\n sideTabsProvider: ['type', SideTabsProvider]\n};\n\nexport default sideTabsModule;\n","import type EventEmitter from 'eventemitter3';\n\n/** The side-tab registration surface this panel needs (structural — avoids a\n * hard build dependency on `@d3-polytree/side-tabs`; the token is supplied at\n * runtime when both are composed into the editor). */\nexport interface SideTabRegistration {\n title?: string;\n iconClassName?: string;\n action: {\n created?: (content: HTMLElement | null) => void;\n click?: (content: HTMLElement | null) => void;\n [gesture: string]: ((content: HTMLElement | null) => void) | undefined;\n };\n}\nexport interface SideTabsRegistrar {\n registerSideTab(tab: SideTabRegistration, index?: number): void;\n}\n\n/** A model element definition as read by the search panel. */\ninterface ElementDefinition {\n id?: string;\n type?: string;\n label?: { text?: string };\n $descriptor: { ns: { localName: string } };\n}\n\n/** A row in the search list. */\ninterface SearchItem {\n id: string;\n name: string;\n elementType: string;\n elementSubType: string;\n element: unknown;\n definition: ElementDefinition;\n}\n\n/**\n * A searchable index of the diagram's nodes and links, shown in a side tab.\n * Typing in the search box filters the list; clicking a row zooms to and\n * selects that element.\n *\n * Modernised (B6) from `@d3-polytree/search-panel`'s `lib/SearchPanel.js`: the\n * `list.js` dependency is replaced by a small native filter/sort list, and\n * `min-dom` by native DOM.\n */\nexport class SearchPanel {\n static readonly $inject = ['sideTabsProvider', 'eventBus'];\n\n private readonly _eventBus: EventEmitter;\n private readonly _items = new Map<string, SearchItem>();\n private _searchInput: HTMLInputElement | null = null;\n private _listEl: HTMLUListElement | null = null;\n\n constructor(sideTabsProvider: SideTabsRegistrar, eventBus: EventEmitter) {\n this._eventBus = eventBus;\n this._registerSideTab(sideTabsProvider);\n this._init();\n }\n\n addOrUpdateItem(item: SearchItem): void {\n if (!item.name) {\n return;\n }\n this._items.set(item.id, item);\n this._render();\n }\n\n removeItem(id: string): void {\n if (this._items.delete(id)) {\n this._render();\n }\n }\n\n private _init(): void {\n this._eventBus.on('node.created', (element: unknown, definition: ElementDefinition) => {\n this.addOrUpdateItem(this._toItem(element, definition, 'Node', definition.type ?? ''));\n });\n this._eventBus.on('link.created', (element: unknown, definition: ElementDefinition) => {\n this.addOrUpdateItem(this._toItem(element, definition, 'Connection', ''));\n });\n this._eventBus.on('node.deleted', (_element: unknown, definition: ElementDefinition) => {\n this.removeItem(definition.id as string);\n });\n this._eventBus.on('link.deleted', (_element: unknown, definition: ElementDefinition) => {\n this.removeItem(definition.id as string);\n });\n }\n\n private _toItem(\n element: unknown,\n definition: ElementDefinition,\n elementType: string,\n elementSubType: string\n ): SearchItem {\n return {\n id: definition.id as string,\n name: definition.label?.text ?? '',\n elementType,\n elementSubType,\n element,\n definition\n };\n }\n\n private _drawForm(content: HTMLElement | null): void {\n if (!content) {\n return;\n }\n content.replaceChildren();\n const form = document.createElement('div');\n form.id = 'pfdjs-searchpanel';\n this._searchInput = document.createElement('input');\n this._searchInput.className = 'search';\n this._searchInput.placeholder = 'Search';\n this._listEl = document.createElement('ul');\n this._listEl.className = 'list';\n form.append(this._searchInput, this._listEl);\n content.appendChild(form);\n\n this._searchInput.addEventListener('input', () => this._render());\n this._listEl.addEventListener('click', (event) => {\n const li = (event.target as Element).closest<HTMLElement>('li[data-id]');\n if (li) {\n this._activate(li.getAttribute('data-id') ?? '');\n event.stopImmediatePropagation();\n }\n });\n this._render();\n }\n\n private _activate(id: string): void {\n const item = this._items.get(id);\n if (!item) {\n return;\n }\n this._eventBus.emit('zoom.to.element', item.element, item.definition);\n const clickEvent = `${item.definition.$descriptor.ns.localName.toLowerCase()}.click`;\n this._eventBus.emit(clickEvent, item.element, item.definition, null);\n }\n\n private _render(): void {\n if (!this._listEl) {\n return;\n }\n const query = (this._searchInput?.value ?? '').trim().toLowerCase();\n const rows = [...this._items.values()]\n .filter((item) => !query || item.name.toLowerCase().includes(query))\n .sort((a, b) => a.name.localeCompare(b.name));\n\n this._listEl.replaceChildren();\n for (const item of rows) {\n const li = document.createElement('li');\n li.setAttribute('data-id', item.id);\n li.innerHTML =\n `<h3 class=\"name\"></h3><p><span class=\"elementType\"></span>` +\n `&nbsp;&nbsp;<span class=\"elementSubType\"></span></p>`;\n (li.querySelector('.name') as HTMLElement).textContent = item.name;\n (li.querySelector('.elementType') as HTMLElement).textContent = item.elementType;\n (li.querySelector('.elementSubType') as HTMLElement).textContent = item.elementSubType;\n this._listEl.appendChild(li);\n }\n }\n\n private _registerSideTab(provider: SideTabsRegistrar): void {\n provider.registerSideTab(\n {\n title: 'Search element',\n iconClassName: 'icon-glass',\n action: {\n created: (content) => this._drawForm(content),\n click: () => this._render()\n }\n },\n 0\n );\n }\n}\n","/**\n * @d3-polytree/search-panel — a searchable index of diagram elements.\n *\n * Modernised (B6) from the 2017 `list.js`/`min-dom` source to TypeScript + ESM\n * with a native filter/sort list. Ships a didi module (`searchPanelModule`) that\n * registers a \"Search element\" side tab.\n */\nimport { SearchPanel } from './SearchPanel';\n\nexport { SearchPanel } from './SearchPanel';\nexport type { SideTabRegistration, SideTabsRegistrar } from './SearchPanel';\n\n/** didi module contributing the search panel. */\nexport const searchPanelModule = {\n __init__: ['searchPanel'],\n searchPanel: ['type', SearchPanel]\n};\n\nexport default searchPanelModule;\n","/**\n * @d3-polytree/interactive-viewer — the static viewer plus interaction.\n *\n * Extends the base {@link Viewer} with pan/zoom, the background grid, and\n * pointer-driven selection/outline. The interaction modules are ordered *before*\n * the draw modules on purpose: `Zoom` replaces the canvas drawing layer on boot,\n * and the event-driven features (mouse events, selection, outline) must be\n * subscribed before the drawers emit their initial `<class>.created` events.\n */\nimport { Viewer, type ViewerOptions } from '@d3-polytree/viewer';\nimport {\n backgroundColorModule,\n zoomModule,\n zoomScrollModule,\n axesModule,\n mouseEventsModule,\n selectionModule,\n outlineModule,\n type DiagramModule\n} from '@d3-polytree/core';\nimport { sideTabsModule } from '@d3-polytree/side-tabs';\nimport { searchPanelModule } from '@d3-polytree/search-panel';\n\nexport type InteractiveViewerOptions = ViewerOptions;\n\nexport class InteractiveViewer extends Viewer {\n /** Interaction modules layered on top of the base draw modules. */\n static readonly interactionModules: readonly DiagramModule[] = [\n backgroundColorModule as DiagramModule,\n zoomModule as DiagramModule,\n zoomScrollModule as DiagramModule,\n axesModule as DiagramModule,\n mouseEventsModule as DiagramModule,\n selectionModule as DiagramModule,\n outlineModule as DiagramModule,\n // side panel host + the search panel (subscribes to <class>.created, so it\n // must boot before the drawers emit — hence it lives in interactionModules)\n sideTabsModule as DiagramModule,\n searchPanelModule as DiagramModule\n ];\n\n getModules(): readonly DiagramModule[] {\n // interaction first (zoom swaps the drawing layer, features subscribe),\n // then the drawers (which render into that layer and emit created events)\n return [...InteractiveViewer.interactionModules, ...Viewer.modules];\n }\n}\n\nexport default InteractiveViewer;\n","/** A moddle model element as read/written by the properties panel. */\nexport interface Definition {\n id?: string;\n label?: Definition;\n $instanceOf(type: string): boolean;\n get(property: string): unknown;\n [key: string]: unknown;\n}\n\n/** `definition.$instanceOf(elementType)` — ported from `utils/modelUtils`. */\nexport function is(definition: Definition, elementType: string): boolean {\n return definition.$instanceOf(elementType);\n}\n\n/** Read a dotted property path (`label.text`) by plain property access. */\nexport function deepGet(obj: unknown, path: string): unknown {\n return path\n .split('.')\n .reduce<unknown>(\n (o, k) => (o == null ? undefined : (o as Record<string, unknown>)[k]),\n obj\n );\n}\n\n/** Write a dotted property path, creating intermediate objects as needed. */\nexport function deepSet(obj: Record<string, unknown>, path: string, value: unknown): void {\n const keys = path.split('.');\n let cursor = obj;\n for (let i = 0; i < keys.length - 1; i += 1) {\n const key = keys[i];\n if (cursor[key] == null || typeof cursor[key] !== 'object') {\n cursor[key] = {};\n }\n cursor = cursor[key] as Record<string, unknown>;\n }\n cursor[keys[keys.length - 1]] = value;\n}\n\n/** Trailing-nothing leading-edge? No — trailing debounce, like lodash's default. */\nexport function debounce<A extends unknown[]>(\n fn: (...args: A) => void,\n wait: number\n): (...args: A) => void {\n let timer: ReturnType<typeof setTimeout> | undefined;\n return (...args: A) => {\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(() => fn(...args), wait);\n };\n}\n\n/** Title-case a token (`lineColor` → `Line Color`, `aws-ec2` → `Aws Ec 2`). */\nexport function startCase(input: string): string {\n return input\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/([a-zA-Z])([0-9])/g, '$1 $2')\n .replace(/[_-]+/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n .replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\n/** Whether a string is a `#rrggbb` colour (accepted by `<input type=color>`). */\nexport function isHexColor(value: unknown): value is string {\n return typeof value === 'string' && /^#[0-9a-fA-F]{6}$/.test(value);\n}\n","import type EventEmitter from 'eventemitter3';\nimport { deepGet, deepSet, isHexColor, type Definition } from './utils';\n\n/** A `{name,value}` option for a select entry. */\nexport interface SelectOption {\n name: string;\n value: string;\n}\n\n/** Options accepted when building an entry. */\nexport interface EntryOptions {\n id: string;\n modelProperty: string;\n label?: string;\n description?: string;\n type?: string;\n allowEmpty?: boolean;\n selectOptions?: SelectOption[];\n}\n\n/** A rendered property entry: its markup plus get/set behaviour. */\nexport interface EntryResource extends EntryOptions {\n html: string;\n get: (element: Definition, formNode: HTMLElement) => void;\n set: (element: Definition, values: Record<string, unknown>) => boolean;\n validate: () => Record<string, unknown>;\n triggerUpdate: (propertyId: string, element: Definition) => void;\n}\n\nfunction ensureNotNull(prop: string | undefined): string {\n if (!prop) {\n throw new Error(`${prop} must be set.`);\n }\n return prop;\n}\n\n/**\n * Builds property-panel entries (text / select / colour / spreadsheet). Ported\n * from `@d3-polytree/properties-panel`'s `entryFactory/*`, de-jQuery-ed onto\n * native DOM; the colour entry uses a native `<input type=\"color\">` in place of\n * spectrum-colorpicker.\n */\nexport class EntryFactory {\n static readonly $inject = ['eventBus'];\n\n private readonly _eventBus: EventEmitter;\n\n constructor(eventBus: EventEmitter) {\n this._eventBus = eventBus;\n }\n\n setDefaultParameters(options: EntryOptions): EntryResource {\n const eventBus = this._eventBus;\n\n const defaultGet = (element: Definition, formNode: HTMLElement): void => {\n const prop = ensureNotNull(options.modelProperty);\n const value = deepGet(element, prop);\n const input = formNode.querySelector('input');\n if (input) {\n (input as HTMLInputElement).value = value == null ? '' : String(value);\n }\n };\n\n const defaultSet = (element: Definition, values: Record<string, unknown>): boolean => {\n const prop = ensureNotNull(options.modelProperty);\n deepSet(element as unknown as Record<string, unknown>, prop, deepGet(values, prop));\n return true;\n };\n\n const triggerUpdate = (propertyId: string, element: Definition): void => {\n eventBus.emit('PropertiesPanel.propertyChanged', propertyId, element);\n };\n\n return {\n html: '',\n description: '',\n get: defaultGet,\n set: defaultSet,\n validate: () => ({}),\n ...options,\n triggerUpdate\n };\n }\n\n textField(options: EntryOptions): EntryResource {\n return textInputField(this.setDefaultParameters(options));\n }\n\n selectBox(options: EntryOptions): EntryResource {\n return selectBoxField(this.setDefaultParameters(options));\n }\n\n colorPicker(options: EntryOptions): EntryResource {\n return colorPickerField(this.setDefaultParameters(options));\n }\n\n spreadsheet(options: EntryOptions): EntryResource {\n // Placeholder in the source engine; kept as an API-compatible no-op.\n return this.setDefaultParameters(options);\n }\n}\n\nfunction fieldWrapper(resource: EntryResource, inner: string): string {\n const label = resource.label ?? resource.id;\n return (\n `<div class=\"pfdjs-pp-field-wrapper\">` +\n `<label for=\"pfdjs-${resource.id}\">${label}</label>${inner}</div>`\n );\n}\n\nfunction textInputField(resource: EntryResource): EntryResource {\n const type = resource.type ?? 'text';\n resource.html = fieldWrapper(\n resource,\n `<input id=\"pfdjs-${resource.id}\" type=\"${type}\" name=\"${resource.modelProperty}\" />`\n );\n return resource;\n}\n\nfunction selectBoxField(resource: EntryResource): EntryResource {\n const allowEmpty = resource.allowEmpty ?? true;\n const options = Array.isArray(resource.selectOptions)\n ? resource.selectOptions.concat(allowEmpty ? [{ name: '', value: '' }] : [])\n : [{ name: '', value: '' }];\n\n const optionsHtml = options\n .map((o) => `<option value=\"${o.value}\">${o.name}</option>`)\n .join('');\n resource.html = fieldWrapper(\n resource,\n `<select id=\"pfdjs-${resource.id}\" name=\"${resource.modelProperty}\">${optionsHtml}</select>`\n );\n\n resource.get = (element, formNode) => {\n const value = element.get(resource.modelProperty) ?? 'default';\n formNode\n .querySelectorAll<HTMLOptionElement>(`select#pfdjs-${resource.id} > option`)\n .forEach((option) => {\n option.selected = option.value === value;\n });\n };\n\n return resource;\n}\n\nfunction colorPickerField(resource: EntryResource): EntryResource {\n resource.html = fieldWrapper(\n resource,\n `<input id=\"pfdjs-${resource.id}\" type=\"color\" name=\"${resource.modelProperty}\" />`\n );\n resource.get = (element, formNode) => {\n const input = formNode.querySelector<HTMLInputElement>('input[type=color]');\n const value = deepGet(element, resource.modelProperty);\n if (input && isHexColor(value)) {\n input.value = value;\n }\n };\n return resource;\n}\n\n/** didi module contributing the entry factory. */\nexport const entryFactoryModule = {\n __init__: ['entryFactory'],\n entryFactory: ['type', EntryFactory]\n};\n","import type EventEmitter from 'eventemitter3';\nimport type { EntryFactory, EntryResource } from './EntryFactory';\nimport { is, startCase, type Definition } from './utils';\n\n/** A group of entries within a tab. */\nexport interface PropertiesGroup {\n id: string;\n label: string;\n entries: EntryResource[];\n}\n\n/** A properties-panel tab. */\nexport interface PropertiesTab {\n id: string;\n label: string;\n groups: PropertiesGroup[];\n}\n\n/** Icon registry token: icon type → SVG source. */\nexport type IconMap = Record<string, string>;\n\n/** A properties provider: supplies the tabs for a selected element. */\nexport interface PropertiesProvider {\n getTabs(element: Definition): PropertiesTab[];\n updateDrawing(definition: Definition): void;\n}\n\n// --- pfdn property parts (ported from provider/pfdn/tabs/parts/*) ------------\n\nfunction nameProps(group: PropertiesGroup, element: Definition, factory: EntryFactory): void {\n if (is(element, 'pfdn:Node')) {\n group.entries.push(factory.textField({ id: 'name', label: 'Name', modelProperty: 'name' }));\n group.entries.push(factory.textField({ id: 'tag', label: 'Tag', modelProperty: 'tag' }));\n group.entries.push(\n factory.textField({ id: 'label.text', label: 'Diagram label', modelProperty: 'label.text' })\n );\n } else if (is(element, 'pfdn:Settings')) {\n group.entries.push(factory.textField({ id: 'name', label: 'Diagram name', modelProperty: 'name' }));\n group.entries.push(factory.textField({ id: 'author', label: \"Author's name\", modelProperty: 'author' }));\n } else if (is(element, 'pfdn:Link')) {\n group.entries.push(\n factory.textField({ id: 'label.text', label: 'Diagram label', modelProperty: 'label.text' })\n );\n } else if (is(element, 'pfdn:Label')) {\n group.entries.push(factory.textField({ id: 'text', label: 'Label', modelProperty: 'text' }));\n }\n}\n\nfunction nodeFormatProps(\n group: PropertiesGroup,\n element: Definition,\n factory: EntryFactory,\n icons: IconMap\n): void {\n if (!is(element, 'pfdn:Node')) {\n return;\n }\n const selectOptions = Object.keys(icons).map((key) => ({ value: key, name: startCase(key) }));\n group.entries.push(\n factory.selectBox({\n id: 'type',\n label: 'Icon',\n modelProperty: 'type',\n allowEmpty: false,\n selectOptions\n })\n );\n group.entries.push(\n factory.textField({ id: 'size', label: 'Size', modelProperty: 'size', type: 'number' })\n );\n}\n\nfunction linkFormatProps(group: PropertiesGroup, element: Definition, factory: EntryFactory): void {\n if (!is(element, 'pfdn:Link')) {\n return;\n }\n group.entries.push(\n factory.textField({ id: 'lineWidth', label: 'Line width', modelProperty: 'lineWidth', type: 'number' })\n );\n group.entries.push(\n factory.colorPicker({ id: 'lineColor', label: 'Line color', modelProperty: 'lineColor' })\n );\n}\n\nfunction labelFormatProps(group: PropertiesGroup, element: Definition, factory: EntryFactory): void {\n if (is(element, 'pfdn:Node') || is(element, 'pfdn:Link')) {\n group.entries.push(\n factory.textField({\n id: 'label.fontSize',\n label: 'Font size',\n modelProperty: 'label.fontSize',\n type: 'number'\n })\n );\n group.entries.push(\n factory.colorPicker({ id: 'label.color', label: 'Color', modelProperty: 'label.color' })\n );\n } else if (is(element, 'pfdn:Label')) {\n group.entries.push(\n factory.textField({ id: 'fontSize', label: 'Font size', modelProperty: 'fontSize', type: 'number' })\n );\n group.entries.push(factory.colorPicker({ id: 'color', label: 'Color', modelProperty: 'color' }));\n }\n}\n\nfunction gridFormatProps(group: PropertiesGroup, element: Definition, factory: EntryFactory): void {\n if (!is(element, 'pfdn:Settings')) {\n return;\n }\n group.entries.push(\n factory.colorPicker({ id: 'backgroundColor', label: 'Background color', modelProperty: 'backgroundColor' })\n );\n group.entries.push(\n factory.colorPicker({ id: 'grid.lineColor', label: 'Line color', modelProperty: 'grid.lineColor' })\n );\n group.entries.push(\n factory.textField({ id: 'grid.size', label: 'Square size', modelProperty: 'grid.size', type: 'number' })\n );\n group.entries.push(\n factory.textField({ id: 'grid.lineWidth', label: 'Line width', modelProperty: 'grid.lineWidth', type: 'number' })\n );\n}\n\n/**\n * The PFDN properties provider: builds the Properties + Format tabs for the\n * selected element, and applies edits back to the drawing. Ported from\n * `provider/pfdn/*`.\n */\nexport class PfdnPropertiesProvider implements PropertiesProvider {\n static readonly $inject = ['icons', 'entryFactory', 'eventBus'];\n\n private readonly _icons: IconMap;\n private readonly _entryFactory: EntryFactory;\n private readonly _eventBus: EventEmitter;\n\n constructor(icons: IconMap, entryFactory: EntryFactory, eventBus: EventEmitter) {\n this._icons = icons;\n this._entryFactory = entryFactory;\n this._eventBus = eventBus;\n }\n\n updateDrawing(definition: Definition): void {\n if (is(definition, 'pfdn:Settings')) {\n this._eventBus.emit('canvas.resized');\n return;\n }\n this._eventBus.emit('element.updated', definition.id, definition);\n if (is(definition, 'pfdn:Link') || is(definition, 'pfdn:Node')) {\n const label = definition.label;\n if (label) {\n this._eventBus.emit('element.updated', label.id, label);\n }\n }\n }\n\n getTabs(element: Definition): PropertiesTab[] {\n const factory = this._entryFactory;\n return [this._propertiesTab(element, factory), this._formatTab(element, factory)];\n }\n\n private _propertiesTab(element: Definition, factory: EntryFactory): PropertiesTab {\n const general: PropertiesGroup = { id: 'general', label: 'General', entries: [] };\n nameProps(general, element, factory);\n return { id: 'properties', label: 'Properties', groups: [general] };\n }\n\n private _formatTab(element: Definition, factory: EntryFactory): PropertiesTab {\n const elementFormat: PropertiesGroup = { id: 'elementFormat', label: 'Element format', entries: [] };\n const labelFormat: PropertiesGroup = { id: 'labelFormat', label: 'Label format', entries: [] };\n const gridFormat: PropertiesGroup = { id: 'gridFormat', label: 'Grid format', entries: [] };\n\n nodeFormatProps(elementFormat, element, factory, this._icons);\n linkFormatProps(elementFormat, element, factory);\n labelFormatProps(labelFormat, element, factory);\n gridFormatProps(gridFormat, element, factory);\n\n return { id: 'format', label: 'Format', groups: [elementFormat, labelFormat, gridFormat] };\n }\n}\n\n/** didi module contributing the PFDN properties provider. */\nexport const pfdnPropertiesProviderModule = {\n __init__: ['propertiesProvider'],\n propertiesProvider: ['type', PfdnPropertiesProvider]\n};\n","import type EventEmitter from 'eventemitter3';\nimport type { EntryResource } from './EntryFactory';\nimport type { PropertiesProvider } from './PfdnPropertiesProvider';\nimport { debounce, deepGet, deepSet, type Definition } from './utils';\n\n/** The side-tab registration surface the panel needs (structural). */\nexport interface SideTabRegistration {\n title?: string;\n iconClassName?: string;\n action: {\n created?: (content: HTMLElement | null) => void;\n [gesture: string]: ((content: HTMLElement | null) => void) | undefined;\n };\n}\nexport interface SideTabsRegistrar {\n registerSideTab(tab: SideTabRegistration, index?: number): void;\n}\n\n/** A selection entry as delivered by the core `selection.changed` event. */\ninterface SelectionEntry {\n definition: Definition;\n}\n\ninterface TrackedEntry {\n scope: EntryResource;\n definition: Definition;\n formNode: HTMLElement;\n}\n\n/** Parse an HTML fragment into its first element. */\nfunction fromHtml(html: string): HTMLElement {\n const template = document.createElement('template');\n template.innerHTML = html.trim();\n return template.content.firstElementChild as HTMLElement;\n}\n\nconst FORM_CONTROLS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);\n\n/**\n * The editor properties panel: a tabbed editor for the selected element's\n * model properties. Ported from `@d3-polytree/properties-panel`'s\n * `PropertiesPanel.js`, de-jQuery-ed onto native DOM; the `scroll-tabs` widget\n * is replaced by native click-to-select tabs.\n */\nexport class PropertiesPanel {\n static readonly $inject = [\n 'sideTabsProvider',\n 'eventBus',\n 'propertiesProvider',\n 'd3polytree.definitions.settings'\n ];\n\n private readonly _eventBus: EventEmitter;\n private readonly _propertiesProvider: PropertiesProvider;\n private readonly _diagramSettings: Definition;\n private _entries: Record<string, TrackedEntry> = {};\n\n private _container: HTMLElement | null = null;\n private _tabsEl: HTMLElement | null = null;\n private _contentsEl: HTMLElement | null = null;\n\n constructor(\n sideTabsProvider: SideTabsRegistrar,\n eventBus: EventEmitter,\n propertiesProvider: PropertiesProvider,\n diagramSettings: Definition\n ) {\n this._eventBus = eventBus;\n this._propertiesProvider = propertiesProvider;\n this._diagramSettings = diagramSettings;\n this._registerSideTab(sideTabsProvider);\n this._registerSelectionListener();\n }\n\n private _registerSideTab(provider: SideTabsRegistrar): void {\n provider.registerSideTab(\n {\n title: 'Properties',\n iconClassName: 'icon-sliders',\n action: { created: (content) => this._drawPanel(content) }\n },\n 1\n );\n }\n\n private _registerSelectionListener(): void {\n this._eventBus.on(\n 'selection.changed',\n (oldSelection: SelectionEntry[], newSelection: SelectionEntry[]) => {\n let selected: Definition = this._diagramSettings;\n if (\n newSelection.length === 1 &&\n (oldSelection.length !== 1 ||\n oldSelection[0].definition.id !== newSelection[0].definition.id)\n ) {\n selected = newSelection[0].definition;\n }\n this._update(selected);\n }\n );\n }\n\n private _drawPanel(content: HTMLElement | null): void {\n if (!content) {\n return;\n }\n this._drawContainer(content);\n this._update(this._diagramSettings);\n }\n\n private _drawContainer(content: HTMLElement): void {\n this._container = fromHtml(PropertiesPanel.HTML_MARKUP);\n content.insertBefore(this._container, content.firstChild);\n this._tabsEl = this._container.querySelector('.tab-sheets');\n this._contentsEl = this._container.querySelector('.pfdjs-pp-contents');\n\n this._container.addEventListener('click', (event) => {\n const tab = (event.target as Element).closest<HTMLElement>('.tab-sheet');\n if (tab) {\n this._selectTab(tab.getAttribute('data-tab-target'));\n event.stopImmediatePropagation();\n }\n });\n this._registerInputChangeHandlers();\n }\n\n private _registerInputChangeHandlers(): void {\n const container = this._container;\n if (!container) {\n return;\n }\n // debounce keystroke updates on text inputs/areas; selects fire on change.\n const debouncedApply = debounce((target: HTMLElement) => this._applyChange(target), 300);\n container.addEventListener('input', (event) => {\n const target = event.target as HTMLElement;\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {\n debouncedApply(target);\n }\n });\n container.addEventListener('change', (event) => {\n const target = event.target as HTMLElement;\n if (FORM_CONTROLS.has(target.tagName)) {\n this._applyChange(target);\n }\n });\n this._eventBus.on(\n 'PropertiesPanel.propertyChanged',\n (propertyId: string, definition: Definition) => this._applyChangeByProperty(propertyId, definition)\n );\n }\n\n private _applyChange(target: HTMLElement): void {\n const entryId = target.getAttribute('name');\n if (!entryId) {\n return;\n }\n this._commit(entryId, (target as HTMLInputElement).value);\n }\n\n private _applyChangeByProperty(propertyId: string, definition: Definition): void {\n this._commit(propertyId, deepGet(definition, propertyId));\n }\n\n private _commit(entryId: string, newValue: unknown): void {\n const entry = this._entries[entryId];\n if (!entry) {\n return;\n }\n const props: Record<string, unknown> = {};\n deepSet(props, entryId, newValue);\n entry.scope.set(entry.definition, props);\n this._propertiesProvider.updateDrawing(entry.definition);\n }\n\n private _selectTab(tabId: string | null): void {\n this._tabsEl?.querySelectorAll<HTMLElement>('.tab-sheet').forEach((tab) => {\n tab.classList.toggle('tab-sheet-active', tab.getAttribute('data-tab-target') === tabId);\n });\n this._contentsEl?.querySelectorAll<HTMLElement>('.pfdjs-pp-content').forEach((content) => {\n content.classList.toggle('open', content.getAttribute('data-tab-target') === tabId);\n });\n }\n\n private _update(definition: Definition | undefined): void {\n if (this._tabsEl && this._contentsEl) {\n this._tabsEl.replaceChildren();\n this._contentsEl.replaceChildren();\n }\n if (definition) {\n this._drawEntries(definition);\n }\n }\n\n private _drawEntries(definition: Definition): void {\n if (!this._tabsEl || !this._contentsEl) {\n return;\n }\n const tabs = this._propertiesProvider.getTabs(definition);\n const renderedTabs: { id: string; label: string }[] = [];\n this._entries = {};\n\n for (const tab of tabs) {\n const content = fromHtml(`<div class=\"pfdjs-pp-content\" data-tab-target=\"${tab.id}\"></div>`);\n let tabHasContent = false;\n\n for (const group of tab.groups) {\n if (group.entries.length === 0) {\n continue;\n }\n const groupContent = fromHtml(\n `<div class=\"pfdjs-pp-content-group\" data-group-target=\"${group.id}\">` +\n `<div class=\"tab-content-group-title\">${group.label}</div></div>`\n );\n for (const entry of group.entries) {\n const entryNode = fromHtml(`<div>${entry.html}</div>`);\n groupContent.appendChild(entryNode);\n this._entries[entry.id] = { scope: entry, definition, formNode: entryNode };\n }\n content.appendChild(groupContent);\n tabHasContent = true;\n }\n\n if (tabHasContent) {\n this._contentsEl.appendChild(content);\n renderedTabs.push({ id: tab.id, label: tab.label });\n }\n }\n\n // populate each entry from the model\n Object.values(this._entries).forEach((entry) => entry.scope.get(entry.definition, entry.formNode));\n\n // draw the tab strip\n let firstTab: string | null = null;\n for (const tab of renderedTabs) {\n firstTab ??= tab.id;\n this._tabsEl.appendChild(\n fromHtml(\n `<li class=\"tab-sheet\" data-tab-target=\"${tab.id}\"><a href=\"#\">${tab.label}</a></li>`\n )\n );\n }\n this._selectTab(firstTab);\n }\n\n static readonly HTML_MARKUP =\n '<div id=\"pfdjs-pp-container\">' +\n '<div class=\"pfdjs-pp-tabs\"><ul class=\"tab-sheets\"></ul></div>' +\n '<div class=\"pfdjs-pp-contents\"></div>' +\n '</div>';\n}\n","/**\n * @d3-polytree/properties-panel — the editor's element-properties panel.\n *\n * Modernised (B6) from the 2017 jQuery/spectrum/scroll-tabs source to TypeScript\n * + ESM with native DOM: jQuery is gone, the colour entry uses a native\n * `<input type=\"color\">`, and the `scroll-tabs` widget is replaced by native\n * click-to-select tabs. Ships three didi modules (entry factory, PFDN provider,\n * panel) for the editor to compose.\n */\nexport { EntryFactory, entryFactoryModule } from './EntryFactory';\nexport type { EntryOptions, EntryResource, SelectOption } from './EntryFactory';\nexport {\n PfdnPropertiesProvider,\n pfdnPropertiesProviderModule\n} from './PfdnPropertiesProvider';\nexport type {\n IconMap,\n PropertiesGroup,\n PropertiesProvider,\n PropertiesTab\n} from './PfdnPropertiesProvider';\nexport { PropertiesPanel } from './PropertiesPanel';\nexport type { SideTabRegistration, SideTabsRegistrar } from './PropertiesPanel';\nexport type { Definition } from './utils';\n\nimport { PropertiesPanel } from './PropertiesPanel';\n\n/** didi module contributing the properties panel (composes with the provider). */\nexport const propertiesPanelModule = {\n __init__: ['propertiesPanel'],\n propertiesPanel: ['type', PropertiesPanel]\n};\n\nexport default propertiesPanelModule;\n"],"mappings":"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","names":["require_eventemitter3","__commonJSMin","exports","module","has","prefix","Events","EE","fn","context","once","addListener","emitter","event","listener","evt","clearEvent","EventEmitter","names","events","name","handlers","l","ee","listeners","a1","a2","a3","a4","a5","len","args","i","length","j","src_exports","__export","Editor","src_default","xhtml","namespaces_default","namespace_default","name","prefix","i","namespaces_default","creatorInherit","name","document","uri","xhtml","creatorFixed","fullname","creator_default","namespace_default","none","selector_default","selector","select_default","select","selector_default","groups","m","subgroups","j","group","n","subgroup","node","subnode","i","Selection","array","x","empty","selectorAll_default","selector","arrayAll","select","array","selectAll_default","selectorAll_default","groups","m","subgroups","parents","j","group","n","node","i","Selection","matcher_default","selector","childMatcher","node","find","childFind","match","childFirst","selectChild_default","childMatcher","filter","children","childrenFilter","match","selectChildren_default","childMatcher","filter_default","match","matcher_default","groups","m","subgroups","j","group","n","subgroup","node","i","Selection","sparse_default","update","enter_default","Selection","sparse_default","EnterNode","parent","datum","child","next","selector","constant_default","x","bindIndex","parent","group","enter","update","exit","data","i","node","groupLength","dataLength","EnterNode","bindKey","key","nodeByKeyValue","keyValues","keyValue","datum","data_default","value","bind","parents","groups","constant_default","m","j","arraylike","enterGroup","updateGroup","exitGroup","i0","i1","previous","next","Selection","exit_default","Selection","sparse_default","join_default","onenter","onupdate","onexit","enter","update","exit","merge_default","context","selection","groups0","groups1","m0","m1","m","merges","j","group0","group1","n","merge","node","i","Selection","order_default","groups","j","m","group","next","node","sort_default","compare","ascending","compareNode","a","b","groups","m","sortgroups","j","group","n","sortgroup","node","i","Selection","call_default","callback","nodes_default","node_default","groups","j","m","group","n","node","size_default","size","node","empty_default","each_default","callback","groups","j","m","group","i","n","node","attrRemove","name","attrRemoveNS","fullname","attrConstant","value","attrConstantNS","attrFunction","v","attrFunctionNS","attr_default","namespace_default","node","window_default","node","styleRemove","name","styleConstant","value","priority","styleFunction","v","style_default","styleValue","node","window_default","propertyRemove","name","propertyConstant","value","propertyFunction","v","property_default","classArray","string","classList","node","ClassList","name","i","classedAdd","names","list","n","classedRemove","classedTrue","classedFalse","classedFunction","value","classed_default","textRemove","textConstant","value","textFunction","v","text_default","htmlRemove","htmlConstant","value","htmlFunction","v","html_default","raise","raise_default","lower","lower_default","append_default","name","create","creator_default","constantNull","insert_default","name","before","create","creator_default","select","selector_default","remove","parent","remove_default","selection_cloneShallow","clone","parent","selection_cloneDeep","clone_default","deep","datum_default","value","contextListener","listener","event","parseTypenames","typenames","t","name","i","onRemove","typename","on","j","m","onAdd","value","options","o","on_default","n","dispatchEvent","node","type","params","window","window_default","event","dispatchConstant","dispatchFunction","dispatch_default","iterator_default","groups","j","m","group","n","node","root","Selection","groups","parents","selection","selection_selection","select_default","selectAll_default","selectChild_default","selectChildren_default","filter_default","data_default","enter_default","exit_default","join_default","merge_default","order_default","sort_default","call_default","nodes_default","node_default","size_default","empty_default","each_default","attr_default","style_default","property_default","classed_default","text_default","html_default","raise_default","lower_default","append_default","insert_default","remove_default","clone_default","datum_default","on_default","dispatch_default","iterator_default","selection_default","select_default","selector","Selection","root","sourceEvent_default","event","sourceEvent","pointer_default","event","node","sourceEvent_default","svg","point","rect","hat","module","bits","base","digits","i","rem","res","x","b","parsed","expandBy","fn","data","iters","id","hats","value","Ids","seed","_seed","length","rack","prototype","next","element","nextPrefixed","prefix","assigned","claim","set","get","unclaim","clear","import_index","eventemitter3_default","EventEmitter","getSvgString","svgNode","appendCSS","getCSSStyles","svgString","escapeRegExp","str","contains","matchers","re","parentElement","sels","createRegExp","pushSelector","selector","cls","nodes","i","node","extractedCSSText","sheet","rules","e","r","rule","cssText","element","styleElement","refNode","ensurePx","value","createContainer","options","container","parent","Canvas","config","eventBus","select_default","drawingLayer","transform","identity","g","matrix","ElementRegistry","index_esm_default","id","prefix","ElementBuilder","_elementRegistry","definition","builder","builderContext","canvasModule","eventemitter3_default","nativeToString","nativeHasOwnProperty","isUndefined","obj","isDefined","isNil","isArray","isObject","isFunction","obj","tag","nativeToString","isString","has","target","key","isNil","nativeHasOwnProperty","find","collection","matcher","matchFn","toMatcher","match","forEach","val","findIndex","idx","isArray","filter","result","iterator","isUndefined","convertKey","toNum","identity","toMatcher","matcher","isFunction","identity","arg","toNum","bind","fn","target","assign","others","set","path","value","currentTarget","forEach","key","idx","nextKey","nextTarget","isDefined","isNil","isUndefined","pick","target","properties","result","obj","forEach","prop","Base","name","value","Factory","model","properties","descriptor","props","prototype","forEach","p","ModdleElement","attrs","bind","val","key","BUILTINS","TYPE_CONVERTERS","s","coerceType","type","converter","isBuiltIn","isSimple","parseName","defaultPrefix","parts","localName","prefix","DescriptorBuilder","nameNs","pick","idx","validate","oldProperty","newProperty","replace","oldNameNs","propertiesByName","rename","targetPropertyName","nsPrefix","parseNameNs","attrName","redefinedProperty","ns","propsByName","typeDescriptor","propertyName","definedProperty","inherited","typesByName","types","typeName","assign","replaces","redefines","Registry","packages","uriOrPrefix","pkg","pkgMap","ensureAvailable","propertyNs","isBuiltInType","extendsName","extendsNameNs","extended","nsName","iterator","trait","self","traverse","cls","parentNs","traverseTrait","traverseSuper","builder","target","packageMap","identifierKey","Properties","isString","property","isUndefined","stripGlobal","defineProperty","options","strict","error","Moddle","config","Type","cache","nsUri","element","set","a","isObject","fromCharCode","hasOwnProperty","ENTITY_PATTERN","ENTITY_MAPPING","k","replaceEntities","_","d","x","z","decodeEntities","s","NON_WHITESPACE_OUTSIDE_ROOT_NODE","error","msg","missingNamespaceForPrefix","prefix","getter","getFn","cloneNsMatrix","nsMatrix","clone","key","uriPrefix","buildNsMatrix","nsUriToPrefix","uri","noopGetContext","throwFunc","err","Parser","options","proxy","onText","onOpenTag","onCloseTag","onCDATA","onError","onWarning","onComment","onQuestion","onAttention","getContext","maybeNS","isNamespace","returnError","parseStop","handleError","handleWarning","name","cb","nsMap","_nsUriToPrefix","xml","parse","nsMatrixStack","_nsMatrix","nodeStack","anonymousNsCount","tagStart","tagEnd","i","j","y","q","v","xmlns","elementName","_elementName","elementProxy","attrsString","attrsStart","cachedAttrs","getAttrs","nsUri","nsUriPrefix","nsName","defaultAlias","attrList","l","hasNewMatrix","newalias","value","alias","attrs","seenAttrs","skipAttr","w","parseAttr","getParseContext","splitsRe","line","column","startOfLine","endOfLine","match","data","hasLowerCaseAlias","pkg","DEFAULT_NS_MAP","SERIALIZE_PROPERTY","getSerialization","element","getSerializationType","type","capitalize","str","aliasToName","aliasNs","prefixedToName","nameNs","name","localName","typePrefix","normalizeTypeName","nsMap","model","parseName","normalizedName","normalizedNameNs","error","message","getModdleDescriptor","Context","options","assign","reference","elementsById","descriptor","idProperty","id","warning","BaseHandler","NoopHandler","BodyHandler","text","ReferenceHandler","property","context","node","ValueHandler","propertyDesc","value","coerceType","BaseElementHandler","parser","ElementHandler","typeName","bodyProperty","attributes","Type","instance","propNameNs","forEach","prop","values","v","propertyName","serializationType","elementTypeName","normalizedTypeName","elementType","find","p","GenericElementHandler","childHandler","isSimple","newElement","RootElementHandler","ns","prefix","uri","handler","children","Reader","Moddle","xml","done","rootHandler","lax","SaxParser","stack","createStack","handleError","err","getContext","ctx","line","column","data","handleWarning","resolveReferences","references","i","r","collection","idx","handleClose","PREAMBLE_START_PATTERN","ENCODING_PATTERN","UTF_8_PATTERN","handleQuestion","question","match","encoding","handleOpen","handleCData","handleText","uriMap","map","url","obj","decodeStr","selfClosing","attrs","decodedAttrs","d","key","decodeEntities","resolve","reject","e","rootElement","warnings","XML_PREAMBLE","ESCAPE_ATTR_CHARS","ESCAPE_CHARS","Namespaces","parent","defaultPrefixMap","isWellknown","nsKey","allNs","lower","string","nameToAlias","inherits","ctor","superCtor","nsName","isString","getNsAttrs","namespaces","getElementNs","getPropertyNs","getSerializableProperties","filter","has","ESCAPE_ATTR_MAP","ESCAPE_MAP","escape","charPattern","replaceMap","s","escapeAttr","escapeBody","filterAttributes","props","filterContained","ReferenceSerializer","tagName","writer","BodySerializer","ValueSerializer","ElementSerializer","propertyDescriptor","elementDescriptor","otherAttrs","properties","isGeneric","effectiveNs","body","child","actualNs","self","genericAttrs","nonNsAttr","attr","isReference","isMany","serialization","serializer","TypeSerializer","local","parentNamespaces","wellknown","nsUri","nsPrefix","existing","newPrefix","wellknownUri","nsTagName","findIndex","a","firstBody","indent","b","typeNs","SavingWriter","FormatingWriter","out","format","Writer","toXML","tree","internalWriter","formatingWriter","getDefaultPrefixMappings","prefixMap","pfdn_default","PfdnModdle","Moddle","xml","typeName","options","Reader","element","Writer","packages","createPfdnModdle","additionalPackages","noop","dispatch","i","n","_","t","Dispatch","parseTypenames","typenames","types","name","typename","callback","T","get","set","copy","type","that","args","c","dispatch_default","nonpassive","nonpassivecapture","nopropagation","event","noevent_default","nodrag_default","view","root","selection","select_default","noevent_default","nonpassivecapture","yesdrag","noclick","constant_default","x","DragEvent","type","sourceEvent","subject","target","identifier","active","x","y","dx","dy","dispatch","value","defaultFilter","event","defaultContainer","defaultSubject","d","defaultTouchable","drag_default","filter","container","subject","touchable","gestures","listeners","dispatch_default","active","mousedownx","mousedowny","mousemoving","touchending","clickDistance2","drag","selection","mousedowned","touchstarted","touchmoved","nonpassive","touchended","gesture","beforestart","select_default","mousemoved","nonpassivecapture","mouseupped","nodrag_default","nopropagation","noevent_default","dx","dy","yesdrag","touches","c","n","i","that","identifier","touch","dispatch","p","pointer_default","s","DragEvent","type","p0","_","constant_default","value","define_default","constructor","factory","prototype","extend","parent","definition","key","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","define_default","color","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","format","m","l","rgbn","Rgb","rgba","hsla","n","r","g","b","a","rgbConvert","o","rgb","opacity","extend","k","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","hex","value","h","s","Hsl","min","max","hsl","m2","m1","hsl2rgb","clamph","clampt","basis","t1","v0","v1","v2","v3","t2","t3","basis_default","values","n","t","i","basisClosed_default","values","n","t","i","v0","v1","v2","v3","basis","constant_default","x","linear","a","d","t","exponential","b","y","gamma","y","nogamma","a","b","exponential","constant_default","d","linear","rgb_default","rgbGamma","y","color","gamma","rgb","start","end","r","g","b","opacity","nogamma","t","rgbSpline","spline","colors","n","i","rgbBasis","basis_default","rgbBasisClosed","basisClosed_default","numberArray_default","a","b","n","c","t","isNumberArray","x","genericArray","a","b","nb","na","x","c","i","value_default","t","date_default","a","b","d","t","number_default","a","b","t","object_default","a","b","i","c","k","value_default","t","reA","reB","zero","b","one","t","string_default","a","bi","am","bm","bs","i","s","q","number_default","o","value_default","a","b","t","c","constant_default","number_default","color","rgb_default","string_default","date_default","isNumberArray","numberArray_default","genericArray","object_default","round_default","a","b","t","degrees","identity","decompose_default","a","b","c","d","e","f","scaleX","scaleY","skewX","svgNode","parseCss","value","m","identity","decompose_default","parseSvg","interpolateTransform","parse","pxComma","pxParen","degParen","pop","s","translate","xa","ya","xb","yb","q","i","number_default","rotate","a","b","skewX","scale","t","n","o","interpolateTransformCss","parseCss","interpolateTransformSvg","parseSvg","epsilon2","cosh","x","sinh","tanh","zoom_default","zoomRho","rho","rho2","rho4","zoom","p0","p1","ux0","uy0","w0","ux1","uy1","w1","dx","dy","d2","i","S","t","d1","b0","b1","r0","r1","s","coshr0","u","_","_1","_2","_4","frame","timeout","interval","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","f","now","clearNow","Timer","timer","callback","delay","time","sleep","t","timerFlush","wake","nap","poke","t0","t1","t2","timeout_default","callback","delay","time","t","Timer","elapsed","emptyOn","dispatch_default","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","schedule_default","node","name","id","index","group","timing","schedules","create","init","schedule","get","set","self","tween","timer","elapsed","start","i","j","n","o","stop","timeout_default","tick","t","interrupt_default","node","name","schedules","schedule","active","empty","i","STARTING","ENDING","ENDED","interrupt_default","name","tweenRemove","id","name","tween0","tween1","schedule","set","tween","i","n","tweenFunction","value","t","tween_default","get","tweenValue","transition","node","interpolate_default","a","b","c","number_default","color","rgb_default","string_default","attrRemove","name","attrRemoveNS","fullname","attrConstant","interpolate","value1","string00","string1","interpolate0","string0","attrConstantNS","attrFunction","value","string10","attrFunctionNS","attr_default","namespace_default","i","interpolateTransformSvg","interpolate_default","tweenValue","attrInterpolate","name","i","t","attrInterpolateNS","fullname","attrTweenNS","value","t0","i0","tween","attrTween","attrTween_default","key","namespace_default","delayFunction","id","value","init","delayConstant","delay_default","get","durationFunction","id","value","set","durationConstant","duration_default","get","easeConstant","id","value","set","ease_default","get","easeVarying","id","value","v","set","easeVarying_default","filter_default","match","matcher_default","groups","m","subgroups","j","group","n","subgroup","node","i","Transition","merge_default","transition","groups0","groups1","m0","m1","m","merges","j","group0","group1","n","merge","node","i","Transition","start","name","t","i","onFunction","id","listener","on0","on1","sit","init","set","schedule","on","on_default","get","removeFunction","id","parent","i","remove_default","select_default","select","name","id","selector_default","groups","m","subgroups","j","group","n","subgroup","node","subnode","i","schedule_default","get","Transition","selectAll_default","select","name","id","selectorAll_default","groups","m","subgroups","parents","j","group","n","node","i","children","child","inherit","get","k","l","schedule_default","Transition","Selection","selection_default","styleNull","name","interpolate","string00","string10","interpolate0","string0","styleValue","string1","styleRemove","styleConstant","value1","styleFunction","value","styleMaybeRemove","id","on0","on1","listener0","key","event","remove","schedule","set","on","listener","style_default","priority","i","interpolateTransformCss","interpolate_default","tweenValue","styleInterpolate","name","i","priority","t","styleTween","value","i0","tween","styleTween_default","key","textConstant","value","textFunction","value1","text_default","tweenValue","textInterpolate","i","t","textTween","value","t0","i0","tween","textTween_default","key","transition_default","name","id0","id1","newId","groups","m","j","group","n","node","i","inherit","get","schedule_default","Transition","end_default","on0","on1","that","id","size","resolve","reject","cancel","end","schedule","set","on","id","Transition","groups","parents","name","transition","selection_default","newId","selection_prototype","select_default","selectAll_default","filter_default","merge_default","transition_default","on_default","attr_default","attrTween_default","style_default","styleTween_default","text_default","textTween_default","remove_default","tween_default","delay_default","duration_default","ease_default","easeVarying_default","end_default","cubicInOut","defaultTiming","cubicInOut","inherit","node","id","timing","transition_default","name","Transition","newId","now","groups","m","j","group","n","i","schedule_default","selection_default","interrupt_default","transition_default","constant_default","x","ZoomEvent","type","sourceEvent","target","transform","dispatch","Transform","k","x","y","point","location","identity","transform","node","nopropagation","event","noevent_default","defaultFilter","event","defaultExtent","e","defaultTransform","identity","defaultWheelDelta","defaultTouchable","defaultConstrain","transform","extent","translateExtent","dx0","dx1","dy0","dy1","zoom_default","filter","constrain","wheelDelta","touchable","scaleExtent","duration","interpolate","listeners","dispatch_default","touchstarting","touchfirst","touchending","touchDelay","wheelDelay","clickDistance2","tapDistance","zoom","selection","wheeled","mousedowned","dblclicked","touchstarted","touchmoved","touchended","collection","point","schedule","gesture","k","p","k0","k1","t0","p0","centroid","p1","translate","scale","x","y","t","Transform","transition","that","args","g","w","a","b","i","l","clean","Gesture","key","type","d","select_default","ZoomEvent","pointer_default","interrupt_default","noevent_default","wheelidled","currentTarget","v","mousemoved","mouseupped","x0","y0","nodrag_default","nopropagation","dx","dy","yesdrag","t1","touches","n","started","l0","l1","dp","dl","_","constant_default","value","ascending","a","b","descending","a","b","bisector","f","compare1","compare2","delta","ascending","d","x","descending","zero","left","lo","hi","mid","right","center","i","number","x","ascendingBisect","bisector","ascending","bisectRight","bisectLeft","bisectCenter","number","bisect_default","e10","e5","e2","tickSpec","start","stop","count","step","power","error","factor","i1","i2","inc","ticks","reverse","n","i","tickIncrement","tickStep","initRange","domain","range","constants","x","number","x","unit","identity","x","normalize","a","b","constants","clamper","t","bimap","domain","range","interpolate","d0","d1","r0","r1","polymap","j","d","r","i","bisect_default","copy","source","target","transformer","value_default","transform","untransform","unknown","clamp","piecewise","output","input","rescale","n","scale","y","number_default","_","number","round_default","u","continuous","formatDecimal_default","x","formatDecimalParts","p","i","coefficient","exponent_default","x","formatDecimalParts","formatGroup_default","grouping","thousands","value","width","t","j","g","length","formatNumerals_default","numerals","value","i","re","formatSpecifier","specifier","match","FormatSpecifier","formatTrim_default","s","out","n","i","i0","i1","prefixExponent","formatPrefixAuto_default","x","p","d","formatDecimalParts","coefficient","exponent","i","n","formatRounded_default","x","p","d","formatDecimalParts","coefficient","exponent","formatTypes_default","x","p","formatDecimal_default","formatRounded_default","formatPrefixAuto_default","identity_default","x","map","prefixes","locale_default","locale","group","identity_default","formatGroup_default","currencyPrefix","currencySuffix","decimal","numerals","formatNumerals_default","percent","minus","nan","newFormat","specifier","options","formatSpecifier","fill","align","sign","symbol","zero","width","comma","precision","trim","type","formatTypes_default","prefix","suffix","formatType","maybeSuffix","format","value","valuePrefix","valueSuffix","i","n","c","valueNegative","formatTrim_default","prefixExponent","length","padding","formatPrefix","e","exponent_default","k","f","locale","format","formatPrefix","defaultLocale","definition","locale_default","precisionFixed_default","step","exponent_default","precisionPrefix_default","step","value","exponent_default","precisionRound_default","step","max","exponent_default","tickFormat","start","stop","count","specifier","step","tickStep","precision","formatSpecifier","value","precisionPrefix_default","formatPrefix","precisionRound_default","precisionFixed_default","format","linearish","scale","domain","count","d","ticks","specifier","tickFormat","i0","i1","start","stop","prestep","step","maxIter","tickIncrement","linear","continuous","copy","initRange","identity_default","x","top","right","bottom","left","epsilon","translateX","x","translateY","y","number","scale","d","center","offset","entering","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","k","transform","context","values","format","identity_default","spacing","range","range0","range1","position","selection","path","tick","tickExit","tickEnter","line","text","p","_","axisRight","scale","axis","right","axisBottom","bottom","CLASS_PATTERN","isClass","fn","isArray","obj","hasOwnProp","prop","annotate","args","CONSTRUCTOR_ARGS","FN_ARGS","FN_ARG","parseAnnotations","match","arg","argMatch","Injector","modules","parent","name","strict","currentlyResolving","error","providers","instances","self","msg","stack","get","parts","pivot","fnDef","locals","dependencies","dep","instantiate","Type","Constructor","invoke","func","context","createPrivateInjectorFactory","childInjector","key","createChild","forceNewInstances","fromParentModule","matchedScopes","privateInjectorsCache","privateChildInjectors","privateChildFactories","provider","cacheIdx","privateChildInjector","privateChildInjectorFactory","scope","factoryMap","value","createInitializer","moduleDefinition","injector","initializers","initializer","loadModule","moduleExports","nestedModules","clonedModule","childModules","privateInjector","getFromPrivateInjector","type","arrayUnwrap","resolveDependencies","moduleDefinitions","bootstrap","initialized","DrawingRegistry","id","drawing","BaseElement","className","items","canvas","eventBus","elementBuilder","elementRegistry","drawingRegistry","elementId","definition","element","elem","newElem","LABEL_FONT","Labels","labels","label","def","x","y","Zones","zones","zone","generateWayPointPath","waypoints","p","Links","links","markers","link","wPath","inner","Markers","defs","linkId","strokeColor","fillColor","marker","Nodes","nodes","iconLoader","node","type","DEFAULT_ICON","createIcons","SVG_NS","XLINK_NS","REF_ATTRS","namespaceIds","root","key","idMap","el","oldId","newId","rewrite","value","match","xlink","href","attr","IconLoader","icons","defsNode","source","svg","viewBox","symbol","child","createDefs","drawingRegistryModule","defsModule","iconsModule","iconLoaderModule","labelsModule","zonesModule","markersModule","linksModule","nodesModule","collections_exports","__export","add","indexOf","remove","collection","idx","currentIdx","getLocalName","MOUSE_EVENTS","MouseEvents","kind","event","cls","Selection","emitChange","prevSelection","cancelEmitChange","v","SCALE_EXTENT","ZOOM_TO_SCALE","ZOOM_TO_DURATION","Zoom","options","calculateCenter","offset","tX","tY","s","translateX","translateY","scale","current","tx","ty","isZoomable","duration","parent","selection","select_default","transform","identity","drawingLayer","zoom_default","width","height","k","_element","wasZoomable","localName","center","centralPoint","position","size","waypoint","last","ZoomScroll","zoom","BackgroundColor","settings","color","Axes","visible","wasVisible","zoomTransform","zoomIdentity","g","linear","axisBottom","axisRight","OUTLINE_PADDING","Outline","p1","p2","bbox","box","outline","Drag","dx","dy","labelElem","drag_default","e","toBase64","data","bytes","binary","b","Exporting","host","fileType","exportStr","resolve","imgSrc","context","image","exporter","container","STORAGE_KEY","LocalStorage","notifications","stored","xml","Upload","input","file","reader","MIN_SIZE","HANDLE_OFFSET","ResizeElement","outlineSize","select","nwCorner","neCorner","corner","swCorner","seCorner","commit","setInnerSize","pos","pointer_default","newSize","oldSize","newY","oldX","newX","oldY","newOutlineSize","draggedFn","commitFn","d3drag","NOTICE_TEXT","NoticePopup","button","ALERT_TYPES","ALERT_ICONS","AlertIcons","nodeId","message","resolved","existing","alert","TOOLTIP_ZOOM_THRESHOLD","Tooltip","tooltip","html","mouse","BaseAddHandler","_className","_drawingRegistry","_selection","_canvas","_modelling","elements","elemOfRef","refRect","refTransform","canvasTransform","parameters","AddNodeHandler","modelling","AddLabelHandler","AddLinkTool","picked","sourceDef","x1","y1","pointer","PaletteProvider","_eventBus","localStorage","upload","exporting","axes","addNodeHandler","addLabelHandler","addLinkTool","confirmed","fromHtml","template","_Palette","paletteProvider","action","target","entry","handler","tools","tool","grouping","group","control","icon","Palette","ConsoleNotificationService","params","callback","notificationsModule","ModellingElement","definitions","drawer","lblElement","ModellingLabels","moddle","positionDef","labelDef","ModellingZones","NODE_LABEL_GAP","ModellingNodes","modellingLabels","nodeDef","nodePosition","nodeSize","nodeLabel","SIDE_FLIP_THRESHOLD","CURVE_MIN_GAP","ModellingLinks","nodeADef","nodeBDef","aPos","bPos","aSize","bSize","waypoint1","waypoint2","newLinkDef","linkLabel","state","a","dotProduct","moduleA","moduleB","side","sideIdx","vector","factor","o1","o2","o","vectorB","sides","t","toSave","isTarget","sourceData","targetData","sourceState","targetState","sPos","tPos","sourcePoint","targetPoint","sourceSide","targetSide","curve1RefPoint","curve2RefPoint","midPoint","point","referencePoint","elemSize","saveIndex","found","sideLen","distBtwArrows","origin","predecessors","successors","Modelling","_definitions","modellingNodes","modellingZones","modellingLinks","elementClassName","fn","route","args","elementDefinition","modellingLabelsModule","modellingZonesModule","modellingNodesModule","modellingLinksModule","modellingModule","CalculateCenter","rect","calculateCenterModule","mouseEventsModule","selectionModule","zoomModule","zoomScrollModule","backgroundColorModule","axesModule","outlineModule","dragModule","exportingModule","localStorageModule","uploadModule","addNodeHandlerModule","addLabelHandlerModule","addLinkToolModule","paletteProviderModule","paletteModule","resizeElementModule","bootstrap","bootstrapModules","modules","components","visit","m","c","injector","Injector","createInjector","options","canvasModule","Diagram","name","strict","ensureSettings","definitions","moddle","settings","zoom","emptyModel","createPfdnModdle","loadModel","xml","rootElement","_Viewer","options","xml","loadModel","emptyModel","name","strict","host","Diagram","labelsModule","zonesModule","linksModule","nodesModule","Viewer","fromHtml","html","template","_SideTabs","canvas","sideTabsProvider","eventBus","action","button","targetId","id","entry","content","handler","_action","tab","active","container","icon","n","event","cancel","SideTabs","SideTabsProvider","sideTab","index","sideTabsModule","SearchPanel","sideTabsProvider","eventBus","item","id","element","definition","_element","elementType","elementSubType","content","form","event","li","clickEvent","query","rows","a","b","provider","searchPanelModule","_InteractiveViewer","Viewer","backgroundColorModule","zoomModule","zoomScrollModule","axesModule","mouseEventsModule","selectionModule","outlineModule","sideTabsModule","searchPanelModule","InteractiveViewer","is","definition","elementType","deepGet","obj","path","o","k","deepSet","value","keys","cursor","i","key","debounce","fn","wait","timer","args","startCase","input","c","isHexColor","ensureNotNull","prop","EntryFactory","eventBus","options","element","formNode","values","propertyId","textInputField","selectBoxField","colorPickerField","fieldWrapper","resource","inner","label","type","allowEmpty","optionsHtml","option","entryFactoryModule","nameProps","group","factory","nodeFormatProps","icons","selectOptions","linkFormatProps","labelFormatProps","gridFormatProps","PfdnPropertiesProvider","entryFactory","general","elementFormat","labelFormat","gridFormat","pfdnPropertiesProviderModule","fromHtml","html","template","FORM_CONTROLS","_PropertiesPanel","sideTabsProvider","propertiesProvider","diagramSettings","provider","content","oldSelection","newSelection","selected","event","tab","container","debouncedApply","target","entryId","newValue","entry","props","tabId","tabs","renderedTabs","tabHasContent","groupContent","entryNode","firstTab","PropertiesPanel","propertiesPanelModule","INITIAL_DIAGRAM","_Editor","InteractiveViewer","Viewer","parameters","definition","element","dragModule","modellingModule","exportingModule","localStorageModule","uploadModule","paletteModule","resizeElementModule","entryFactoryModule","pfdnPropertiesProviderModule","propertiesPanelModule","Editor","src_default"]}